diff --git a/docs/solutions/translation-review/crowdin-import-review-turkish-pr-17182.md b/docs/solutions/translation-review/crowdin-import-review-turkish-pr-17182.md new file mode 100644 index 00000000000..fbefec0470a --- /dev/null +++ b/docs/solutions/translation-review/crowdin-import-review-turkish-pr-17182.md @@ -0,0 +1,315 @@ +--- +title: "Crowdin Import Review: Turkish (tr) - PR #17182" +category: translation-review +language: tr +pr: 17182 +severity: critical +date: 2026-02-17 +tags: [crowdin, i18n, turkish, mdx, translation-quality] +quality_score: 7.7 +files_reviewed: 301 +files_fixed: 49 +--- + +# Crowdin Import Translation Review: Turkish (tr) - PR #17182 + +## Problem Summary + +Automated Crowdin translation import for Turkish introduced 34 critical translation errors and 56 warnings across 301 files. Issues ranged from brand name mistranslation ("Solidity" rendered as "katillik"), semantic inversions (proof-of-work/proof-of-stake confusion), wrong-script contamination (Devanagari in Turkish text), and MDX syntax breakage causing 4 Netlify build failures. + +## Import Metadata + +| Field | Value | +| ------------------- | --------------------------------------------------------------------- | +| **PR** | [#17182](https://github.com/ethereum/ethereum-org-website/pull/17182) | +| **Branch** | `i18n/import/2026-01-27T21-23-47-tr` | +| **Language** | Turkish (tr) | +| **Import Date** | 2026-01-27 | +| **Review Date** | 2026-02-17 | +| **Total Files** | 301 (255 markdown + 46 JSON) | +| **Quality Score** | 7.7/10 | +| **Critical Issues** | 34 | +| **Warnings** | 56 | + +## Quality Scores + +| Category | Score | +| ----------------------- | ---------- | +| Brand Name Preservation | 7.9/10 | +| Technical Accuracy | 8.1/10 | +| Semantic Fidelity | 8.2/10 | +| Terminology Consistency | 7.3/10 | +| Tone/Register | 8.8/10 | +| **Overall** | **7.7/10** | + +### Scores by Review Group + +| Agent Group | Files | Critical | Warnings | Score | +| --------------------- | ----- | -------- | -------- | ------ | +| Core Pages | 39 | 6 | 9 | 8.1/10 | +| Dev Docs | 106 | 7 | 15 | 8.6/10 | +| Tutorials + Remaining | 114 | 11 | 19 | 6.4/10 | +| JSON Batch A | 23 | 7 | 11 | 8.2/10 | +| JSON Batch B | 19 | 3 | 2 | 8.5/10 | + +## Review Architecture + +Five parallel review agents deployed with Opus model (JSON Batch B fell back to Sonnet after context overflow). + +**Pitfall**: JSON Batch B agent (19 files) hit "Prompt is too long" error with Opus. Relaunched with Sonnet model and explicit instructions to use Grep instead of reading entire files, which resolved the issue. + +## Critical Issues Found (34 Total) + +### 1. "Solidity" Mistranslated as "katillik" (26 tutorial files) + +**The Issue**: The programming language name "Solidity" was translated as "katillik" (Turkish for "rigidity/firmness" — a literal translation of the English word). This appeared in the `tags` frontmatter array of 26 tutorial files. + +**Impact**: Tags are used for filtering and categorization. Translated tags break lookup functionality and misrepresent the content. + +**Fix**: `replace_all` across all 26 tutorial files: + +```yaml +# Before +tags: [ "katillik", "akilli kontratlar", "guvenlik" ] +# After +tags: [ "solidity", "akilli kontratlar", "guvenlik" ] +``` + +**Files affected**: All tutorials in `developers/tutorials/*/index.md` that reference Solidity. + +### 2. PoW/PoS Semantic Inversion (`roadmap/merge/index.md`) + +**The Issue**: Two critical instances where "proof-of-work" and "proof-of-stake" were swapped: + +1. **summaryPoint3**: "...merging with a separate **proof-of-work** blockchain called the Beacon Chain" — The Beacon Chain is proof-of-**stake**, not proof-of-work. +2. **UpgradeStatus**: "...completed Ethereum's transition to **proof-of-work** consensus" — The Merge transitioned Ethereum **to** proof-of-stake, **from** proof-of-work. + +**Fix**: Both instances corrected using glossary term "hisse ispati" (proof-of-stake): + +- `is ispati blok zinciri` -> `hisse ispati blok zinciri` +- `is ispati mutabakatina` -> `hisse ispati mutabakatina` + +### 3. "Mainnet" Translated as "Markette" (Market) (`roadmap/beacon-chain/index.md`) + +**The Issue**: "Mainnet" was rendered as "Markette" (meaning "in the market" in Turkish). The community glossary specifies "Ana Ag" as the approved translation. + +**Fix**: `Ethereum Markette` -> `Ethereum Ana Ag'da` + +### 4. "Clients" Translated as "Musterileri" (Customers) (`roadmap/beacon-chain/index.md`) + +**The Issue**: "Ethereum Clients" became "Ethereum Musterileri" (Ethereum Customers). The glossary specifies "istemci" (client in computing sense). + +**Fix**: `Ethereum Musterileri` -> `Ethereum Istemcileri` + +### 5. "DeFi" Rendered as "MeFi" (`page-apps.json`) + +**The Issue**: The "D" in "DeFi" was dropped, creating a nonsense term. Brand names must never be translated. + +**Fix**: `"MeFi"` -> `"DeFi"` + +### 6. Vitalik Buterin in Devanagari Script (2 JSON files) + +**The Issue**: "Vitalik Buterin" appeared as "वितालिक बुटेरिन" (Hindi/Devanagari script) in Turkish translation files. This is wrong-script contamination from Crowdin's translation memory — likely copied from Hindi translations. + +**Files**: `learn-quizzes.json`, `page-upgrades-index.json` + +**Fix**: Replaced Devanagari text with Latin script "Vitalik Buterin". + +### 7. "underlying blockchain" -> "yatak blockchain" (bed blockchain) (`bridges/index.md`) + +**The Issue**: "underlying" was translated as "yatak" (bed/mattress) instead of "altta yatan" (underlying). The glossary also specifies "blokzincir" for blockchain. + +**Fix**: `altinda yatak blockchain` -> `altta yatan blokzincir` + +### 8. BLS -> "BSL" Transposition + Typo (`staking/dvt/index.md`) + +**The Issue**: "BLS" (Boneh-Lynn-Shacham) cryptographic signatures were transposed to "BSL" in 2 occurrences. Additionally, "dogrulayici" (validator) had a typo: "odogrulayici". + +**Fix**: `BSL` -> `BLS`, `odogrulayici` -> `dogrulayici` + +### 9. "ethererum.org" Typo (3 files) + +**The Issue**: "ethereum" misspelled as "ethererum" in 3 files: + +- `about/index.md` +- `contributing/adding-wallets/index.md` +- `contributing/translation-program/resources/index.md` + +**Fix**: `ethererum.org` -> `ethereum.org` + +### 10. "World Wibe Web" (`web3/index.md`) + +**The Issue**: "Wide" misspelled as "Wibe". + +**Fix**: `World Wibe Web` -> `World Wide Web` + +### 11. "Sabir para" -> "Sabit para" (Stablecoin) (2 JSON files) + +**The Issue**: Stablecoin definition used "Sabir" (patient) instead of "Sabit" (stable). The glossary specifies "sabit para". + +**Files**: `glossary.json`, `glossary-tooltip.json` + +**Fix**: `Sabir para` -> `Sabit para` + +### 12. "EHT" -> "ETH" (3 occurrences) + +**The Issue**: ETH ticker symbol had letters transposed. + +**Files**: `page-run-a-node.json`, `page-upgrades-get-involved.json` (2 occurrences) + +**Fix**: `EHT` -> `ETH` + +### 13. Broken Markdown Links (3 in `community/research/index.md`) + +**The Issue**: Markdown links broken by space between text and URL: + +- `[Merkeziyetsiz Bilimin (DeSci)] (https://...)` instead of `[text](url)` + +**Fix**: Removed space to restore valid markdown link syntax for all 3 instances. + +### 14. Broken Anchor Links (6 in `standards/tokens/erc-1155/index.md`) + +**The Issue**: Table of contents used underscores (`#batch_transfers`) while heading IDs used hyphens (`#batch-transfers`). + +**Fix**: All 6 anchor links updated from underscores to hyphens. + +### 15. Untranslated English String (`page-staking.json`) + +**The Issue**: `"Software has been available and used by the public for the indicated period of time"` left in English. + +**Fix**: Translated to Turkish: `"Yazilim, belirtilen sure boyunca halka acik olarak kullanilabilir durumda olmustur"` + +## MDX Syntax Errors (4 build failures) + +After committing translation fixes, the Netlify build failed on 4 pages. + +### Error 1: `/tr/developers/docs/networks` + +- **Symptom**: "Unexpected character `5` (U+0035) before name" +- **Cause**: Raw `<5GB` parsed as JSX tag opening +- **English source**: Uses `<5GB` +- **Fix**: `<5GB` -> `<5GB` + +### Error 2: `/tr/developers/tutorials/all-you-can-cache` + +- **Symptom**: "Expected a closing tag for ``" +- **Cause**: Missing closing backtick after `` `.() `` +- **English source**: `` `.()` `` (properly closed) +- **Fix**: Added closing backtick: `` `.()` `` + +### Error 3: `/tr/developers/tutorials/creating-a-wagmi-ui-for-your-contract` + +- **Symptom**: "Unexpected closing slash `/` in tag" +- **Cause**: Misplaced backtick left `` exposed as JSX +- **Broken**: ``(`<> ...` `)`` +- **Fixed**: ``(`<> ... `)`` + +### Error 4: `/tr/restaking` + +- **Symptom**: "Unexpected closing tag ``" +- **Cause**: Orphaned `` from sentence restructuring during translation +- **Fix**: Removed trailing ` ` + +## Community Glossary Reference + +The `tr-glossary-terms.json` file in the main repo root was used as the authoritative reference for all terminology decisions. Key terms applied: + +| English | Turkish (Glossary) | Issue Found | +| -------------- | ------------------ | -------------------------------------------- | +| proof-of-stake | hisse ispati | PoW/PoS inversion | +| proof-of-work | is ispati | PoW/PoS inversion | +| mainnet | ana ag | "Markette" used instead | +| client | istemci | "Musteri" (customer) used | +| stablecoin | sabit para | "Sabir para" typo | +| blockchain | blokzincir | "blockchain" left untranslated in some cases | +| validator | dogrulayici | Typo "odogrulayici" | +| node | dugum | Consistent | +| rollup | toplama | Consistent | +| beacon chain | isaret zinciri | Consistent | +| staking | hisseleme | Consistent | + +## Fix Progression Timeline + +1. **2026-01-27**: Crowdin automated import creates PR with 301 files +2. **2026-02-17**: Review agents deployed (5 parallel agents) +3. **2026-02-17**: Quality scores posted to PR as comment +4. **2026-02-17**: Translation fixes applied (45 files, 54 insertions/54 deletions) +5. **2026-02-17**: Netlify build fails with 4 MDX errors +6. **2026-02-17**: MDX syntax fixes applied (4 files) +7. **2026-02-17**: Build verification passed + +## Key Pitfalls & Lessons Learned + +### 1. Brand Name Translation is Systematic + +"Solidity" -> "katillik" appeared in 26 files. This isn't a one-off error — Crowdin's translation engine systematically translates programming language names when they have common-word meanings. **Expect this for every language import.** + +### 2. Wrong-Script Contamination from Translation Memory + +Devanagari "Vitalik Buterin" in Turkish files indicates Crowdin's translation memory leaked content from Hindi translations. **Check for cross-script contamination as a standard review step.** + +### 3. Glossary Terms Are Not Optional + +The community glossary resolved several judgment calls: + +- "Markette" vs "Ana Ag" — only the glossary makes it clear "ana ag" is the community standard +- "Musteri" vs "Istemci" — both are valid Turkish, but the glossary defines the accepted technical term +- **Always load and reference the glossary before applying fixes.** + +### 4. JSON Review Agent Context Limits + +JSON Batch B agent (19 files) exceeded Opus context. For Turkish with 46 JSON files, the split was 23/19. **For languages with 40+ JSON files, plan for Sonnet fallback or 3-way split.** + +### 5. MDX Errors Are Predictable + +All 4 MDX errors fell into well-known categories: + +- Raw `<` before numbers (escape as `<`) +- Missing closing backticks (compare against English source) +- Misplaced backticks (same pattern as Vietnamese PR) +- Orphaned HTML tags (same pattern as Vietnamese PR) + +**These same patterns appear in every Crowdin import. Consider adding automated detection to `post_import_sanitize.ts`.** + +## Prevention Recommendations + +### Immediate (Can implement now) + +1. **Brand name protection dictionary** in `post_import_sanitize.ts` + + - Maintain list of protected terms (Solidity, Vyper, MetaMask, etc.) + - Auto-revert translations of protected terms + - Estimated effort: 2-3 hours + +2. **Cross-script contamination detector** + + - Define expected Unicode ranges per locale + - Flag non-Latin characters in Turkish/Vietnamese/etc. files + - Estimated effort: 1-2 hours + +3. **MDX pre-validation step** + - Run MDX compiler on translated files before PR creation + - Catch `` and backtick issues early + - Estimated effort: 3-5 hours + +### Medium-term (Requires Crowdin configuration) + +4. **Crowdin glossary enforcement** + + - Upload community glossaries as "do-not-translate" entries + - Translators see warnings when deviating from glossary + - Estimated effort: 2-3 hours + +5. **Pre-merge build check GitHub Action** + - Run `pnpm build` on Crowdin import PRs automatically + - Block merge until build passes + - Estimated effort: 1 hour + +## Related Files + +- **Sanitizer**: `src/scripts/i18n/post_import_sanitize.ts` +- **Review Command**: `.claude/commands/review-translations.md` +- **Community Glossary**: `tr-glossary-terms.json` (repo root) +- **CI Workflow**: `.github/workflows/claude-review-translations.yml` +- **Import Orchestrator**: `src/scripts/i18n/main.ts` +- **Vietnamese Review**: See PR #17176 companion document for cross-reference diff --git a/public/content/translations/tr/about/index.md b/public/content/translations/tr/about/index.md index 76382e04265..8199578a473 100644 --- a/public/content/translations/tr/about/index.md +++ b/public/content/translations/tr/about/index.md @@ -1,13 +1,15 @@ --- -title: Hakkımızda -description: Ethereum.org ekibi, topluluğu ve misyonu hakkında +title: "Hakkımızda" +description: "Ethereum.org ekibi, topluluğu ve misyonu hakkında" lang: tr --- -# Ethereum.org hakkında {#about-ethereumorg} +# ethereum.org hakkında {#about-ethereumorg} ethereum.org, Ethereum topluluğu için herkesin katkıda bulunabileceği bir açık kaynaktır. Kendilerini, dünyanın dört bir yanındaki binlerce topluluk üyesinin katkılarıyla siteyi sürdürmeye ve geliştirmeye adamış küçük bir çekirdek ekibimiz var. +**ethereum.org'dan hiç kimse sizinle asla iletişime geçmeyecektir. Cevap vermeyin.** + ## İsimler hakkında bir not {#a-note-on-names} Ethereum ortamı içerisinde Ethereum'un nasıl çalıştığına dair zayıf mental modellere yol açabilecek isimlerin karıştırılması, insanlar arasında yaygın olarak görülür. Bazı şeyleri netleştirmek için işte kısa bir açıklama: @@ -16,15 +18,15 @@ Ethereum ortamı içerisinde Ethereum'un nasıl çalıştığına dair zayıf me Ethereum, on binlerce geliştirici, düğüm operatörü, ETH sahibi ve kullanıcıdan oluşan küresel bir topluluk tarafından işletilen, yönetilen ve sahip olunan bir herkese açık ağ, blokzincir ve açık kaynaklı protokoldür. -[Ethereum hakkında daha fazla bilgi](/what-is-ethereum/) +[Ethereum hakkında daha fazlası](/what-is-ethereum/) -[Ethereum yönetişimi hakkında daha fazla bilgi](/governance/) +[Ethereum yönetişimi hakkında daha fazlası](/governance/) ### Ether (ETH) {#ether-or-eth} Ether (değer sembolü olan ETH olarak da bilinir), Ethereum üzerinde işlem gören yerel para birimidir. ETH, Ethereum ağının kullanımına ilişkin ödemeleri yapmak (işlem ücreti halinde) için gereklidir. ETH, hisseleme ile ağı güvence altına almak için de kullanılır. İnsanlar Ethereum'un fiyatı hakkında konuşurken varlık olan ETH'den bahsetmektedir. -[ETH hakkında daha fazla bilgi](/what-is-ether/) +[ETH hakkında daha fazlası](/what-is-ether/) [ETH hisseleme hakkında daha fazla bilgi](/staking/) @@ -32,7 +34,7 @@ Ether (değer sembolü olan ETH olarak da bilinir), Ethereum üzerinde işlem g Ethereum ağı ve ekosistemi için destek sunmayı amaçlayan, başlangıçta ETH'nin toplu satışı ile fonlanmış, kâr amacı gütmeyen bir organizasyondur. -[Ethereum Foundation hakkında daha fazla bilgi](/foundation/) +[Ethereum Foundation hakkında daha fazlası](/foundation/) ### ethereum.org {#ethereum-org} @@ -53,7 +55,7 @@ Yeni kullanıcıların gerek Ethereum gerekse ana konseptleri ile daha aşina ol - topluluk tarafından oluşturulan kaynakları sergilemek - Ethereum eğitimini olabildiğince çok dile ulaştırmak -Bu misyona ulaşmak için ekibimiz, ethererum.org'da iki ana hedefe odaklanmıştır: +Bu misyona ulaşmak için ekibimiz, ethereum.org'da iki ana hedefe odaklanmıştır: ### 1. ethereum.org ziyaretçileri için kullanıcı deneyimini geliştirme {#visitors} @@ -76,25 +78,30 @@ Misyonumuzu gerçekleştirmemiz yolunda bize rehberlik eden bazı temel ilkelere ### 1. ethereum.org, bir Ethereum portalıdır 🌏 {#core-principles-1} -Kullanıcılarımızın ilgisini zirveye taşımak ve sorularının cevaplanmasını sağlamak istiyoruz. Bu yüzden portalımızın bilgileri, "sihirli anları" ve dünyada var olan harika topluluk kaynaklarına yönlendiren bağlantıları birleştirmesi gerekiyor. İçeriğimizin amacı, hâlihazırda var olan geniş kaynakların yerini almak değil, bir "alıştırma portalı" işlevi görmektir. Topluluk tarafından inşa edilmiş kaynakları desteklemeye ve bunlarla entegre olmaya, bunlara daha fazla görünürlük kazandırmaya ve bunları daha keşfedilebilir hâle getirmeye istekliyiz. [Ethereum topluluğu](/community/) bunun merkezinde yer alır: Sadece topluluğa hizmet etmemiz değil, onlarla birlikte çalışmamız ve onların geribildirimlerini dahil etmemiz de gerekiyor. İnternet sitemiz sadece şu anda sahip olduğumuz topluluk için değil, daha da büyümesini umduğumuz gelecekteki topluluğumuz içindir. Birçok dilden, bölgeden ve kültürden insan barındıran küresel bir topluluk olduğumuzu unutmamalıyız. +Kullanıcılarımızın ilgisini zirveye taşımak ve sorularının cevaplanmasını sağlamak istiyoruz. Bu yüzden portalımızın bilgileri, "sihirli anları" ve dünyada var olan harika topluluk kaynaklarına yönlendiren bağlantıları birleştirmesi gerekiyor. İçeriğimizin amacı, hâlihazırda var olan geniş kaynakların yerini almak değil, bir "alıştırma portalı" işlevi görmektir. Topluluk tarafından inşa edilmiş kaynakları desteklemeye ve bunlarla entegre olmaya, bunlara daha fazla görünürlük kazandırmaya ve bunları daha keşfedilebilir hâle getirmeye istekliyiz. +[Ethereum topluluğu](/community/) bunun merkezinde yer alır: Sadece topluluğa hizmet etmemiz değil, onlarla birlikte çalışmamız ve onların geri bildirimlerini dahil etmemiz de gerekiyor. İnternet sitemiz sadece şu anda sahip olduğumuz topluluk için değil, daha da büyümesini umduğumuz gelecekteki topluluğumuz içindir. Birçok dilden, bölgeden ve kültürden insan barındıran küresel bir topluluk olduğumuzu unutmamalıyız. ### 2. ethereum.org sürekli gelişmektedir 🛠 {#core-principles-2} -Ethereum ve topluluk, sürekli gelişmekte, olduğundan ethereum.org da gelişmeyi sürdürecektir. Bu yüzden de sitemiz basit bir tasarım sistemine ve modüler bir yapıya sahiptir. İnsanların siteyi nasıl kullandığı ve toplumun siteden beklentileri hakkında daha fazla bilgi sahibi oldukça yinelemeli değişiklikler yapıyoruz. Katkıda bulunanlardan oluşan bir topluluğa sahip açık kaynaklı bir oluşum olduğumuz için değişiklikler önerebilir veya bize yardımcı olabilirsiniz. [Katkıda bulunma hakkında bilgi edinin](/contributing/) +Ethereum ve topluluk, sürekli gelişmekte, olduğundan ethereum.org da gelişmeyi sürdürecektir. Bu yüzden de sitemiz basit bir tasarım sistemine ve modüler bir yapıya sahiptir. İnsanların siteyi nasıl kullandığı ve toplumun siteden beklentileri hakkında daha fazla bilgi sahibi oldukça yinelemeli değişiklikler yapıyoruz. +Katkıda bulunanlardan oluşan bir topluluğa sahip açık kaynaklı bir oluşum olduğumuz için değişiklikler önerebilir veya bize yardımcı olabilirsiniz. +[Katkıda bulunma hakkında bilgi edinin](/contributing/) ### 3. ethereum.org sıradan bir ürün web sitesi değildir 🦄 {#core-principles-3} -Ethereum büyük bir olaydır: toplum, teknoloji, fikir ve ideoloji toplulukları ve daha da fazlasını içerir. Bu, web sitesinin "belirli bir araç isteyen bir geliştirici" ve "bir miktar ETH satın alan ve cüzdanın ne olduğunu bilmeyen bir yeni gelen" gibi birçok farklı kullanıcı yolculuğunu ele alması gerektiği anlamına gelir. "Blokzincir platformu için en iyi web sitesi nedir?" sorusu hâlâ cevapsızdır: Biz öncüleriz. Bunu inşa etmek, deney yapmayı gerektirir. +Ethereum büyük bir olaydır: toplum, teknoloji, fikir ve ideoloji toplulukları ve daha da fazlasını içerir. +Bu, web sitesinin "belirli bir araç isteyen bir geliştirici" ve "bir miktar ETH satın alan ve cüzdanın ne olduğunu bilmeyen bir yeni gelen" gibi birçok farklı kullanıcı yolculuğunu ele alması gerektiği anlamına gelir. +"Blokzincir platformu için en iyi web sitesi nedir?" sorusu hâlâ cevapsızdır: Biz öncüleriz. Bunu inşa etmek, deney yapmayı gerektirir. ## Ürün yol haritası {#roadmap} -İşimizi daha erişilebilir kılmak ve daha fazla topluluk iş birliğini teşvik etmek için ethereum.org ana ekibi, üç aylık yol haritası hedeflerimize bir genel bakış yayımlar. +Çalışmalarımızı daha erişilebilir kılmak ve daha fazla topluluk iş birliğini teşvik etmek için ethereum.org çekirdek ekibi, [shape up cycle](https://www.productplan.com/glossary/shape-up-method/) yol haritası hedeflerimizin bir genel bakışını yayımlar. -[2024 üçüncü çeyrek yol haritamızı görüntüleyin](https://github.com/ethereum/ethereum-org-website/issues/13399) +[2025 1. Döngü ürün yol haritamızı görüntüleyin](https://github.com/ethereum/ethereum-org-website/issues/14726) -**Kulağa nasıl geliyor?** Yol haritamız hakkındaki geribildirimleri memnuniyetle karşılarız, üzerinde çalışmamız gerektiğini düşündüğünüz bir şey varsa lütfen bildirin! Topluluktaki herhangi birinden gelecek fikir ve PR'lere açığız. +**Kulağa nasıl geliyor?** Yol haritamız hakkındaki geri bildirimleri her zaman memnuniyetle karşılarız - üzerinde çalışmamız gerektiğini düşündüğünüz bir şey varsa lütfen bize bildirin! Topluluktaki herhangi birinden gelecek fikir ve PR'lere açığız. -**Sürecin parçası olmak mı istiyorsunuz?** [Katkıda bulunma hakkında daha fazla bilgi edinin](/contributing/), [bize Twitter'dan ulaşın](https://twitter.com/ethdotorg) veya [Discord sunucumuzdaki](https://discord.gg/ethereum-org) topluluk tartışmalarına katılın. +**Dahil olmak ister misiniz?** [Katkıda bulunma hakkında daha fazla bilgi edinin](/contributing/), [bize Twitter'dan ulaşın](https://x.com/ethdotorg) veya [Discord sunucumuzdaki](https://discord.gg/ethereum-org) topluluk tartışmalarına katılın. ## Tasarım ilkeleri {#design-principles} @@ -102,26 +109,26 @@ Sitedeki içeriğimize ve tasarım kararlarımıza rehberlik etmesi için bir di ## Tasarım sistemi {#design-system} -Özellikleri daha hızlı hayata geçirmek ve topluluk üyelerinin ethereum.org açık tasarımında yer almasına olanak tanımak için bir [tasarım sistemi](https://www.figma.com/file/NrNxGjBL0Yl1PrNrOT8G2B/ethereum.org-Design-System?node-id=0%3A1&t=QBt9RkhpPqzE3Aa6-1) geliştirip yayımladık. +Özellikleri daha hızlı sunmak ve topluluk üyelerinin ethereum.org'un açık tasarımına katılmasını sağlamak için bir [tasarım sistemi](https://www.figma.com/file/NrNxGjBL0Yl1PrNrOT8G2B/ethereum.org-Design-System?node-id=0%3A1&t=QBt9RkhpPqzE3Aa6-1) oluşturduk ve yayımladık. -Sürecin parçası olmak mı istiyorsunuz? [Figma'da bizi takip edin](https://www.figma.com/file/NrNxGjBL0Yl1PrNrOT8G2B/ethereum.org-Design-System), [GitHub konusunu izleyin](https://github.com/ethereum/ethereum-org-website/issues/6284) ve [Discord sunucumuzun #design kanalında](https://discord.gg/ethereum-org) tartışmaya katılın. +Katılmak ister misiniz?[Figma'dan takip edin](https://www.figma.com/file/NrNxGjBL0Yl1PrNrOT8G2B/ethereum.org-Design-System), [GitHub konusunu](https://github.com/ethereum/ethereum-org-website/issues/6284) inceleyin ve [#design Discord kanalımızdaki](https://discord.gg/ethereum-org) sohbete katılın. ## Stil rehberi {#style-guide} -Katkı sürecini daha sorunsuz hâle getirmek amacıyla içerik yazmanın belirli yönlerini standart hâle getirmek için bir [stil rehberimiz](/contributing/style-guide/) var. +Katkı sürecini daha sorunsuz hâle getirmek amacıyla içerik yazmanın belirli yönlerini standartlaştırmak için bir [stil rehberimiz](/contributing/style-guide/) var. -[Siteye katkıda bulunmak](/contributing/) istiyorsanız, [ilkelerimizi](/contributing/design-principles/) ve [stil rehberimizi](/contributing/style-guide/) mutlaka okuyun. +Eğer [siteye katkıda bulunmak](/contributing/) isterseniz, [ilkelerimizi](/contributing/design-principles/) ve [stil rehberimizi](/contributing/style-guide/) okuduğunuzdan emin olun. Tasarım ilkelerimiz, tasarım sistemimiz ve stil rehberimiz ile ilgili geribildirimleri memnuniyetle karşılarız. Unutmayın, ethereum.org topluluk için, topluluk tarafından yönetilir. ## Lisans {#license} -Ethereum.org web sitesi açık kaynak kodludur ve aksi belirtilmediği sürece [MIT License](https://github.com/ethereum/ethereum-org-website/blob/dev/LICENSE) altında oluşturulmuştur. Ethereum.org'un [kullanım koşulları](/terms-of-use/) hakkında daha fazla bilgi edinin. +ethereum.org web sitesi açık kaynaklıdır ve aksi belirtilmedikçe bir [MIT Lisansı](https://github.com/ethereum/ethereum-org-website/blob/dev/LICENSE) altında oluşturulmuştur. ethereum.org'un [kullanım koşulları](/terms-of-use/) hakkında daha fazla bilgi. -## İş imkanları {#open-jobs} +## Açık pozisyonlar {#open-jobs} Bu web sitesinin açık kaynaklı olmasına ve herkesin site üzerinde çalışabilmesine rağmen, ethereum.org ve diğer Ethereum Foundation web projelerine adanmış bir ekibimiz mevcuttur. -Tüm iş ilanlarını burada yayımlayacağız. Burada sizin için bir rol yoksa [Discord sunucumuza](https://discord.gg/ethereum-org) gidin ve bizimle çalışmayı ne kadar istediğinizi bize anlatın! +Tüm iş ilanlarını burada yayımlayacağız. Burada kendinize uygun bir rol görmüyorsanız [Discord sunucumuza](https://discord.gg/ethereum-org) gidin ve bizimle nasıl çalışmak istediğinizi bize bildirin! -Ethereum.org ekibinin ötesinde bir şeyler mi arıyorsunuz? [Ethereum ile ilgili diğer işlere göz atın](/community/get-involved/#ethereum-jobs/). +Ethereum.org ekibinin ötesinde bir şeyler mi arıyorsunuz? [Diğer Ethereum ile ilgili işlere göz atın](/community/get-involved/#ethereum-jobs/). diff --git a/public/content/translations/tr/ai-agents/index.md b/public/content/translations/tr/ai-agents/index.md new file mode 100644 index 00000000000..e5b8e6f2c71 --- /dev/null +++ b/public/content/translations/tr/ai-agents/index.md @@ -0,0 +1,144 @@ +--- +title: Yapay zeka temsilcileri +metaTitle: "Yapay zeka aracıları | Ethereum üzerindeki yapay zeka aracıları" +description: "Ethereum üzerindeki yapay zeka aracılarına genel bir bakış" +lang: tr +template: use-cases +emoji: ":robot:" +sidebarDepth: 2 +image: /images/ai-agents/hero-image.png +alt: "Terminal masasında toplanan insanlar" +summaryPoint1: "Blokzincirle etkileşime giren ve bağımsız olarak ticaret yapan yapay zeka" +summaryPoint2: "Zincir üstü cüzdanları ve fonları kontrol eder" +summaryPoint3: "İş için insanları veya diğer aracıları işe alır" +buttons: + - content: Yapay zeka aracıları nedir? + toId: what-are-ai-agents + - content: Aracıları keşfedin + toId: ai-agents-on-ethereum + isSecondary: false +--- + +Zincir üstü piyasa trendlerini 7/24 inceleyen, soruları yanıtlayan ve hatta sizin adınıza işlemler gerçekleştiren bir yapay zeka asistanıyla Ethereum'da gezindiğinizi hayal edin. Dijital yaşamınızı basitleştirmek için tasarlanmış akıllı sistemler olan Yapay Zeka Aracıları dünyasına hoş geldiniz. + +Ethereum'da, sanal etkileyicilerden ve otonom içerik oluşturuculardan gerçek zamanlı piyasa analizi platformlarına kadar uzanan yapay zeka aracı yeniliklerinin, kullanıcılara öngörüler, eğlence ve operasyonel verimlilik sunarak onları güçlendirdiğini görüyoruz. + +## Yapay zeka aracıları nedir? {#what-are-ai-agents} + +Yapay zeka aracıları, görevleri yerine getirmek veya kendi kararlarını vermek için yapay zekayı kullanan yazılım programlarıdır. Verilerden öğrenir, değişikliklere uyum sağlar ve karmaşık görevleri yerine getirirler. Durmaksızın çalışırlar ve fırsatları anında tespit edebilirler. + +### Yapay zeka aracıları blokzincirlerle nasıl çalışır {#how-ai-agents-work-with-blockchains} + +Geleneksel finansta, yapay zeka aracıları genellikle sınırlı veri girdileriyle merkezi ortamlarda çalışır. Bu, varlıkları otonom bir şekilde öğrenme veya yönetme yeteneklerini engeller. + +Buna karşılık, Ethereum'un merkeziyetsiz ekosistemi birkaç temel avantaj sunar: + +- Şeffaf veriler: Gerçek zamanlı blokzincir bilgilerine erişim. +- Gerçek varlık mülkiyeti: Dijital varlıklar tamamen yapay zeka aracılarına aittir. +- Sağlam zincir üstü işlevsellik: Yapay Zeka Aracıları'nın işlem yapmasını, akıllı sözleşmelerle etkileşim kurmasını, likidite sağlamasını ve protokoller arasında iş birliği yapmasını sağlar. + +Bu faktörler, yapay zeka aracılarını basit botlardan, birden fazla sektörde önemli değer sunan dinamik, kendi kendini geliştiren sistemlere dönüştürür: + + + + + + + +## Doğrulanabilir Yapay Zeka {#verifiable-ai} + +Zincir dışında çalışan yapay zeka aracıları genellikle "kara kutular" gibi davranır — akıl yürütmeleri, girdileri ve çıktıları bağımsız olarak doğrulanamaz. Ethereum bunu değiştirir. Aracı davranışını zincir üstüne sabitleyerek, geliştiriciler _güven gerektirmeyen_, _şeffaf_ ve _ekonomik olarak otonom_ aracılar oluşturabilirler. Bu tür aracıların eylemleri denetlenebilir, kısıtlanabilir ve kanıtlanabilir. + +### Doğrulanabilir çıkarım {#verifiable-inference} + +Yapay zeka çıkarımı geleneksel olarak, yürütmenin ucuz olduğu ancak model yürütmesinin opak olduğu zincir dışında gerçekleşir. Ethereum'da, geliştiriciler çeşitli teknikler kullanarak aracıları doğrulanabilir hesaplamayla eşleştirebilirler: + +- [**zkML (sıfır bilgi makine öğrenimi)**](https://opengradient.medium.com/a-gentle-introduction-to-zkml-8049a0e10a04) aracıların modeli veya girdileri ortaya çıkarmadan bir modelin doğru bir şekilde yürütüldüğünü kanıtlamasına olanak tanır +- [**TEE (güvenilir yürütme ortamı) tasdikleri**](https://en.wikipedia.org/wiki/Trusted_execution_environment), bir aracının belirli bir modeli veya kod yolunu çalıştırdığına dair donanım destekli kanıtlara izin verir +- **Zincir üstü değişmezlik**, bu kanıtların ve tasdiklerin herhangi bir sözleşme veya aracı tarafından referans gösterilebilmesini, yeniden oynatılabilmesini ve güvenilebilmesini sağlar + +## x402 ile ödemeler ve ticaret {#x402} + +Ethereum ve L2'lerde dağıtılan [x402 protokolü](https://www.x402.org/), aracılara insan müdahalesi olmadan kaynaklar için ödeme yapmaları ve ekonomik olarak etkileşimde bulunmaları için yerel bir yol sunar. Aracılar şunları yapabilir: + +- Sabit coin'leri kullanarak hesaplama, veri ve API çağrıları için ödeme yapma +- Diğer aracılardan veya hizmetlerden tasdik talep etme veya doğrulama +- Hesaplama, veri veya model çıktıları alıp satarak aracıdan aracıya ticarete katılma + +x402, Ethereum'u otonom aracılar için programlanabilir bir ekonomik katmana dönüştürerek hesaplar, abonelikler veya merkezi faturalandırma yerine kullandıkça öde etkileşimlerini mümkün kılar. + +### Aracısal finans güvenliği {#agentic-finance-security} + +Otonom aracıların korkuluklara ihtiyacı vardır. Ethereum bunları cüzdan ve sözleşme düzeyinde sağlar: + +- [Akıllı hesaplar (EIP-4337)](https://eips.ethereum.org/EIPS/eip-4337), geliştiricilerin harcama limitleri, beyaz listeler, oturum anahtarları ve ayrıntılı izinler uygulamasını sağlar +- Akıllı sözleşmelerdeki programlanmış kısıtlamalar, bir aracının yapmasına izin verilen şeyleri kısıtlayabilir +- Çıkarım tabanlı sınırlar (örneğin, yüksek riskli bir eylem gerçekleştirmeden önce bir zkML kanıtı gerektirmek) başka bir güvenlik katmanı ekler + +Bu kontroller, sınırsız olmayan otonom aracıların dağıtılmasını sağlar. + +### Zincir üstü kayıtlar: ERC-8004 {#erc-8004} + +[ERC-8004](https://eips.ethereum.org/EIPS/eip-8004), aracı kimliği, yetenekleri ve tasdikleri için zincir üstü kayıtlar öneren, gelişmekte olan bir standarttır (şu anda uzman değerlendirmesindedir). + +Kabul edilirse, şunları sağlayabilir: + +- Aracıların paylaşılan, güven gerektirmeyen bir dizini +- Standartlaştırılmış tasdik biçimleri +- Doğrudan Ethereum ana ağında "güven gerektirmeyen aracı altyapısı" için bir temel + +Bu, aracıların tamamen merkeziyetsiz bir ortamda birbirlerini keşfetmelerini, doğrulamalarını ve birbirleriyle işlem yapmalarını kolaylaştıracaktır. + +## Ethereum üzerindeki yapay zeka aracıları {#ai-agents-on-ethereum} + +Yapay zeka aracılarının tam potansiyelini keşfetmeye başlıyoruz ve projeler şimdiden yapay zeka ile blokzincir arasındaki sinerjiden, özellikle şeffaflık ve para kazanma alanlarında yararlanıyor. + + + +Luna'nın bir podcast konuğu olarak ilk kez görünmesi + + + +## Aracı kontrollü cüzdanlar {#agent-controlled-wallets} + +Luna veya AIXBT gibi aracılar kendi zincir üstü cüzdanlarını ([AIXBT cüzdanı](https://clusters.xyz/aixbt), [Luna cüzdanı](https://zapper.xyz/account/0x0d177181e3763b20d47dc3a72dd584368bd8bf43)) kontrol ederek hayranlarına bahşiş vermelerini ve ekonomik faaliyetlere katılmalarını sağlar. + +Luna, X sosyal kampanyası #LunaMuralChallenge sırasında kazananları Base cüzdanı aracılığıyla seçip ödüllendirdi — bu, bir yapay zekanın kripto ödülü için insanları işe aldığı ilk örnek oldu. + + + + +

Bilmekte fayda var

+

Yapay zeka aracıları ve ilgili araçlar henüz geliştirme aşamasının başındadır ve oldukça deneyseldir — dikkatli kullanın.

+
+ +
+ +## Sohbet komutlarını kullanarak cüzdanınızı kontrol edin {#control-your-wallet-using-chat-commands} + +DeFi'nin karmaşık arayüzlerini atlayabilir ve kriptonuzu basit sohbet komutlarıyla yönetebilirsiniz. + +Bu sezgisel yaklaşım, işlemleri daha hızlı, daha kolay hale getirir ve yanlış adrese para gönderme veya ücretler için fazla ödeme yapma gibi hatalara daha az eğilimli kılar. + + + +## Yapay zeka aracıları ve yapay zeka botları karşılaştırması {#ai-agents-vs-ai-bots} + +Yapay zeka aracıları ile yapay zeka botları arasındaki ayrım bazen kafa karıştırıcı olabilir, çünkü her ikisi de girdilere dayalı olarak otomatik eylemler gerçekleştirir. + +- Yapay zeka botları otomatik asistanlar gibidir — Rutin görevleri yerine getirmek için belirli, önceden programlanmış talimatları izlerler. +- Yapay zeka aracıları daha çok akıllı yoldaşlar gibidir — Deneyimlerden öğrenir, yeni bilgilere uyum sağlar ve kendi başlarına kararlar alırlar. + +| | Yapay zeka temsilcileri | Yapay zeka botları | +| ------------------- | ----------------------------------------------------------------------------------------- | -------------------------------------------------------------- | +| **Etkileşimler** | Karmaşık, uyarlanabilir, otonom | Basit, önceden tanımlanmış kapsam, sabit kodlu | +| **Öğrenme** | Sürekli öğrenir, deney yapabilir ve gerçek zamanlı olarak yeni verilere uyum sağlayabilir | Önceden eğitilmiş veriler veya sabit kurallar üzerinde çalışır | +| **Görev tamamlama** | Daha geniş hedeflere ulaşmayı amaçlar | Yalnızca belirli görevlere odaklanır | + +## Daha derine dalın {#dive-deeper} + + + +## Kendi yapay zeka aracınızı oluşturabilirsiniz {#you-can-build-your-own-ai-agent} + + diff --git a/public/content/translations/tr/bridges/index.md b/public/content/translations/tr/bridges/index.md index 5cde358d1bb..8bd8bd86106 100644 --- a/public/content/translations/tr/bridges/index.md +++ b/public/content/translations/tr/bridges/index.md @@ -1,12 +1,12 @@ --- -title: Blokzincir köprülerine giriş -description: Köprüler, kullanıcıların varlıklarını farklı blok zincirler üstünde taşımalarını sağlar +title: "Blokzincir köprülerine giriş" +description: "Köprüler, kullanıcıların varlıklarını farklı blok zincirler üstünde taşımalarını sağlar" lang: tr --- # Blokzincir köprüleri {#prerequisites} -_Web3 L1 blok zincirler ve L2 ölçeklendirme çözümlerinin her birinin benzersiz yetenek ve ödünlestirmelerle tasarlandığı bir ekosisteme evrilmiştir. Blokzincir protokollerinin sayısı arttıkça zincirler arasında varlık aktarma talebi de artar. Bu talebi karşılamak için köprülere ihtiyacımız var._ +_Web3 L1 blok zincirler ve L2 ölçeklendirme çözümlerinin her birinin benzersiz yetenek ve ödünlestirmelerle tasarlandığı bir ekosisteme evrilmiştir. Blokzincir protokollerinin sayısı arttıkça zincirler arasında varlık aktarma talebi de artar.Bu talebi karşılamak için köprülere ihtiyacımız var._ @@ -18,72 +18,72 @@ Bir örneği ele alalım: Siz Amerika'dasınız ve Avrupa'ya bir yolculuk planlıyorsunuz. Amerikan dolarınız var, ancak harcamak için avroya ihtiyaç duyuyorsunuz. Amerikan dolarınızı avroya çevirmek için küçük bir ücret karşılığında döviz değişimi işinize yarar. -Ancak, farklı bir [blokzincir](/glossary/#blockchain)i kullanmak için benzer bir değiş tokuş yapmak isterseniz ne yaparsınız? Diyelim ki [Arbitrum](https://arbitrum.io/)'da ETH kullanmak üzere Ethereum Ana Ağındaki [ETH](/glossary/#ether)'yi takas etmek istiyorsunuz. EUR için yaptığımız döviz değişimi gibi, ETH'mizi Ethereum'dan Arbitrum'a taşımak için bir mekanizmaya ihtiyacımız var. Köprüler bunun gibi bir işlemi mümkün kılar. Bu durumda Arbitrum, ETH'yi Ana Ağdan Arbitrum'a aktarabilecek [yerel bir köprüye](https://bridge.arbitrum.io/) sahiptir. +Ancak, farklı bir [blokzincir](/glossary/#blockchain) kullanmak üzere benzer bir takas yapmak isterseniz ne yaparsınız? Diyelim ki Ethereum Ana Ağı'ndaki [ETH](/glossary/#ether) ile [Arbitrum](https://arbitrum.io/) üzerindeki ETH'yi takas etmek istiyorsunuz. EUR için yaptığımız döviz değişimi gibi, ETH'mizi Ethereum'dan Arbitrum'a taşımak için bir mekanizmaya ihtiyacımız var. Köprüler bunun gibi bir işlemi mümkün kılar. Bu durumda, [Arbitrum, Ana Ağ'dan Arbitrum'a ETH aktarabilen yerel bir köprüye sahiptir](https://portal.arbitrum.io/bridge). ## Neden köprülere ihtiyacımız var? {#why-do-we-need-bridges} -Bütün blok zincirlerin kendi sınırları vardır. Ethereum'un ölçeklendirme yapabilmesi ve talebe ayak uydurabilmesi için [toplamalara](/glossary/#rollups) ihtiyaç duyulmuştur. Alternatif olarak, Solana ve Avalanche gibi L1'ler daha yüksek iş hacmi için merkeziyetsizleşme maliyeti karşılığında farklı şekilde tasarlanmışlardır. +Bütün blok zincirlerin kendi sınırları vardır. Ethereum'un ölçeklenmesi ve talebe ayak uydurabilmesi için [toplamalara](/glossary/#rollups) ihtiyaç duyulmuştur. Alternatif olarak, Solana ve Avalanche gibi L1'ler daha yüksek iş hacmi için merkeziyetsizleşme maliyeti karşılığında farklı şekilde tasarlanmışlardır. -Buna karşın tüm blokzincirler izole edilmiş çevrelerde geliştirilir, farklı kuralları ve [mutabakat](/glossary/#consensus) mekanizmaları vardır. Bu onların yerel olarak iletişim kuramayacakları ve token'ların rahatlıkla blok zincirler arasında hareket edemeyecekleri anlamına gelir. +Ancak tüm blokzincirler yalıtılmış ortamlarda geliştirilir ve farklı kurallara ve [mutabakat](/glossary/#consensus) mekanizmalarına sahiptir. Bu onların yerel olarak iletişim kuramayacakları ve token'ların rahatlıkla blok zincirler arasında hareket edemeyecekleri anlamına gelir. Köprüler blok zincirleri birbirine bağlamak, aralarında bilgi ve token'ların iletimini sağlamak için vardır. **Köprüler şunlara olanak sağlar**: - bilgi ve varlıkların zincirler arası transferi. -- [Merkeziyetsiz uygulamalar](/glossary/#dapp), çeşitli blokzincirlerin güçlü yanlarına erişebilir ve böylece kapasitelerini geliştirebilir (protokoller artık yenilik için daha fazla tasarım alanına sahip olduğu için). +- [merkeziyetsiz uygulamaların](/glossary/#dapp) çeşitli blokzincirlerin güçlü yönlerine erişerek yeteneklerini geliştirmesi (protokoller artık inovasyon için daha fazla tasarım alanına sahip olduğundan). - kullanıcıların yeni platformlara erişmelerini ve farklı zincirlerin faydalarını kullanmalarını. - farklı blok zincir ekosistemlerinden geliştiricilerin iş birliği yapmasını ve kullanıcılar için yeni platformlar inşa etmelerini sağlar. -[Token'lar 2. Katman'a nasıl köprülenir?](/guides/how-to-use-a-bridge/) +[Jetonlar katman 2'ye nasıl köprülenir?](/guides/how-to-use-a-bridge/) -## Köprülerin kullanım alanları {#bridge-use-cases} +## Köprü kullanım senaryoları {#bridge-use-cases} Aşağıda bir köprüyü nerede kullanabileceğinizle ilgili bazı senaryolar verilmiştir: -### İşlem ücretlerini azaltma {#transaction-fees} +### Daha düşük işlem ücretleri {#transaction-fees} Diyelim ki Ethereum Ana Ağı'nda ETH'niz var ama farklı merkeziyetsiz uygulamalar için daha ucuz işlem ücreti istiyorsunuz. Ana Ağdaki ETH'nizi Ethereum L2 toplamasına köprüleyerek daha düşük işlem ücretinin tadını çıkarabilirsiniz. -### Diğer blok zincirlerdeki merkeziyetsiz uygulamalar {#dapps-other-chains} +### Diğer blokzincirlerdeki merkeziyetsiz uygulamalar {#dapps-other-chains} -Ethereum Ana Ağı'nda Aave'yi kullanarak USDT borç veriyorsanız ama Polygon'da Aave'yi kullanarak USDT borç vermenin faiz oranı daha yüksekse. +Ethereum Ana Ağı'nda USDT sağlamak için Aave kullanıyorsanız ancak Polygon'da Aave kullanarak USDT sağladığınızda alabileceğiniz faiz oranı daha yüksekse. -### Diğer blok zincir ekosistemlerini keşfetme {#explore-ecosystems} +### Blokzincir ekosistemlerini keşfedin {#explore-ecosystems} Ethereum Ana Ağı'nda ETH'niz varsa ve diğer bir L1'i keşfedip yerel merkeziyetsiz uygulamalarını denemek istiyorsanız. Ethereum Ana Ağı'ndaki ETH'inizi diğer L1'e iletmek için bir köprü kullanabilirsiniz. -### Yerel kripto varlıklarına sahip olma {#own-native} +### Yerel kripto varlıklarına sahip olmak {#own-native} -Diyelim ki yerel zincirde Bitcoin'e (BTC) sahip olmak istiyorsunuz ama sadece Ethereum Ana Ağı'nda varlıklarınız var. Ethereum'da BTC sahibi olmak için Wrapped Bitcoin (WBTC) satın alabilirsiniz. Ancak WBTC bir Ethereum ağına özgü bir [ERC-20](/glossary/#erc-20) jetonudur. Bu da Bitcoin blokzincirindeki orijinal varlık değil, Bitcoin'in Ethereum versiyonu olduğu anlamına gelir. Yerel BTC'ye sahip olmak için varlıklarınızı Ethereum'dan Bitcoin'e bir köprü aracılığı ile aktarmanız gerekir. Bu WBTC'nizi köprüleyecek ve yerel BTC'ye dönüştürecektir. Alternatif olarak, BTC'ye sahip olabilir ve onu Ethereum [DeFi](/glossary/#defi) protokollerinde kullanmak isteyebilirsiniz. Bu da tersi yönünde, BTC'yi WBTC'ye köprülemeyi gerektirir. Bu şekide Ethereum'da bir varlık olarak kullanılabilir. +Diyelim ki yerel zincirde Bitcoin'e (BTC) sahip olmak istiyorsunuz ama sadece Ethereum Ana Ağı'nda varlıklarınız var. Ethereum'da BTC sahibi olmak için Wrapped Bitcoin (WBTC) satın alabilirsiniz. Ancak WBTC, Ethereum ağına özgü bir [ERC-20](/glossary/#erc-20) jetonudur; bu da onun Bitcoin blokzincirindeki orijinal varlık değil, Bitcoin'in bir Ethereum versiyonu olduğu anlamına gelir. Yerel BTC'ye sahip olmak için varlıklarınızı Ethereum'dan Bitcoin'e bir köprü aracılığı ile aktarmanız gerekir. Bu WBTC'nizi köprüleyecek ve yerel BTC'ye dönüştürecektir. Alternatif olarak, BTC sahibi olabilir ve onu Ethereum [DeFi](/glossary/#defi) protokollerinde kullanmak isteyebilirsiniz. Bu da tersi yönünde, BTC'yi WBTC'ye köprülemeyi gerektirir. Bu şekide Ethereum'da bir varlık olarak kullanılabilir. - Ayrıca yukarıdaki her şeyi bir [merkezi borsa](/get-eth/) aracılığıyla da yapabilirsiniz. Ancak varlıklarınız hali hazırda borsada değilse, birden çok adım gerektirecektir ve köprü kullanmanız daha iyi olacaktır. + Yukarıdakilerin tümünü bir [merkezi borsa](/get-eth) kullanarak da yapabilirsiniz. Ancak varlıklarınız hali hazırda borsada değilse, birden çok adım gerektirecektir ve köprü kullanmanız daha iyi olacaktır. -## Köprü Türleri {#types-of-bridge} +## Köprü türleri {#types-of-bridge} Köprülerin çeşitli tasarım türü ve karmaşıklıkları vardır. Genel olarak köprüler iki kategoriye ayrılır: güvenilir ve güvenilir olmayan köprüler. -| Güvenilir Köprüler | Güvenilir Olmayan Köprüler | -| -------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Güvenilir köprüler, operasyonları için merkezi bir varlığa veya sisteme bağlıdır. | Güvenilir olmayan köprüler akıllı sözleşmeler ve algoritmalar kullanarak çalışır. | -| Fonların muhafazası ve köprünün güvenliğine ilişkin güven varsayımları vardır. Kullanıcılar çoğunlukla köprü operatörünün itibarına güvenmektedir. | Güvenilir değildirler, yani köprünün güvenliği altta yatan blok zincirin güvenliği ile aynıdır. | -| Kullanıcıların kripto varlıklarının kontrolünü bırakmaları gerekir. | Güvene dayalı olmayan köprüler, [akıllı sözleşmeler](/glossary/#smart-contract) aracılığıyla kullanıcıların kendi fonlarının kontrolüne sahip olmasına olanak tanır. | +| Güvenilir Köprüler | Güvenilir Olmayan Köprüler | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Güvenilir köprüler, operasyonları için merkezi bir varlığa veya sisteme bağlıdır. | Güvenilir olmayan köprüler akıllı sözleşmeler ve algoritmalar kullanarak çalışır. | +| Fonların muhafazası ve köprünün güvenliğine ilişkin güven varsayımları vardır. Kullanıcılar çoğunlukla köprü operatörünün itibarına güvenmektedir. | Güvenilir değildirler, yani köprünün güvenliği altta yatan blok zincirin güvenliği ile aynıdır. | +| Kullanıcıların kripto varlıklarının kontrolünü bırakmaları gerekir. | [Akıllı sözleşmeler](/glossary/#smart-contract) aracılığıyla, güven gerektirmeyen köprüler, kullanıcıların fonlarının kontrolünü elinde tutmasını sağlar. | Kısaca, güvenilir köprüler güven varsayımlarına sahipken, güvenilir olmayan köprüler güven minimize edilmiştir ve temel etki alanlarının ötesinde yeni güven varsayımları yapmazlar. Bu terimler şu şekilde tanımlanabilir: -- **Güvenilir Olmayan**: Temel etki alanlarına eş değer güvenliğe sahip olması. [Arjun Bhuptani tarafından bu makalede](https://medium.com/connext/the-interoperability-trilemma-657c2cf69f17) açıklandığı gibi. -- **Güven varsayımları:** Sisteme harici doğrulayıcılar ekleyerek temel etki alanlarının güvenliğinden uzaklaşmak, böylece onu kripto-ekonomik olarak daha az güvenli hale getirmek. +- **Güven Gerektirmeyen**: Dayanak alınan alanlarla eş değer güvenliğe sahip olmak. [Arjun Bhuptani'nin bu makalede](https://medium.com/connext/the-interoperability-trilemma-657c2cf69f17) açıkladığı gibi. +- **Güven varsayımları:** Sisteme harici doğrulayıcılar ekleyerek temel alanların güvenliğinden uzaklaşmak ve böylece sistemi kripto-ekonomik olarak daha az güvenli hale getirmek. İki yaklaşım arasındaki temel farkları daha iyi anlamak için bir örnek verelim: @@ -100,34 +100,46 @@ Pek çok köprüleme çözümü, bu iki uç arasında değişen derecelerde güv -## Köprüleri kullanmanın riskleri {#bridge-risk} +## Köprüleri kullanma {#use-bridge} + +Köprü kullanmak, varlıklarınızı farklı blokzincirler arası hareket ettirmenizi sağlar. İşte köprüleri bulmanıza ve kullanmanıza yardımcı olacak birkaç kaynak: + +- **[L2BEAT Köprüler Özeti](https://l2beat.com/bridges/summary) ve [L2BEAT Köprüler Risk Analizi](https://l2beat.com/bridges/summary)**: Pazar payı, köprü türü ve hedef zincirler hakkındaki ayrıntılar da dâhil olmak üzere çeşitli köprülerin kapsamlı bir özeti. Ayrıca L2BEAT köprüler için bir risk analizine sahiptir, bir köprü seçerken bilgilendirilmiş kararlar vermelerinde kullanıcılara yardımcı olur. +- **[DefiLlama Köprü Özeti](https://defillama.com/bridges/Ethereum)**: Ethereum ağlarındaki köprü hacimlerinin bir özeti. + + + +## Köprü kullanmanın riskleri {#bridge-risk} Köprüler geliştirmenin ilk aşamalarındalar. Büyük olasılıkla hâlâ optimal bir köprü tasarımı keşfedilmedi. Her türlü köprü ile etkileşim risk taşır: -- **Akıllı Sözleşme Riski —** programlamada bir hata riski kullanıcının varlıklarının kaybolmasına neden olabilir. -- **Teknoloji Riski —** Yazılım arızası, hatalı programlama, insan hatası, spam ve art niyetli saldırılar kullanıcı işlemlerini aksatabilir +- **Akıllı Sözleşme Riski —** koddaki bir hatanın kullanıcı fonlarının kaybolmasına neden olma riski +- **Teknoloji Riski —** yazılım hatası, hatalı kod, insan hatası, spam ve kötü niyetli saldırılar kullanıcı işlemlerini kesintiye uğratabilir Ayrıca, güvenilir köprüler güven varsayımları eklediğinden, aşağıdaki gibi ek riskler taşır: -- **Sansür Riski -** köprü operatörleri teorik olarak kullanıcıların varlıklarını aktarmasını ve köprüyü kullanmalarını durdurabilir -- **Emanet Riski -** köprü operatörleri kullanıcıların varlıklarını çalmak için anlaşabilir +- **Sansür Riski —** köprü operatörleri, teorik olarak kullanıcıların köprüyü kullanarak varlıklarını aktarmalarını durdurabilir +- **Emanet Riski —** köprü operatörleri, kullanıcıların fonlarını çalmak için gizlice anlaşabilir Kullanıcının varlıkları: - akıllı sözleşmede hata varsa - kullanıcı hata yaparsa -- altında yatak blockchain hacklenirse +- altta yatan blokzincir hacklenirse - köprü operatörlerinin güvenilir bir köprüde kötü niyetli olması - köprü hacklenirse risk altındadır -[Yakın zamanda Solana'nın Wormhole köprüsüne yapılan bir saldırıda 120 bin wETH (325 Milyon Dolar) çalındı.](https://rekt.news/wormhole-rekt/). [En büyük blok zincir hacklerinin](https://rekt.news/leaderboard/) çoğunda köprüler kullanıldı. +Yakın zamandaki bir saldırı, Solana'nın Wormhole köprüsüne yönelikti; [bu saldırı sırasında 120 bin wETH (325 milyon ABD doları) çalındı](https://rekt.news/wormhole-rekt/). [Blokzincirlerdeki en büyük saldırıların birçoğunda köprüler yer alıyordu](https://rekt.news/leaderboard/). -Köprüler, Ethereum L2'lere kullanıcıları alımda ve hatta diğer ekosistemleri keşfetmek isteyen kullanıcılar için çok önemlidir. Ancak köprüler ile etkileşimde olabilecek riskler göz önüne alındığında, kullanıcılar köprülerin ödünleşmelerini anlamalıdır. Bunlar [zincirler arası güvenlik için bazı stratejilerdir](https://blog.debridge.finance/10-strategies-for-cross-chain-security-8ed5f5879946). +Köprüler, Ethereum L2'lere kullanıcıları alımda ve hatta diğer ekosistemleri keşfetmek isteyen kullanıcılar için çok önemlidir. Ancak köprüler ile etkileşimde olabilecek riskler göz önüne alındığında, kullanıcılar köprülerin ödünleşmelerini anlamalıdır. Bunlar, [zincirler arası güvenlik için bazı stratejilerdir](https://debridge.com/learn/blog/10-strategies-for-cross-chain-security/). -## Daha fazla okuma {#further-reading} +## Daha fazla kaynak {#further-reading} + +- [EIP-5164: Zincirler Arası Yürütme](https://ethereum-magicians.org/t/eip-5164-cross-chain-execution/9658) - _18 Haziran 2022 - Brendan Asselstine_ +- [K2 Köprü Risk Çerçevesi](https://gov.l2beat.com/t/l2bridge-risk-framework/31) - _5 Temmuz 2022 - Bartek Kiepuszewski_ +- ["Gelecek neden çok zincirli olacak ama zincirler arası olmayacak."](https://old.reddit.com/r/ethereum/comments/rwojtk/ama_we_are_the_efs_research_team_pt_7_07_january/hrngyk8/) - _8 Ocak 2022 - Vitalik Buterin_ +- [Güvenli Zincirler Arası Birlikte Çalışabilirlik için Paylaşılan Güvenlikten Yararlanma: Lagrange Durum Komiteleri ve Ötesi](https://web.archive.org/web/20250125035123/https://research.2077.xyz/harnessing-shared-security-for-secure-blockchain-interoperability) - _12 Haziran 2024 - Emmanuel Awosika_ +- [Toplama Birlikte Çalışabilirlik Çözümlerinin Durumu](https://web.archive.org/web/20250428015516/https://research.2077.xyz/the-state-of-rollup-interoperability) - _20 Haziran 2024 - Alex Hook_ -- [EIP-5164: Zincirler Arası Yürütme](https://ethereum-magicians.org/t/eip-5164-cross-chain-execution/9658) _18 Haziran 2022 - Brendan Asselstine_ -- [L2Bridge Risk Çerçevesi](https://gov.l2beat.com/t/l2bridge-risk-framework/31) _5 Temmuz 2022 - Bartek Kiepuszewski_ -- ["Neden gelecek zincirlerarası değil de çoklu zincir olacak."](https://old.reddit.com/r/ethereum/comments/rwojtk/ama_we_are_the_efs_research_team_pt_7_07_january/hrngyk8/) _8 Ocak 2022 - Vitalik Buterin_ diff --git a/public/content/translations/tr/community/code-of-conduct/index.md b/public/content/translations/tr/community/code-of-conduct/index.md index 3acc253cea0..b6828155243 100644 --- a/public/content/translations/tr/community/code-of-conduct/index.md +++ b/public/content/translations/tr/community/code-of-conduct/index.md @@ -1,77 +1,77 @@ --- -title: Davranış kuralları -description: Ethereum.org alanlarında ulaşmaya çalıştığımız basit standartlar. +title: "Davranış kuralları" +description: "ethereum.org alanlarında ulaşmaya çalıştığımız temel standartlar." lang: tr --- -# Davranış kuralları {#code-of-conduct} +# Davranış Kuralları {#code-of-conduct} ## Misyon {#mission} -Ethereum için en kapsayıcı ve erişilebilir bilgi merkezini kurmak ve sürdürmek. +Ethereum için en kapsamlı ve erişilebilir bilgi merkezini geliştirmek ve sürdürmek. ## Değerler {#values} -Ethereum.org topluluğu şunlar için çabalar: +ethereum.org topluluğu şunlar olmaya çalışır: -- eğitici, Ethereum'un herkes için anlaşılabilir olmasına yardım etmeyi amaçlıyor -- kapsayıcı -- erişilebilir -- topluluk odaklı -- ethereum'un temelindeki teknolojiye ve kullanım durumuna odaklanır -- ethereum konseptlerine ve tasarım ilkelerine odaklanır +- Eğitici ve herkesin Ethereum'u anlamasına yardımcı olmayı hedefleyen +- Kapsayıcı +- Erişilebilir +- Topluluk odaklı +- Ethereum'un temel teknolojisine ve kullanım alanlarına odaklı +- Ethereum kavramlarına ve tasarım ilkelerine odaklı -## Biz ne değiliz {#what-we-are-not} +## Ne değiliz {#what-we-are-not} - Ethereum Foundation web sitesi -- Herhangi bir yatırımı veya vurguncuyu teşvik eden bir platform -- Bireysel proje veya organizasyonları desteklemek ve daha yükseğe çıkarmak için bir platform -- Bir merkeziyetsiz borsa, merkezi borsa ya da herhangi bir finansal platform -- Her türlü finansal ya da hukuki tavsiyeler veren bir platform +- Herhangi bir türde yatırımı veya vurgunculuğu teşvik eden bir platform +- Bireysel projeleri veya kuruluşları öne çıkaran ya da destekleyen bir platform +- Bir DEX, CEX veya başka herhangi bir finansal platform +- Herhangi bir türde finansal ya da hukuki tavsiye veren bir platform -## Davranış kuralları {#code-of-conduct} +## Davranış Kuralları {#code-of-conduct} ### Taahhüt {#pledge} -Açık katılım, ethereum.org etiğinin temelidir. Binlerce katkıda bulunan sayesinde yürütülen bir web sitesi ve topluluğuz ve bunu mümkün kılan tek şey misafirperver ve katılıma dayalı bir ortamı sürdürmektir. Bu amaçla katkı sağlayanlar, tüm katılımcılar için ve tüm ethereum.org platformları ve topluluk alanları için tacizden uzak bir ortam sağlamayı tahhüt eder. Ethereum.org topluluğu, yapıcı ve arkadaşça bir şekilde katılmak isteyen herkesi yaşı, engellilik durumu, etnik kökeni, cinsiyet özellikleri, cinsiyet kimliği, deneyim seviyesi, uzmanlık alanı, eğitim düzeyi, sosyo-ekonomik durumu, milliyeti, dış görünüşü, ırkı, dini inancı veya çeşitliliğin herhangi bir boyutundan bağımsız olarak sıcak bir şekilde karşılar ve değerli bulur. +Açık katılım, ethereum.org anlayışının merkezindedir. Binlerce katkıda bulunanın desteğiyle sürdürülen bir web sitesi ve topluluğuz ve bu ancak sıcak ve katılımcı bir ortamı sürdürürsek mümkündür. Bu amaçla, bu siteye katkıda bulunanlar, tüm ethereum.org platformları ve topluluk alanlarında tüm katılımcılar için tacizden uzak bir ortam sağlamayı taahhüt eder. Ethereum.org topluluğu, yapıcı ve arkadaşça bir şekilde katılmak isteyen herkesi yaşı, engellilik durumu, etnik kökeni, cinsiyet özellikleri, cinsiyet kimliği, deneyim seviyesi, uzmanlık alanı, eğitim düzeyi, sosyo-ekonomik durumu, milliyeti, dış görünüşü, ırkı, dini veya çeşitliliğin herhangi bir diğer boyutundan bağımsız olarak memnuniyetle karşılar ve değer verir. ### Kapsam {#scope} -Bu davranış kuralları, tüm ethereum.org alanlarında geçerlidir (GitHub, Discord, Figma Crowdin, Twitter ve diğer online platformlar gibi) ve bunun yanında ethereum.org'un temsil edildiği buluşmalar, konferanslar ve etkinlikler gibi gerçek dünyada, kamuya açık alanlarda da geçerlidir. +Bu Davranış Kuralları, tüm ethereum.org alanları (GitHub, Discord, Figma, Crowdin, X (eski adıyla Twitter) ve diğer çevrimiçi platformlar gibi) için geçerlidir. Ayrıca topluluğun buluşmalar, konferanslar ve etkinlikler gibi gerçek hayattaki halka açık alanlarda temsil edildiği durumlarda da geçerlidir. ### Standartlarımız {#our-standards} -Pozitif bir atmosfer oluşturmak adına örnek davranışlar: +Olumlu bir ortam yaratmaya katkıda bulunan davranışlara örnek olarak şunlar verilebilir: -- Konuksever ve kucaklayıcı bir dil kullanmak -- Farklı görüş ve deneyimler karşısında saygılı olmak -- Yapıcı eleştiriyi zarif bir şekilde kabul etmek ve/veya empati kurmak -- Çatışmaları veya anlaşmazlıkları sakin ve profesyonel şekilde çözmek -- Topluluğun diğer üyelerine hoşgörülü olmak ve empati yapmak -- Topluluktaki yeni sesleri teşvik etmek ve onları daha yükseğe taşımak +- Sıcak ve kapsayıcı bir dil kullanmak +- Farklı bakış açılarına ve deneyimlere saygılı olmak +- Yapıcı eleştiriyi olgunlukla kabul etmek ve/veya empati kurarak yöneltmek +- Çatışmaları veya anlaşmazlıkları çözerken sakin ve profesyonel davranmak +- Diğer topluluk üyelerine karşı empati ve hoşgörü göstermek +- Topluluktaki yeni sesleri teşvik etmek ve duyurmak -Katılımcılar tarafından gerçekleştirilen kabul edilemez davranışlar: +Katılımcıların kabul edilemez davranışlarına örnek olarak şunlar verilebilir: -- Fiziksel şiddet, fiziksel şiddet ile tehdit etmek ya da her türlü fiziksel şiddete yatkınlık -- Taciz dili veya görselleri kullanmak ya da istenmeyen/tek taraflı fiziksel ilgide bulunmak +- Fiziksel şiddet, fiziksel şiddetle tehdit etmek veya her türlü fiziksel şiddeti teşvik etmek +- Cinsel içerikli dil veya görseller kullanmak veya istenmeyen cinsel ilgi göstermek - Başka bir bireyin kimliğine bürünmek veya bir kişi ya da kuruluşla dürüst olmayan bir şekilde bağlantı iddia etmek -- Dalga geçen, küçümseyen, hakaret içeren yorumlar ve kişisel ya da politik saldırılar -- Diğer topluluk üyelerini genel veya özel kanallarda taciz etmek -- Açık bir izin söz konusu olmadan diğer insanların kişisel bilgilerini paylaşmak, örneğin elektronik adres ve somut adres -- Sosyal mühendislik, diğer topluluk üyelerini dolandırma ve diğer yollardan manipüle etme -- Kişisel maddi veya maddi olmayan kazançlar için yatırımları, token'ları, projeleri ya da benzeri herhangi bir şeyin tanıtımını yapmak -- Konu dışı içeriklerle sunucuları spamlamak -- Topluluk moderatörlerinin uyarılarını ve isteklerini dikkate almamak -- Profesyonel alanda uygunsuz olarak değerlendirilenilecek olan davranışlarda bulunmak +- Trollemek, hakaret içeren/aşağılayıcı yorumlar ve kişisel veya siyasi saldırılar +- Diğer topluluk üyelerini halka açık veya özel kanallarda taciz etmek +- Açık izin olmaksızın, başkalarının fiziksel veya elektronik adres gibi özel bilgilerini yayınlamak +- Sosyal mühendislik, dolandırıcılık veya diğer topluluk üyelerini farklı şekillerde manipüle etmek +- Kişisel maddi veya maddi olmayan kazanç için yatırımların, jetonların, projelerin veya başka herhangi bir şeyin tanıtımını yapmak +- Konu dışı içeriklerle sunucuları spam'lemek +- Topluluk moderatörlerinden gelen istekleri veya uyarıları dikkate almamak +- Profesyonel bir ortamda makul olarak uygunsuz kabul edilebilecek diğer davranışlarda bulunmak -### Raporlama {#reporting} +### Bildirme {#reporting} -Davranış kurallarının ihlalleri, her şey açık yapılmaya çalışıldığı için, halka açık kanallarda, topluluk üyelerinin kendilerini denetlemelerine olanak sağlayacak biçimdedir. +Topluluk üyelerinin kendi kendilerini denetlemesine olanak tanımak amacıyla her şeyi açık ve halka açık kanallarda yapmaya çalıştığımız için, davranış kuralları ihlalleri normalde topluluk tarafından görülebilir olacaktır. -Ancak, eğer dikkat çekmesi gereken bir konu olduğunu hissederseniz, moderasyon rolü olan biriyle sesinizi duyurabilirsiniz (ör. discord rehberi) böylece uygun cevaba ulaşma ve süreci yürütme için size yardımcı olabilirler. +Ancak dikkat edilmesi gerektiğini düşündüğünüz bir şey olursa, bunu moderasyon rolü olan birine (ör. discord rehberi) iletebilirsiniz, böylece onlar da durumu araştırmaya ve uygun karşılığı vermeye yardımcı olabilirler. -Raporlama sırasında, lütfen olabildiğinde fazla detaya yer verin, spesifik örnekler ve zaman damgası dahil. Bu, adil bir sonuç almak için yardımcı olacak. +Bildirimde bulunurken, lütfen belirli örnekler ve zaman damgaları da dâhil olmak üzere mümkün olduğunca fazla ayrıntı ekleyin. Bu, adil bir sonuç alınmasını sağlamaya yardımcı olacaktır. -### Uygulama {#enforcement} +### Yaptırım {#enforcement} -Cezanın büyüklüğüne bağlı olarak, davranış kurallarını ihlal eden bireylere, ethereum.org tarafından uyarılar, geçici yasaklar ya da kalıcı yasaklar verilebilir. +İhlalin ciddiyetine bağlı olarak, davranış kurallarını ihlal eden kişiler, ethereum.org topluluklarından uyarı, geçici yasak veya kalıcı yasak alabilirler. diff --git a/public/content/translations/tr/community/events/organizing/index.md b/public/content/translations/tr/community/events/organizing/index.md new file mode 100644 index 00000000000..1099fafbb3c --- /dev/null +++ b/public/content/translations/tr/community/events/organizing/index.md @@ -0,0 +1,221 @@ +--- +title: "Ethereum Etkinliği Düzenleme" +description: "Ethereum etkinliği nasıl düzenlenir" +lang: tr +hideEditButton: true +--- + +# Ethereum etkinliği nasıl düzenlenir {#how-to-organize-an-ethereum-event} + +Güçlü ve canlı bir topluluk oluşturmak, Ethereum ekosistemini büyütmenin merkezinde yer alıyor. İster buluşmalar, ister atölyeler ya da tam kapsamlı bir konferans düzenlemeyi planlıyor olun, etkinliğinizin başarısı yerel ağınızdaki bağlantılara ve etkileşime bağlıdır. Bu rehber, aktif bir Ethereum topluluğunun temelini atmanıza yardımcı olacak ve unutulmaz ve etkileyici bir konferans düzenleme sürecinde sizi adım adım yönlendirecektir. + +## Kendinize sorun: Bir Ethereum topluluğu var mı? {#ask-yourself-is-there-an-ethereum-community} + +Başarılı bir Ethereum konferansı, aktif ve katılımcı bir topluluk üzerine inşa edilir. Eğer halihazırda bir topluluğunuz varsa, zaten bir adım öndesiniz demektir — ancak yoksa, atmanız gereken ilk adım bu temeli inşa etmektir. Bir ortam ve bir topluluk arasındaki ayrımı yapmak önemlidir: bir ortam, belirli bir alanda bulunan şirketleri ve bireyleri içerebilir, ancak bunlar genellikle yalnızca ara sıra ortak girişimlerle bağımsız olarak faaliyet gösterirler — tıpkı birçok yerdeki geleneksel web2 ekosistemi gibi. Öte yandan bir topluluk, birbirine bağlı insanlardan ve kuruluşlardan oluşan, birbirleriyle işbirliği yapan ve birbirlerini destekleyen bir ağdır; bu durum genellikle web3 ekosistemlerinde görülür. + +**İlk adımlarınız şunlar olmalı:** + +- Yerel startupları ve şirketleri keşfedin — şehrinizde veya ülkenizde güçlü, aktif şirketlerin olması, bir topluluk oluşturmanın genellikle en kritik ön koşuludur. +- Halihazırda buluşmalar olup olmadığını kontrol edin — ethereum.org [etkinlikler sayfası](https://ethereum.org/community/events/) +- [Ethereum.org web sitesi](https://ethereum.org/community/events/) ve ethereum.org Discord — yerel Ethereum etkinliklerini, geliştiricileri ve katkıda bulunanları kontrol etmek için. +- Luma ve Meetup.com — Bölgenizde Ethereum ile ilgili etkinlikler veya daha geniş kapsamlı web3 etkinlikleri olup olmadığını görmek için. +- X — Bu alanda yerel savunucular veya etkili kişiler bulmaya çalışın. + +Bu unsurların çoğunu bulursanız, bu bir topluluk oluşturmak için gerekli koşulların mevcut olduğuna dair güçlü bir işarettir — ancak bu, bir topluluğun halihazırda mevcut olduğu anlamına gelmez. Bir sonraki adım, bu aktörleri organize etme, katılımlarını sağlama ve besleme, işbirliği ve uzun vadeli büyüme için fırsatlar yaratma gibi kritik bir iştir. + +### Yoksa, nasıl inşa edilir {#if-not-how-to-build-it} + +Bu unsurların çoğunun eksik olduğunu fark ederseniz endişelenmeyin — sıfırdan bir topluluk oluşturmak zorlu ama oldukça ödüllendirici bir süreçtir. Güçlü bir Ethereum topluluğu bir gecede ortaya çıkmaz; sabır, tutarlılık ve net bir vizyon gerektirir. İşte nasıl başlayabileceğiniz: + +- **Bir iletişim kanalı kurun** — Bu, Telegram, Signal, WhatsApp, WeChat veya bir Discord sunucusu olabilir; bulunduğunuz yerde daha popüler olanı kullanın; böylece insanlar bağlantı kurabilir, sorular sorabilir ve kaynaklar paylaşabilir. +- **Erken benimseyenlerinizi bulun.** Ethereum ve Web3 konusunda tutkulu birkaç kişi belirleyin. Onlar sizin en önemli destekçileriniz ve işbirlikçileriniz olacaklar. +- **Küçük, düzenli etkinlikler düzenleyin.** Resmi olmayan buluşmalar, çalışma grupları veya atölyelerle başlayın. Tutarlılık çok önemlidir — grup başlangıçta küçük olsa bile, düzenli etkinlikler güven ve ivme oluşturur. +- **Size ücretsiz mekan sağlamaları için yerel şirketlere**, eğitim kurumlarına veya ortak çalışma alanlarına ulaşmayı deneyin. Eğer ülkenizden konuşmacı bulamazsanız, çevrimiçi konuşmacıları davet edin ancak insanları fiziksel olarak bir araya getirin. Hedef kitlenizin fiziksel olarak tek bir yerde bulunmasını sağlamak çok önemlidir. +- **Mevcut teknoloji topluluklarıyla iş birliği yapın.** Halihazırda kurulmuş geliştirici grupları, startup ekosistemleri veya blokzincir buluşmaları varsa, Ethereum konularını tanıtmak ve erişiminizi genişletmek için onlarla ortaklık kurun. +- **Eğitici içerikler paylaşın** Ethereum'un potansiyeli hakkında. +- **Küresel topluluklarla iletişime geçin.** Destek, mentorluk ve potansiyel iş birliği için dünya çapındaki köklü Ethereum grupları ve projeleriyle bağlantı kurun. Dünya genelindeki Ethereum topluluklarının en azından bir ortak noktası vardır: Hepsi yardım etmeye heveslidir. +- **Finansman sağlamaya çalışın** — ister yerel web3 şirketlerinden, isterse [ESP](https://esp.ethereum.foundation/) gibi bir hibe programı aracılığıyla olsun. + +### Varsa, nasıl sürdürebiliriz ve büyütebiliriz? {#if-yes-how-to-maintain-and-grow-it} + +Kurulu bir topluluğunuz olduğunda iş bitmiyor — aslında daha yeni başlıyor. Bir topluluğu aktif, katılımcı ve büyür halde tutmak sürekli çaba ve yaratıcılık gerektirir. Topluluğun katılımını sağlamanın en önemli unsurlarından biri, sürekli olarak yeni formatlar ve fikirler denemektir. + +Canlı bir Ethereum topluluğunu sürdürmek için bazı stratejiler şunlardır: + +- **Etkinlik formatlarınızı çeşitlendirin:** Sadece tek bir toplanma türüne bağlı kalmayın. Meetuplar, kısa hackathonlar, panel oturumları ve networking etkinlikleriyle çeşitlendirin. Ortak çalışma günleri veya eğitim kursları düzenlemeyi deneyebilirsiniz. +- **Konuları çeşitlendirin:** Ethereum yalnızca bir teknoloji değil; aynı zamanda hukuk, pazarlama ve iş dünyasını da içeren bir değerler bütünüdür. +- **Topluluğunuzdan** geri bildirim ve fikir isteyin. +- **Farklı hedef kitle** segmentleriyle etkileşim kurun. İçeriği ve etkinlikleri farklı deneyim seviyelerine göre uyarlayın — Ethereum'u ilk kez keşfeden yeni başlayanlardan deneyimli geliştiricilere ve girişimcilere kadar. + +Öğrenme, iş birliği ve büyüme için çeşitli fırsatlar sunarak topluluğunuzun aktif kalmasını ve konferans düzenlemek gibi daha büyük girişimlere hazır olmasını sağlarsınız. + +## Etkinlik {#event} + +### Bir etkinlik düzenlemek için doğru zaman ne zamandır? {#when-is-the-right-time-to-organize-an-event} + +Başarılı bir Ethereum konferansı veya topluluk etkinliği düzenlemek dikkatli zamanlama ve değerlendirme gerektirir. Doğru an, etkinliğin genel başarısına katkıda bulunan çeşitli faktörlere bağlıdır. + +Topluluğun olgunluğunu, piyasa koşullarını, bir ekibinizin olup olmadığını ve yerel bir ortamın (örneğin potansiyel sponsorlar) olup olmadığını göz önünde bulundurmalısınız. + +### KYC — Topluluğunuzu tanıyın {#kyc-know-your-community} + +Bir etkinlik düzenlemenin en önemli adımlarından biri topluluğunuzu anlamaktır. Tıpkı finansal hizmetlerdeki Müşterini Tanı (KYC) gibi, Topluluğunu Tanı (KYC) de yerel kitlenizin özel ihtiyaçlarını, tercihlerini ve özelliklerini anlamak için zaman ayırmak anlamına gelir. Bu anlayış, başarısını ve ilgisini sağlamak için konferansı özel olarak düzenlemenize yardımcı olacaktır. + +Hemen büyük ölçekli bir etkinlik hedeflemek cazip gelse de genellikle en iyi yaklaşım küçük başlamaktır. Topluluğunuzun durumuna ve ülkenizin popüler bir turistik yer olup olmadığı veya konaklama maliyeti gibi size alakasız görünebilecek diğer bazı hususlara objektif olarak bakarsanız, sizin için en iyi çözümün ne olduğunu anlarsınız. + +İlk yıl, hedef kitlenizin en büyük bölümü yerel bir topluluk olacaktır, bu nedenle daha büyük bir etkinlik düzenlediğiniz ilk yıl yaptığınız her şey o topluluğun ihtiyaçlarına ve büyüklüğüne hitap etmelidir. + +### Nereden başlamalı {#where-to-start} + +Bir konferans düzenlemek söz konusu olduğunda, ilk adımlar göz korkutucu gelebilir. Ancak net bir plan ve yapıyla süreci yönetilebilir görevlere ayırabilirsiniz. Her birini ayrı ayrı ele alacağız. + +Yapılandırılmış bir yaklaşımla başlamak, etkinliğinizi düzenlemenin çeşitli aşamalarında ilerlerken düzenli kalmanıza ve stresi azaltmanıza yardımcı olacaktır. Aldığınız her karar, sizi topluluğunuzun ihtiyaçlarını karşılayan bir deneyim sunmaya daha da yaklaştırmalıdır. + +**Yapılacak ilk şey, net rolleri ve sorumlulukları olan bir organizasyon ekibi oluşturmaktır.** + +Bir program oluşturmaya veya sponsorlara ulaşmaya başlamadan önceki bir diğer önemli adım da bir tarih seçmektir. Bu kolay bir adım gibi görünse de önceden göz önünde bulundurmanız gereken birkaç önemli faktör vardır. Bunlardan bazıları şunlardır: + +- **Büyük konferanslar** veya etkinliklerle çakışan tarihlerden kaçının +- **Yerel koşulları ve durumları göz önünde bulundurun** (yılın mevsimi, büyük tatiller vb. gibi) +- **Piyasa koşullarını dikkate alın** +- **Her şeyi organize etmek için kendinize yeterli zaman tanıyın** — en az dokuz ay + +### Nasıl bir ekip kurulur {#how-to-assemble-a-team} + +Vizyonunuzu paylaşan ve becerilerinizi tamamlayan kişileri seçin. Bazı ekipler kolektif olarak çalışırken, diğerlerinin tanımlanmış rolleri vardır — sizin için en iyi olanı bulun. Düzenli iletişim ve net beklentiler esastır. Etkinlik planlaması için iletişim platformlarına güvenmek cazip gelse de yapılması gerekenleri organize etmek ve takip etmek için bir görev yönetimi platformu (Notion, Basecamp, Trello, Asana ve hatta bildiğimiz Google E-Tablolar gibi) seçmenizi öneririz. İyi işleyen ve iyi organize olmuş bir ekibe sahip olmak çok önemlidir. + +Farklı Ethereum organizatör ekiplerinin ekiplerinde farklı rolleri vardır, ancak hepsinin ortak noktası lojistik, bütçeleme, pazarlama, program, tasarım ve ortaklıklar üzerinde çalışan insanlara sahip olmalarıdır. + +### Program: Başarılı bir etkinliğin kilit unsuru {#the-program-a-key-element-of-a-successful-event} + +Gerçekten değerli ve unutulmaz bir konferans düzenlemek söz konusu olduğunda, **program her şeydir**. Bu, taviz vermeyi göze alabileceğiniz bir alan değildir. Sponsorlar etkinliğin finansmanı için önemli ve genellikle kritik olsa da, izleyicilerin deneyimi ve aldıkları değer her zaman öncelikli olmalıdır. Tanıtım içeriği ve sonsuz sponsor sunumlarıyla dolu bir program, katılımcılarınızı yabancılaştıracak ve etkinliğinizin güvenilirliğini zedeleyecektir. + +Her oturum, panel ve atölye çalışması topluluğu bilgilendirmeli, onlara ilham vermeli ve katılımlarını sağlamalıdır. Kitlenizi dinleyin—onların ilgi alanlarını, ihtiyaçlarını ve zorluklarını anlayın. Hangi konular onlarda yankı uyandırıyor? Aynı zamanda, programı dinamik tutmak için yeni bakış açıları ve yenilikçi formatlar sunun. Bildiğiniz ve trend olan konuları en yeni fikirlerle dengeleyerek, Ethereum ekosisteminin farklı yönlerini kapsayan çok yönlü bir gündem sağlayın—teknik derinlemesine incelemeler ve topluluk oluşturma oturumlarından politika tartışmalarına ve uygulamalı atölye çalışmalarına kadar. Ek olarak, konferansın dilini de göz önünde bulundurun—çoğu Ethereum etkinliğinde varsayılan dil İngilizce olsa da yerel dilde oturumlar sunmak etkinliği bölgesel geliştiriciler ve meraklılar için daha erişilebilir hale getirebilir. + +**Konuşmacıları seçerken, yüksek kaliteli başvuruları çekmek ve gündem düzenlemesi için yeterli zaman tanımak amacıyla çağrıyı konferanstan en az altı ay önce açın.** Konuşmacı seçiminden sorumlu kişinin sektörde önemli bir deneyime ve ekosistem hakkında derin bir anlayışa sahip olması gerekir. Bu, onların değerli, anlayışlı katkıları belirleyebilmelerini ve yüksek bir içerik standardını koruyabilmelerini sağlar. + +### Finansal destek nerede bulunur {#where-to-find-financial-support} + +Yüksek kaliteli bir konferans düzenlemek önemli maliyetleri de beraberinde getirir — mekan kiralama, tanıtım materyalleri, yiyecek ve içecekler, prodüksiyon ve sayısız diğer masraflar. Etkinliğinizin profesyonel standartları karşıladığından ve katılımcılarınız için harika bir deneyim sunduğundan emin olmak için finansal desteği erken sağlamak esastır. + +#### Sponsorluk sunumu nasıl oluşturulur? {#how-to-create-a-sponsorship-deck} + +Öncelikle bir sunuma ihtiyacınız olacak. **Diğer konferans organizatörlerinden tavsiye isteyin**, hatta kendi paketlerinizi oluşturabilmeniz için sunumlarını paylaşmalarını isteyin. Paketleri fiyatlandırırken gerçekçi olmalı ve özellikle başlangıçta para kazanmayı değil, maliyetleri karşılamayı hedeflemelisiniz. + +**Her sponsorluk sunumu, etkinliğe ilişkin net ve ilgi çekici bir genel bakış sunmalı**, potansiyel sponsorların etkinliğin kapsamını, odağını ve değerini anlamasını sağlamalıdır. Güvenilirlik oluşturmak için temel bilgilerle başlayın—mekan, tarih ve organizasyon ekibi hakkındaki ayrıntılar. Ardından, farklı Ethereum konferansları farklı kitlelere hitap ettiği için etkinliğin ana odağını vurgulayın. Bazıları, derinlemesine teknik tartışmalar içeren, yoğun bir şekilde geliştirici odaklıyken, diğerleri daha çok DeFi, DAO'lar veya politika konularına odaklanabilir. + +Etkinliği sadece tanımlamanın ötesinde, net beklentiler belirleyin. **Tahmini katılımcı sayısını ve halihazırda onaylanmış kilit konuşmacıları belirtin**, çünkü bu, sponsorların potansiyel erişimlerini ölçmelerine yardımcı olur. En önemlisi, sponsorlukları karşılığında ne alacaklarını açıkça tanımlayın—stand alanı, konuşma fırsatları, sosyal medya tanıtımı, marka görünürlüğü veya özel ağ oluşturma erişimi. İyi yapılandırılmış bir sunum, potansiyel sponsorları sadece bilgilendirmekle kalmaz, aynı zamanda etkinliğinizin bir parçası olma fırsatı konusunda da heyecanlandırır. + +#### Etkinliğinizi kimler destekleyebilir? {#who-might-support-your-event} + +Şehrinizdeki veya ülkenizdeki Ethereum ve daha geniş teknoloji ekosistemindeki şirketlere ulaşarak başlayın. Bu **kuruluşların genellikle topluluk büyümesini ve yeniliği teşvik eden yerel etkinlikleri desteklemekte çıkarları vardır**. Ayrıca yerel ekosisteme yatırım yapmanın değerini anlama ve konferansınızı yetenekler, ortaklar ve kullanıcılarla bağlantı kurma fırsatı olarak görme olasılıkları daha yüksektir. + +Yerel desteği sağladıktan sonra, web3 alanındaki küresel oyunculara ulaşmaya başlayın. **Yerleşik protokoller, DAO'lar ve ekosistem fonları genellikle topluluk odaklı etkinlikler için bütçe ayırır**. Bu, ilk kez organizatörlük yapanlar için biraz zorlayıcı olabilir, çünkü henüz sergileyecekleri bir geçmişleri yoktur, ancak etkinliğinizi desteklemenin faydalarını—marka görünürlüğü, konuşma fırsatları ve hedeflenen bir kitleyle anlamlı etkileşim—açıkça belirten ilgi çekici bir sponsorluk paketi hazırlamaya çalışın. Başkalarının sahip olamayacağı benzersiz değerinizi bulmaya çalışın. + +#### Etkinliğinizi finanse etmenin alternatif yolları {#alternative-forms-of-funding-your-event} + +Hibeler, birçok organizatörün gözden kaçırdığı bir başka potansiyel finansman kaynağıdır. Ethereum Foundation'ın [Ekosistem Destek Programı](https://esp.ethereum.foundation/) (ESP) ve [diğer hibe girişimleri](https://ethereum.org/community/grants/#ethereum-grants) gibi programlar, topluluk odaklı etkinlikleri desteklemek için mevcuttur. + +Finansal sponsorlukların ötesinde, özellikle yiyecek ve içecekler için ayni ortaklıkları göz önünde bulundurun. Yerel kültürle veya teknoloji topluluğuyla uyumlu markalar, etkinliğiniz için harika ortaklar olabilir. Kahve markaları, içecek şirketleri ve hatta yerel pizzacılar, etkinlikte görünürlük karşılığında ürün sağlamaya istekli olabilir. Bu işbirlikleri, katılımcı deneyimini geliştirirken maliyetleri düşürmeye yardımcı olabilir. + +Finanstan bahsettiğimize göre şunu unutmayın: olağanüstü bir katılımcı deneyimi yaratmak için yatırdığınız her dolar katlanarak geri dönecektir. Yüksek kaliteli prodüksiyon, konforlu mekanlar, düşünceli promosyon ürünleri ve iyi organize edilmiş yan etkinlikler, katılımcıların konferans bittikten uzun süre sonra bile konuşacağı unutulmaz bir deneyime katkıda bulunur. Mutlu katılımcılar en büyük savunucularınız olur ve etkinliğinizin uzun vadeli başarısını sağlar. + +### Lojistik {#logistics} + +Finansman sağlamanın yanı sıra ana odağınız lojistik olmalıdır. İyi organize edilmiş bir konferans, mekan kurulumundan katılımcı deneyimine kadar birçok alanda titiz bir planlama gerektirir. Etkinlik organizasyonunda — illa ki web3 etkinlikleri değil, genel olarak etkinlikler — sağlam deneyime sahip birinin olması büyük bir fark yaratabilir. Deneyimli bir lojistik lideri potansiyel sorunları öngörebilir ve bunlar soruna dönüşmeden çözebilir, böylece zaman, para ve stresten tasarruf sağlar. + +Lojistikten sorumlu bir kişi, bir mekan, prodüksiyon şirketi ve yiyecek, içecek ve promosyon ürünleri için farklı satıcıların yanı sıra katılımcıların kripto ile de kayıt olup ödeme yapmalarına olanak tanıyan, kullanımı kolay çevrimiçi bir biletleme sistemi seçmelidir. + +### Konum altyapısı {#location-infrastructure} + +Konferansınız için bir yer seçerken, mekanın kendisinin ötesine geçip daha geniş şehir ve ülke altyapısını göz önünde bulundurmak önemlidir. Hava durumu, ulaşım, güvenlik ve siyasi ortam gibi faktörler, katılımcı deneyimini şekillendirmede büyük bir rol oynar. + +Daha az bilinen yerler için bu durum özellikle önemli hale gelir. Dünyanın dört bir yanından gelen katılımcılar ve sponsorlar, kolayca ve güvenli bir şekilde seyahat edebileceklerinden emin olmalıdır. Havaalanı bağlantısı, toplu taşıma ve konaklama seçenekleri gibi hususları araştırın. Vize politikası gibi uluslararası katılımcıları caydırabilecek herhangi bir karmaşıklıktan kaçınmak için bölgenin kültürel ve politik iklimini de göz önünde bulundurmak akıllıca olacaktır. + +### Etkinlik nasıl tanıtılır {#how-to-promote-the-event} + +Etkinliğinizi etkili bir şekilde tanıtmak, doğru kitleyi çekmenin ve heyecan yaratmanın anahtarıdır. İyi düşünülmüş bir tanıtım stratejisi, konferansınızın hak ettiği görünürlüğü ve etkileşimi almasını sağlar. Tasarım da markanızda önemli bir rol oynar, bu yüzden kesinlikle bunun için de bütçe ayırmalısınız. + +#### Sosyal medya {#social-media} + +X.com, sosyal medya tanıtımınızın bel kemiği olacaktır. Orada aktif ve tutarlı bir şekilde paylaşım yapmaya çalışın, aynı zamanda hem kişisel hesabınızla hem de kuruluşunuzun hesabıyla farklı sohbetlere katılın. + +LinkedIn tanıtım için en bariz seçenek gibi görünmese de orada tamamen farklı bir kitleye, hatta bazı sponsorlara ulaşabilirsiniz. + +#### Diğer Ethereum topluluklarıyla ortaklıklar {#partnerships-with-other-ethereum-communities} + +Farklı Ethereum organizatörleriyle ortaklıklar, özellikle sıfırdan başlarken mevcut ağlardan yararlanarak erişiminizi artırmanıza yardımcı olabilir. Topluluk indirimleri sunun, diğer etkinliklerle çapraz tanıtım yapın ve ortakları yan etkinliklere veya atölyelere ev sahipliği yapmaya davet edin. + +#### Üniversitelere erişim {#university-outreach} + +Etkinliği tanıtmak için öğrenci kulüpleri veya profesörler aracılığıyla şehirdeki teknik ve ekonomi fakültelerine ulaşın. Üniversitelerle etkileşim kurmak, genç yetenekleri, araştırmacıları ve geleceğin endüstri profesyonellerini çekmeye yardımcı olabilir ve akademi ile Ethereum ekosistemi arasında daha güçlü bir bağ kurulmasını teşvik edebilir. Özellikle bir hackathon düzenliyorsanız bu harikadır, çünkü öğrenciler genellikle yeni fikirler, coşku ve güçlü bir teknik temel getirir. + +#### Medya {#media} + +Etkinlik haberleri için web3 odaklı medya kuruluşlarına ve bültenlere ulaşın. Web3 Medyası PR makaleleri için ödeme beklese de ücretli tanıtım için bir bütçeniz yoksa onlara ücretsiz biletler veya bazı yüksek profilli konuşmacılar ve sponsorlarla röportajlar teklif edebilirsiniz. Farklı formatlarda sosyal medyada veya bir web sitesinde tanıtıma hazır bir basın bülteni ve bazı görseller içeren bir PR paketi oluşturun. Ayrıca, kapsamı yerel gazetecilere veya hatta teknoloji haberleri yapabilecek içerik üreticilerine (iyi bir itibara sahip oldukları sürece) genişletin, zira bu, etkinliği daha geniş kitlelere sergilemek için çok önemli olabilir. Bu, kripto endüstrisi ile daha geniş kitleler arasındaki boşluğu kapatmaya yardımcı olur ve ana akım teknoloji ve iş dünyasından ilgi çeker. + +### Bir hackathon da düzenlemeli misiniz? {#should-you-organize-a-hackathon-as-well} + +Bir hackathon düzenlemek faydalı olabilir çünkü hackathon'lar geliştirici topluluğunun katılımını sağlamak ve yeniliği teşvik etmek için harika bir yol olabilir. Ayrıca işbirliği yapmak ve projeler oluşturmak için uygulamalı fırsatlar sunar, bu da ekosistem için somut sonuçlara yol açabilir. Hackathon'lar, genellikle konferanslara katılmayan ancak yeni fikirler oluşturma ve test etme zorluğuna hevesli olan geliştiricileri çeker. Konferansınız geliştiricilere, yeniliğe ve uygulamalı projelere yönelikse, bir hackathon'a ev sahipliği yapmak doğal bir seçimdir. + +Ancak, bir tane düzenlemeden önce, yeterli kaynağınız ve zamanınız olup olmadığını düşünün. **Bir hackathon, zaman, iş gücü ve finansal yatırım açısından önemli kaynaklar gerektirir**. Özellikle aynı zamanda bir konferans yönetiyorsanız, bununla ilgilenecek özel bir ekibiniz olduğundan emin olun. Ayrıca, topluluğunuzda ilgi olup olmadığını kontrol edin. Topluluğunuz daha çok geliştirici odaklıysa, o zaman muhtemelen onu düzenlemek mantıklıdır. + +Düzenlemenin birçok faydası olmasına rağmen, konferansın ölçeğine bağlı olarak, bir hackathon eklemenin bunaltıcı olabileceğini göz önünde bulundurun. Her ikisini de yönetmenin herhangi birinin kalitesini düşürüp düşürmeyeceğini değerlendirmelisiniz. Daha küçük, odaklanmış bir hackathon'u tercih edebilir veya etkinlikleri farklı aylara yayabilirsiniz. + +### (Neredeyse kaçınılmaz) Karşılaşacağınız zorluklar {#almost-inevitable-challenges-that-you-will-face} + +Özellikle Ethereum alanında bir konferans düzenlerken karşılaşılan en büyük zorluklardan biri yeterli finansmanı sağlamaktır. **Birçok etkinlik organizatörü, mekan maliyetlerini**, yiyecek-içecek ve diğer lojistik masrafları karşılamak için gereken sermayeyi toplamakta zorlanır. Sponsorluk genellikle çok önemlidir, ancak ilişkiler kurmak ve şirketleri etkinliğinize yatırım yapmaya ikna etmek zaman alabilir. Ayrıca, piyasadaki düşüşler sırasında sponsor bulma zorluğu artabilir, çünkü şirketler temel olmayan faaliyetlere yatırım yapmaya daha az istekli olabilir. + +Bütçeyi etkili bir şekilde yönetmek çok önemlidir. Son dakika mekan değişiklikleri ve ek etkinlik teknolojisi gereksinimleri gibi **öngörülemeyen masraflar** bütçenizi hızla aşabilir. + +Yeni etkinlikler için **yüksek kaliteli konuşmacılar bulmak özellikle zor olabilir**. Ethereum alanındaki yerleşik düşünce liderleri veya etkileyicilerin programları zaten dolu olabilir ve kanıtlanmış bir geçmişi olmayan yeni bir etkinliğe katılmaktan çekinebilirler. Etkinlikten çok önce ağ oluşturmaya ve potansiyel konuşmacılara ulaşmaya zaman ayırmaya hazır olun. + +Ayrıca, konuşmacılar söz konusu olduğunda, onlarla açık ve sürekli iletişim kurun — sunum göndermek için son tarihi belirleyin ve son dakika değişikliklerinden kaçının. + +Başarılı bir konferans, lojistik, pazarlama, sponsorluklar, teknik destek ve katılımcı yönetimini yürütebilecek özel bir ekip gerektirir. Teknoloji etkinlikleri düzenleme konusunda deneyimli kişiler bulmak, özellikle küçük bir bütçeyle veya çoğu durumda bütçesiz, gönüllülük esasına göre çalışıyorsanız zor olabilir. + +### Bunu yalnız yapmamalısınız. Gönüllülere ihtiyacınız var. {#you-shouldnt-do-it-alone-you-need-volunteers} + +Bir Ethereum etkinliği düzenlemek, lojistik, kayıtlar, konuşmacı koordinasyonu, katılımcı desteği ve çok daha fazlasını yönetmek için çeşitli ve özel bir ekip gerektirir. Ekip boyutları 3 ila 15 kişi arasında değiştiğinde, etkinliğin sorunsuz bir şekilde yürütülmesi için gönüllülerin gerekli olduğu açıkça ortaya çıkar. + +Gönüllüler genellikle birçok konferansın bel kemiğidir ve özellikle sınırlı bir bütçeyle çalışırken kritik destek sağlarlar. Kayıt masalarında görev almaktan etkinlik kurulumuna yardımcı olmaya kadar her şeyi halledebilir ve etkinliğin mümkün olduğunca sorunsuz geçmesini sağlayabilirler. + +Gönüllülere parasal bir karşılık sunmak zor olsa da, deneyimlerini değerli kılacak değerli bir şeyler sağlamak esastır. Onlara ağ kurma fırsatları, beceri geliştirme, bazı özel avantajlar, sertifikalar veya tavsiye mektupları sunmayı düşünün. + +### Etkinlik organizatörleri için uyumluluk esasları {#compliance-essentials-for-event-organizers} + +Bir etkinlik düzenlerken, akılda tutulması gereken birkaç temel yasal ve lojistik husus vardır: + +- **Sponsorluk sözleşmesi** – Sponsorlar için iyi tanımlanmış bir iptal politikası da dahil olmak üzere net bir sözleşmeniz olduğundan emin olun. +- **Davranış kuralları** – Belirli etkinlik türüne (konferans/hackathon, hacker evleri vb.) göre hazırlanmış bir Davranış Kuralları hazırlayın. +- **Gizlilik politikası** – Veri koruma yönetmeliklerine ve görüntüye uymak için web siteniz için bir gizlilik politikası taslağı hazırlayın +- **Yerel makamlara bildirim** – Etkinliğiniz kapalı bir toplantı olsa bile, yerel polis karakoluna bildirmeniz tavsiye edilir. +- **Biletleme sözleşmesi** – Şartları ve sorumlulukları netleştirmek için biletleme hizmeti sağlayıcınızla resmi bir sözleşme yapın. +- **Mevzuata uygunluk** – Konferansa ev sahipliği yaptığınız ülkenin kripto endüstrisi için belirli düzenlemeleri veya kısıtlamaları olup olmadığını önceden kontrol edin +- **Promosyon ürünleri için gümrük işlemleri** – Sponsor promosyon ürünleri ithal ediyorsanız, süreci verimli bir şekilde yürütmek için bir gümrük müşaviri tutmanız önerilir. +- **Fotoğraf ve medya politikası** – Fotoğraf ve medya kapsamına ilişkin yönergeleri açıkça tanımlayın ve katılımcıların rıza ve vazgeçme seçenekleri hakkında bilgilendirildiğinden emin olun. + +## Etkinlikten sonra: Sırada ne var? {#after-the-event-whats-next} + +Etkinlik sona erdikten sonra, katılımcılardan, konuşmacılardan ve sponsorlardan geri bildirim toplamak ve gelecekteki etkinliklere daha iyi hazırlanabilmek için bir iç rapor oluşturmak çok önemlidir. Bu, neyin iyi gittiğini ve nerede iyileştirmeler yapılabileceğini belirlemeye yardımcı olur. Gelecekteki tekrarlara rehberlik edecek değerli bilgiler toplamak için anketler veya bire bir görüşmeler kullanın. Bir sonraki konferansta önlenebilecekleri ve süreci daha sorunsuz hale getirebilecekleri için, hataları veya verimsizlik alanlarını gözden geçirmek için zaman ayırın. + +Anahtar olan, ivmeyi canlı tutmaktır. Topluluğunuzla etkileşime devam edin, geri bildirimlerine dayanarak kaydettiğiniz ilerlemeyle ilgili güncellemeleri paylaşın ve bir sonraki etkinlik için heyecan yaratın. Bu bağlantıyı sürdürerek, konferansın etkisinin etkinliğin kendisinin ötesine geçmesini sağlar, ilişkileri güçlendirir ve gelecekteki başarı için zemin hazırlarsınız. + +## Teşekkür {#acknowledgement} + +Bu makaleye görüşlerini paylaşarak katkıda bulunan herkese çok teşekkürler: ETHBratislava'dan Slavo Fabisik; ETH Kipu ve ETH Latam'dan Lola; ETH Belgrade'den Tanja Mladenovic, Ethereum Bogota'dan Juan David; ETHWarsaw'dan Monika Zając; NapulETH'ten Raffaele Orefice; ETH Riyadh'dan Xiao Wu(Ling); urbe.eth'den Marco; ETH Dublin'den Caolán Walsh; ETHCluj'dan Alex Males ve ETH Slovenia'dan Stanko Devic. + +## Kaynaklar {#resources} + +Podcast: A'dan Z'ye bir ETH etkinliği nasıl organize edilir ve tanıtılır: + +- [ETHWarsaw vaka çalışması, Out of Ordinary tarafından](https://www.youtube.com/watch?v=io2Dx1ouz8o) + +Twitter alanı: + +- [ETH Topluluğu AMA](https://x.com/NapulETH/status/1905732699094151623) + +Makaleler: + +- [ETHKL'yi İnşa Etmek, Danny H. tarafından](https://sekto.tech/ethkl24) +- [POKT Etkinlikler El Kitabı](https://docs.pokt.network/community/pokt-events-playbook) diff --git a/public/content/translations/tr/community/get-involved/index.md b/public/content/translations/tr/community/get-involved/index.md index 8e3859cf46c..bc0272bf2f7 100644 --- a/public/content/translations/tr/community/get-involved/index.md +++ b/public/content/translations/tr/community/get-involved/index.md @@ -1,67 +1,67 @@ --- -title: Nasıl dahil olabilirim? -description: Ethereum topluluğuna nasıl dahil olunur? +title: "Nasıl dahil olabilirim?" +description: "Ethereum topluluğuna nasıl dahil olunur?" lang: tr --- -# Nasıl dahil olabilirim? {#get-involved} +# Nasıl dahil olabilirim? Dahil olun {#get-involved} Ethereum topluluğu, birçok farklı geçmişe ve beceriye sahip insanları içerir. İster geliştirici, ister sanatçı veya muhasebeci olun, dahil olmanın çeşitli yolları vardır. İşte başlamanıza yardımcı olabilecek önerilerin bir listesi. -[İş ahlakı kuralları](/community/code-of-conduct)mızdan, Ethereum.org misyonu ve değerleri hakkında okumaya başlayın. +ethereum.org'un [davranış kurallarında](/community/code-of-conduct) yer alan misyonu ve değerleri hakkında okuyarak başlayın. ## Geliştiriciler ‍ {#developers} -- [ethereum.org/developers/](/developers/) adresinden Ethereum hakkında bilgi edinin ve Ethereum'u deneyin +- [ethereum.org/developers/](/developers/) adresinde Ethereum hakkında bilgi edinin ve deneyin - Yakınınızdaki bir [ETHGlobal](http://ethglobal.co/) hackathon'una katılın! -- Uzmanlık alanınızla veya seçtiğiniz programlama diliyle ilgili [projeleri inceleyin](/developers/docs/programming-languages/) -- [Mutabakat ve Yürütüm Katmanı çağrılarını](https://www.youtube.com/@EthereumProtocol/streams) izleyin ya da bunlara katılın -- [Ekosistem Destek Programının istek listesi](https://esp.ethereum.foundation/wishlist/) - Ethereum Ekosistem Destek Programının aktif olarak hibe başvuruları aradığı araçlar, belgeler ve altyapı alanları -- [Web3Bridge](https://www.web3bridge.com/) - Afrika genelinde yüzlerce geliştiriciyi ve topluluk üyesini belirleme, eğitme ve destekleme girişimlerinde hevesli web3 topluluğuna katılın -- [Eth R&D Discord'a](https://discord.com/invite/VmG7Uxc) katılın -- [Ethereum Cat Herders Discord](https://discord.com/invite/Nz6rtfJ8Cu) grubuna katılın +- [Uzmanlık alanınız veya tercih ettiğiniz programlama diliyle ilgili projeleri](/developers/docs/programming-languages/) inceleyin +- [Mutabakat ve Yürütme Katmanı çağrılarını](https://www.youtube.com/@EthereumProtocol/streams) izleyin veya bunlara katılın +- [Ekosistem Destek Programı'nın istek listesi](https://esp.ethereum.foundation/wishlist/) - Ethereum Ekosistem Destek Programı'nın aktif olarak hibe başvuruları aradığı araçlar, dokümantasyon ve altyapı alanları +- [Web3Bridge](https://www.web3bridgeafrica.com) - Afrika genelinde yüzlerce geliştiriciyi ve topluluk üyesini belirleme, eğitme ve destekleme girişimlerinde, hevesli web3 topluluğuna katılın +- [Eth R&D Discord](https://discord.com/invite/VmG7Uxc) sunucusuna katılın +- [Ethereum Cat Herders Discord](https://discord.com/invite/Nz6rtfJ8Cu) sunucusuna katılın -## Araştırmacılar ve Akademisyenler {#researchers-and-academics} +## Araştırmacılar ve Akademisyenler ‍ {#researchers-and-academics} Matematik, kriptografi ya da ekonomi alanlarında bir geçmişiniz var mı? Ethereum ekosisteminde yapılan en son işlerin bazıları ilginizi çekebilir: -- [Eth R&D Discord'a](https://discord.com/invite/VmG7Uxc) katılın +- [Eth R&D Discord](https://discord.com/invite/VmG7Uxc) sunucusuna katılın - Bir Ethereum Geliştirme Önerisini yazın veya revize edin - Bir EIP yazın - 1. Fikrinizi [Ethereum Magicians](https://ethereum-magicians.org)'a gönderin - 2. [EIP-1](https://eips.ethereum.org/EIPS/eip-1) sayfasını okuyun. **Evet, bu dökümanın _tamamı._** - 3. EIP-1'in yönergelerini takip edin. Taslağınızı hazırlarken, EIP-1 den referans alın. - - Nasıl bir [EIP Editörü](https://eips.ethereum.org/EIPS/eip-5069) olacağınızı öğrenin - - Siz de şu anda EIP'leri gözden geçirebilirsiniz! [Açılan PR taleplerini `e-inceleme`etikeyiyle görebilirsiniz](https://github.com/ethereum/EIPs/pulls?q=is%3Apr+is%3Aopen+label%3Ae-review). Teknik geri bildirimlerinizi `tartışmalar` bağlantısına bırakın. - - [EIP yönetişimine](https://github.com/ethereum-cat-herders/EIPIP) katılın - - [Ethereum Cat Herders Discord](https://discord.com/invite/Nz6rtfJ8Cu) grubuna katılın + 1. Fikrinizi [Ethereum Magicians](https://ethereum-magicians.org) üzerinde gönderin + 2. [EIP-1](https://eips.ethereum.org/EIPS/eip-1) belgesini okuyun - **Evet, belgenin _tamamı_ bu kadar.** + 3. EIP-1'deki yönergeleri izleyin. Taslağınızı hazırlarken, EIP-1 den referans alın. + - Nasıl [EIP Editörü](https://eips.ethereum.org/EIPS/eip-5069) olacağınızı öğrenin + - Siz de şu anda EIP'leri gözden geçirebilirsiniz! [`e-review` etiketli açık PR'ları](https://github.com/ethereum/EIPs/pulls?q=is%3Apr+is%3Aopen+label%3Ae-review) inceleyin. `discussion-to` bağlantısına teknik geri bildirimde bulunun. + - [EIP Yönetişimine](https://github.com/ethereum-cat-herders/EIPIP) katılın + - [Ethereum Cat Herders Discord](https://discord.com/invite/Nz6rtfJ8Cu) sunucusuna katılın - [EIP'ler hakkında daha fazla bilgi](/eips/) -- [Challenges.ethereum.org](https://challenges.ethereum.org/) - >100.000 ABD Doları kazanabileceğiniz, bir dizi yüksek değerli araştırma ödülü -- [Ethresear.ch](https://ethresear.ch) - Ethereum'un birincil araştırma forumu ve kriptoekonomi alanında dünyanın en etkili forumu -- [Ethereum Vakfı Araştırma Soru-Cevap Paneli (AMA)](https://old.reddit.com/r/ethereum/comments/vrx9xe/ama_we_are_ef_research_pt_8_07_july_2022) - Araştırmacılara istenilen soruların sorulduğu ve cevaplandırıldığı bir etkinlik. Etkinliğin her adımı açıldığında, herkes sorularını sorabilecektir. -- [Ekosistem Destek Programının istek listesi](https://esp.ethereum.foundation/wishlist/) - Ethereum Ekosistem Destek Programının aktif olarak hibe başvuruları aradığı araştırma alanları -- [AllWalletDevs](https://allwallet.dev) - Ethereum geliştiricilerinin, tasarımcılarının ve ilgili kullanıcıların düzenli olarak bir araya geldiği ve cüzdanlar hakkında tartıştığı bir forum +- [Challenges.ethereum.org](https://challenges.ethereum.org/) - 100.000$ USD'den fazla kazanabileceğiniz bir dizi yüksek değerli araştırma ödülü +- [Ethresear.ch](https://ethresear.ch) - Ethereum’un birincil araştırma forumu ve kriptoekonomi alanında dünyanın en etkili forumu +- [EF Araştırma AMA'sı](https://old.reddit.com/r/ethereum/comments/vrx9xe/ama_we_are_ef_research_pt_8_07_july_2022) - Araştırmacılarla devam eden bir Soru-Cevap serisi. Etkinliğin her adımı açıldığında, herkes sorularını sorabilecektir. +- [Ekosistem Destek Programı'nın istek listesi](https://esp.ethereum.foundation/wishlist/) - Ethereum Ekosistem Destek Programı'nın aktif olarak hibe başvuruları aradığı araştırma alanları +- [AllWalletDevs](https://allwallet.dev) - Ethereum geliştiricilerinin, tasarımcılarının ve ilgili kullanıcıların düzenli olarak bir araya gelip cüzdanları tartıştığı bir forum -[Daha fazla aktif araştırma alanı keşfedin](/community/research/). +[Daha aktif araştırma alanlarını keşfedin](/community/research/). -## Teknik olmayan beceri grupları {#non-technical} +## Teknik olmayan beceri setleri ‍ {#non-technical} Bir geliştirici değilseniz Ethereum'da nereden başlayacağınızı bilmek zor olabilir. Burada, belirli profesyonel geçmişlere yönelik kaynaklarla birlikte birkaç öneri bulunmaktadır. ### Şehrinizde bir buluşma düzenleyin {#meetups} -- Nereden başlayacağınıza emin değil misiniz? [BUIDL Network](https://consensys.net/developers/buidlnetwork/) yardımcı olabilir. +- Nereden başlayacağınıza emin değil misiniz? [BUIDL network](https://consensys.net/developers/buidlnetwork/) yardımcı olabilir. ### Ethereum hakkında içerik yazın {#write-content} - Ethereum'un değerini sade bir dille açıklayabilecek iyi yazarlara ihtiyacı var -- Kendi makalelerinizi yayınlamaya hazır değil misiniz? Halihazırda, topluluk kaynaklarında bulunan içeriklere katkı sağlayabilir veya [ethereum.org için yeni içerik önerebilirsiniz](/contributing/)! +- Kendi makalelerinizi yayınlamaya hazır değil misiniz? Topluluk kaynaklarındaki mevcut içeriğe katkıda bulunmayı düşünün veya [ethereum.org için yeni içerik önerin](/contributing/)! -### Topluluk çağrıları için not alma teklifi {#take-notes} +### Topluluk çağrıları için not almayı teklif edin {#take-notes} -- Birçok açık kaynaklı topluluk çağrısı bulunmaktadır ve not alıcılara sahip olmak çok yardımcı olur. Eğer ilgiliyseniz, [Ethereum Cat Herders discord sunucusuna](https://discord.com/invite/Nz6rtfJ8Cu) katılın ve kendinizi tanıtın! +- Birçok açık kaynaklı topluluk çağrısı bulunmaktadır ve not alıcılara sahip olmak çok yardımcı olur. Eğer ilgileniyorsanız, [Ethereum Cat Herders discord](https://discord.com/invite/Nz6rtfJ8Cu) sunucusuna katılın ve kendinizi tanıtın! -### Ethereum içeriklerini ana dilinize çevirin {#translate-ethereum} +### Ethereum içeriğini ana dilinize çevirin {#translate-ethereum} - ethereum.org, web sitesini ve diğer kaynakları birçok farklı dile çeviren bir çeviri programı yürütür - Nasıl dahil olabileceğinizi [buradan](/contributing/translation-program) öğrenin @@ -70,7 +70,7 @@ Bir geliştirici değilseniz Ethereum'da nereden başlayacağınızı bilmek zor Ethereum'u daha fazla merkeziyetsizleştirmeye yardım etmek için binlerce düğüm operatörüne katılın. -- [Bir düğüm çalıştırmak hakkında daha fazla bilgi](/developers/docs/nodes-and-clients/run-a-node/) +- [Bir düğümün nasıl çalıştırılacağı hakkında daha fazla bilgi](/developers/docs/nodes-and-clients/run-a-node/) ### ETH'nizi stake edin {#staking} @@ -85,49 +85,48 @@ Ethereum ekosistemi, kamu mallarını ve etkili projeleri finanse etme misyonuna - [Gitcoin](https://gitcoin.co/fund) - [clr.fund](https://clr.fund/#/about) -## Finans uzmanları ve Muhasebeciler {#financial-professionals} +## Finans uzmanları ve Muhasebeciler ‍ {#financial-professionals} -- Ethereum, alternatif bir finansal sistem sunan bir protokoller ve uygulamalar ağı olan “Merkeziyetsiz Finans” ekosistemine ev sahipliği yapmaktadır. Eğer finans alanında bir profesyonelseniz, [DeFi Llama](https://defillama.com/) veya [DeFiPrime](https://defiprime.com)'daki merkeziyetsiz uygulamalara göz atın -- Muhasebeci misiniz? Ethereum üzerindeki ETH, token'lar, DeFi vb. varlıklar, birçok yeni muhasebecilik sorununu beraberinde getirir. [Rotki](https://rotki.com/) gibi, kullanıcıların saymanlık ve muhasebecilik sorunlarını çözmeye yardımcı olmayı hedefleyen bazı projeleri inceleyerek başlayabilirsiniz +- Ethereum, alternatif bir finansal sistem sunan bir protokoller ve uygulamalar ağı olan “Merkeziyetsiz Finans” ekosistemine ev sahipliği yapmaktadır. Bir finans uzmanıysanız, [DeFi Llama](https://defillama.com/) veya [DeFiPrime](https://defiprime.com) üzerindeki bazı DeFi uygulamalarına göz atın +- Muhasebeci misiniz? Ethereum üzerindeki ETH, token'lar, DeFi vb. varlıklar, birçok yeni muhasebecilik sorununu beraberinde getirir. Kripto para kullanıcılarının defter tutma ve muhasebe zorluklarını çözmelerine yardımcı olmayı amaçlayan [Rotki](https://rotki.com/) gibi bazı projeleri inceleyerek başlayabilirsiniz -## Ürün Yöneticileri {#product-managers} +## Ürün Yöneticileri ‍ {#product-managers} -- Ethereum ekosisteminin yeteneklerinize ihtiyacı var! Birçok şirket, ürün yöneticisi rolleri için çalışan arıyor. Açık kaynak kodlu bir projeye katkıda bulunarak başlamak istiyorsanız [Ethereum Cat Herders](https://discord.com/invite/Nz6rtfJ8Cu) veya [RaidGuild](https://www.raidguild.org/) adresleriyle iletişime geçin +- Ethereum ekosisteminin yeteneklerinize ihtiyacı var! Birçok şirket, ürün yöneticisi rolleri için çalışan arıyor. Açık kaynaklı bir projeye katkıda bulunarak başlamak istiyorsanız [Ethereum Cat Herders](https://discord.com/invite/Nz6rtfJ8Cu) veya [RaidGuild](https://www.raidguild.org/) ile iletişime geçin -## Pazarlama {#marketing} +## Pazarlama ‍ {#marketing} - Ethereum ekosisteminde pazarlama ve iletişim alanında birçok pozisyon bulunuyor! -## Ethereum işleri {#ethereum-jobs} +## Ethereum iş ilanları {#ethereum-jobs} **Ethereum'da çalışacağınız bir iş bulmak ister misiniz?** -- [ethereum.org işleri](/about/#open-jobs) -- [Ethereum Vakfı iş ilanları (Lever)](https://jobs.lever.co/ethereumfoundation) -- [Ethereum Vakfı iş ilanları (BambooHR)](https://ethereum.bamboohr.com/jobs/) +- [ethereum.org iş ilanları](/about/#open-jobs) +- [Ethereum Foundation iş ilanı panosu](https://jobs.ashbyhq.com/ethereum-foundation) - [JobStash](https://jobstash.xyz) -- [Kripto Para İşleri](https://cryptocurrencyjobs.co/ethereum/) -- [ConsenSys'de Kariyer](https://consensys.net/careers/) -- [Kripto İş Listesi](https://cryptojobslist.com/ethereum-jobs) -- [Bankless iş ilanları](https://pallet.xyz/list/bankless/jobs) -- [Web3 İşleri](https://web3.career) +- [Ethereum İş İlanı Panosu](https://www.ethereumjobboard.com/) +- [Kripto Para İş İlanları](https://cryptocurrencyjobs.co/ethereum/) +- [ConsenSys'te Kariyer](https://consensys.net/careers/) +- [Kripto İşleri Listesi](https://cryptojobslist.com/ethereum-jobs) +- [Bankless iş ilanı panosu](https://pallet.xyz/list/bankless/jobs) +- [Web3 İş İlanları](https://web3.career) - [Web3 Army](https://web3army.xyz/) - [Crypto Valley İşleri](https://cryptovalley.jobs/) - [Ethereum İşleri](https://startup.jobs/ethereum-jobs) ## Bir DAO'ya katılın {#decentralized-autonomous-organizations-daos} -"DAO'lar", merkeziyetsiz otonom organizasyonlardır. Bu gruplar, organizasyonu ve iş birliğini kolaylaştırmak için Ethereum teknolojisinden yararlanır. Örneğin; üyeliği kontrol etmek, teklifleri oylamak veya havuza alınan varlıkları yönetmek için. DAO'lar hâlâ deneysel olsalar da aynı fikirde olduğunuz gruplar ile iş ortakları bulmanız ve Ethereum topluluğu üzerindeki etkinizi artırmanız için fırsatlar sunar. [DAO'lar hakkında daha fazlası](/dao/) +"DAO'lar", merkeziyetsiz otonom organizasyonlardır. Bu gruplar, organizasyonu ve iş birliğini kolaylaştırmak için Ethereum teknolojisinden yararlanır. Örneğin; üyeliği kontrol etmek, teklifleri oylamak veya havuza alınan varlıkları yönetmek için. DAO'lar hâlâ deneysel olsalar da aynı fikirde olduğunuz gruplar ile iş ortakları bulmanız ve Ethereum topluluğu üzerindeki etkinizi artırmanız için fırsatlar sunar. [DAO'lar hakkında daha fazla bilgi](/dao/) -- [DAOSquare](https://daosquare.io/) [@DAOSquare](https://twitter.com/DAOSquare) - _DAO konseptinin teknoloji harici alanlarda tanıtılması ve insanların DAO aracılığıyla değer yaratmalarına yardım edilmesi_ -- [Developer DAO](https://www.developerdao.com/) [@developer_dao](https://twitter.com/developer_dao) - _İnternetin ortaklaşa sahipliğine inanan yapımcıların topluluğu_ -- [dOrg](https://dOrg.tech) [@dOrg_tech](https://twitter.com/dOrg_tech) - _DAO olarak çalışan bir freelancer Web3 geliştirme kolektifi_ -- [HausDAO](https://daohaus.club) [@nowdaoit](https://twitter.com/nowdaoit) - _DAOHaus'un topluluk yönetimi_ +- [DAOSquare](https://daosquare.io/) [@DAOSquare](https://twitter.com/DAOSquare) - _DAO konseptini teknoloji dışı alanlarda tanıtmak ve insanların DAO aracılığıyla değer yaratmasına yardımcı olmak_ +- [Developer DAO](https://www.developerdao.com/) [@developer_dao](https://twitter.com/developer_dao) - _İnternetin kolektif mülkiyetine inanan oluşturucular topluluğu_ +- [dOrg](https://dOrg.tech) [@dOrg_tech](https://twitter.com/dOrg_tech) - _DAO olarak çalışan serbest Web3 geliştirme kolektifi_ +- [HausDAO](https://daohaus.club) [@nowdaoit](https://twitter.com/nowdaoit) - _DAOhaus'un topluluk yönetişimi_ - [LexDAO](https://lexdao.org) [@lex_DAO](https://twitter.com/lex_DAO) - _Hukuk mühendisliği_ -- [MetaCartel Ventures](https://metacartel.xyz) [@VENTURE_DAO](https://twitter.com/VENTURE_DAO) - _Başlangıç öncesi kripto projeleri için girişimler_ -- [MetaGame](https://metagame.wtf) [@MetaFam](https://twitter.com/MetaFam) - _Gerçek Hayat için MMORPG Oyun Mekanikleri_ -- [MetaFactory](https://metafactory.ai) [@TheMetaFactory](https://twitter.com/TheMetaFactory) - _Dijifiziksel Giyim Firmaları_ -- [MolochDAO](https://molochdao.com) [@MolochDAO](https://twitter.com/MolochDAO) - _Ethereum geliştirmelerini desteklemeye odaklı bir topluluk_ -- [Raid Guild](https://raidguild.org) [@RaidGuild](https://twitter.com/RaidGuild) - _Web3 yapımcılar kolektifi_ +- [MetaCartel Ventures](https://metacartel.xyz) [@VENTURE_DAO](https://twitter.com/VENTURE_DAO) - _Tohum öncesi kripto projeleri için bir girişim fonu_ +- [MetaFactory](https://metafactory.ai) [@TheMetaFactory](https://twitter.com/TheMetaFactory) - _Dijifiziksel Giyim Markaları_ +- [MolochDAO](https://molochdao.com) [@MolochDAO](https://twitter.com/MolochDAO) - _Ethereum geliştirmesini finanse etmeye odaklanmış topluluk_ +- [Raid Guild](https://raidguild.org) [@RaidGuild](https://twitter.com/RaidGuild) - _Web3 oluşturucuları kolektifi_ -Ne zaman ve nerede ethereum.org'a katkı verirseniz verin, lütfen ethereum.org'un [misyon ve değerlerine](/community/code-of-conduct) uymayı unutmayın! +Lütfen ethereum.org'a ne zaman ve nasıl katkıda bulunursanız bulunun, ethereum.org [davranış kurallarına](/community/code-of-conduct) uymayı unutmayın! diff --git a/public/content/translations/tr/community/grants/index.md b/public/content/translations/tr/community/grants/index.md index 2a2484811f4..18cdfae6c92 100644 --- a/public/content/translations/tr/community/grants/index.md +++ b/public/content/translations/tr/community/grants/index.md @@ -1,6 +1,6 @@ --- -title: Ethereum Vakfı ve topluluk hibe programları -description: Ethereum ekosistemindeki hibe programlarının bir listesi. +title: "Ethereum Foundation ve topluluk hibe programları" +description: "Ethereum ekosistemindeki hibe programlarının bir listesi." lang: tr --- @@ -10,38 +10,59 @@ Aşağıda listelenen programlar, Ethereum ekosisteminin başarısını ve büy Bu liste topluluğumuz tarafından hazırlanmıştır. Eksik veya yanlış bir şey varsa, lütfen bu sayfayı düzenleyin! + + +
Kurucular, işinizi hızlandırmak için yardıma mı ihtiyacınız var? [Kurucu Desteği sayfasına gidin](/founders/)
+
+ ## Geniş Ethereum ekosistemi {#broad-ethereum-ecosystem} Bu programlar geniş bir proje yelpazesine hibeler sağlayarak geniş Ethereum ekosistemini desteklerler. Bunlar ölçeklenebilirlik, topluluk kurma, güvenlik, gizlilik gibi birçoğu için çözümleri kapsar. Bu hibeler herhangi bir Ethereum platformuna özel değildir ve emin değilseniz başlamak için iyi yerlerdir. -- [EF Ekosistem Destek Programı](https://esp.ethereum.foundation) - _Temel odağı evrensel araçlar, altyapı, araştırma ve kamu yararı olmak üzere; Ethereum'a katkı sağlayan açık kaynak projeleri finanse eder_ -- [Moloch DAO](https://www.molochdao.com/) - _Gizlilik, katman 2 ölçeklendirme, istemci güvenliği ve dahası_ -- [DAO Hibeleri](https://docs.google.com/spreadsheets/d/1XHc-p_MHNRdjacc8uOEjtPoWL86olP4GyxAJOFO0zxY/edit#gid=0) - _Hibe sunan organizasyonların Google tablosu_ +- [EF Ekosistem Destek Programı](https://esp.ethereum.foundation) - _Özellikle evrensel araçlara, altyapıya, araştırmalara ve kamu mallarına odaklanarak Ethereum'a fayda sağlayan açık kaynaklı projeleri finanse eder_ - [Akademik Hibeler](https://esp.ethereum.foundation/academic-grants) - _Ethereum ile ilgili akademik çalışmaları desteklemek için hibeler_ + +## Hibe listesi toplayıcıları ve platformları {#grant-list-aggregators} + +Bu kaynaklar, Ethereum ekosistemindeki çeşitli hibe fırsatlarını derleyip düzenleyerek projenizin ihtiyaçlarına uygun fonlama fırsatlarını keşfetmeyi kolaylaştırır. Özel fonlama ihtiyaçlarınıza göre en uygun kaynakları bulmaya başlamanıza yardımcı olmak için bunları kişilere göre düzenledik. + +### Tüm hibe arayanlar için: Kapsamlı dizinler {#comprehensive-directories} + +Bu genel platformlar, tüm Web3 alanındaki hibeleri geniş bir şekilde kapsar ve fon arayan herkes için yararlı başlangıç noktalarıdır: + - [Blockworks Grantfarm](https://blockworks.co/grants/programs) - _Blockworks, tüm hibelerin, RFP'lerin ve hata ödüllerinin kapsamlı bir dizinini derlemiştir._ +- [Blockchain Grants](https://www.blockchaingrants.org/) - _Blokzincir ve kripto para hibeleri dizini_ +- [Karma Funding Map](https://gap.karmahq.xyz/funding-map) - Haftalık olarak güncellenen tüm web3 hibe programlarının dizini + +### Geliştiriciler ve kurucular için {#for-developers-and-builders} + +- [Hibe Programları Görüntüleyici](https://airtable.com/shr86elKgWTSCP4AY) - _Hibe programlarının halka açık Airtable veritabanı_ +- [Web3 Hibeleri E-Tablosu](https://docs.google.com/spreadsheets/d/1c8koZCI-GLnD8MG-eFcXPOBCNu1v8-aXIfwAAvc7AMc/edit#gid=0) - _Web3 hibe fırsatlarının yer aldığı Google e-tablosu_ +- [Arbitrum Hibeleri](https://arbitrum.foundation/grants) — Arbitrum DAO ve [Arbitrum Foundation](https://arbitrum.foundation/) + +### DeFi projeleri ve finansal uygulamalar için {#for-defi-projects} + +- [LlamaoGrants](https://wiki.defillama.com/wiki/LlamaoGrants) - _DeFi Llama'nın hibe programı dizini_ +- [AlphaGrowth Hibeleri](https://alphagrowth.io/crypto-web3-grants-list) - _Kripto ve Web3 hibelerinin kapsamlı listesi_ +- [Uniswap Foundation Hibeleri](https://www.uniswapfoundation.org/build) - _DeFi geliştiricileri için Unichain ve Uniswap v4 hibeleri ve desteği_ -## Projeye özel {#project-specific} +### DAO katılımcıları ve yönetişim yenilikçileri için {#for-dao-contributors} -Bu projeler kendi teknolojilerini geliştirmeye ve deneyimlemeye yönelik olarak kendi hibelerini oluşturmuşlardır. +Topluluk odaklı projeler ve yönetişim deneyleri için kaynaklar: -- [Aave Hibe Programı](https://aavegrants.org/) – _[Aave](https://aave.com/) hibeleri DAO_ -- [Balancer](https://grants.balancer.community/) – _[Balancer](https://balancer.fi/) ekosistem fonu_ -- [Chainlink Hibe Programı](https://chain.link/community/grants) - _[Chainlink](https://chain.link/) toplum hi̇beleri̇_ -- [Decentraland Hibe Programı](https://governance.decentraland.org/grants/) – _[Decentraland](https://decentraland.org/) DAO Metaverse_ -- [Lido Ekosistem Hibeleri Organizasyonu (LEGO)](https://lido.fi/lego) – _[Lido](https://lido.fi/) finans ekosistemi_ -- [MetaMask Programı](https://metamaskgrants.org/) - _[MetaMask](https://metamask.io/) çalışanlar öncülüğünde yönetilen hibe DAO'su_ -- [SKALE Ağı Hibe Ekosistemi](https://skale.space/developers#grants) - _[SKALE Ağı](https://skale.space/) ekosistemi_ -- [Swarm Vakfı Hibe Programı](https://my.ethswarm.org) - _[Swarm Vakfı](https://www.ethswarm.org/) ekosistemi_ -- [The Graph](https://thegraph.com/ecosystem/grants/) – _[The Graph](https://thegraph.com/) ekosistemi_ -- [Uniswap Hibe Programı](https://www.uniswapfoundation.org/approach) – _[Uniswap](https://uniswap.org/) topluluğu_ +- [DAO Hibeleri](https://docs.google.com/spreadsheets/d/1XHc-p_MHNRdjacc8uOEjtPoWL86olP4GyxAJOFO0zxY/edit#gid=0) - _Hibe sunan kuruluşların yer aldığı Google e-tablosu_ +- [MetaGov Veritabanı](https://docs.google.com/spreadsheets/d/1e5g-dlWWsK2DZoZGBgfxyfGNSddLk-V7sLEgfPjEhbA/edit#gid=780420708) - _Kapsamlı Web3 hibe haritası_ -## İkinci dereceden finansman {#quadratic-funding} +### Kamu malları ve etki {#public-goods-and-impact} -Ethereumun açık kaynak kökleri yeni ve ilgi çekici bir kaynak geliştirme modelinin büyümesine ön ayak oldu: ikinci dereceden (quadratic) finansman. Bu, gelecekte her tür kamu malını finanse etme şeklimizi iyileştirme potansiyeline sahiptir. İkinci dereceden finansman, en çok finansmanı alan projelerin en benzersiz talebe sahip projeler olmasını sağlar. Başka bir deyişle, çoğu insanın hayatını iyileştirecek projeler. [İkinci dereceden finansman hakkında daha fazlası.](/defi/#quadratic-funding) +Bu programlar, daha geniş topluluğa, kamu mallarına ve etki girişimlerine fayda sağlayan projeleri finanse etmeye odaklanmaktadır. Bunlar arasında hibe sağlayıcıların yanı sıra [karesel fonlama](/defi/#quadratic-funding) da dahil olmak üzere zincir üstü fon tahsis mekanizmalarını kullanan bağış platformları da bulunmaktadır: -- [Gitcoin](https://gitcoin.co/grants) -- [clr.fund](https://clr.fund/) +- [Gitcoin](https://www.gitcoin.co/program) - _Gitcoin Hibeleri, Ethereum ekosistemindeki açık kaynak projeleri ve kamu mallarını finanse etmek için çok sayıda sermaye tahsis mekanizması kullanır_ +- [Octant](https://octant.app/home) - _Kamu yararını ve bireysel finansal güçlenmeyi dengeleyen bir kamu malları fonlama ekosistemi_ +- [Giveth](https://giveth.io/) - _İyilik amaçlı projelerden sıfır ek ücretle doğrudan bağış yapılmasını sağlayan kripto bağış platformu_ +- [Artizen](https://artizen.fund/) - _Sanat, bilim, teknoloji ve kültürün kesişim noktasında yeni projelere fon bulmaları için içerik üreticilere yardımcı olur_ +- [Karesel Hızlandırıcı](https://qacc.giveth.io/) - _Kamu yararına olan projeleri desteklemek için karesel fonlama kullanan bir başlangıç hızlandırma programı_ -## Ethereum'da Çalışın {#work-in-ethereum} +## Ethereum'da çalışmak {#work-in-ethereum} Kendi projenizi başlatmaya hazır değil misiniz? Aktif olarak çalışmak ve Ethereum ekosistemine katkıda bulunmak için tutkulu bireyler arayan yüzlerce şirket var. Daha fazla bilgi mi arıyorsunuz? [Ethereum ile ilgili işlere göz atın](/community/get-involved/#ethereum-jobs) diff --git a/public/content/translations/tr/community/language-resources/index.md b/public/content/translations/tr/community/language-resources/index.md index af93574bf86..b0684beaa8f 100644 --- a/public/content/translations/tr/community/language-resources/index.md +++ b/public/content/translations/tr/community/language-resources/index.md @@ -1,6 +1,6 @@ --- -title: Dil kaynakları -description: Ethereum hakkında bilgi edinmek için İngilizce olmayan kaynaklar +title: "Dil kaynakları" +description: "Ethereum hakkında bilgi edinmek için İngilizce olmayan kaynaklar" lang: tr --- @@ -12,15 +12,15 @@ Amacımız, tüm dillerde eğitim içeriği sağlamak ve dünyanın her yerinden Ana dilinizde okumayı tercih ediyorsanız veya İngilizce bilmeyen birini tanıyorsanız, İngilizce olmayan faydalı kaynakların bir listesini aşağıda bulabilirsiniz. Yüz binlerce Ethereum meraklısı, haberleri paylaşmak, son gelişmeler hakkında konuşmak, teknik sorunları tartışmak ve geleceği hayal etmek için bu çevrimiçi forumlarda bir araya geliyor. -Kendi dilinizde bir eğitim kaynağı mı biliyorsunuz? [Listeye eklemek için](https://github.com/ethereum/ethereum-org-website/issues/new/choose) bir konu açın! +Kendi dilinizde bir eğitim kaynağı mı biliyorsunuz? Listeye eklemek için [bir konu açın](https://github.com/ethereum/ethereum-org-website/issues/new/choose)! ## Ethereum.org kaynakları {#ethereum-org} Ethereum.org, her sayfanın üst kısmında bulunan dil seçimi menüsü ile erişilebilen 40'tan fazla dile doğal olarak çevrilmiştir. -![Dil seçim menüsü](./language-selector-menu.png) +![Dil seçici menüsü](./language-selector-menu.png) -İki dilliyseniz ve daha fazla kişiye ulaşmamıza yardımcı olmak istiyorsanız, [ethereum.org Çeviri Programı](/contributing/translation-program/#translation-program)na da katılarak web sitesini tercüme etmemize yardımcı olabilirsiniz. +İki dil biliyorsanız ve daha fazla insana ulaşmamıza yardımcı olmak istiyorsanız, web sitesini çevirmemize yardım etmek için [ethereum.org Çeviri Programı](/contributing/translation-program/#translation-program)'na da katılabilirsiniz. ## Topluluk kaynakları {#community} @@ -28,18 +28,18 @@ Ethereum.org, her sayfanın üst kısmında bulunan dil seçimi menüsü ile eri **Haberler** -- [BeInCrypto](http://www.beincrypto.com.br) - kripto para haberleri ve makaleleri, bir borsa listesi ile beraber, Brezilya'da mevcuttur -- [Cointelegraph](http://cointelegraph.com.br/category/analysis) - Büyük bir kripto para haber merkezi olan Cointelegraph'ın Brezilya versiyonu -- [Livecoins](http://www.livecoins.com.br/ethereum) - kripto para birimi haberleri ve araçları +- [BeInCrypto](http://www.beincrypto.com.br) - Kripto para haberleri ve makalelerinin yanı sıra Brezilya'da hizmet veren borsaların bir listesini içerir +- [Cointelegraph](http://cointelegraph.com.br/category/analysis) - Büyük bir kripto para haber kaynağı olan Cointelegraph'ın Brezilya versiyonu +- [Livecoins](http://www.livecoins.com.br/ethereum) - kripto para haberleri ve araçları - [Seudinheiro](http://www.seudinheiro.com/criptomoedas/) - kripto para haberleri ve raporları -- [Modüler Kripto](https://modularcrypto.xyz/) - kripto para haberleri ve eğitim makaleleri +- [Modular Crypto](https://modularcrypto.xyz/) - kripto para haberleri ve eğitici makaleler **Eğitim** -- [web3dev](https://www.web3dev.com.br/)Web 3 geliştiricileri için içerik merkezi ve Discord topluluğu. -- [Web3Brasil](https://github.com/web3brasil/web3brasil) - Web3 ve DeFi öğrenimi için kaynaklar -- [CriptoFacil](http://www.criptofacil.com/ultimas-noticias/) - kripto para haber ve eğitimleri, "Acemiler için Ethereum" ve acemiler için "DeFi" dahildir -- [CriptoAtivos](http://www.criptoativos.wiki.br/) - kripto para alanından içerikler, eğitim ve blog +- [web3dev](https://www.web3dev.com.br/) - Web3 geliştiricileri için içerik merkezi ve Discord topluluğu. +- [Web3Brasil](https://github.com/web3brasil/web3brasil) - Web3 ve DeFi öğrenmek için kaynaklar +- [CriptoFacil](http://www.criptofacil.com/ultimas-noticias/) - 'Yeni başlayanlar için Ethereum' ve 'yeni başlayanlar için DeFi' dahil olmak üzere kripto para haberleri ve eğitimi +- [CriptoAtivos](http://www.criptoativos.wiki.br/) - kripto para alanından analizler, eğitim ve blog - [Cointimes](http://www.cointimes.com.br/) - kripto para haberleri ve eğitimi - [Web3 başlangıç paketi](https://docs.google.com/document/d/1X8PSTFH7FTw9J-gbKWM6Y430SWCBT8d4t4pJgFQHJ8E/) - en sık sorulan ve temel kripto sorularını yanıtlayan bir kılavuz @@ -47,107 +47,107 @@ Ethereum.org, her sayfanın üst kısmında bulunan dil seçimi menüsü ile eri **Genel kaynaklar** -- [Ethereum.cn](https://www.ethereum.cn/) - konsensüs katmanı yükseltmesini, tüm çekirdek geliştirme toplantı notlarını, katman 2'yi vb. kapsayan topluluk tarafından sağlanan içerik. -- [EthFans](https://github.com/editor-Ajian/EthFans.org-annual-collected-works/) - temel konulardan gelişmiş Ethereum konularına kadar her şeyi öğrenin -- [Unitimes](https://mp.weixin.qq.com/s/tvloZSDBSOQN9zDQj_91kA) - Ethereum, DeFi, NFT, Web3 ile ilgili bilgileri kapsayan topluluk tarafından sürdürülen içerikler -- [123ETH](https://123eth.org/) - Ethereum ekosistemine bir geçit -- [Zhen Xiao](http://zhenxiao.com/blockchain/) - kripto para ve kullanımları hakkında ücretsiz çevrimiçi kurslar -- [Ethereum Whitepaper](https://github.com/ethereum/wiki/wiki/[%E4%B8%AD%E6%96%87]-%E4%BB%A5%E5%A4%AA%E5%9D%8A%E7%99%BD%E7%9A%AE%E4%B9%A6) - Ethereum Teknik Raporu'nun Çince versiyonu +- [Ethereum.cn](https://www.ethereum.cn/) - Mutabakat katmanı yükseltmesi, tüm çekirdek geliştirici toplantı notları, katman 2 vb. konuları kapsayan, topluluk tarafından yönetilen içerik. +- [EthFans](https://github.com/editor-Ajian/EthFans.org-annual-collected-works/) - Temel düzeyden ileri düzeye kadar Ethereum konuları hakkında her şeyi öğrenin +- [Unitimes](https://mp.weixin.qq.com/s/tvloZSDBSOQN9zDQj_91kA) - Ethereum, DeFi, NFT, Web3 ile ilgili bilgileri kapsayan, topluluk tarafından yönetilen içerik +- [123ETH](https://123eth.org/) - Ethereum ekosistemine açılan bir Portal +- [Zhen Xiao](http://zhenxiao.com/blockchain/) - kripto para ve uygulamaları hakkında ücretsiz çevrimiçi kurslar +- [Ethereum Teknik Raporu](/zh/whitepaper/) - Ethereum Teknik Raporu'nun Çince versiyonu **Ethereum ekosistemi** -- [ETHPlanet](https://www.ethplanet.org/) - üniversite öğrencilerine eğitimler sunan, çevrimiçi ve yüz yüze hackathon'lar (hack maratonu) -- [PrimitivesLane](https://www.primitiveslane.org/) - blok zincir teknolojilerine odaklı, kar amacı gütmeyen bir araştırma grubu -- [Ethereum Çeviri Topluluğu CN](https://www.notion.so/Ethereum-Translation-Community-CN-05375fe0a94c4214acaf90f42ba40171) - eğitimsel Ethereum içeriklerini çevirmeye adanmış bir topluluk +- [ETHPlanet](https://www.ethplanet.org/) - Üniversite öğrencilerine eğitim sunan çevrimiçi ve yüz yüze hackathon'lar +- [PrimitivesLane](https://www.primitiveslane.org/) - Blokzincir teknolojisine odaklanmış, kâr amacı gütmeyen bir araştırma grubu +- [Ethereum Çeviri Topluluğu CN](https://www.notion.so/Ethereum-Translation-Community-CN-05375fe0a94c4214acaf90f42ba40171) - Eğitici Ethereum içeriğini çevirmeye adanmış bir topluluk **Geliştiriciler için** -- [DappLearning](https://github.com/Dapp-Learning-DAO/Dapp-Learning) - ana akım dapp projelerini incelemek ve her hafta düşünce ve yorumları paylaşmak için bir öğrenme grubu -- [LearnBlockchain](https://learnblockchain.cn/) - geliştiricilerin blok zincir teknolojileri hakkında bilgi paylaşımı için bir topluluk +- [DappLearning](https://github.com/Dapp-Learning-DAO/Dapp-Learning) - Yaygın merkeziyetsiz uygulama projelerini incelemek ve her hafta düşünce ve yorumları paylaşmak için bir öğrenim grubu +- [LearnBlockchain](https://learnblockchain.cn/) - Geliştiricilerin blokzincir teknolojisi hakkında bilgi paylaştığı bir topluluk **Kriptografi araştırmacıları için** -- [SecbitLabs](https://mp.weixin.qq.com/s/69_tqBJpr_sbaKtR1sBRMw) - kriptografi, güvenlik vb. açıklayan bir WeChat hesabı +- [SecbitLabs](https://mp.weixin.qq.com/s/69_tqBJpr_sbaKtR1sBRMw) - Kriptografi, güvenlik vb. konuları açıklayan bir WeChat hesabı - [Sparkbyte](https://mp.weixin.qq.com/s/9KgKTc_jtJ7bWKdbNPoqvQ) - zk teknolojisini açıklayan bir WeChat hesabı ### Çekçe {#cs} -- [Gwei.cz](https://gwei.cz) - Web3 etrafında yerel topluluk, eğitim içeriği oluşturur, çevrimiçi ve yüz yüze etkinlikler düzenler -- [Gwei.cz Příručka](https://prirucka.gwei.cz/) - yeni başlayanlar için Ethereum rehberi -- [DAO Příručka](https://dao.gwei.cz/) - DAO'lara yeni başlayanlar için rehber -- [Ethereum'da Uzmanlaşma](https://ipfs.io/ipfs/bafybeidvuxhnsgfx3tncpfxheqglkjwmdxclknlgd7s7qggd2a6bzgb27m) - Çekçe Ethereum'da Uzmanlaşmak +- [Gwei.cz](https://gwei.cz) - Web3 etrafında toplanmış yerel topluluk; eğitici içerikler oluşturur, çevrimiçi ve yüz yüze etkinlikler düzenler +- [Gwei.cz Příručka](https://prirucka.gwei.cz/) - Yeni başlayanlar için Ethereum rehberi +- [DAO Příručka](https://dao.gwei.cz/) - DAO'lar için başlangıç rehberi +- [Mastering Ethereum](https://ipfs.io/ipfs/bafybeidvuxhnsgfx3tncpfxheqglkjwmdxclknlgd7s7qggd2a6bzgb27m) - Çekçe Mastering Ethereum ### Fransızca {#fr} -- [Ethereum France](https://www.ethereum-france.com/) - Ethereum France, etkinlikler düzenliyor, içerik oluşturuyor ve Ethereum hakkında müzakereleri teşvik ediyor -- [Ethereum.fr](https://ethereum.fr/) - Ethereum haberleri ve eğitimleri -- [BanklessFR](https://banklessfr.substack.com/) - Fransızca Bankless haber bülteni -- [CryptoFR](https://cryptofr.com/category/44/ethereum-general) - Ethereum alt sayfası bulunan bir kripto para forumu +- [Ethereum France](https://www.ethereum-france.com/) - Ethereum Fransa, etkinlikler düzenler, içerik oluşturur ve Ethereum etrafındaki tartışmaları teşvik eder +- [Ethereum.fr](https://ethereum.fr/) - Ethereum haberleri ve eğitimi +- [BanklessFR](https://banklessfr.substack.com/) - Fransızca Bankless bülteni +- [CryptoFR](https://cryptofr.com/category/44/ethereum-general) - Ethereum alt sayfasına sahip bir kripto para forumu ### Almanca {#de} -- [Microsoft Learn (Solidity)](https://docs.microsoft.com/de-de/learn/modules/blockchain-learning-solidity/) - Solidity kullanarak -- [Microsoft Learn (akıllı sözleşmeler)](https://docs.microsoft.com/de-de/learn/modules/blockchain-solidity-ethereum-smart-contracts/) - Solidity ile Ethereum akıllı sözleşmeleri yazın -- [Microsoft Learn (Ethereum ağları)](https://docs.microsoft.com/de-de/learn/modules/blockchain-ethereum-networks/) - Ethereum ağlarına bağlanın ve ağları dağıtın -- [Microsoft Learn (blok zincirler)](https://docs.microsoft.com/de-de/learn/paths/ethereum-blockchain-development/) - blok zincir geliştirmeye giriş +- [Microsoft Learn (Solidity)](https://docs.microsoft.com/de-de/learn/modules/blockchain-learning-solidity/) - Solidity kullanma +- [Microsoft Learn (akıllı sözleşmeler)](https://docs.microsoft.com/de-de/learn/modules/blockchain-solidity-ethereum-smart-contracts/) - Solidity ile Ethereum akıllı sözleşmeleri yazma +- [Microsoft Learn (Ethereum ağları)](https://docs.microsoft.com/de-de/learn/modules/blockchain-ethereum-networks/) - Ethereum ağlarına bağlanma ve dağıtma +- [Microsoft Learn (blokzincirler)](https://docs.microsoft.com/de-de/learn/paths/ethereum-blockchain-development/) - blokzincir geliştirmeye giriş ### İbranice {#he} -- [Udi Wertheimer - Bitcoin kullanıcılarının Ethereum'dan öğrenebileceği şeyler](https://www.cryptojungle.co.il/udi-wertheimer-what-bitcoiners-can-learn-from-ethereum/) -- [Omer Greismen (OpenZeppelin) - 15 Milyar Dolarlık Akıllı Sözleşme Hack'ini Nasıl Önledik](https://www.cryptojungle.co.il/omer-greisman-openzeppelin/) -- [Shy Datika (INX) - Jetonlaştırma ve Ethereum'un bir menkul kıymet olup olmadığı da dahil olmak üzere menkul kıymetlerin geleceği](https://www.cryptojungle.co.il/shy-datika-tokenization/) -- [Roy Confino (Lemonade) - Ethereum'da Sigorta](https://www.cryptojungle.co.il/roy-confino-insurance/) +- [Udi Wertheimer - Bitcoincilerin Ethereum'dan öğrenebilecekleri](https://www.cryptojungle.co.il/udi-wertheimer-what-bitcoiners-can-learn-from-ethereum/) +- [Omer Greismen (OpenZeppelin) - 15 Milyar Dolarlık bir Akıllı Sözleşme Saldırısını Nasıl Önledik?](https://www.cryptojungle.co.il/omer-greisman-openzeppelin/) +- [Shy Datika (INX) - Ethereum'un bir menkul kıymet olup olmadığı da dahil olmak üzere, tokenizasyon ve menkul kıymetlerin geleceği](https://www.cryptojungle.co.il/shy-datika-tokenization/) +- [Roy Confino (Lemonade) - Ethereum'da Sigortacılık](https://www.cryptojungle.co.il/roy-confino-insurance/) - [Idan Ofrat (Fireblocks) - Kurumsal Benimseme](https://www.cryptojungle.co.il/idan-ofrat-fireblocks/) -- [Gal Weizman (MetaMask) - Metamask Nedir?](https://www.cryptojungle.co.il/gal-weizman-metamask/) +- [Gal Weizman (MetaMask) - MetaMask nedir?](https://www.cryptojungle.co.il/gal-weizman-metamask/) - [Dror Aviely (Consensys) - Ethereum'un merkezi](https://www.cryptojungle.co.il/dror-aviely-ethereum-center/) -- [Nir Rozin - Cryptopunk olmak](https://www.cryptojungle.co.il/nir-rozin-cryptopunk/) -- [Adan Kedem - Oyun ve Metaverse](https://www.cryptojungle.co.il/adan-kedem-web3-gaming/) -- [Uri Kolodny (Starkware) - Ethereum ve Blokzincir Katmanları](https://www.cryptojungle.co.il/uri-kolodny-starkware/) -- [Udi Wertheimer - Ethereum 2.0 ve rakipler](https://www.cryptojungle.co.il/udi-on-eth2/) -- [Ben Samocha (myself) - Ethereum 2.0 - bir fırsat mı?](https://www.cryptojungle.co.il/etherurm2-week-summary/) +- [Nir Rozin - Bir cryptopunk olmak](https://www.cryptojungle.co.il/nir-rozin-cryptopunk/) +- [Adan Kedem - Oyun & Metaverse](https://www.cryptojungle.co.il/adan-kedem-web3-gaming/) +- [Uri Kolodny (Starkware) - Ethereum ve blokzincir katmanları](https://www.cryptojungle.co.il/uri-kolodny-starkware/) +- [Udi Wertheimer - Ethereum 2.0 ve rekabet](https://www.cryptojungle.co.il/udi-on-eth2/) +- [Ben Samocha (kendim) - Ethereum 2.0 - bir fırsat mı?](https://www.cryptojungle.co.il/etherurm2-week-summary/) - [Alon Muroch (Bloxstaking) - Ethereum 2.0 Nedir?](https://www.cryptojungle.co.il/alon-moroch-eth2/) - [Eilon Aviv (Collider Ventures) - Ethereum 2.0'da neler yanlış gidebilir?](https://www.cryptojungle.co.il/eilon-aviv-eth2-0/) -- [Eilon Aviv (Collider Ventures) - Ethereum 2.0'a neden ihtiyacımız var?](https://www.cryptojungle.co.il/eilon-aviv-ethereum-2-0/) +- [Eilon Aviv (Collider Ventures) - Neden Ethereum 2.0'a ihtiyacımız var?](https://www.cryptojungle.co.il/eilon-aviv-ethereum-2-0/) ### İtalyanca {#it} -- [Ethereum Italia](https://www.ethereum-italia.it/) - Akıllı sözleşmeler ve blok zincir teknolojilerine odaklı Ethereum eğitim, organizasyon ve haberleri +- [Ethereum Italia](https://www.ethereum-italia.it/) - Akıllı sözleşmelere ve blokzincir teknolojisine odaklanan Ethereum eğitimi, etkinlikleri ve haberleri - [Ethereum Italia Podcast](https://www.ethereum-italia.it/podcast/) - İtalyanca Ethereum podcast'i -- [Microsoft Learn (Solidity)](https://docs.microsoft.com/it-it/learn/modules/blockchain-learning-solidity/) - Solidity kullanmayı öğrenin -- [Microsoft Learn (Akıllı sözleşmeler)](https://docs.microsoft.com/it-it/learn/modules/blockchain-solidity-ethereum-smart-contracts/) - Solidity ile Ethereum akıllı sözleşmeleri yazmayı öğrenin -- [Microsoft Learn (dapps)](https://docs.microsoft.com/it-it/learn/modules/blockchain-create-ui-decentralized-apps/) - merkeziyetsiz uygulamalar ile bir kullanıcı arayüzü oluşturun +- [Microsoft Learn (Solidity)](https://docs.microsoft.com/it-it/learn/modules/blockchain-learning-solidity/) - Solidity'nin nasıl kullanılacağını öğrenin +- [Microsoft Learn (Akıllı sözleşmeler)](https://docs.microsoft.com/it-it/learn/modules/blockchain-solidity-ethereum-smart-contracts/) - Solidity kullanarak akıllı sözleşmeler yazma hakkında bilgi edinin +- [Microsoft Learn (merkeziyetsiz uygulamalar)](https://docs.microsoft.com/it-it/learn/modules/blockchain-create-ui-decentralized-apps/) - merkeziyetsiz uygulamalarla bir kullanıcı arayüzü oluşturun ### Japonca {#ja} -- [Japonya Sanal ve Kripto Varlıklar Borsası Birliği](https://jvcea.or.jp/) +- [Japonya Sanal ve Kripto Varlıklar Borsa Birliği](https://jvcea.or.jp/) - [Japonya Kripto Varlık İş Birliği](https://cryptocurrency-association.org/) -- [Blok zincir geliştirmeye başlayın - Öğren | Microsoft Docs](https://docs.microsoft.com/ja-jp/learn/paths/ethereum-blockchain-development/) - Bu öğrenim yolu, sizi blok zincir ve Ethereum platformu üzerinde geliştirme ile tanıştırır -- [Ethereum'da Uzmanlaşma](https://www.oreilly.co.jp/books/9784873118963/) - Japonca Ethereum'da Uzmanlaşmak -- [Solidity ve Ethereum ile Uygulamalı Akıllı Sözleşme Geliştirme](https://www.oreilly.co.jp/books/9784873119342/) - Japonca Solidity ve Ethereum ile Uygulamalı Akıllı Sözleşme Geliştirme +- [Blokzincir geliştirmeye başlayın - Öğren | Microsoft Docs](https://docs.microsoft.com/ja-jp/learn/paths/ethereum-blockchain-development/) - Bu öğrenme yolu, sizi blokzincir ve Ethereum platformunda geliştirmeyle tanıştırır +- [Mastering Ethereum](https://www.oreilly.co.jp/books/9784873118963/) - Japonca Mastering Ethereum +- [Solidity ve Ethereum ile Uygulamalı Akıllı Sözleşme Geliştirme](https://www.oreilly.co.jp/books/9784873119342/) - Solidity ve Ethereum ile Uygulamalı Akıllı Sözleşme Geliştirme, Japonca ### Rusça {#ru} -- [Cyber Academy](https://cyberacademy.dev) - web3 yaratıcıları için eğitim alanı -- [Forklog](https://forklog.com) - genel olarak kripto hakkında haberler ve eğitici makaleler, mevcut teknolojiler ve farklı blokzincirlerin gelecekteki yükseltmeleri -- [BeInCrypto](https://ru.beincrypto.com) - haberler, kripto fiyat analizi ve kriptoyla ilgili her şey hakkında basit açıklamalar içeren teknik olmayan makaleler +- [Cyber Academy](https://cyberacademy.dev) - Web3 geliştiricileri için eğitim alanı +- [Forklog](https://forklog.com) - Genel olarak kripto, mevcut teknolojiler ve farklı blokzincirlerin gelecekteki yükseltmeleri hakkında haberler ve eğitici makaleler +- [BeInCrypto](https://ru.beincrypto.com) - Haberler, kripto fiyat analizi ve kriptodaki her şey hakkında basit açıklamalar içeren teknik olmayan makaleler ### İspanyolca {#es} -- [Ethereum Madrid](https://ethereummadrid.com/) - blok zincir, DeFi ve yönetişim kursları, etkinlikleri ve blogu -- [Cointelegraph](https://es.cointelegraph.com/ethereum-for-beginners) - Yeni başlayanlar için İspanyolca Ethereum rehberi -- [Tutoriales online](https://tutoriales.online/curso/solidity) - Solidity ve Ethereum'da programlamayı öğrenin -- [Curso Introducción a Ethereum Development](https://youtube.com/playlist?list=PLTqiwJDd_R8y9pfUBjhkVa1IDMwyQz-fU) - Solidity temelleri, ilk akıllı sözleşmenizin test edilmesi ve dağıtılması -- [Curso Introducción a Seguridad y Hacking en Ethereum](https://youtube.com/playlist?list=PLTqiwJDd_R8yHOvteko_DmUxUTMHnlfci) - Gerçek akıllı sözleşmelerdeki yaygın güvenlik açıklarını ve güvenlik sorunlarını öğrenin +- [Ethereum Madrid](https://ethereummadrid.com/) - blokzincir, DeFi ve yönetişim kursları, etkinlikleri ve blogu +- [Cointelegraph](https://es.cointelegraph.com/ethereum-for-beginners) - İspanyolca yeni başlayanlar için Ethereum rehberi +- [Tutoriales online](https://tutoriales.online/curso/solidity) - Ethereum üzerinde Solidity ve programlama öğrenin +- [Curso Introducción a Ethereum Development](https://youtube.com/playlist?list=PLTqiwJDd_R8y9pfUBjhkVa1IDMwyQz-fU) - Solidity temelleri, ilk akıllı sözleşmenizin test edilmesi ve dağıtımı +- [Curso Introducción a Seguridad y Hacking en Ethereum](https://youtube.com/playlist?list=PLTqiwJDd_R8yHOvteko_DmUxUTMHnlfci) - Gerçek akıllı sözleşmelerdeki yaygın güvenlik açıklarını ve güvenlik sorunlarını anlayın - [Curso Introducción a DeFi Development](https://youtube.com/playlist?list=PLTqiwJDd_R8zZiP9_jNdaPqA3HqoW2lrS) - Solidity'de DeFi akıllı sözleşmelerinin nasıl çalıştığını öğrenin ve kendi Otomatik Piyasa Yapıcınızı oluşturun -- [Cryptoversidad](https://www.youtube.com/c/Cryptoversidad) - Başlangıçtan ileri seviyeye kadar teknik olmayan blok zincir eğitimi. Kripto ve Ethereum hakkında her şeyi öğrenin. +- [Cryptoversidad](https://www.youtube.com/c/Cryptoversidad) - Başlangıçtan ileri seviyeye kadar teknik olmayan blokzincir eğitimi. Kripto ve Ethereum hakkında her şeyi öğrenin. ### Türkçe {#tr} -- [BTK Akademi](https://www.btkakademi.gov.tr/portal/course/blokzincir-ve-kripto-paralar-10569#!/about) - blok zincir ve kripto para odaklı kurs -- [Büyük yeniden adlandırma: Eth2'ye ne oldu?](https://miningturkiye.org/konu/ethereum-madenciligi-bitiyor-mu-onemli-gelisme.655/) - Büyük yeniden adlandırma blog gönderisinin Türkçe çevirisi, "Eth2" terminolojisinden uzaklaşmayı açıklıyor +- [BTK Akademi](https://www.btkakademi.gov.tr/portal/course/blokzincir-ve-kripto-paralar-10569#!/about) - blokzincir ve kripto para odaklı kurs +- [Büyük yeniden adlandırma: Eth2'ye ne oldu?](https://miningturkiye.org/konu/ethereum-madenciligi-bitiyor-mu-onemli-gelisme.655/) - 'Eth2' terminolojisinden uzaklaşmayı açıklayan büyük yeniden adlandırma blog gönderisinin Türkçe çevirisi ### Vietnamca {#vi} - [Tino Group](https://wiki.tino.org/ethereum-la-gi/) - Ethereum, merkeziyetsiz uygulamalar, cüzdanlar ve SSS'lere genel bakış -- [Tap Chi Bitcoin](https://tapchibitcoin.io/tap-chi/tin-tuc-ethereum-eth) - Ethereum haberleri ve eğitimi için alt sayfalar içeren bir web platformu -- [Coin68](https://coin68.com/ethereum-tieu-diem/) - Ethereum haberleri ve eğitim ile ilgili bilgiler içeren bir kripto para portalı +- [Tap Chi Bitcoin](https://tapchibitcoin.io/tap-chi/tin-tuc-ethereum-eth) - Ethereum haberleri ve eğitimi için alt sayfalara sahip web platformu +- [Coin68](https://coin68.com/ethereum-tieu-diem/) - Ethereum haberleri ve eğitici içerik barındıran kripto para portalı diff --git a/public/content/translations/tr/community/online/index.md b/public/content/translations/tr/community/online/index.md index 9ebb2085a36..1c47a9f0197 100644 --- a/public/content/translations/tr/community/online/index.md +++ b/public/content/translations/tr/community/online/index.md @@ -1,6 +1,6 @@ --- -title: Çevrimiçi topluluklar -description: Ethereum ekosistemindeki hibe programlarının bir listesi. +title: "Çevrimiçi topluluklar" +description: "Ethereum meraklılarının tartışmak ve işbirliği yapmak için bir araya geldiği çevrimiçi forumları, sohbet odalarını ve sosyal medya topluluklarını keşfedin." lang: tr --- @@ -8,43 +8,67 @@ lang: tr Yüz binlerce Ethereum meraklısı, haberleri paylaşmak, son gelişmeler hakkında konuşmak, teknik sorunları tartışmak ve geleceği hayal etmek için bu çevrimiçi forumlarda bir araya geliyor. +## Listeleme politikası {#listing-policy} + +Listelenen toplulukların bütünlüğünü ve değerini korumak için ethereum.org, uygunluğu belirlemek adına katı bir politika izler: + +### Uygunluk kriterleri {#eligibility-criteria} + +- **İlgi**: Topluluk, doğrudan Ethereum ve ekosistemiyle ilgili olmalıdır. +- **Etkinlik seviyesi**: Topluluk, düzenli etkileşimler, gönderiler veya tartışmalarla aktif olmalıdır. Hareketsiz veya etkin olmayan topluluklar kaldırılabilir. +- **Kapsayıcılık**: Topluluk, çeşitliliğe saygı duyan ve her kesimden insanın katılımını teşvik eden sıcak bir ortamı desteklemelidir. +- **Ticari olmayan odak**: Listelemeler, ticari veya tanıtım amaçlı platformlardan ziyade topluluk odaklı alanlar için tasarlanmıştır. + +### İçerik yönergeleri {#content-guidelines} + +- **Uygun içerik**: Toplulukların spam, nefret söylemi, taciz veya yasa dışı faaliyetleri teşvik eden herhangi bir içerikten kaçınarak kendi denetim yönergeleri olmalıdır. +- **Dil**: Birincil dil İngilizce olsa da, diğer dillerdeki toplulukların kapsayıcı ve saygılı bir atmosfer sürdürdükleri sürece başvurmaları teşvik edilir. +- **Şeffaflık**: Topluluğun amacı, kuralları ve moderatörleri hakkında net bilgiler üyelere sunulmalıdır. + +### Diğer öneriler {#other-recommendations} + +- **Erişilebilirlik**: Topluluk forumları, üye olmayı veya kaydolmayı gerektirmeden herkesin okuyabileceği şekilde erişilebilir olmalıdır. +- **Discord sunucusu davetleri**: ethereum.org'a yalnızca güvenilir Discord sunucusu davetlerinin eklenmesi önerilir. İdeal olarak, bu davetler web sitesindeki bir topluluk sayfasına (ör. [ethglobal.com/discord](https://ethglobal.com/discord)) bağlantı vermeli veya resmi bir URL'den (ör. [discord.gg/ethstaker](https://discord.gg/ethstaker) veya [discord.com/invite/ethstaker](https://discord.com/invite/ethstaker)) gelmelidir. + +Bir topluluğun bu yönergelere göre eklenmesi veya kaldırılması gerektiğine inanıyorsanız, lütfen [GitHub depomuzda bir konu açın](https://github.com/ethereum/ethereum-org-website/issues). + ## Forumlar {#forums} -r/ethereum - Ethereum'a dair her şey +r/ethereum - Ethereum ile ilgili her şey r/ethfinance - DeFi dahil olmak üzere Ethereum'un finansal yönü r/ethdev - Ethereum geliştirmeye odaklı -r/ethtrader - trendler ve pazar analizi -r/ethstaker - Ethereum'da hisselemeyle ilgilenen herkes hoş geldiniz -Ethereum Sihirbazları Kardeşliği - Ethereum'daki teknik standartlara odaklanan topluluk +r/ethtrader - trendler ve piyasa analizi +r/ethstaker - Ethereum'da hisselemeyle ilgilenen herkese açık +Fellowship of Ethereum Magicians - Ethereum'daki teknik standartlara yönelik topluluk Ethereum Stackexchange - Ethereum geliştiricileri için tartışma ve yardım -Ethereum Araştırma - kriptoekonomik araştırmalar için en etkili mesaj panosu +Ethereum Research - kriptoekonomik araştırma için en etkili mesaj panosu ## Sohbet odaları {#chat-rooms} -Ethereum Kedi Güdücüler - Ethereum geliştirmeye proje yönetimi desteği sunmaya odaklı topluluk -Ethereum Bilgisayar Korsanları - ETHGlobal tarafından yürütülen Discord sohbeti: tüm dünyadaki Ethereum bilgisayar korsanları için çevrimiçi bir topluluk -CryptoDevs - Ethereum geliştirme odaklı Discord topluluğu -EthStaker Discord - mevcut ve potansiyel kilitleyiciler için topluluk tarafından yönetilen rehberlik, eğitim, destek ve kaynaklar -Ethereum.org web sitesi ekibi - uğrayın ve ethereum.org web geliştirme ve tasarımı ekibi ile ve topluluktan insanlarla sohbet edin -Matos Discord - yaratıcıların, endüstrinin önde gelenlerinin ve Ethereum meraklılarının takıldığı bir web3 yaratıcı topluluğu. Web3 geliştirme, tasarım ve kültürü hakkında tutkuluyuz. Gelin ve bizle beraber inşa edin. -Solidity Gitter - Solidity geliştirme için sohbet (Gitter) -Solidity Matrix - Solidity geliştirme için sohbet (Matrix) -Ethereum StackExchange *- soru cevap forumu* -Peeranha *- merkeziyetsiz soru cevap forumu* +Ethereum Cat Herders - Ethereum geliştirmesine proje yönetimi desteği sunmaya yönelik topluluk +Ethereum Hackers - ETHGlobal tarafından yürütülen Discord sohbeti: dünyanın dört bir yanındaki Ethereum hackerları için çevrimiçi bir topluluk +CryptoDevs - Ethereum geliştirmeye odaklı Discord topluluğu +EthStaker Discord - mevcut ve potansiyel paydaşlar için topluluk tarafından yönetilen rehberlik, eğitim, destek ve kaynaklar +Ethereum.org web sitesi ekibi - ekiple ve topluluktaki kişilerle ethereum.org web geliştirme ve tasarımı hakkında sohbet etmek için uğrayın +Matos Discord - kurucuların, sektör liderlerinin ve Ethereum meraklılarının takıldığı web3 yaratıcıları topluluğu. Web3 geliştirme, tasarım ve kültürü hakkında tutkuluyuz. Gelin, bizimle inşa edin. +Solidity Gitter - Solidity geliştirmesi için sohbet (Gitter) +Solidity Matrix - Solidity geliştirmesi için sohbet (Matrix) +Ethereum Stack Exchange - soru ve cevap forumu +Peera Community Forum - merkeziyetsiz soru ve cevap forumu -## YouTube ve Twitter {#youtube-and-twitter} +## YouTube ve X (eski adıyla Twitter) {#youtube-and-twitter} -Ethereum Vakfı - Ethereum Vakfı'ndan en son haberleri takip edin -@ethereum - Ethereum Foundation'ın resmi hesabı -@ethdotorg- Büyüyen küresel topluluğumuz için oluşturulmuş Ethereum portalı -Etkili Ethereum twitter hesaplarının listesi +Ethereum Foundation - Ethereum Foundation'daki en son gelişmelerden haberdar olun +@ethereum - Topluluk için ana Ethereum hesabı +@ethereumfndn - Ethereum Foundation'ın resmi hesabı +@ethdotorg - Büyüyen küresel topluluğumuz için oluşturulmuş Ethereum portalı
- DAO’lar hakkında daha fazlasını öğrenin + DAO'lar hakkında daha fazla bilgi edinin -
+
diff --git a/public/content/translations/tr/community/research/index.md b/public/content/translations/tr/community/research/index.md index f795c1e1d13..a9aee05565e 100644 --- a/public/content/translations/tr/community/research/index.md +++ b/public/content/translations/tr/community/research/index.md @@ -1,6 +1,6 @@ --- -title: Ethereum araştırmasının aktif alanları -description: Açık araştırmanın farklı alanlarını keşfedin ve nasıl katkı vereceğinizi öğrenin. +title: "Ethereum araştırmasının aktif alanları" +description: "Açık araştırmanın farklı alanlarını keşfedin ve nasıl katkı vereceğinizi öğrenin." lang: tr --- @@ -10,17 +10,17 @@ Ethereum'un en önemli güçlerinden biri, aktif bir araştırma ve mühendislik ## Ethereum araştırmaları nasıl işler? {#how-ethereum-research-works} -Ethereum araştırması genellikle [Merkeziyetsiz Bilimin (DeSci)] prensiplerini destekler şekilde açık ve şeffaftır (https://hackernoon.com/desci-decentralized-science-as-our-chance-to-recover-the-real-science). Kültürü; örneğin çalıştırılabilir defterler aracılığıyla araştırma araçlarını ve çıktılarını mümkün olduğunca açık ve interaktif hale getimeyi hedefler. Ethereum araştırmaları, yeni fikirlerin geleneksel yayınlarda olduğu gibi tekrar tekrar yapılan incelemelerden sonra toplulukla paylaşılmasından ziyade [ethresear.ch] (https://ethresear.ch/) gibi forumlarda açık olarak tartışılmasıyla hızlı bir şekilde ilerler. +Ethereum araştırması genellikle [Merkeziyetsiz Bilimin (DeSci)](https://hackernoon.com/desci-decentralized-science-as-our-chance-to-recover-the-real-science) prensiplerini destekler şekilde açık ve şeffaftır. Kültürü; örneğin çalıştırılabilir defterler aracılığıyla araştırma araçlarını ve çıktılarını mümkün olduğunca açık ve interaktif hale getimeyi hedefler. Ethereum araştırmaları, yeni fikirlerin geleneksel yayınlarda olduğu gibi tekrar tekrar yapılan incelemelerden sonra toplulukla paylaşılmasından ziyade [ethresear.ch](https://ethresear.ch/) gibi forumlarda açık olarak tartışılmasıyla hızlı bir şekilde ilerler. ## Genel araştırma kaynakları {#general-research-resources} Spesifik konudan bağımsız olarak, [ethresear.ch](https://ethresear.ch) ve [Eth R&D discord kanalında](https://discord.gg/qGpsxSA) Ethereum araştırmalarıyla ilgili pek çok bilgi mevcuttur. Bunlar, Ethereum araştırmacılarının en güncel fikirleri ve geliştirme fırsatlarını tartıştığı birincil platformlardır. -[DelphiDigital] tarafından Mayıs 2022'de yayınlanan bu rapor (https://members.delphidigital.io/reports/the-hitchhikers-guide-to-ethereum) Ethereum yol haritasıyla ilgili iyi bir özet sunuyor. +[DelphiDigital](https://members.delphidigital.io/reports/the-hitchhikers-guide-to-ethereum) tarafından Mayıs 2022'de yayınlanan bu rapor Ethereum yol haritasıyla ilgili iyi bir özet sunuyor. ## Fon Kaynakları {#sources-of-funding} -Ethereum araştırmalarında yer alabilir ve bundan gelir elde edebilirsiniz! Mesela [Ethereum Foundation](/foundation/) yakın zamanda bir [Akademik Hibe Fonlama turu] başlattı. (https://esp.ethereum.foundation/academic-grants). [Ethereum hibeleri sayfasında] (/community/grants/) aktif ve yakında ortaya çıkacak fonlama fırsatlarıyla ilgili bilgiler bulabilirsiniz. +Ethereum araştırmalarında yer alabilir ve bundan gelir elde edebilirsiniz! Mesela [Ethereum Foundation](/foundation/) yakın zamanda bir [Akademik Hibe Fonlama turu](https://esp.ethereum.foundation/academic-grants) başlattı.. [Ethereum hibeleri sayfasında](/community/grants/) aktif ve yakında ortaya çıkacak fonlama fırsatlarıyla ilgili bilgiler bulabilirsiniz. ## Protokol araştırması {#protocol-research} @@ -57,7 +57,7 @@ Yürütüm katmanı işlemleri yürütmeyle, [Ethereum sanal makinesini (EVM)](/ - hafif-istemci desteğini geliştirmek; - gaz limiti araştırmaları; -- yeni veri yapılarını sisteme dahil etmek (ör. Verkle Ağaçları). +- ve yeni veri yapılarını sisteme dahil etmek (ör. Verkle Ağaçları). #### Arka plan okuması {#background-reading-1} @@ -83,7 +83,7 @@ Ethereum istemcileri Ethereum protokolünün uygulamalarıdır. İstemci gelişt 1. dedikodu bloklarının, mutabakat mantığının ve blokzincirin başının kaydını tutan bir fikir birliği istemcisi 2. Ethereum Sanal Makinesi'ni destekleyen ve akıllı sözleşmeler ile işlemleri yürürlüğe sokan bir yürütüm işlemcisi -Düğümler ve istemciler hakkında daha detaylı bilgi ve güncel istemcilerin bir listesi için buraya [düğümler ve istemciler sayfası](/developers/docs/nodes-and-clients/) göz atın. Ayrıca bütün Ethereum güncellemelerinin tarihçesini [tarihçe sayfasında](/ethereum-forks/) bulabilirsiniz. +Düğümler ve istemciler hakkında daha fazla ayrıntı ve mevcut tüm istemci uygulamalarının bir listesi için [düğümler ve istemciler sayfasına](/developers/docs/nodes-and-clients/) bakın. Ayrıca bütün Ethereum güncellemelerinin tarihçesini [tarihçe sayfasında](/ethereum-forks/) bulabilirsiniz. ### Yürütüm İstemcileri {#execution-clients} @@ -111,11 +111,11 @@ Ethereum'un ölçeklendirilmesi, Ethereum araştırmacılarının odaklandığı #### Yakın geçmişteki araştırmalar {#recent-research-2} - [Arbitrum'un sıralayıcılar için adil sıralaması](https://eprint.iacr.org/2021/1465) -- [ethresear.ch Katman 2](https://ethresear.ch/c/layer-2/32) +- [Ethresear.ch Katman 2](https://ethresear.ch/c/layer-2/32) - [Toplama merkezli yol haritası](https://ethereum-magicians.org/t/a-rollup-centric-ethereum-roadmap/4698) - [L2Beat](https://l2beat.com/) -### Köprüler{#bridges} +### Köprüler {#bridges} Katman 2'nin daha çok araştırma ve geliştirme gerektiren spesifik alanlarından biri, güvenli ve performanslı köprülerdir. Buna, farklı Katman 2'ler ve Katman 1 ile Katman 2 arası köprüler dahildir. Bu, köprülerin bilgisayar korsanlarının sıklıkla hedef aldığı yerler olması nedeniyle özellikle önemli bir araştırma alanıdır. @@ -189,7 +189,7 @@ Ethereum cüzdanları; tarayıcı eklentileri, masaüstü ve mobil uygulamalar v - [Cüzdanlara giriş](/wallets/) - [Cüzdan güvenliğine giriş](/security/) -- [ethresear.ch Güvenlik](https://ethresear.ch/tag/security) +- [Ethresear.ch Güvenlik](https://ethresear.ch/tag/security) - [EIP-2938 Hesap Soyutlama](https://eips.ethereum.org/EIPS/eip-2938) - [EIP-4337 Hesap Soyutlama](https://eips.ethereum.org/EIPS/eip-4337) @@ -239,7 +239,7 @@ Blok alanı piyasaları, son kullanıcı işlemlerinin doğrudan Ethereum (Katma #### Arka plan okuması {#background-reading-10} -- [Ethereum Blokzinciri için İşlem Ücreti Mekanizması Tasarımı: EIP-1559'a dair bir Ekonomik Analiz] (Tim Roughgarden, 2020)](https://timroughgarden.org/papers/eip1559.pdf) +- [Ethereum Blokzinciri için İşlem Ücreti Mekanizması Tasarımı: EIP-1559'a dair bir Ekonomik Analiz](Tim Roughgarden, 2020)](https://timroughgarden.org/papers/eip1559.pdf) - [EIP-1559'un Simülasyonları (Robust Incentives Group)](https://ethereum.github.io/abm1559) - [Başlangıç prensiplerinden başlayarak toplama ekonomisi](https://barnabe.substack.com/p/understanding-rollup-economics-from?utm_source=url) - [Flash Boys 2.0: Merkeziyetsiz Borsalarda Önden Koşma Saldırısı, İşlemleri Yeniden Sıralama ve Mutabakat İstikrarsızlığı](https://arxiv.org/abs/1904.05234) @@ -266,7 +266,7 @@ Doğrulayıcılar Ethereum'un kendi varlığını (ether) aldatıcı davranışl ### Likit hisseleme ve türevleri {#liquid-staking-and-derivatives} -Likit hisseleme, 32 ETH'den azına sahip olan kullanıcıların DeFi'da kullanılabilen hisselenen ether'i temsil eden bir jeton için ether takaslayarak hisseleme getirisi elde edebilmesini sağlar. Ancak, Ethereum'un güvenliği (ör. merkeziyetsizlik riskleri) üzerindeki etkisi gibi, likit hisseleme ile ilgili teşvik ve piyasa dinamikleri de hâlâ keşfedilmektedir. +Likit hisseleme, 32 ETH'den azına sahip olan kullanıcıların DeFi'da kullanılabilen hisselenen ether'i temsil eden bir jeton için ether takaslayarak hisseleme getirisi elde edebilmesini sağlar. Ancak likit hisseleme ile ilişkili teşvikler ve piyasa dinamiklerinin yanı sıra Ethereum'un güvenliği üzerindeki etkisi de (ör. merkezileşme riskleri) hâlâ keşfedilmektedir. #### Arka plan okuması {#background-reading-12} @@ -364,7 +364,7 @@ Kâhinler, zincir dışındaki verileri blokzincire izin gerektirmeyen ve merkez - [Kâhinlere giriş](/developers/docs/oracles/) -#### Yakın Geçmişteki Araştırmalar {#recent-research-18} +#### Yakın geçmişteki araştırmalar {#recent-research-18} - [Blokzincir kâhinlerinin incelenmesi](https://arxiv.org/pdf/2004.07140.pdf) - [Chainlink teknik dokümanı](https://chain.link/whitepaper) @@ -377,11 +377,11 @@ Ethereum'a yönelik saldırılar, genellikle protokolün kendisindeki güvenlik - [Wormhole istismar raporu](https://blog.chainalysis.com/reports/wormhole-hack-february-2022/) - [Ethereum sözleşme saldırıları sonrası analizlerin listesi](https://forum.openzeppelin.com/t/list-of-ethereum-smart-contracts-post-mortems/1191) -- [Rekt Haberleri](https://twitter.com/RektHQ?s=20\&t=3otjYQdM9Bqk8k3n1a1Adg) +- [Rekt Haberleri](https://x.com/RektHQ?s=20&t=3otjYQdM9Bqk8k3n1a1Adg) #### Yakın geçmişteki araştırmalar {#recent-research-19} -- [ethresear.ch Uygulamaları](https://ethresear.ch/c/applications/18) +- [Ethresear.ch Uygulamaları](https://ethresear.ch/c/applications/18) ### Teknoloji yığını {#technology-stack} diff --git a/public/content/translations/tr/community/support/index.md b/public/content/translations/tr/community/support/index.md index 2f6db01f9f1..e2df386e52e 100644 --- a/public/content/translations/tr/community/support/index.md +++ b/public/content/translations/tr/community/support/index.md @@ -1,26 +1,26 @@ --- title: Ethereum destek -description: Ethereum ekosisteminde destek alın. +description: "Ethereum ekosisteminde destek alın." lang: tr --- -# Ethereum destek {#support} +# Ethereum desteği {#support} -## Resmi Ethereum destek {#official-support} +## Resmî Ethereum desteği {#official-support} Resmi Ethereum desteği mi arıyorsunuz? Bilmeniz gereken ilk şey, Ethereum'un merkeziyetsiz olduğudur. Bu, hiçbir merkezi organizasyon, kuruluş veya kişinin Ethereum'a sahip olmadığı ve bu nedenle resmi destek kanallarının bulunmadığı anlamına gelir. -Ethereum'un merkeziyetsiz yapısını anlamak çok önemlidir çünkü Ethereum için resmi destek olduğunu iddia eden herkes muhtemelen sizi dolandırmaya çalışıyordur! Dolandırıcılara karşı en iyi koruma, kendinizi eğitmek ve güvenliği ciddiye almaktır. +Ethereum'un merkeziyetsiz yapısını anlamak çok önemlidir çünkü **Ethereum için resmî destek olduğunu iddia eden herkes muhtemelen sizi dolandırmaya çalışıyordur!** Dolandırıcılara karşı en iyi koruma, kendinizi eğitmek ve güvenliği ciddiye almaktır. - Ethereum güvenliği ve dolandırıcılık önleme + Ethereum güvenliği ve dolandırıcılığı önleme Ethereum'un temellerini öğrenin -Resmi desteğin olmamasına rağmen, Ethereum ekosistemindeki birçok grup, topluluk ve proje yardımcı olmaktan mutluluk duyar ve bu sayfada birçok faydalı bilgi ve kaynak bulabilirsiniz. Başka sorularınız mı var? [ethereum.org Discord](https://discord.gg/ethereum-org)'una katılın, yardım etmeye çalışacağız. +Resmi desteğin olmamasına rağmen, Ethereum ekosistemindeki birçok grup, topluluk ve proje yardımcı olmaktan mutluluk duyar ve bu sayfada birçok faydalı bilgi ve kaynak bulabilirsiniz. Başka sorularınız mı var? [ethereum.org Discord](https://discord.gg/ethereum-org) topluluğuna katılın, yardım etmeye çalışacağız. ## Sıkça sorulan sorular {#faq} @@ -32,43 +32,37 @@ Ethereum'da gönderilen bir işlem geri alınamaz. Ne yazık ki, ETH'yi yanlış Ethereum çekilişleri, ETH'nizi çalmak için tasarlanmış dolandırıcılıklardır. Gerçek olamayacak kadar iyi görünen tekliflere kapılmayın. Bir çekiliş adresine ETH gönderirseniz, hem bir çekilişe katılmazsınız hem de paranızı geri alamazsınız. -[Dolandırıcılığı önleme hakkında daha fazla bilgi](/security/#common-scams) +[Dolandırıcılığı önleme hakkında daha fazlası](/security/#common-scams) -### İşlemim tıkandı {#stuck-transaction} +### İşlemim takılı kaldı {#stuck-transaction} Ağ talebi nedeniyle gerekenden daha düşük bir işlem ücreti gönderdiyseniz, Ethereum'daki işlemler bazen sıkışabilir. Birçok cüzdan, işleme izin vermek için aynı işlemi daha yüksek bir ücretle yeniden gönderme seçeneği sunar. Alternatif olarak, kendi adresinize bir işlem göndererek ve bekleyen işlemle aynı nonce değerini kullanarak bekleyen bir işlemi iptal edebilirsiniz. -[MetaMask'te bekleyen bir işlem nasıl hızlandırılır veya iptal edilir](https://metamask.zendesk.com/hc/en-us/articles/360015489251-How-to-speed-up-or-cancel-a-pending-transaction) +[MetaMask'ta bekleyen bir işlemi hızlandırma veya iptal etme](https://metamask.zendesk.com/hc/en-us/articles/360015489251-How-to-speed-up-or-cancel-a-pending-transaction) -[Bekleyen Ethereum işlemleri nasıl iptal edilir](https://info.etherscan.com/how-to-cancel-ethereum-pending-transactions/) +[Bekleyen Ethereum işlemlerini iptal etme](https://info.etherscan.com/how-to-cancel-ethereum-pending-transactions/) ### Ethereum madenciliği nasıl yapılır? {#mining-ethereum} -Ethereum madenciliği artık mümkün değildir. Ethereum [iş ispatından](/glossary/#pow) [hisse ispatına](/glossary/#pos) geçtiğinde madencilik kapatılmıştı. Artık madenciler yerine Ethereum'un doğrulayıcıları var. Herkes ETH [hisseleme](/glossary/#staking) yapabilir ve ağı güvence altına almak için doğrulayıcı yazılımı çalıştırarak hisseleme ödülleri alabilir. - - +Ethereum madenciliği artık mümkün değildir. Ethereum, [iş ispatından](/glossary/#pow) [hisse ispatına](/glossary/#pos) geçtiğinde madencilik durduruldu. Artık madenciler yerine Ethereum'un doğrulayıcıları var. Herkes, ağı güvence altına almak için doğrulayıcı yazılımı çalıştırarak ETH [hisseleyebilir](/glossary/#staking) ve hisseleme ödülleri alabilir. ### Nasıl bir paydaş/doğrulayıcı olabilirim? {#how-to-stake} -Doğrulayıcı olmak için Ethereum para yatırma sözleşmesine 32 ETH yatırmanız ve bir doğrulayıcı düğümü kurmanız gerekir. [Hisseleme sayfalarımızda](/staking) ve [hisseleme başlama noktasında](https://launchpad.ethereum.org/) daha fazla bilgi mevcuttur. - +Doğrulayıcı olmak için Ethereum para yatırma sözleşmesine 32 ETH yatırmanız ve bir doğrulayıcı düğümü kurmanız gerekir. Daha fazla bilgiye [hisseleme sayfalarımızdan](/staking) ve [hisseleme başlama noktasından](https://launchpad.ethereum.org/) ulaşabilirsiniz. - -## Dapp geliştirmek {#building-support} +## Merkeziyetsiz uygulamalar oluşturma {#building-support} Geliştirme zor olabilir. İşte size yardımcı olmaktan mutluluk duyan deneyimli Ethereum geliştiricileri bulunan geliştirme odaklı bazı alanlar. - [Alchemy University](https://university.alchemy.com/#starter_code) -- [CryptoDevs Discord'u](https://discord.com/invite/5W5tVb3) +- [CryptoDevs discord](https://discord.com/invite/5W5tVb3) - [Ethereum StackExchange](https://ethereum.stackexchange.com/) - [Web3 University](https://www.web3.university/) - [LearnWeb3](https://discord.com/invite/learnweb3) -[Ethereum geliştirici kaynakları](/developers/) bölümümüzde de belgelere ve geliştirme kılavuzlarına ulaşabilirsiniz. - - +[Ethereum geliştirici kaynakları](/developers/) bölümümüzde belgelere ve geliştirme kılavuzlarına da ulaşabilirsiniz. -### Araçlandırma {#dapp-tooling} +### Araçlar {#dapp-tooling} Sorunuz belirli bir araç, proje veya kütüphane ile mi ilgili? Çoğu projede sizi desteklemeye adanmış sohbet sunucuları veya forumlar bulunur. @@ -81,20 +75,16 @@ Sorunuz belirli bir araç, proje veya kütüphane ile mi ilgili? Çoğu projede - [Alchemy](http://alchemy.com/discord) - [Tenderly](https://discord.gg/fBvDJYR) - - ## Bir düğüm çalıştırma {#node-support} Bir düğüm veya doğrulayıcı çalıştırıyorsanız, başlamanıza yardımcı olmaya adanmış bazı toplulukları burada bulabilirsiniz. -- [EthStaker Discord'u](https://discord.gg/ethstaker) -- [EthStaker Reddit'i](https://www.reddit.com/r/ethstaker) +- [EthStaker discord](https://discord.gg/ethstaker) +- [EthStaker reddit](https://www.reddit.com/r/ethstaker) Ethereum istemcileri geliştiren ekiplerin çoğu, destek alabileceğiniz ve soru sorabileceğiniz özel, herkese açık alanlara da sahiptir. - - -### Yürütme istemcileri {#execution-clients} +### Yürütüm İstemcileri {#execution-clients} - [Geth](https://discord.gg/FqDzupGyYf) - [Nethermind](https://discord.gg/YJx3pm8z5C) @@ -102,14 +92,13 @@ Ethereum istemcileri geliştiren ekiplerin çoğu, destek alabileceğiniz ve sor - [Erigon](https://github.com/ledgerwatch/erigon/issues) - [Reth](https://github.com/paradigmxyz/reth/discussions) - - -### Mutabakat istemcileri {#consensus-clients} +### Mutabakat İstemcileri {#consensus-clients} - [Prysm](https://discord.gg/prysmaticlabs) - [Nimbus](https://discord.gg/nSmEH3qgFv) - [Lighthouse](https://discord.gg/cyAszAh) - [Teku](https://discord.gg/7hPv2T6) - [Lodestar](https://discord.gg/aMxzVcr) +- [Grandine](https://discord.gg/H9XCdUSyZd) -Ayrıca [burada bir düğümün nasıl çalıştırılacağını öğrenebilirsiniz](/developers/docs/nodes-and-clients/run-a-node/). +Ayrıca [buradan bir düğümün nasıl çalıştırılacağını öğrenebilirsiniz](/developers/docs/nodes-and-clients/run-a-node/). diff --git a/public/content/translations/tr/contributing/adding-desci-projects/index.md b/public/content/translations/tr/contributing/adding-desci-projects/index.md index f4b6319c65c..bd4d0949af3 100644 --- a/public/content/translations/tr/contributing/adding-desci-projects/index.md +++ b/public/content/translations/tr/contributing/adding-desci-projects/index.md @@ -1,6 +1,6 @@ --- title: Merkeziyetsiz Bilim projeleri ekleme -description: Ethereum.org'da merkeziyetsiz bilim sayfasındaki projelere bağlantılar eklerken kullandığımız politika +description: "ethereum.org'daki Merkeziyetsiz Bilim sayfasına proje bağlantıları eklerken kullandığımız politika" lang: tr --- @@ -14,21 +14,21 @@ Herkes, ethereum.org'daki Merkeziyetsiz Bilim sayfasındaki listeye proje önerm ### Dahil edilme kriterleri: olmazsa olmazlar {#the-must-haves} -- **Açık kaynak kodu/verisi** - Kodların ve verilerin açıklığı, Merkeziyetsiz Bilimin ana prensiplerindendir, bu yüzden merkeziyetsiz bilim projeleri kapalı kaynak olmamalıdır. Kod temeli erişilebilir ve tercihen "çekme talebine" açık olmalıdır. -- **Merkeziyetsiz bilim projeleri bariz bir şekilde merkeziyetsiz olmalıdır** - Bu, bir DAO tarafından yönetilmek ya da merkeziyetsiz cüzdanları da içeren merkezi olmayan bir teknoloji yığınıyla geliştirmek şeklinde olabilir. Muhtemelen Ethereum'da denetlenebilir akıllı sözleşmeleri içerir. +- **Açık kaynak kodu/verisi** - Kodun ve verinin açıklığı Merkeziyetsiz Bilim'in temel bir ilkesidir, bu nedenle Merkeziyetsiz Bilim projeleri kapalı kaynaklı olmamalıdır. Kod temeli erişilebilir ve tercihen "çekme talebine" açık olmalıdır. +- **Merkeziyetsiz Bilim projeleri kanıtlanabilir şekilde merkeziyetsiz olmalıdır** - Bu, bir DAO tarafından yönetilmeyi veya saklamasız cüzdanlar da dahil olmak üzere merkeziyetsiz bir teknoloji yığını ile inşa edilmeyi içerebilir. Muhtemelen Ethereum'da denetlenebilir akıllı sözleşmeleri içerir. - **Dürüst ve doğru listeleme bilgileri** - Projelerden önerilen herhangi bir listelemenin dürüst ve doğru bilgilerle gelmesi beklenir. Ürününüzü, örneğin "açık kaynaklı" değilken öyleymiş gibi duyurarak listeleme bilgilerini tahrif eden ürünler kaldırılacaktır. -- **Bilime erişimi geliştirmeye yönelik kanıtlanabilir taahhüt** - Bir merkeziyetsiz bilim projesi, bilime katılımı genişlettiğini sadece jeton/NFT sahiplerine değil, genel halka da ifade edebilmelidir. -- **Küresel olarak erişilebilir** - Projeniz, belirli kişilerin hizmetinize erişmesini engelleyen coğrafi kısıtlamalara veya KYC koşullarına sahip değildir. -- **Bilgilendirici web sitesi ve dokümanlar** - Siteyi ziyaret eden kişilerin projenin gerçekte ne yaptığını anlayabilmesi, bilimin altyapısının merkeziyetsizliğe nasıl katkıda bulunduğunu ve nasıl katılacaklarını öğrenebilmesi önemlidir. -- **Proje, Ethereum ekosisteminin bir parçası olmalıdır** - Ethereum.org olarak, merkeziyetsiz bilim hareketi için Ethereum'un (ve Katman 2'lerinin) uygun bir temel katman olduğuna inanıyoruz. -- **Proje, oldukça iyi yapılandırılmıştır** - Proje, projenin hizmetlerine birkaç ay boyunca erişebilmiş gerçek kullanıcılara sahiptir. +- **Bilime erişimi genişletmeye yönelik kanıtlanabilir taahhüt** - Bir Merkeziyetsiz Bilim projesi, bilime katılımı sadece token/NFT sahiplerine değil, genel halka nasıl genişlettiğini ifade edebilmelidir. +- **Küresel olarak erişilebilir** - Projeniz, belirli kişilerin hizmetinize erişmesini engelleyen coğrafi sınırlamalara veya KYC gereksinimlerine sahip değildir. +- **Bilgilendirici web sitesi ve dokümantasyon** - Proje web sitesini ziyaret edenlerin projenin gerçekte ne yaptığını, bilim altyapısının merkeziyetsizleştirilmesine nasıl katkıda bulunduğunu ve nasıl katılabileceklerini anlamaları önemlidir. +- **Proje, Ethereum ekosisteminin bir parçası olmalıdır** - ethereum.org olarak, DeSci hareketinin temel katmanı için Ethereum'un (ve Katman 2'lerinin) uygun olduğuna inanıyoruz. +- **Proje yeterince oturmuş olmalıdır** - Projenin, hizmetlerine birkaç aydır erişebilen gerçek kullanıcıları olmalıdır. ### Olması istenen özellikler -- **Birden fazla dilde mevcut olma** - Projeniz, tüm dünyadaki kullanıcıların erişim sağlayabilmesi için birden çok dile çevrilir. -- **Eğitici kaynaklar** - Ürününüz, kullanıcılara yardımcı olmak ve onları eğitmek için iyi tasarlanmış bir oryantasyon deneyimine sahip olmalıdır. Alternatif olarak, makaleler veya videolar gibi nasıl yapılır içeriğinin kanıtına da sahip olabilir. -- **Üçüncü taraf denetimleri** - Ürününüz, güvenlik açıkları için güvenilir bir üçüncü tarafın profesyonel denetiminden geçirilir. -- **İletişim noktası** - Proje için bir iletişim noktası (bir DAO ya da topluluktan bir temsilci tarafından olabilir), değişiklikler yapıldığında doğru bilgi almada bize büyük ölçüde yardımcı olacaktır. Bu, geleceğe ait bilgileri toplarken ethereum.org'u güncelleme sürecini yönetilebilir halde tutacaktır. +- **Birden fazla dilde mevcut olma** - Projeniz, dünyanın dört bir yanındaki kullanıcıların erişebilmesi için birden çok dile çevrilmiştir. +- **Eğitici kaynaklar** - Ürününüz, kullanıcılara yardımcı olmak ve onları eğitmek için iyi tasarlanmış bir başlangıç deneyimine sahip olmalıdır. Alternatif olarak, makaleler veya videolar gibi nasıl yapılır içeriğinin kanıtına da sahip olabilir. +- **Üçüncü taraf denetimleri** - Ürününüz, güvenilir bir üçüncü taraf tarafından güvenlik açıklarına karşı profesyonelce denetlenmiş olmalıdır. +- **İrtibat kişisi** - Proje için bir irtibat kişisinin (bu bir DAO veya topluluk temsilcisi olabilir) bulunması, değişiklikler yapıldığında doğru bilgi almamıza büyük ölçüde yardımcı olacaktır. Bu, geleceğe ait bilgileri toplarken ethereum.org'u güncelleme sürecini yönetilebilir halde tutacaktır. ## Bakım {#maintenance} @@ -37,8 +37,8 @@ Ethereum'un akıcı yapısında olduğu gibi, ekipler ve ürünler gelir ve gide - Listelenen tüm projelerin kriterlerimizi hâlâ karşıladığından emin olmak - Şu anda listelenenlerden daha fazla kriterlerimizi karşılayan önerilen ürünler olmadığını doğrulamak -Ethereum, açık kaynak topluluğu tarafından yönetilir ve onu güncel tutmaları için topluluğa güveniriz. Listelenmiş projelerde güncellenmesi gereken herhangi bir bilgi olduğunu fark ettiyseniz, lütfen GitHub depomuzda bir sorun ya da çekme isteği açın. +ethereum.org'un bakımı açık kaynak topluluğu tarafından yapılmaktadır ve güncel tutulması için topluluğa güveniyoruz. Listelenmiş projelerde güncellenmesi gereken herhangi bir bilgi olduğunu fark ettiyseniz, lütfen GitHub depomuzda bir sorun ya da çekme isteği açın. ## Kullanım koşulları {#terms-of-use} -Ayrıca lütfen [kullanım koşullarımıza](/terms-of-use/) başvurun. Ethereum.org'daki bilgiler, yalnızca genel bilgi amaçlı verilmektedir. +Lütfen [kullanım koşullarımıza](/terms-of-use/) da göz atın. Ethereum.org'daki bilgiler, yalnızca genel bilgi amaçlı verilmektedir. diff --git a/public/content/translations/tr/contributing/adding-developer-tools/index.md b/public/content/translations/tr/contributing/adding-developer-tools/index.md index 5731d16cc9d..ff61eaed37c 100644 --- a/public/content/translations/tr/contributing/adding-developer-tools/index.md +++ b/public/content/translations/tr/contributing/adding-developer-tools/index.md @@ -1,7 +1,7 @@ --- -title: Geliştirici araçları ekleme +title: "Geliştirici araçları ekleme" lang: tr -description: Ethereum.org'da geliştirici araçlarını listeleme kriterlerimiz +description: "Ethereum.org'da geliştirici araçlarını listeleme kriterlerimiz" --- # Geliştirici araçları ekleme {#contributing-to-ethereumorg-} @@ -10,11 +10,11 @@ description: Ethereum.org'da geliştirici araçlarını listeleme kriterlerimiz Kaçırdığımız yararlı bir geliştirici aracı varsa, uygun bir yerde önermekten çekinmeyin. -Şu anda [geliştirici portalımız](/developers/) aracılığıyla geliştirici araçlarını listeliyoruz. +Şu anda [geliştirici portalımızda](/developers/) geliştirici araçlarını listeliyoruz. **Uygun sayfalara yeni eklemeler önermekten çekinmeyin.** -## Nasıl karar veririz {#ways-to-contribute} +## Nasıl karar veriyoruz {#ways-to-contribute} Geliştirici aracı gönderimleri aşağıdaki kriterlere göre değerlendirilecektir: @@ -46,7 +46,7 @@ Ethereum alanındaki birçok proje açık kaynak kodludur. Topluluk geliştirici --- -## Ürün Siparişi {#product-ordering} +## Ürün Sıralaması {#product-ordering} Ürünler özel olarak sıralanmadıkça, örneğin alfabetik olarak, uzak geçmişten yakın geçmişe göre sayfaya eklenir. Diğer bir deyişle, en yeni ürünler listenin en altına eklenir. diff --git a/public/content/translations/tr/contributing/adding-exchanges/index.md b/public/content/translations/tr/contributing/adding-exchanges/index.md index c996754bd38..a6031e25bee 100644 --- a/public/content/translations/tr/contributing/adding-exchanges/index.md +++ b/public/content/translations/tr/contributing/adding-exchanges/index.md @@ -1,6 +1,6 @@ --- title: Borsa ekleme -description: Ethereum.org'a borsa eklerken kullandığımız politika +description: "Ethereum.org'a borsa eklerken kullandığımız politika" lang: tr --- @@ -16,7 +16,7 @@ Bu sayfa, bir kullanıcının nerede yaşadıklarını girmesine ve hangi borsal Bu bağlamdan dolayı, bir borsa önerdiğinizde bazı özel bilgilere ihtiyacımız var. -**NOT:** Merkeziyetsiz bir borsayı listelemek istiyorsanız, [cüzdanları ve dapp'leri listeleme politikamıza](/contributing/adding-products/) göz atın. +**NOT:** Merkeziyetsiz bir borsayı listelemek istiyorsanız, [cüzdanları ve merkeziyetsiz uygulamaları listeleme politikamıza](/contributing/adding-products/) göz atın. ## İhtiyacımız olanlar {#what-we-need} @@ -25,7 +25,7 @@ Bu bağlamdan dolayı, bir borsa önerdiğinizde bazı özel bilgilere ihtiyacı - Borsanın meşru bir ticaret şirketi olduğunun kanıtı - Sahip olabileceğiniz herhangi bir ek bilgi: Bu, şirket hakkında faaliyet yılları, finansal destek vb. gibi bilgiler olabilir. -Bu bilgilere, [kullanıcıların kullanabilecekleri bir borsa bulmalarına yardımcı olabilmemiz](/get-eth/#country-picker) için ihtiyacımız var. +Bu bilgilere, [kullanıcıların kullanabilecekleri bir borsa bulmalarına doğru bir şekilde yardımcı olabilmemiz](/get-eth/#country-picker) için ihtiyacımız var. Ve böylece ethereum.org, değişimin meşru ve güvenli bir hizmet olduğundan daha emin olabilir. @@ -36,5 +36,5 @@ Ve böylece ethereum.org, değişimin meşru ve güvenli bir hizmet olduğundan Ethereum.org'a bir borsa eklemek istiyorsanız, GitHub'da bir konu oluşturun. - Bir konu oluştur + Bir konu oluşturun diff --git a/public/content/translations/tr/contributing/adding-glossary-terms/index.md b/public/content/translations/tr/contributing/adding-glossary-terms/index.md index 27e64e539b0..11131b419cd 100644 --- a/public/content/translations/tr/contributing/adding-glossary-terms/index.md +++ b/public/content/translations/tr/contributing/adding-glossary-terms/index.md @@ -1,12 +1,12 @@ --- -title: Sözlük terimleri ekleme +title: "Sözlük terimleri ekleme" lang: tr -description: Ethereum.org sözlüğüne yeni terimler ekleme kriterlerimiz +description: "Ethereum.org sözlüğüne yeni terimler ekleme kriterlerimiz" --- # Sözlük terimleri ekleme {#contributing-to-ethereumorg-} -Bu alan her gün değişiyor. Ethereum kullanıcılarının sözlüğüne sürekli olarak yeni terimler giriyor ve Ethereum ile ilgili her şey için doğru, güncel bir referans sağlamak için yardımınıza ihtiyacımız var. Mevcut [sözlüğümüze](/glossary/) göz atın ve yardım etmek istiyorsanız aşağıya bakın! +Bu alan her gün değişiyor. Ethereum kullanıcılarının sözlüğüne sürekli olarak yeni terimler giriyor ve Ethereum ile ilgili her şey için doğru, güncel bir referans sağlamak için yardımınıza ihtiyacımız var. Mevcut [sözlüğe](/glossary/) göz atın ve yardım etmek istiyorsanız aşağıya bakın! ## Kriterler {#criteria} @@ -23,4 +23,4 @@ Yeni sözlük terimleri aşağıdaki kriterlere göre değerlendirilecektir: ## Teriminizi ekleyin {#how-decisions-about-the-site-are-made} -Ethereum.org'a bir sözlük terimi eklemek istiyorsanız ve kriterleri karşılıyorsa, [GitHub'da bir konu oluşturun](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=feature+%3Asparkles%3A%2Ccontent+%3Afountain_pen%3A&template=suggest_glossary_term.yaml). +ethereum.org'a kriterleri karşılayan bir sözlük terimi eklemek isterseniz [GitHub'da bir konu oluşturun](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=feature+%3Asparkles%3A%2Ccontent+%3Afountain_pen%3A&template=suggest_glossary_term.yaml). diff --git a/public/content/translations/tr/contributing/adding-layer-2s/index.md b/public/content/translations/tr/contributing/adding-layer-2s/index.md index 4952c0b9de5..4609fe56ba1 100644 --- a/public/content/translations/tr/contributing/adding-layer-2s/index.md +++ b/public/content/translations/tr/contributing/adding-layer-2s/index.md @@ -1,19 +1,19 @@ --- title: Katman 2'leri Ekleme -description: Ethereum.org'a katman 2 eklerken kullandığımız politika +description: "Ethereum.org'a katman 2 eklerken kullandığımız politika" lang: tr --- -# Katman 2'leri Ekleme {#adding-layer-2} +# Katman 2'leri ekleme {#adding-layer-2} Kullanıcıların katman 2 alanında güvenli ve kendinden emin bir şekilde gezinebilmeleri için mümkün olan en iyi kaynakları listelediğimizden emin olmak istiyoruz. -Herkes ethereum.org'da bir katman 2 eklemeyi önermekte özgürdür. Gözden kaçırdığımız bir katman 2 varsa, **[lütfen belirtin](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=feature+%3Asparkles%3A%2Ccontent+%3Afountain_pen%3A&template=suggest_layer2.yaml)!** +Herkes ethereum.org'da bir katman 2 eklemeyi önermekte özgürdür. Gözden kaçırdığımız bir katman 2 varsa, **[lütfen onu önerin](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=feature+%3Asparkles%3A%2Ccontent+%3Afountain_pen%3A&template=suggest_layer2.yaml)!** Şu anda aşağıdaki sayfalarda Katman 2'leri listeliyoruz: - [İyimser toplamalar](/developers/docs/scaling/optimistic-rollups/) -- [Sıfır-bilgi toplamalar](/developers/docs/scaling/zk-rollups/) +- [Sıfır bilgili toplamalar](/developers/docs/scaling/zk-rollups/) - [Katman 2](/layer-2/) Katman 2, Ethereum için nispeten yeni ve heyecan verici bir paradigmadır. Ethereum.org'da değerlendirilmek üzere adil bir çerçeve oluşturmaya çalıştık, ancak listeleme kriterleri zamanla değişecek ve gelişecektir. @@ -24,8 +24,8 @@ Katman 2, Ethereum için nispeten yeni ve heyecan verici bir paradigmadır. Ethe **L2BEAT'te listeleme** -- Bu projenin dikkate alınabilmesi için [L2BEAT](https://l2beat.com)'te listelenmesi gerekir. L2BEAT, katman 2 projelerini değerlendirmek için kullandığımız sağlam bir katman 2 risk değerlendirmesi sunar. **Proje L2BEAT'te yer almıyorsa, onu ethereum.org'da Katman 2 olarak listelemeyeceğiz.** -- [Katman 2 projenizi L2BEAT'e nasıl ekleyeceğinizi öğrenin](https://github.com/l2beat/l2beat/blob/master/CONTRIBUTING.md). +- Değerlendirmeye alınması için bu projenin [L2BEAT](https://l2beat.com) üzerinde listelenmesi gerekir. L2BEAT, katman 2 projelerini değerlendirmek için kullandığımız sağlam bir katman 2 risk değerlendirmesi sunar. **Proje L2BEAT'te yer almıyorsa, onu ethereum.org'da Katman 2 olarak listelemeyeceğiz.** +- [L2 projenizi L2BEAT'e nasıl ekleyeceğinizi öğrenin](https://github.com/l2beat/l2beat/blob/master/CONTRIBUTING.md). **Açık kaynak** @@ -42,7 +42,7 @@ _Veri kullanılabilirliği veya güvenlik için Ethereum kullanmayan diğer öl **Veri kullanılabilirliği için Ethereum** -- Veri kullanılabilirliği, diğer ölçeklendirme çözümleri ile katman 2 arasında önemli bir ayırt edici faktördür. Bir proje, listeleme için dikkate alınması gereken veri kullanılabilirliği için Ethereum Mainnet'i **kullanmalıdır**. +- Veri kullanılabilirliği, diğer ölçeklendirme çözümleri ile katman 2 arasında önemli bir ayırt edici faktördür. Listelenmek için değerlendirilebilmesi için bir projenin veri kullanılabilirliği amacıyla Ethereum Ana Ağını kullanması **zorunludur**. **Köprüler** @@ -78,7 +78,7 @@ _Veri kullanılabilirliği veya güvenlik için Ethereum kullanmayan diğer öl **Katman 2 ekosistemindeki dapp'lere bağlantılar** -- Kullanıcıların bu katman 2'de neler yapabilecekleri hakkında bilgi sağlayabilmek istiyoruz. (örn. https://portal.arbitrum.io/, https://www.optimism.io/apps) +- Kullanıcıların bu katman 2'de neler yapabilecekleri hakkında bilgi sağlayabilmek istiyoruz. (ör., https://portal.arbitrum.io/, https://www.optimism.io/apps) **Token sözleşme listeleri** @@ -93,5 +93,5 @@ _Veri kullanılabilirliği veya güvenlik için Ethereum kullanmayan diğer öl Ethereum.org'a bir katman 2 eklemek istiyorsanız, GitHub'da bir konu oluşturun. - Bir konu oluştur + Bir konu oluşturun diff --git a/public/content/translations/tr/contributing/adding-products/index.md b/public/content/translations/tr/contributing/adding-products/index.md index 22e8e8b631d..019a71c91b7 100644 --- a/public/content/translations/tr/contributing/adding-products/index.md +++ b/public/content/translations/tr/contributing/adding-products/index.md @@ -1,6 +1,6 @@ --- -title: Ürün ekleme -description: Ethereum.org'a merkeziyetsiz uygulamalar eklerken kullandığımız politika +title: "Ürün ekleme" +description: "Ethereum.org'a merkeziyetsiz uygulamalar eklerken kullandığımız politika" lang: tr --- @@ -17,11 +17,11 @@ Merkeziyetsiz uygulamalar şu anda aşağıdakilerde listeleniyor: Yeni eklemeleri memnuniyetle karşılasak da, mevcut cüzdanları ve merkeziyetsiz uygulamaları kullanıcılarımız için oluşturmaya çalıştığımız bir deneyime dayanarak seçtik. Bunlar, bazı tasarım ilkelerimize temel almaktadır: -- _İlham Verici_: ethereum.org üzerindeki herhangi bir şey kullanıcılara yeni bir şey sunmalı -- _İyi bir hikâye_: listelenen şey bir "Aklıma bir fikir geldi!" anı yaşatmalı -- _Güvenilir_: Kullanıcılara yönelik riski en aza indirmek için her şey meşru işletmeler/projeler olmalıdır +- _İlham verici_: ethereum.org'daki herhangi bir şey kullanıcılara yeni bir şey sunmalıdır. +- _İyi bir hikâye_: listelenen şey, bir "vay canına" anı yaşatmalıdır. +- _Güvenilir_: Kullanıcılara yönelik riski en aza indirmek için her şeyin meşru işletmeler/projeler olması gerekir. -Genel olarak **ethereum.org, yeni kullanıcılar için "kesintisiz ilk katılım deneyimi" sağlamak istiyor**. Bu nedenle, aşağıdakilere dayalı olarak merkeziyetsiz uygulamalar ekliyoruz: +Genel olarak **ethereum.org, yeni kullanıcılara "sorunsuz bir başlangıç deneyimi" sunmayı amaçlar**. Bu nedenle, aşağıdakilere dayalı olarak merkeziyetsiz uygulamalar ekliyoruz: - kullanım kolaylığı - diğer ürünlerle birlikte çalışabilirlik @@ -34,26 +34,26 @@ Genel olarak **ethereum.org, yeni kullanıcılar için "kesintisiz ilk katılım ### Dahil edilme kriterleri: olmazsa olmazlar {#criteria-for-inclusion-the-must-haves} -- **Güvenlik testi yapılmış bir ürün** – ister denetim yoluyla, ister dahili güvenlik ekibiyle veya başka bir yöntemle olsun, ürününüzün güvenliği güvenilir bir şekilde test edilmelidir. Bu, kullanıcılarımıza yönelik riski azaltır ve güvenliği ciddiye aldığınızı gösterir. -- **6 ayı aşkın süredir "kullanımda" olan bir ürün**: Bu, güvenliğin bir başka göstergesidir. 6 ay, kritik hataların ve açıkların bulunması için iyi bir zaman dilimidir. -- **Aktif bir ekip tarafından üzerinde çalışılıyor**: Bu, kaliteyi korumaya ve bir kullanıcı sorgularıyla ilgili destek almasını sağlamaya yardımcı olur. -- **Dürüst ve doğru listeleme bilgileri**: Projelerden önerilen tüm listelemelerin dürüst ve doğru bilgilerle gelmesi beklenir. Ürününüzü "açık kaynak" değilken öyleymiş gibi duyurmak gibi listeleme bilgilerini tahrif eden ürünler kaldırılacaktır. +- **Güvenlik testi yapılmış ürün** – denetim, şirket içi güvenlik ekibi veya başka bir yöntemle olsun, ürününüzün güvenliği güvenilir bir şekilde test edilmelidir. Bu, kullanıcılarımıza yönelik riski azaltır ve güvenliği ciddiye aldığınızı gösterir. +- **6 ayı aşkın süredir "yayında" olan bir ürün** – bu, güvenliğin başka bir göstergesidir. 6 ay, kritik hataların ve açıkların bulunması için iyi bir zaman dilimidir. +- **Aktif bir ekip tarafından geliştirilmesi** – bu, kaliteyi sağlamaya ve bir kullanıcının soruları için destek almasına yardımcı olur. +- **Dürüst ve doğru listeleme bilgileri** - Projelerden önerilen listelemelerin dürüst ve doğru bilgiler içermesi beklenir. Ürününüzü "açık kaynak" değilken öyleymiş gibi duyurmak gibi listeleme bilgilerini tahrif eden ürünler kaldırılacaktır. -### Sıralama için kriter: olursa iyi olacak şeyler {#criteria-for-ranking-the-nice-to-haves} +### Sıralama kriterleri: olması iyi olanlar {#criteria-for-ranking-the-nice-to-haves} Merkeziyetsiz uygulamanız aşağıdaki kriterler nedeniyle ethereum.org'da diğerleri kadar belirgin bir şekilde listelenmemiş olabilir. -**Merkeziyetsiz Uygulamalar** +**Merkeziyetsiz uygulamalar** -- **Listelenen cüzdanların çoğu ile erişilebilmesi** – merkeziyetsiz uygulamalar, ethereum.org'da listelenen cüzdanların çoğuyla çalışmalıdır. -- **Kullanıcıların bunu kendileri deneyebilmeleri –** bireysel bir kullanıcı, merkeziyetsiz uygulamanızı kullanabilmeli ve somut bir şey elde edebilmelidir. -- **Başlangıç** – ürününüz, kullanıcılara yardımcı olmak ve onları eğitmek için iyi tasarlanmış bir başlangıç deneyimine sahip olmalıdır. Alternatif olarak, makaleler veya videolar gibi nasıl yapılır içeriğinin kanıtına da sahip olabilir. -- **Gözetimsiz** – kullanıcılar kendi fonlarını kontrol eder. Ürününüz kaybolursa, kullanıcılar yine de fonlarına erişebilir ve bunları taşıyabilir. -- **Küresel olarak erişilebilir** – ürününüz, belirli kişilerin hizmetinize erişmesini engelleyen coğrafi kısıtlamalara veya KYC koşullarına sahip değildir. -- **Açık kaynak** – kodunuz erişilebilir olmalıdır ve daha geniş topluluktan PR'leri kabul etmelisiniz. -- **Topluluk** – kullanıcıların yardım almak veya yeni özellikler önermek için ekibinizle etkileşime geçebileceği özel bir topluluğunuzun, belki bir Discord'unuzun olması. +- **Listelenen cüzdanların çoğu aracılığıyla erişilebilmesi** – merkeziyetsiz uygulamalar, ethereum.org'da listelenen cüzdanların çoğuyla çalışmalıdır. +- **Kullanıcıların kendi başlarına deneyebilmesi –** Bireysel bir kullanıcı, merkeziyetsiz uygulamanızı kullanabilmeli ve somut bir şey elde edebilmelidir. +- **Başlangıç –** ürününüz, kullanıcılara yardımcı olmak ve onları eğitmek için iyi tasarlanmış bir başlangıç deneyimine sahip olmalıdır. Alternatif olarak, makaleler veya videolar gibi nasıl yapılır içeriğinin kanıtına da sahip olabilir. +- **Gözetimsiz** – kullanıcılar fonlarını kendileri kontrol eder. Ürününüz kaybolursa, kullanıcılar yine de fonlarına erişebilir ve bunları taşıyabilir. +- **Küresel olarak erişilebilir** – ürününüz, belirli kişilerin hizmetinize erişmesini engelleyen coğrafi sınırlamalara veya KYC gereksinimlerine sahip olmamalıdır. +- **Açık kaynak** – kodunuz erişilebilir olmalı ve daha geniş topluluktan gelen PR'leri kabul etmelisiniz. +- **Topluluk** – kullanıcıların yardım almak veya yeni özellikler önermek için ekibinizle etkileşime girebileceği, belki bir Discord sunucusu gibi, özel bir topluluğunuzun olması. -## Uygulamada kriterler {#criteria-in-practice} +## Uygulamadaki kriterler {#criteria-in-practice} Ne kadar çok kriteri karşılarsanız, ürününüzün ethereum.org'a girme olasılığı o kadar artar. @@ -68,15 +68,15 @@ Bu kararı etkileyecek diğer şeyler: Bu, ethereum.org'un sorumlu olduğu bir tasarım kararıdır. -Ancak içiniz rahat olsun, **daha fazla merkeziyetsiz uygulama sıralaması yapan başka web sitelerine bağlantılar verilecektir** +Ancak içiniz rahat olsun, **daha fazla merkeziyetsiz uygulamaları sıralayan diğer web sitelerine bağlantılar olacaktır** -### Ürün Siparişi {#product-ordering} +### Ürün Sıralaması {#product-ordering} Ürünler, örneğin alfabetik olarak, aksi belirtilmedikçe, sayfaya en yakın zamanda eklenenden en eski eklenene doğru gösterilecektir. Diğer bir deyişle, en yeni ürünler listenin en altına eklenir. ### Kullanım koşulları {#terms-of-use} -Ayrıca lütfen [kullanım koşullarımıza](/terms-of-use/) başvurun. Ethereum.org'daki bilgiler, yalnızca genel bilgi amaçlı verilmektedir. +Lütfen [kullanım koşullarımıza](/terms-of-use/) da göz atın. Ethereum.org'daki bilgiler, yalnızca genel bilgi amaçlı verilmektedir. ## Bakım {#maintenance} @@ -85,7 +85,7 @@ Ethereum'un akıcı yapısında olduğu gibi, ekipler ve ürünler gelir ve gide - listelenen tüm merkeziyetsiz uygulamaların kriterlerimizi hala karşıladığından emin olmak - şu anda listelenenlerden daha fazla sayıda kriterimizi karşılayan önerilmiş ürünler olmadığını doğrulamak -Kontrol edip bize bildirerek bu konuda yardımcı olabilirsiniz. [Bir konu oluşturun](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=Type%3A+Feature&template=feature_request.md&title=) veya [website@ethereum.org](mailto:website@ethereum.org) adresine bir e-posta gönderin +Kontrol edip bize bildirerek bu konuda yardımcı olabilirsiniz. [Bir konu oluşturun](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=Type%3A+Feature&template=feature_request.yaml&title=) veya [website@ethereum.org](mailto:website@ethereum.org) adresine e-posta gönderin _Ayrıca, topluluğun tercihlerini belirtebilmesi ve önerebileceğimiz en iyi ürünleri öne çıkarabilmesi için oylama seçeneklerini de araştırıyoruz._ @@ -93,8 +93,8 @@ _Ayrıca, topluluğun tercihlerini belirtebilmesi ve önerebileceğimiz en iyi ## Ürününüzü ekleyin {#add-your-product} -Ethereum.org'a bir merkeziyetsiz uygulama eklemek istiyorsanız ve bu uygulama kriterleri karşılıyorsa GitHub'da bir konu oluşturun. +ethereum.org'a bir merkeziyetsiz uygulama eklemek isterseniz ve bu uygulama kriterleri karşılıyorsa lütfen bize bildirin. - Bir konu oluştur + Bir uygulama önerin diff --git a/public/content/translations/tr/contributing/adding-resources/index.md b/public/content/translations/tr/contributing/adding-resources/index.md new file mode 100644 index 00000000000..0e84bcea532 --- /dev/null +++ b/public/content/translations/tr/contributing/adding-resources/index.md @@ -0,0 +1,53 @@ +--- +title: Kaynak Ekleme +description: "ethereum.org'a kaynak eklerken kullandığımız politika" +lang: tr +--- + +# Kaynak Ekleme {#adding-resources} + +Kullanıcıları güvende ve kendinden emin tutarken mümkün olan en iyi kaynakları listelediğimizden emin olmak istiyoruz. + +Herkes, şu anda [ethereum.org/resources](/resources/) adresinde bulunan ethereum.org'daki kaynak panosuna eklemek için yeni kaynaklar önerebilir. + +Yeni eklemeleri memnuniyetle karşılasak da, mevcut kaynaklar kullanıcılarımız için oluşturmaya çalıştığımız bir deneyime göre seçilmiştir. Bunlar, bazı tasarım ilkelerimize temel almaktadır: + +- _İlham verici_: ethereum.org'daki herhangi bir şey kullanıcılara yeni bir şey sunmalıdır. +- _İyi bir hikâye_: listelenen şey, bir "vay canına" anı yaşatmalıdır. +- _Güvenilir_: Kullanıcılara yönelik riski en aza indirmek için her şeyin meşru işletmeler/projeler olması gerekir. + +Genel olarak **ethereum.org, yeni kullanıcılar için kesintisiz bir katılım deneyimi sağlamayı hedefler**. Bu nedenle, kaynakları şunlara göre ekliyoruz: + +- kullanım kolaylığı +- doğruluk +- bakım + +## Karar çerçevesi {#decision-framework} + +### Kriterler {#criteria} + +- **Dürüst ve doğru listeleme bilgileri** - Önerilen tüm listelemeler dürüst ve doğru bilgilerle gelmelidir. Bilgileri tahrif eden ürünler kaldırılacaktır. +- **Aktif proje** – Kaynak, kullanıcılara kalite ve destek sağlamak için aktif bir ekip tarafından sürdürülmelidir. Güncel olmayan kaynaklar kaldırılabilir. + +### Ürün Sıralaması {#product-ordering} + +Ürünleri etkilerine göre sıralama hakkını saklı tutarız. Aksi belirtilmedikçe yeni ürünler genellikle listenin sonuna eklenecektir. + +## Bakım {#maintenance} + +Ethereum ekosistemi geliştikçe, içeriğimizi düzenli olarak şu amaçlarla kontrol edeceğiz: + +- Listelenen tüm kaynakların hâlâ kriterlerimizi karşıladığından emin olmak +- Şu anda listelenenlerden daha fazla kriterlerimizi karşılayan önerilen ürünler olmadığını doğrulamak + +Kontrol edip bize bildirerek bu konuda yardımcı olabilirsiniz. [Bir konu oluşturun](https://github.com/ethereum/ethereum-org-website/issues/new?template=bug_report.yaml) veya [website@ethereum.org](mailto:website@ethereum.org) adresine bir e-posta gönderin. + +--- + +## Kaynağınızı ekleyin {#add-your-resource} + +ethereum.org'a bir kaynak eklemek istiyorsanız ve bu kaynak kriterleri karşılıyorsa GitHub'da bir konu oluşturun. + + + Bir konu oluşturun + diff --git a/public/content/translations/tr/contributing/adding-staking-products/index.md b/public/content/translations/tr/contributing/adding-staking-products/index.md index a26977a0101..23a13ca30d6 100644 --- a/public/content/translations/tr/contributing/adding-staking-products/index.md +++ b/public/content/translations/tr/contributing/adding-staking-products/index.md @@ -1,20 +1,20 @@ --- -title: Stake ürünleri veya hizmetleri ekleme -description: Ethereum.org'a stake ürünleri veya hizmetleri eklerken kullandığımız politika +title: "Stake ürünleri veya hizmetleri ekleme" +description: "Ethereum.org'a stake ürünleri veya hizmetleri eklerken kullandığımız politika" lang: tr --- -# Stake ürünleri veya hizmetleri ekleme {#adding-staking-products-or-services} +# Hisseleme ürünleri veya hizmetleri ekleme {#adding-staking-products-or-services} Kullanıcıları güvende ve kendinden emin tutarken mümkün olan en iyi kaynakları listelediğimizden emin olmak istiyoruz. -Herkes ethereum.org'da bir stake ürünü veya hizmeti eklemeyi önermekte özgürdür. Gözden kaçırdığımız bir şey varsa **[lütfen önerin](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=feature+%3Asparkles%3A%2Ccontent+%3Afountain_pen%3A&template=suggest_staking_product.yaml)!** +Herkes ethereum.org'da bir stake ürünü veya hizmeti eklemeyi önermekte özgürdür. Gözden kaçırdığımız bir tane varsa, **[lütfen onu önerin](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=feature+%3Asparkles%3A%2Ccontent+%3Afountain_pen%3A&template=suggest_staking_product.yaml)!** Şu anda stake ürün ve hizmetlerini aşağıdaki sayfalarda listeliyoruz: -- [Tekli staking](/staking/solo/) -- [Hizmet olarak stake etme](/staking/saas/) -- [Stake havuzları](/staking/pools/) +- [Bireysel hisseleme](/staking/solo/) +- [Hizmet olarak hisseleme](/staking/saas/) +- [Hisseleme havuzları](/staking/pools/) İşaret Zincirindeki hisse ispatı, 1 Aralık 2020'den beri yayında. Stake etme hâlâ nispeten yeni olsa da, ethereum.org'da değerlendirilmek üzere adil ve şeffaf bir çerçeve oluşturmaya çalıştık, ancak listeleme kriterleri zamanla değişip gelişecek ve bu kriterler nihayetinde ethereum.org web sitesi ekibinin takdirindedir. @@ -26,7 +26,7 @@ Bir ürünün ethereum.org'da listeleme kararı herhangi bir tek faktöre bağl - Düğüm veya istemci araçları - Anahtar yönetimi -- Bir hizmet olarak stake etme (SaaS) +- Bir hizmet olarak staking (SaaS) - Stake havuzu Şu anda, yalnızca bu kategorilerdeki ürün veya hizmetleri listeliyoruz. @@ -57,7 +57,7 @@ Stake etme ürünleri veya hizmet sunumları aşağıdaki kriterlere göre değe **Hangi platformlar destekleniyor?** -- örn. Linux, macOS, Windows, iOS, Android +- yani Linux, macOS, Windows, iOS, Android #### Yazılım ve akıllı sözleşmeler {#software-and-smart-contracts} @@ -68,7 +68,7 @@ Stake etme ürünleri veya hizmet sunumları aşağıdaki kriterlere göre değe - Açık kaynaklı projeler, herkese açık bir kaynak kodu deposuna sahip olmalıdır - Bu, ürünlerin "açık kaynak" puanını belirlemek için kullanılır. -**Ürün, _beta_ geliştirme aşamasından çıkmış mı?** +**Ürün, _beta_ geliştirme aşamasından çıktı mı?** - Ürün, geliştirme döngüsünün hangi aşamasında? - Beta aşamasındaki ürünler, ethereum.org'a dahil edilmek üzere değerlendirmeye alınmaz @@ -87,14 +87,14 @@ Stake etme ürünleri veya hizmet sunumları aşağıdaki kriterlere göre değe Düğüm veya istemci kurulumu, yönetimi veya geçişi ile ilgili yazılım ürünleri için: -**Hangi fikir birliği katmanı istemcileri (yani Lighthouse, Teku, Nimbus, Prysm) destekleniyor?** +**Hangi mutabakat katmanı istemcileri (yani Lighthouse, Teku, Nimbus, Prysm, Grandine) destekleniyor?** - Hangi istemciler destekleniyor? Kullanıcı seçebilir mi? - Bu, ürünlerin "çoklu istemci" puanını belirlemek için kullanılır. -#### Bir hizmet olarak stake etme {#staking-as-a-service} +#### Hizmet olarak hisseleme {#staking-as-a-service} -[Bir hizmet olarak hisseleme listeleri](/staking/saas/) için (yani, yetkilendirilmiş düğüm işlemi): +[Hizmet olarak hisseleme listelemeleri](/staking/saas/) için (yani, yetkilendirilmiş düğüm işlemi): **Hizmeti kullanmakla ilişkili ücretler nelerdir?** @@ -117,7 +117,7 @@ Düğüm veya istemci kurulumu, yönetimi veya geçişi ile ilgili yazılım ür - Son düzenleme itibariyle Prysm, düğüm operatörlerinin çoğunluğu tarafından çalıştırılan fikir birliği katmanı istemcisi hâline gelmiştir ve bu durum, ağ için bir tehlike oluşturmaktadır. Herhangi bir CL istemcisi şu anda ağın %33'ünden fazlası tarafından kullanılıyorsa, kullanımıyla ilgili verileri talep ederiz. - Bu, ürünlerin "istemci çeşitliliği" puanını belirlemek için kullanılır. -#### Stake havuzu {#staking-pool} +#### Hisseleme havuzu {#staking-pool} [Havuzlu hisseleme hizmetleri](/staking/pools/) için: @@ -147,11 +147,11 @@ Düğüm veya istemci kurulumu, yönetimi veya geçişi ile ilgili yazılım ür - Son düzenleme itibariyle Prysm, düğüm operatörlerinin çoğunluğu tarafından çalıştırılan fikir birliği katmanı istemcisi hâline gelmiştir ve bu durum, ağ için bir tehlike oluşturmaktadır. Herhangi bir CL istemcisi şu anda ağın %33'ünden fazlası tarafından kullanılıyorsa, kullanımıyla ilgili verileri talep ederiz. - Bu, ürünlerin "istemci çeşitliliği" puanını belirlemek için kullanılır. -### Diğer kriterler: olursa iyi olan şeyler {#other-criteria} +### Diğer kriterler: olması tercih edilenler {#other-criteria} **Hangi kullanıcı arayüzleri destekleniyor?** -- örn. Tarayıcı uygulaması, masaüstü uygulaması, mobil uygulama, CLI +- yani Tarayıcı uygulaması, masaüstü uygulaması, mobil uygulama, CLI **Düğüm araçları konusunda yazılım, istemciler arasında geçiş yapmanın kolay bir yolunu sağlıyor mu?** @@ -161,16 +161,16 @@ Düğüm veya istemci kurulumu, yönetimi veya geçişi ile ilgili yazılım ür - Bu, bize hizmetinizin şu ana kadarki erişimi hakkında bir fikir verir. -## Sonuçları nasıl görüntülüyoruz {#product-ordering} +## Sonuçları nasıl gösteriyoruz {#product-ordering} -Yukarıdaki [dahil edilme kriterleri](#criteria-for-inclusion), her ürün veya hizmet için kümülatif puan hesaplamak için kullanılır. Bu, belirli objektif kriterleri karşılayan ürünleri sıralamak ve sergilemek için bir araç olarak kullanılır. Kanıt için ne kadar çok kriter sağlanırsa, bir ürün o kadar yüksek sıralanır ve beraberlikler yükte rastgele hâle getirilir. +Yukarıdaki [dahil edilme kriterleri](#criteria-for-inclusion), her ürün veya hizmet için kümülatif bir puanı hesaplamak için kullanılır. Bu, belirli objektif kriterleri karşılayan ürünleri sıralamak ve sergilemek için bir araç olarak kullanılır. Kanıt için ne kadar çok kriter sağlanırsa, bir ürün o kadar yüksek sıralanır ve beraberlikler yükte rastgele hâle getirilir. -Bu kriterlerin kod mantığı ve ağırlıkları şu anda depomuzdaki [bu JavaScript bileşeninde](https://github.com/ethereum/ethereum-org-website/blob/dev/src/components/Staking/StakingProductsCardGrid.js#L350) bulunmaktadır. +Bu kriterlere yönelik kod mantığı ve ağırlıklar şu anda depomuzdaki [bu JavaScript bileşeninde](https://github.com/ethereum/ethereum-org-website/blob/dev/src/components/Staking/StakingProductsCardGrid.js#L350) yer almaktadır. ## Ürününüzü veya hizmetinizi ekleyin {#add-product} Ethereum.org'a hisseleme ürünü veya hizmeti eklemek istiyorsanız GitHub'da bir konu oluşturun. - Bir konu oluştur + Bir konu oluşturun diff --git a/public/content/translations/tr/contributing/adding-wallets/index.md b/public/content/translations/tr/contributing/adding-wallets/index.md index 644434960bc..3bd836b3a0d 100644 --- a/public/content/translations/tr/contributing/adding-wallets/index.md +++ b/public/content/translations/tr/contributing/adding-wallets/index.md @@ -1,6 +1,6 @@ --- -title: Cüzdan ekleme -description: Ethereum.org'a cüzdan eklerken kullandığımız politika +title: "Cüzdan ekleme" +description: "Ethereum.org'a cüzdan eklerken kullandığımız politika" lang: tr --- @@ -8,7 +8,7 @@ lang: tr Kullanıcıların kendilerinden emin bir tarzda Ethereum'da yön bulabilmeleri için cüzdanların özellik açısından zengin manzaralarını kapsayan, çeşitli cüzdanları gösterdiğimizden emin olmak isteriz. -Herkes, ethererum.org'a bir cüzdan önermekte özgürdür. Gözden kaçırdığımız bir cüzdan varsa lütfen bildirin! +Herkes, ethereum.org'a bir cüzdan önermekte özgürdür. Gözden kaçırdığımız bir cüzdan varsa lütfen bildirin! Cüzdanlar şu anda aşağıdakilerde listeleniyor: @@ -21,12 +21,13 @@ Ethereum'da cüzdanlar çok hızlı bir biçimde değişiyor. Ethereum.org'da de ### Dahil edilme kriterleri: olmazsa olmazlar {#the-must-haves} - **Güvenliği sınanmış bir ürün** - bir denetim, iç güvenlik ekibi, açık kaynaklı kodlama yoluyla ya da bazı başka yöntemlerle cüzdanınızın güvenliği sağlanmış olmak zorundadır. Bu, kullanıcılarımıza yönelik riski azaltır ve güvenliği ciddiye aldığınızı gösterir. -- **Altı aydan fazladır ''canlı'' olan VEYA itibarlı bir geçmişe sahip olan bir grup tarafından yayımlanan bir cüzdan** - bu, güvenliğin bir başka göstergesidir. Hayati hataların ve kötüye kullanımların bulunması için altı ay iyi bir zaman aralığıdır. Projeler olarak hızlı bir şekilde terk edilecek çatallanmaları elemek için altı ay istiyoruz. +- **Altı aydan fazladır "canlı" olan VEYA itibarlı bir geçmişe sahip olan bir grup tarafından yayımlanan bir cüzdan** - bu, güvenliğin bir başka göstergesidir. Hayati hataların ve kötüye kullanımların bulunması için altı ay iyi bir zaman aralığıdır. Projeler olarak hızlı bir şekilde terk edilecek çatallanmaları elemek için altı ay istiyoruz. - **Aktif bir ekibin üzerinde çalışmış olması** - bu, kalitenin sağlanmasına ve bir kullanıcının sorguları için destek almasına yardımcı olur. -- **Dürüst ve doğru listeleme bilgileri**: Projelerden önerilen tüm listelemelerin dürüst ve doğru bilgilerle gelmesi beklenir. Ürününüzü, örneğin "açık kaynaklı" değilken öyleymiş gibi duyurarak listeleme bilgilerini tahrif eden ürünler kaldırılacaktır. +- **Dürüst ve doğru listeleme bilgileri** - Projelerden önerilen listelemelerin dürüst ve doğru bilgiler içermesi beklenir. Ürününüzü, örneğin "açık kaynaklı" değilken öyleymiş gibi duyurarak listeleme bilgilerini tahrif eden ürünler kaldırılacaktır. - **İletişim noktası** - Cüzdan için bir iletişim noktası, değişiklikler yapıldığında doğru bilgiyi elde etmemize büyük ölçüde yardımcı olacaktır. Bu, geleceğe ait bilgileri toplarken ethereum.org'u güncelleme sürecini yönetilebilir halde tutacaktır. - **EIP-1559 (tip 2) işlemleri** - Ethereum ana ağındaki işlemler için cüzdanınız EIP-1559 (tip 2) işlemleri desteklemek zorundadır. -- **İyi kullanıcı deneyimi** - UX öznel bir kavram olsa da, çekirdek ekip üyelerinizden birkaçının ürünü test edip kullanımında zorluk çekmesi halinde cüzdanı reddetme hakkımızı saklı tutarız ve bunun yerine iyileştirmeye yönelik faydalı önerilerde bulunuruz. Bu, çoğunluğu yeni başlayanlardan oluşan kullanıcı tabanımızı korumak için yapılır. +- **İyi kullanıcı deneyimi** - UX öznel bir kavram olsa da, çekirdek ekip üyelerinden birkaçının ürünü test edip kullanımında zorluk çekmesi halinde cüzdanı reddetme hakkımızı saklı tutarız ve bunun yerine iyileştirmeye yönelik faydalı önerilerde bulunuruz. Bu, çoğunluğu yeni başlayanlardan oluşan kullanıcı tabanımızı korumak için yapılır. +- **Ethereum odaklı** - Bir cüzdan, öncelikli olarak Ethereum odaklı bir deneyim sağlamalıdır. Bu, Ethereum'un (veya herhangi bir L2'nin) varsayılan ağ olarak ayarlandığı, ERC varlıklarının düzgün şekilde desteklendiği ve özelliklerin Ethereum ekosistemiyle uyumlu olduğu anlamına gelir. Kullanıcı arayüzünde alternatif katman 1'lere öncelik veren cüzdanlar listelenmeyecektir. ### Ürün kaldırma {#product-removals} @@ -38,7 +39,7 @@ Ethereum'da cüzdanlar çok hızlı bir biçimde değişiyor. Ethereum.org'da de - **Birden fazla dilde mevcut olma** - cüzdanınız, tüm dünyadaki kullanıcıların erişim sağlayabilmesi için birden çok dile çevrilir. - **Açık kaynak** - tüm projenizin kod tabanı (yalnızca modülleri değil) erişilebilir olmalıdır ve daha geniş topluluktan gelecek PR'leri kabul etmelisiniz. - **Gözetimsiz** - kullanıcılar kendi fonlarını kontrol eder. Ürününüz kaybolursa, kullanıcılar yine de fonlarına erişebilir ve bunları taşıyabilir. -- **Donanım cüzdan desteği** - kullanıcılar, işlemleri imzalamak amacıyla kendi donanım cüzdanlarını bağlayabilir. +- **Donanım cüzdanı desteği** - kullanıcılar, işlemleri imzalamak amacıyla kendi donanım cüzdanlarını bağlayabilir. - **WalletConnect** - kullanıcılar, WalletConnect'i kullanarak merkeziyetsiz uygulamalara bağlanabilir. - **Ethereum RPC uç noktalarını içe aktarma** - kullanıcılar, düğüm RPC verilerini içe aktararak kendi seçtikleri bir düğüme veya EVM uyumlu diğer ağlara bağlanmalarına olanak tanır. - **NFT'ler** - kullanıcılar, cüzdanlarındaki NFT'leri görebilir ve onlarla etkileşime girebilir. @@ -47,9 +48,9 @@ Ethereum'da cüzdanlar çok hızlı bir biçimde değişiyor. Ethereum.org'da de - **Takaslar** - kullanıcılar, cüzdan aracılığıyla jeton takas edebilir. - **Çok zincirli ağlar** - cüzdanınız, varsayılan olarak kullanıcıların çoklu blokzincir ağlarına erişimini destekler. - **Katman 2 ağları** - cüzdanınız, varsayılan olarak kullanıcıların katman 2 ağlarına erişimini destekler. -- **Gaz ücretlerini özelleştirme** - cüzdanınız, kullanıcılara işlem gaz ücretlerini (ana ücret, öncelik ücreti, azami ücret) düzenleme imkanı tanır. +- **Gaz ücretlerini özelleştirme** - cüzdanınız, kullanıcıların işlem gaz ücretlerini (taban ücret, öncelik ücreti, azami ücret) özelleştirmelerine olanak tanır. - **ENS desteği** - cüzdanınız, kullanıcıların ENS isimlerine işlem göndermelerine olanak sağlar. -- **ERC-20 desteği** - cüzdanınız, kullanıcılara ERC-20 jeton sözleşmelerini içe aktarma veya otomatik sorgulama imkanı sunar ve ERC-20 jetonlarını görüntüler. +- **ERC-20 desteği** - Cüzdanınız, kullanıcıların ERC-20 jeton sözleşmelerini içe aktarmasına ya da ERC-20 jetonlarını otomatik olarak sorgulayıp görüntülemesine olanak tanır. - **Kripto satın alımı** - cüzdanınız, kullanıcıların doğrudan kripto satın alımını ve kriptoya alışmalarını destekler. - **İtibari para için satış** - cüzdanınız, kullanıcıların itibari para için satmalarını ve doğrudan bir karta veya banka hesabına çekim yapmalarını destekler. - **Çoklu imza** - cüzdanınız, bir işlemi imzalamak için çoklu imzayı destekler. @@ -57,12 +58,12 @@ Ethereum'da cüzdanlar çok hızlı bir biçimde değişiyor. Ethereum.org'da de - **Özel destek ekibi** - cüzdanınız, kullanıcıların sorun yaşadıklarında gidebilecekleri özel bir destek ekibine sahiptir. - **Eğitim kaynakları/dokümanları** - ürününüz, kullanıcılara yardım etmek ve onları bilgilendirmek için iyi tasarlanmış bir alıştırma deneyimine sahip olmalıdır. Alternatif olarak, makaleler veya videolar gibi nasıl yapılır içeriğinin kanıtına da sahip olabilir. -## Cüzdan ekleme {#adding-a-wallet} +## Bir cüzdan ekleme {#adding-a-wallet} Ethereum.org'a bir cüzdan eklemek istiyorsanız GitHub'da bir konu oluşturun. - Bir konu oluştur + Bir konu oluşturun ## Bakım {#maintenance} @@ -72,9 +73,8 @@ Ethereum'un akıcı yapısında olduğu gibi, ekipler ve ürünler gelir ve gide - listelenen tüm cüzdan ve merkeziyetsiz uygulamaların hala kriterlerimizi karşıladığından emin olmak - şu anda listelenenlerden daha fazla sayıda kriterimizi karşılayan önerilmiş ürünler olmadığını doğrulamak -ethereum.org açık kaynak topluluğu tarafından yönetilmektedir ve güncel tutulması konusunda topluluğa güveniriz. Listelenmiş cüzdanlar ile ilgili herhangi bir bilginin güncelleştirilmesi gerektiğini fark ettiyseniz lütfen [bir konu açın](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=wallet+%3Apurse%3A&template=suggest_wallet.yaml) veya [çekme isteği oluşturun](https://github.com/ethereum/ethereum-org-website/pulls)! - +ethereum.org açık kaynak topluluğu tarafından yönetilmektedir ve güncel tutulması konusunda topluluğa güveniriz. Listelenen cüzdanlar hakkında güncellenmesi gereken herhangi bir bilgi fark ederseniz, lütfen [bir konu açın](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=wallet+%3Apurse%3A&template=suggest_wallet.yaml) veya bir [çekme isteği](https://github.com/ethereum/ethereum-org-website/pulls) gönderin! ## Kullanım koşulları {#terms-of-use} -Ayrıca lütfen [kullanım koşullarımıza](/terms-of-use/) başvurun. Ethereum.org'daki bilgiler, yalnızca genel bilgi amaçlı verilmektedir. +Lütfen [kullanım koşullarımıza](/terms-of-use/) da göz atın. Ethereum.org'daki bilgiler, yalnızca genel bilgi amaçlı verilmektedir. diff --git a/public/content/translations/tr/contributing/content-resources/index.md b/public/content/translations/tr/contributing/content-resources/index.md index ea6e40165e1..29e2607c0e8 100644 --- a/public/content/translations/tr/contributing/content-resources/index.md +++ b/public/content/translations/tr/contributing/content-resources/index.md @@ -1,7 +1,7 @@ --- -title: İçerik kaynakları ekleme +title: "İçerik kaynaklarını ekle" lang: tr -description: Ethereum.org'da içerik kaynaklarını listeleme kriterlerimiz +description: "Ethereum.org'da içerik kaynaklarını listeleme kriterlerimiz" --- # İçerik kaynakları ekleme {#adding-content-resources} @@ -10,7 +10,7 @@ Ethereum ile ilgili her şeyi kapsamayı ummak abartılı olabilir, bu nedenle t Bir sayfaya eklenmesi gerektiğini düşündüğünüz bir içerik kaynağı varsa, bunu uygun bir yerde önermekten çekinmeyin. -## Nasıl karar veririz {#how-we-decide} +## Nasıl karar veriyoruz {#how-we-decide} Öğrenme kaynakları aşağıdaki kriterlere göre değerlendirilecektir: @@ -19,7 +19,7 @@ Bir sayfaya eklenmesi gerektiğini düşündüğünüz bir içerik kaynağı var - Bilgi doğru mu? İçerik gerçeklere mi, fikirlere mi dayalı? - Yazar güvenilir mi? Kaynaklarına atıfta bulunuyorlar mı? - Bu içerik, mevcut kaynakların/bağlantıların kapsamadığı ayrı bir değer katıyor mu? -- Bu içerik, [kullanıcı kişiliklerimizden](https://www.notion.so/efdn/Ethereum-org-User-Persona-Memo-b44dc1e89152457a87ba872b0dfa366c) birine mi hizmet ediyor? +- Bu içerik, [kullanıcı personalarımızdan](https://www.notion.so/efdn/Ethereum-org-User-Persona-Memo-b44dc1e89152457a87ba872b0dfa366c) birine hizmet ediyor mu? --- @@ -28,5 +28,5 @@ Bir sayfaya eklenmesi gerektiğini düşündüğünüz bir içerik kaynağı var Eğer ethereum.org'a içerik kaynağı eklemek istiyorsanız ve kriterleri karşılıyorsa GitHub'da bir konu oluşturun. - Bir konu oluştur + Bir konu oluşturun diff --git a/public/content/translations/tr/contributing/design-principles/index.md b/public/content/translations/tr/contributing/design-principles/index.md index 9fef57416f6..2fb79561516 100644 --- a/public/content/translations/tr/contributing/design-principles/index.md +++ b/public/content/translations/tr/contributing/design-principles/index.md @@ -1,64 +1,64 @@ --- -title: Tasarım ilkeleri +title: "Tasarım ilkeleri" lang: tr -description: Ethereum.org'un tasarım ve içerik kararlarının arkasındaki ilkeler +description: "Ethereum.org'un tasarım ve içerik kararlarının arkasındaki ilkeler" --- -# Tasarım prensiplerimiz {#contributing-to-ethereumorg-} +# Tasarım ilkelerimiz {#contributing-to-ethereumorg-} - Merhaba, ethereum.org tasarım ilkelerine hoş geldiniz. Bu, ethereum.org'u geliştirmek ve iyileştirmek için devam eden bir sürecin parçasıdır. + Merhaba, ethereum.org'un tasarım ilkelerine hoş geldiniz. Bu, ethereum.org'u geliştirmek ve iyileştirmek için devam eden bir sürecin parçasıdır. İlkelerimiz, sitenin görünümünü ve verdiği hissi ve sitedeki içeriği bilgilendirir. [ethereum.org'a katkıda bulunmadan](/contributing/) önce bunları okumalısınız. -## Tasarım ilkelerimiz neler? {#ways-to-contribute} +## Tasarım ilkelerimiz neler? Katkıda bulunma yolları {#ways-to-contribute} -Endişelenmeyin, oldukça basitler! **Tasarım ilkeleri**, bir şeyi tasarlarken (yani oluştururken, sürdürürken veya güncellerken) başvurduğumuz bir dizi yönergedir. +Endişelenmeyin, oldukça basitler! **Tasarım ilkeleri**, bir şeyi tasarlarken (yani oluştururken, bakımını yaparken veya güncellerken) başvurduğumuz bir dizi yönergedir. -Ethereum.org bağlamında bu tasarım ilkeleri, web sitesinin dünya karşısında temsil etmesini ve dünyaya yansıtmasını istediğimiz şeyin temelidir. Hem heves uyandırırlar **hem de** fonksiyoneldirler. Bu sadece web sitesinin _görünüşü_ değil, aynı zamanda nasıl _çalıştığı_ ve hatta birine nasıl _hissettirdiği_ ile ilgilidir. Renklerden sayfa düzenlerine, web sitesinde Ethereum hakkında nasıl konuştuğumuza kadar her şey bu ilkeler tarafından belirlenmelidir. +Ethereum.org bağlamında bu tasarım ilkeleri, web sitesinin dünya karşısında temsil etmesini ve dünyaya yansıtmasını istediğimiz şeyin temelidir. Hem ilham verici **hem de** işlevseldirler. Bu sadece web sitesinin nasıl _göründüğüyle_ değil, aynı zamanda nasıl _çalıştığıyla_ ve hatta birine nasıl _hissettirdiğiyle_ de ilgilidir. Renklerden sayfa düzenlerine ve web sitesinde Ethereum hakkında konuşma tarzımıza kadar her şey bu ilkelerden beslenmelidir. -## Pratikte ilkeler {#how-decisions-about-the-site-are-made} +## Uygulamadaki ilkeler {#how-decisions-about-the-site-are-made} -Bir örneğe bakalım. İlkelerden biri "Güvenilir", yani siteye gelen ziyaretçilerin sitenin güvenilir olduğunu _hissetmelerini_ ve _bilmelerini_ istiyoruz: Tıpkı daha geniş Ethereum ekosistemi gibi. Bu ilke dahilinde, siteyi güvenilir kılmak için atabileceğimiz eyleme geçirilebilir adımlar olduğuna inandığımız 3 işlevsel "alt ilkemiz" var: +Bir örneğe bakalım. İlkelerden biri "Güvenilir"dir; bunun anlamı, site ziyaretçilerinin, tıpkı daha geniş Ethereum ekosistemi gibi, sitenin güvenilir olduğunu _hissetmelerini_ ve _bilmelerini_ istememizdir. Bu ilke dahilinde, siteyi güvenilir kılmak için atabileceğimiz eyleme geçirilebilir adımlar olduğuna inandığımız 3 işlevsel "alt ilkemiz" var: -- _"Taze"_: Yani içeriği güncel tutmak. -- _"Sosyal Kanıt"_: Yani ekosistemin boyutunu, çeşitliliğini ve etkinliğini görmek (biliyorsunuz: Ethereum yükseltme ilerlemesi, DeFi, oyun, tüm hackathon'lar vb.) -- _"Tutarlılık"_: Yani sitenin tasarımındaki tutarlılık ve yazının tonu ve doğruluğu. +- _"Güncel"_ yani içeriği güncel tutmak. +- _"Sosyal Kanıt"_ yani ekosistemin boyutunu, çeşitliliğini ve etkinliğini göstermek (bilirsiniz: Ethereum yükseltme ilerlemesi, DeFi, oyun, tüm hackathon'lar vb.) +- _"Tutarlı"_ yani sitenin tasarımında, yazının tonunda ve doğruluğunda tutarlılık. Bu nedenle, tasarım kararları verirken veya metin yazarlığı kararları verirken “Güvenilir” ilkesine başvurabilir ve şunu sorabiliriz: - _"Site güncel bilgileri yansıtıyor mu?"_ - _"Ekosistemin büyüklüğünü ve etkinliğini nasıl ve nerede gösteriyoruz?"_ -- _"Bir topluluk üyesi tarafından önerilen ve gözden geçirdiğim yeni katkılar sitedeki mevcut tasarım ve yazıyla tutarlı mı?"_ +- _"İncelediğim bir topluluk üyesinin önerdiği yeni katkılar, sitedeki mevcut tasarım ve yazıyla tutarlı mı?"_ -## Ethereum.org tasarım ilkeleri {#contributors} +## ethereum.org tasarım ilkeleri {#contributors} ### 1. İlham Verici {#1-inspirational} Site, kullanıcılara Ethereum'un dünyayı nasıl değiştirebileceğini hayal etmeleri için ilham vermelidir. İnsanları Ethereum ekosisteminin araçlarını ve uygulamalarını keşfetmeye, onlarla oynamaya ve onları onarmaya motive etmelidir. -- **Radikal:** Site, Ethereum'un dünyayı anlamlı bir şekilde değiştirmeye yönelik iddialı hedeflerini iletmelidir. Ethereum'un sadece yeni bir teknoloji yığını olmadığı açık olmalıdır: Bu, dönüşümsel bir teknolojidir. -- **Eğitim yoluyla güçlendirme:** Site, insanları Ethereum'un potansiyelini anlamaları, ekosistemdeki yerlerini bulmaları ve buna katılmak için güç kazanmış hissetmeleri için eğitmelidir. +- **Radikal:** Site, Ethereum'un dünyayı anlamlı bir şekilde değiştirme konusundaki iddialı hedeflerini iletmelidir. Ethereum'un sadece yeni bir teknoloji yığını olmadığı açık olmalıdır: Bu, dönüşümsel bir teknolojidir. +- **Eğitimle güçlendirme:** Site, insanların Ethereum'un potansiyelini anlamaları, ekosistemdeki yerlerini bulmaları ve ona katılmak için kendilerini güçlü hissetmeleri için onları eğitmelidir. -Görsel Yönlendirmeler • İçerik +Görsel Yön • İçerik ### 2. Evrensel {#2-universal} Ethereum küresel, merkeziyetsiz bir projedir ve hedef kitlemiz bunu yansıtır. Site, herkes tarafından erişilebilir olmayı ve dünyanın birçok kültürüne duyarlı olmayı hedeflemelidir. -- **Erişilebilir:** Site, düşük bant genişliği bağlantılarına sahip kişiler de dahil olmak üzere erişilebilirlik yönergelerine uymalıdır. -- **Açık:** Site basit ve açık olmalıdır. Kopya, yanlış yorumlanabilecek veya çeviride kaybolabilecek bir dil kullanmamalıdır. -- **Ethereum çok yönlüdür:** Ethereum; bir proje, bir kod tabanı, bir topluluk ve bir vizyondur. Ethereum, farklı insanlar için farklı nedenlerle değerlidir ve dahil olmanın birçok yolu vardır. +- **Erişilebilir:** Site, düşük bant genişliğine sahip bağlantıları olan kişiler de dâhil olmak üzere erişilebilirlik yönergelerini izlemelidir. +- **Anlaşılır:** Site basit ve net olmalıdır. Kopya, yanlış yorumlanabilecek veya çeviride kaybolabilecek bir dil kullanmamalıdır. +- **Ethereum çok yönlüdür:** Ethereum bir proje, bir kod tabanı, bir topluluk ve bir vizyondur. Ethereum, farklı insanlar için farklı nedenlerle değerlidir ve dahil olmanın birçok yolu vardır. Yazı sistemleri • Renk kullanımı • Görsel Yön • İçerik -### 3. İyi Bir Hikâye {#3-a-good-story} +### 3. İyi Bir Hikaye {#3-a-good-story} Web sitesii iyi bir hikâye gibi olmalıdır. Ziyaretçiler bir yolculuğa çıkmışlardır ve katkıda bulunduğunuz içerik, bunun bir parçasıdır. Katkılarınız net bir anlatıma uymalıdır: Başlangıç (tanıtım/giriş noktası), ortası (öğrenme ve içgörü kümesi) ve sonu (ilgili kaynaklara veya sonraki adımlara yönlendiren bağlantılar) olan bir anlatım. -- **Hiyerarşik**: Açık, hiyerarşik olarak yapılandırılmış bir bilgi mimarisi, ethereum.org ziyaretçilerinin hedeflerine ulaşmaya çalışırken sitede "bir hikaye gibi" gezinmelerine yardımcı olur. -- **Bir Vasıta:** Cevap arayan herkes için bir vasıta görevi görüyoruz. Hâlihazırda var olan birçok kaynağı değiştirmek veya onların yerine geçmek istemiyoruz. Bir cevap ve atılacak sağlam adımlar sunuyoruz. +- **Hiyerarşik**: Açık ve hiyerarşik olarak yapılandırılmış bir bilgi mimarisi, ethereum.org ziyaretçilerinin hedeflerine ulaşmaya çalışırken sitede "bir hikaye gibi" gezinmelerine yardımcı olur. +- **Bir Atlama Taşı:** Cevap arayan herkes için bir atlama taşıyız. Hâlihazırda var olan birçok kaynağı değiştirmek veya onların yerine geçmek istemiyoruz. Bir yanıt verir ve güvenilir sonraki adımları sağlarız. Kullanıcı Serüvenleri • İçerik @@ -66,28 +66,28 @@ Kullanıcı Serüvenleri • İçerik İnsanlar Ethereum ekosistemine giriş yapmak istiyor olabilir veya bu konuda şüpheci olabilir. İletişim kurma şeklinizde bu sorumluluğu kabul edin. İki türden insanların da Ethereum ekosisteminden daha büyük bir güvenle ayrıldığından emin olun. -- **Taze:** Her zaman güncel. +- **Güncel:** Her zaman güncel. - **Sosyal Kanıt:** Ekosistemin büyüklüğünü, çeşitliliğini ve etkinliğini gösterin. - **Tutarlı:** Tasarım ve içerikteki tutarlılık, güvenilirliği ifade eder. Görsel Yön • İçerik -### 5. Ortaklaşa Gelişim {#5-collaborative-improvement} +### 5. İşbirlikçi Geliştirme {#5-collaborative-improvement} Web sitesi, tıpkı ekosistemin bütünü gibi birçok katkıda bulunan insanın ürünüdür. -- **Açık:** Ekosistem genelinde kaynak kodunun, süreçlerin ve projelerin şeffaflığını kutlayın. -- **Genişletilebilir:** Modülerlik, yaptığımız her şeyin arkasında yatan temel odak noktasıdır ve bu nedenle katkıların da modüler olması gerekir. Çekirdek tasarım, bileşen kodu ve sitenin uygulanması, gelecekte sitenin kolayca genişletilmesini sağlamalıdır. -- **Deneysel:** Sürekli denemeler, testler ve yinelemeler yapıyoruz. -- **Ortaklaşa:** Bu proje hepimizi bir araya getiriyor. -- **Sürdürülebilir:** Topluluk tarafından uzun vadeli sürdürülebilirliğe uygun kurulum +- **Açık:** Ekosistem genelindeki kaynak kodunun, süreçlerin ve projelerin şeffaflığını kutlayın. +- **Genişletilebilir:** Modülerlik, yaptığımız her şeyin arkasındaki temel odak noktasıdır ve bu nedenle katkılar da modüler olmalıdır. Sitenin temel tasarımı, bileşen kodu ve uygulaması, gelecekte kolayca genişletilebilmesini sağlamalıdır. +- **Deneysel:** Sürekli olarak deniyor, test ediyor ve yineliyoruz. +- **İşbirlikçi:** Bu proje hepimizi bir araya getiriyor. +- **Sürdürülebilir:** Topluluk tarafından uzun vadeli bakım için altyapı oluşturma -Tasarım ilkelerimizi [sitemizde](/) faaliyet hâlinde görebilirsiniz. +Tasarım ilkelerimizi [sitemizde](/), iş başında görebilirsiniz. -## Geri bildirim gönder {#give-feedback} +## Geri bildirimde bulunun {#give-feedback} -**Bu belgeyle ilgili geri bildiriminizi paylaşın!** Önerilen ilkelerimizden biri, web sitesinin birçok katkıda bulunan insanın ürünü olmasını istediğimiz anlamına gelen "**Ortaklaşa Gelişim**"dir. Bu ilkenin ruhuna uygun olarak, bu tasarım ilkelerini Ethereum topluluğuyla paylaşmak istiyoruz. +**Bu belge hakkındaki geri bildiriminizi paylaşın!** Önerdiğimiz ilkelerden biri, web sitesinin birçok katılımcının ürünü olmasını istediğimiz anlamına gelen "**İşbirlikçi Geliştirme**"dir. Bu ilkenin ruhuna uygun olarak, bu tasarım ilkelerini Ethereum topluluğuyla paylaşmak istiyoruz. Bu ilkeler ethereum.org web sitesine odaklanmış olsa da, birçoğunun genel olarak Ethereum ekosisteminin değerlerini temsil ettiğini umuyoruz. Bazılarını kendi projenize dahil etmek bile isteyebilirsiniz! -Düşüncelerinizi, [Discord sunucusunda](https://discord.gg/ethereum-org) ya da [bir konu yaratarak](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=Type%3A+Feature&template=feature_request.yaml&title=) bize aktarın. +[Discord sunucumuzda](https://discord.gg/ethereum-org) veya [bir konu oluşturarak](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=Type%3A+Feature&template=feature_request.yaml&title=) düşüncelerinizi bize bildirin. diff --git a/public/content/translations/tr/contributing/design/adding-design-resources/index.md b/public/content/translations/tr/contributing/design/adding-design-resources/index.md index 4932e988af9..a4c34e2070d 100644 --- a/public/content/translations/tr/contributing/design/adding-design-resources/index.md +++ b/public/content/translations/tr/contributing/design/adding-design-resources/index.md @@ -1,12 +1,12 @@ --- -title: İçerik kaynaklarını ekle -description: Ethereum.org'daki tasarım materyallerinin kaliteli olmasını sağlamak için yönergeler ve gereksinimler +title: "İçerik kaynaklarını ekle" +description: "Ethereum.org'daki tasarım materyallerinin kaliteli olmasını sağlamak için yönergeler ve gereksinimler" lang: tr --- -# İçerik kaynaklarını ekle {#adding-design-resources} +# Tasarım kaynakları ekleme {#adding-design-resources} -Herkes [Web3 sayfasında tasarım ve kullanıcı deneyimi](/developers/docs/design-and-ux/) için yeni tasarım materyalleri önerebilir. +Herkes [Web3'te Tasarım ve Kullanıcı Deneyimi sayfasına](/developers/docs/design-and-ux/) yeni tasarım materyalleri önerebilir. Bu sayfanın, hevesli web3 kullanıcıları için değer sunmaya odaklandığını unutmayın. Tasarım bölümü, hizmetleriniz, ürünleriniz ya da platformlarınızın reklamını yapmak için değildir. @@ -48,7 +48,7 @@ c. Yazı, özlü ve nokta atışı olmalıdır. a. Makalenin temel amacı, belirli bir projeyi veya şirketi tanıtmak yerine ayrıntılı bilgiler paylaşmak olmalıdır. -## Topluluklar/DAO'lar {#Communities-and-DAOs} +## Topluluklar / DAO'lar {#Communities-and-DAOs} 1. Web sitesi, DAO'ya/Topluluğa katılma yolunu açıkça belirtmelidir @@ -56,7 +56,7 @@ a. Makalenin temel amacı, belirli bir projeyi veya şirketi tanıtmak yerine ay a. Üye olmanın faydaları açıkça öne çıkarılmalıdır. -**Örnekler**: çalışmalar hakkında geribildirim almak, iş fırsatlarına veya ödüllere erişim, tasarım ve araştırma bilgilerini paylaşmak. +**Örnekler**: çalışmalar hakkında geribildirim almak, iş fırsatlarına veya ödüllere erişim, tasarım ve araştırma içgörülerini paylaşmak. 3. Discord'da Aktif ve Canlı İletişim diff --git a/public/content/translations/tr/contributing/design/index.md b/public/content/translations/tr/contributing/design/index.md index 14ad706362c..73322c2943f 100644 --- a/public/content/translations/tr/contributing/design/index.md +++ b/public/content/translations/tr/contributing/design/index.md @@ -1,10 +1,10 @@ --- -title: Tasarım katkısı -description: Ethereum.org için tasarım katkısı +title: "Tasarım katkısı" +description: "Ethereum.org için tasarım katkısı" lang: tr --- -# Ethereum.org için tasarım katkısı {#design-contributions} +# ethereum.org'a tasarım katkıları {#design-contributions} Tasarım, her projenin kritik bir parçasıdır. Siz de zamanınızı ve tasarım yeteneklerinizi ethereum.org'a ayırarak ziyaretçilerimizin kullanıcı deneyimini artırmamıza yardımcı olabilirsiniz. Açık kaynaklı bir projeye katkıda bulunmak, size iş birliğine dayalı bir ortamda konuyla alakalı deneyim kazanma ve becerilerinizi geliştirme fırsatı sunar. Her biri eşsiz perspektif ve bilgilere sahip tasarımcılar, geliştiriciler ve topluluk üyeleri ile çalışma şansına sahip olacaksınız. @@ -12,15 +12,15 @@ Sonuç olarak bu, tasarım becerilerinizi sergileyeceğiniz çeşit çeşit ve e ## Nasıl katkıda bulunulur? -###  Erken tasarım prototipleri hakkında geribildirim sağlayın {#design-critique} +###  Erken tasarım prototipleri için geri bildirimde bulunun {#design-critique} Bazen ham fikirlerimizi test etme konusunda yardıma ihtiyaç duyuyoruz. Bu, herhangi bir teknik bilgi olmadan katkıda bulunmanın harika bir yoludur. -1. Tasarım ekibi, [Discord](https://discord.com/invite/ethereum-org) ve [GitHub](https://github.com/ethereum/ethereum-org-website/labels/design%20required%20%F0%9F%8E%A8) üzerinden bir örnek tasarım paylaşacaktır. +1. Tasarım ekibi, [Discord](https://discord.com/invite/ethereum-org) ve [GitHub](https://github.com/ethereum/ethereum-org-website/labels/design%20required%20%F0%9F%8E%A8) üzerinden bir maket tasarımı paylaşacak. 2. Tasarımların üzerinden yorumlar seçeneğiyle geribildirim vermeye yönlendirileceksiniz. 3. Sonuç, Github konusunda paylaşılacak ve ekip tarafından kapatılacaktır. -###  Anket araştırmasına katılın {#answer-surveys} +###  Anket araştırmalarına katılın {#answer-surveys} Web sitemiz hakkında geribildirim sağlayın: @@ -34,22 +34,22 @@ ethereum.org, birçok özelliğe ve içeriğe sahip, hızla büyüyen bir web si 1. Web sitesine gidin ve tasarımları dikkatle inceleyin. 2. Herhangi bir görsel sorun ya da kullanıcı deneyimi sorunu görürseniz, ekran görüntüsü ve notlar alın. -3. Bulduğunuz sorunları [hata raporu](https://github.com/ethereum/ethereum-org-website/issues/new/choose) ile bildirin. +3. Bulunan sorunları bir [hata raporu](https://github.com/ethereum/ethereum-org-website/issues/new/choose) kullanarak bildirin. ###  Tasarım değişiklikleri önerin {#propose-design-changes} -Tasarım zorluklarının üstesinden gelme konusunda kendinizi rahat hissediyorsanız, GitHub konu panomuzu ziyaret edip [tasarımla ilgili sorunları](https://github.com/ethereum/ethereum-org-website/labels/design%20required%20%F0%9F%8E%A8) filtreleyin. +Tasarım zorluklarının üstesinden gelme konusunda kendinize güveniyorsanız, GitHub sorunlar panomuzu ziyaret edebilir ve [tasarımla ilgili sorunları](https://github.com/ethereum/ethereum-org-website/labels/design%20required%20%F0%9F%8E%A8) filtreleyebilirsiniz. -1. Web sitemizi inceleyin ve tasarımına dikkat edin ya da GitHub depomuza gidip ["Tasarım gerekli" etiketli](https://github.com/ethereum/ethereum-org-website/labels/design%20required%20%F0%9F%8E%A8) sorunları gözden geçirin. -2. Çözüm üzerine fikir üretin ve tasarlayın. (ideal olarak [tasarım sistemimizi](https://www.figma.com/community/file/1134414495420383395) kullanarak). -3. İlgili GitHub konusunda çözümü önerin ya da [yeni bir tane oluşturun.](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=feature+%3Asparkles%3A&template=feature_request.yaml&title=Feature+request) +1. Web sitemizi inceleyin ve tasarımına dikkat edin ya da GitHub depomuza gidin ve [“Tasarım gerekli” etiketli](https://github.com/ethereum/ethereum-org-website/labels/design%20required%20%F0%9F%8E%A8) sorunları gözden geçirin. +2. Çözüm üzerine fikir üretin ve tasarlayın. (tercihen [tasarım sistemimizi](https://www.figma.com/community/file/1134414495420383395) kullanarak). +3. Çözümü ilgili GitHub sorununda önerin veya [yeni bir tane oluşturun.](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=feature+%3Asparkles%3A&template=feature_request.yaml&title=Feature+request) 4. İncelemesi için tasarım ekibini bekleyin. -###  Tasarım Sistemini birlikte geliştirin {#Contribute-to-design-system} +###  Tasarım Sistemini Birlikte Oluşturun {#Contribute-to-design-system} Tasarım sistemimiz, ethereum.org'u tasarlamayı eğlenceli ve kolay hale getirir. Deneyimli bir tasarımcıysanız, web sitesi için birçok ana bileşen hazırlamamıza yardımcı olabilirsiniz. -1. GitHub'da [tasarım sistemi panosundan](https://github.com/ethereum/ethereum-org-website/labels/design%20system), üzerinde çalışmak üzere bir konu seçin ya da yeni bir tane oluşturun. +1. GitHub'daki [tasarım sistemi panosundan](https://github.com/ethereum/ethereum-org-website/labels/design%20system) üzerinde çalışmak için bir sorun seçin veya yeni bir tane oluşturun. 2. Seçtiğiniz konunun size atanmasını talep edin. 3. Talep edilen bileşeni Figma'da tasarlamaya başlayın. 4. Değerlendirmeye ya da rehberliğe ihtiyaç duyarsanız GitHub üzerinden tasarım ekibi ile paylaşın. @@ -58,10 +58,10 @@ Tasarım sistemimiz, ethereum.org'u tasarlamayı eğlenceli ve kolay hale getiri ###  Web sitesinde tasarımla ilgili içerik yazın {#write-design-articles} -Ethereum geliştirici topluluğu güçlü olsa da, tasarım topluluğu biraz daha geride kalmıştır. Eğer web3'e dair bilgi sahibi bir tasarımcıysanız, lütfen öğrenimlerinizi daha büyük bir toplulukla paylaşmayı düşünün, böylece birlikte büyür ve gelişebiliriz; katkıda bulunmak isterseniz [Ethereum için bir tasarım sayfamız](/developers/docs/design-and-ux/) bulunmaktadır. Ayrıca [listeleme politikalarımızı](/contributing/design/adding-design-resources) kontrol edebilirsiniz. +Ethereum geliştirici topluluğu güçlü olsa da, tasarım topluluğu biraz daha geride kalmıştır. Web3 bilgisine sahip bir tasarımcıysanız, hep birlikte büyüyüp gelişebilmemiz için lütfen öğrendiklerinizi daha geniş toplulukla paylaşmayı düşünün; katkıda bulunabileceğiniz [Ethereum için tasarım üzerine bir sayfamız](/developers/docs/design-and-ux/) var. Ayrıca [listeleme politikalarımızı](/contributing/design/adding-design-resources) da inceleyebilirsiniz. 1. Ethereum.org'da ele alınması gereken tasarım konularını tasarlayın ve tasarımcılar için yararlı olabilecek konuları belirleyin. -2. GitHub depomuza gidin ve konu başlığı önererek [bir konu açın](https://github.com/ethereum/ethereum-org-website/issues/new) (henüz içeriği yazmayın). +2. GitHub depomuza gidin ve bir konu önermek için [bir sorun kaydı açın](https://github.com/ethereum/ethereum-org-website/issues/new) (henüz içeriği yazmayın). 3. Onaylaması için tasarım ekibini bekleyin. 4. Onaylandıktan sonra içeriği yazın. 5. İlgili GitHub sorununa yükleyin. @@ -71,7 +71,7 @@ Ethereum geliştirici topluluğu güçlü olsa da, tasarım topluluğu biraz dah Görselleştirmeler, soyut konuları özetlemenin en güçlü araçlarından biridir. Diyagramlar ve infografikler ekleyerek büyük bir potansiyel elde edilir. Sonuç olarak, bir görsel bin kelime söyleyebilir. 1. Web sitemize gidin ve yeni infografiklerin eklenebileceği sayfalara bakın. -2. İllüstrasyon tarzının [varlıklarımız](/assets/) ile uyumlu olduğundan emin olun. -3. GitHub depomuza gidin ve illüstrasyonu önererek [bir konu açın](https://github.com/ethereum/ethereum-org-website/issues/new). +2. İllüstrasyon stilinin [varlıklarımızla](/assets/) uyumlu olduğundan emin olun. +3. GitHub depomuza gidin ve illüstrasyonu öneren [bir sorun kaydı açın](https://github.com/ethereum/ethereum-org-website/issues/new). 4. Tasarım ekibi onu inceleyecektir. 5. Bir geliştiriciden yeni görseli uygulamasını istemek için yeni bir konu açarız. diff --git a/public/content/translations/tr/contributing/index.md b/public/content/translations/tr/contributing/index.md index 73f3d19fd63..aaf25ed7088 100644 --- a/public/content/translations/tr/contributing/index.md +++ b/public/content/translations/tr/contributing/index.md @@ -1,36 +1,42 @@ --- -title: Katkıda Bulunma -description: Ethereum.org'a katkıda bulunmanın farklı yolları hakkında bilgi edinin +title: "Katkıda Bulunma" +description: "Ethereum.org'a katkıda bulunmanın farklı yolları hakkında bilgi edinin" lang: tr --- -# Ethereum.org'a katkıda bulunma 🦄 {#contributing-to-ethereumorg} +# ethereum.org'a Katkıda Bulunma 🦄 {#contributing-to-ethereumorg} -Ethereum.org, **12.000'in üzerinde** kişinin web sitesinin çevrilmesine, yazılmasına, tasarlanmasına ve bakımına katkıda bulunduğu, açık kaynaklı yürütülen bir projedir. +Ethereum.org, web sitesinin çevrilmesine, yazılmasına, tasarlanmasına ve bakımına yardımcı olan **12.000'den fazla** katkıda bulunanın yer aldığı, açık kaynaklı bir projedir. Ethereum ekosisteminde büyümenize ve eğitim almanıza yardımcı olurken anlamlı katkılarda bulunmanızı ve ilgili pratik deneyimler edinmenizi sağlayacak misafirperver bir topluluğuz! -## Katkıda bulunma yolları {#ways-to-contribute} +## Katkıda Bulunma Yolları {#ways-to-contribute} **Çeviriler** + - [Çeviri programına katılın](/contributing/translation-program/) – ethereum.org'u yeni dillere taşımamıza yardımcı olun **Geliştirme** -- [Açık bir konu üzerinde çalışın](https://github.com/ethereum/ethereum-org-website/issues) – Yapılması gerektiğini tespit ettiğimiz işler + +- [Açık bir sorun üzerinde çalışın](https://github.com/ethereum/ethereum-org-website/issues) – Yapılması gerektiğini belirlediğimiz işler **Tasarım** + - [Web sitesinin tasarlanmasına yardımcı olun](/contributing/design/) – Her seviyeden tasarımcı, web sitesini geliştirmek için katkıda bulunabilir **İçerik** + - [İçerik oluşturun/düzenleyin](/contributing/#how-to-update-content) – Yeni sayfalar önerin veya zaten burada olanlar üzerinde değişiklikler yapın -- [Topluluk kaynakları ekleyin](/contributing/content-resources/) – Alakalı bir sayfaya faydalı bir makale veya kaynak ekleyin +- [Topluluk kaynakları ekleyin](/contributing/content-resources/) – İlgili bir sayfaya faydalı bir makale veya kaynak ekleyin - [Bir tasarım kaynağı önerin](/contributing/design/adding-design-resources/) – Yararlı tasarım kaynaklarını ekleyin, güncelleyin ve silin - [Testler](/contributing/quizzes/) – İlgili bir sayfa için test soru bankaları ekleyin, güncelleyin ve silin **Özellik fikirleri** -- [Bir özellik talebinde bulunun](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=Type%3A+Feature&template=feature_request.yaml&title=) – Yeni bir özellik veya tasarım hakkındaki fikirlerinizi bize bildirin + +- [Bir özellik talep edin](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=Type%3A+Feature&template=feature_request.yaml&title=) – Yeni bir özellik veya tasarım hakkındaki fikirlerinizi bize bildirin **Ürün listeleri** + - [Bir borsa ekleyin](/contributing/adding-exchanges/) – [Borsa bulucumuza](/get-eth/#country-picker) bir borsa ekleyin - [Bir ürün ekleyin](/contributing/adding-products/) – İlgili sayfaya bir merkeziyetsiz uygulama veya cüzdan ekleyin - [Geliştirici araçları ekleyin](/contributing/adding-developer-tools/) – İlgili sayfaya bir geliştirici aracı ekleyin @@ -49,65 +55,65 @@ Bunlar, çözmemize yardımcı olabileceğiniz ve sorumluluğunu alabileceğiniz Tüm görevleri gör -## Nasıl ethereum.org üzerinde çalışılır {#how-to-update-content} +## ethereum.org Üzerinde Nasıl Çalışılır {#how-to-update-content} -[Çeviri Programı](/contributing/translation-program/)'na katkıda bulunmak istiyorsanız lütfen [Crowdin](https://crowdin.com/project/ethereum-org)'de bir hesap oluşturun. Web sitesine içerik ya da görsel eklemek veya düzenlemek, hataları düzeltmek, açık görevler üzerinde çalışmak gibi diğer her şey için bir [GitHub](https://github.com/) hesabına ihtiyacınız olacak. +[Çeviri Programı'na](/contributing/translation-program/) katkıda bulunmak isterseniz, [Crowdin'de](https://crowdin.com/project/ethereum-org) bir hesap oluşturmanızı rica ederiz. Diğer her şey için – web sitesine içerik veya görsel eklemek ya da düzenlemek, hataları düzeltmek, açık görevler üzerinde çalışmak – bir [GitHub](https://github.com/) hesabınızın olması gerekir. -Tüm güncellemeler GitHub PR süreci aracılığıyla yapılır. Bu, web sitesinin yerel bir kopyasını oluşturmanız, değişikliklerinizi uygulamanız ve değişikliklerinizi birleştirmeyi istemeniz anlamına gelir. Bunu daha önce hiç yapmadıysanız, [GitHub depomuzun](https://github.com/ethereum/ethereum-org-website) en altındaki talimatları takip edin. +Tüm güncellemeler GitHub PR süreci aracılığıyla yapılır. Bu, web sitesinin yerel bir kopyasını oluşturmanız, değişikliklerinizi uygulamanız ve değişikliklerinizi birleştirmeyi istemeniz anlamına gelir. Bunu daha önce hiç yapmadıysanız, [GitHub depomuzun](https://github.com/ethereum/ethereum-org-website) altındaki talimatları izleyin. Herhangi bir şey üzerinde çalışmak için izne ihtiyacınız yok, ancak ne yapmayı planladığınızı bize bildirmeniz her zaman en iyisidir. Bunu şu şekillerde yapabilirsiniz: -- [GitHub](https://github.com/ethereum/ethereum-org-website) üzerinde bir konuya veya PR'ye yorum yapmak -- [Discord sunucumuzda](https://discord.gg/ethereum-org) mesajlaşmak +- [GitHub'da](https://github.com/ethereum/ethereum-org-website) bir soruna veya PR'ye yorum yapma +- [Discord sunucumuzda](https://discord.gg/ethereum-org) mesajlaşma Katkıda bulunmadan önce şunlara aşina olduğunuzdan emin olun: - gelişen [ethereum.org vizyonu](/about/) -- [tasarım prensiplerimiz](/contributing/design-principles/) -- [stil rehberimiz](/contributing/style-guide/) +- [tasarım ilkelerimiz](/contributing/design-principles/) +- [stil kılavuzumuz](/contributing/style-guide/) - [davranış kurallarımız](/community/code-of-conduct) -## Siteyle ilgili kararlar nasıl alınır {#how-decisions-about-the-site-are-made} +## Site Hakkındaki Kararlar Nasıl Alınır {#how-decisions-about-the-site-are-made} -Bireysel PR'ler, tasarım evrimi ve büyük yükseltmeler hakkındaki kararlar, Ethereum ekosisteminden bir ekip tarafından verilir. Bu ekip; proje yöneticilerini, geliştiricileri, tasarımcıları, pazarlama ve iletişimleri ve konu uzmanlarını kapsar. Topluluk girdisi her kararı etkiler: Bu nedenle lütfen sorunlarla ilgili sorular sorun, PR gönderin veya ekiple iletişime geçin: +Bireysel PR'ler, tasarım evrimi ve büyük yükseltmelerle ilgili kararlar, Ethereum ekosisteminden bir ekip tarafından alınır. Bu ekipte proje yöneticileri, geliştiriciler, tasarımcılar, pazarlama ve iletişim uzmanları ile konu uzmanları yer alır. Topluluk girdisi her kararı etkiler: bu nedenle lütfen sorunlarla ilgili sorular sorun, PR'lar gönderin veya ekiple iletişime geçin: - [website@ethereum.org](mailto:website@ethereum.org) - [@ethdotorg](https://twitter.com/ethdotorg) - [Discord sunucusu](https://discord.gg/ethereum-org) -### İntihal üzerine bir not {#plagiarism} +### İntihal Hakkında Bir Not {#plagiarism} -Yalnızca orijinal çalışmanızı veya kullanma izniniz olan içeriği, ethereum.org'a herhangi bir içerik veya yapı katkıda bulunurken kullanın. Ethereum ekosistemindeki birçok proje, bilginin ücretsiz paylaşımına izin veren açık kaynaklı lisanslama kullanır. Ancak bu bilgiyi bulamazsanız ethereum.org'a eklemeye çalışmayın. İntihal olarak kabul edilen herhangi bir çekme isteği reddedilecektir. +ethereum.org'a herhangi bir içerik veya eserle katkıda bulunurken yalnızca kendi orijinal çalışmanızı veya kullanma izniniz olan içeriği kullanın. Ethereum ekosistemindeki birçok proje, bilgilerin ücretsiz paylaşımına olanak tanıyan açık kaynaklı lisanslama kullanır. Ancak bu bilgiyi bulamazsanız, ethereum.org'a eklemeye çalışmayın. İntihal sayılan tüm çekme istekleri reddedilecektir. -## Açık kaynak konusunda acemi misiniz? {#new-to-open-source} +## Açık kaynak dünyasında yeni misiniz? {#new-to-open-source} -GitHub depomuzda, özellikle açık kaynak konusunda acemi olan geliştiriciler için tasarlanmış [good first issue](https://github.com/ethereum/ethereum-org-website/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22) etiketli, düşük giriş engellerine sahip sorunlarımız bulunuyor. +GitHub depomuzda, açık kaynakta yeni olan geliştiriciler için özel olarak tasarlanmış, [good first issue](https://github.com/ethereum/ethereum-org-website/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22) olarak etiketlenmiş, giriş engeli düşük sorunlarımız var. -## Zincir Üstünde Başarı Jetonunuzu (OAT) talep edin {#oat} +## Zincir Üstünde Başarı Jetonunuzu (OAT) Talep Edin {#oat} -Katkınızın ethereum.org ile birleştirilmesi halinde [Galxe](https://app.galxe.com/quest/ethereumorg)'de özel bir rozet talep etme şansınız olacak. Bir Zincir Üstünde Başarı Jetonu (OAT), ekosistemin biraz daha mükemmel hale getirilmesine katkıda bulunduğunuzun kanıtıdır. +Katkınız ethereum.org ile birleştirilirse, [Galxe](https://app.galxe.com/quest/ethereumorg) üzerinde özel bir rozet talep etme şansınız olacak. Bir Zincir Üstünde Başarı Jetonu (OAT), ekosistemi biraz daha harika hale getirmenize yardımcı olduğunuzun bir kanıtıdır. [OAT'ler hakkında daha fazla bilgi](https://help.galxe.com/en/articles/9645630-create-quest-rewards#h_1c5d63ba03) -### Nasıl talep edilir? +### Nasıl Talep Edilir + 1. [Discord sunucumuza](https://discord.gg/ethereum-org) katılın. -2. Yaptığınız katkının bağlantısını `#🥇 | proof-of-contribution` kanalına yapıştırın. -3. Ekip üyelerimizden birinin size OAT bağlantınızı göndermesini bekleyin. +2. Katkınızın bağlantısını `#🥇 | proof-of-contribution` kanalına yapıştırın. +3. Ekibimizden bir üyenin size OAT'nizin bağlantısını göndermesini bekleyin. 4. OAT'nizi talep edin! -OAT'leri talep etmek için sadece bireysel kontrolüne sahip olduğunuz cüzdanları kullanmalısınız. Bu işlemler için özel anahtarına sahip olmadığınız borsa hesaplarını ya da başka hesapları kullanmayın, çünkü bunlar OAT'lerinize erişmenize ve onları yönetmenize izin vermez. - -## GitPOAP'unuzu talep edin {#claim-gitpoap} +OAT'leri talep etmek için yalnızca kişisel saklama cüzdanlarını kullanmalısınız. Borsa hesaplarını veya özel anahtarlarına sahip olmadığınız diğer hesapları kullanmayın, çünkü bunlar OAT'lerinize erişmenize ve onları yönetmenize izin vermez. -GitPOAP ayrıca birleştirilmiş katkınızı otomatik olarak tanıyacak ve kendi platformunuzda ayrı ve eşsiz katkıda bulunan POAP'ı basmanıza da olanak tanıyacaktır! +## GitPOAP'ınızı Talep Edin {#claim-gitpoap} +GitPOAP ayrıca birleştirilmiş katkınızı otomatik olarak tanıyacak ve kendi platformlarında size özel, benzersiz bir katkıda bulunan POAP'ı basmanıza olanak tanıyacaktır! -### Nasıl talep edilir? {#how-to-claim} +### Nasıl Talep Edilir {#how-to-claim} -1. [GitPOAP](https://www.gitpoap.io)'u ziyaret edin. -2. Oturum açma seçeneği ile cüzdanınızla veya e-postanızla bağlanın. -3. Uygun olup olmadığınızı kontrol etmek için GitHub kullanıcı adınızı, ETH adresinizi, ENS isimlerinizi ya da herhangi bir GitPOAP'u aratın. -4. Eğer GitHub hesabınız uygunsa, bir GitPOAP basabilirsiniz! +1. [GitPOAP](https://www.gitpoap.io) adresini ziyaret edin. +2. Giriş yapma seçeneği aracılığıyla cüzdanınızla ve hatta e-postanızla bağlanın. +3. Uygun olup olmadığınızı kontrol etmek için GitHub kullanıcı adınızı, ETH adresinizi, ENS adlarınızı veya herhangi bir GitPOAP'u arayın. +4. GitHub hesabınız uygunsa bir GitPOAP basabilirsiniz! ## Katkıda Bulunanlar {#contributors} diff --git a/public/content/translations/tr/contributing/quizzes/index.md b/public/content/translations/tr/contributing/quizzes/index.md index 7e1be6daba9..79ce5990df2 100644 --- a/public/content/translations/tr/contributing/quizzes/index.md +++ b/public/content/translations/tr/contributing/quizzes/index.md @@ -1,10 +1,10 @@ --- title: Test ekleme -description: Ethereum.org'a test eklerken kullandığımız politika +description: "Ethereum.org'a test eklerken kullandığımız politika" lang: tr --- -# Testler {#quizzes} +# Sınavlar {#quizzes} Testler, kullanıcıların az önce okudukları sayfanın içeriğini anlayıp anlamadıklarını görmek için kendilerini sınama fırsatlarıdır. Sorular, yalnızca ilgili sayfadaki içeriğe bağlı olmalı ve sayfada yer almayan bilgiler hakkında olmamalıdır. @@ -19,7 +19,7 @@ Mevcut testlerin bazı örnekleri burada bulunabilir: ## Öğrenme testi ekleme -Kendisi için öğrenme testi oluşturulmamış bir sayfa varsa lütfen söz konusu sayfa için [yeni bir konu açın](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=&template=suggest_quiz.yaml). +Henüz öğrenme sınavı oluşturulmamış bir sayfa varsa, lütfen bunun için [bir konu açın](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=&template=suggest_quiz.yaml). Lütfen aşağıdaki bilgileri sağlayın: @@ -32,7 +32,7 @@ Lütfen aşağıdaki bilgileri sağlayın: ## Test sorusu ekleme -Bir test için soru bankasına eklemek istediğiniz bir soru varsa lütfen [bir konu açın](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=&template=suggest_quiz.yaml) ve aşağıdaki bilgileri sağlayın: +Bir sınava ait soru bankasına eklemek istediğiniz bir soru varsa, lütfen [bir konu açın](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=&template=suggest_quiz.yaml) ve aşağıdaki bilgileri sağlayın: - Test sorusu eklemek istediğiniz sayfa - Her bir soru için aşağıdaki bilgileri sağlayın: @@ -43,7 +43,7 @@ Bir test için soru bankasına eklemek istediğiniz bir soru varsa lütfen [bir ## Test sorusunu güncelleme -Bir test için soru bankasında güncellemek istediğiniz bir soru varsa lütfen [bir konu açın](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=&template=suggest_quiz.yaml) ve aşağıdaki bilgileri sağlayın: +Bir sınava ait soru bankasında güncellemek istediğiniz bir soru varsa, lütfen [bir konu açın](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=&template=suggest_quiz.yaml) ve aşağıdaki bilgileri sağlayın: - Test sorusunu güncellemek istediğiniz sayfa - Güncellenmesini istediğiniz her soru için aşağıdaki bilgileri sağlayın: @@ -55,7 +55,7 @@ Bir test için soru bankasında güncellemek istediğiniz bir soru varsa lütfen ## Test sorusunu kaldırma -Bir soru için içerik artık sayfada yer almıyorsa ve sorunun kaldırılması gerekiyorsa lütfen soruyu kaldırmak için [bir konu açın](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=&template=suggest_quiz.yaml) ve aşağıdaki bilgileri sağlayın: +Bir soruya ait içerik artık sayfada yer almıyorsa ve sorunun kaldırılması gerekiyorsa, lütfen soruyu kaldırmak için [bir konu açın](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=&template=suggest_quiz.yaml) ve aşağıdaki bilgileri sağlayın: - Test sorusunu silmek istediğiniz sayfa - Silmek istediğiniz soru diff --git a/public/content/translations/tr/contributing/translation-program/faq/index.md b/public/content/translations/tr/contributing/translation-program/faq/index.md index 6618d623fe9..2cb1bbdaa64 100644 --- a/public/content/translations/tr/contributing/translation-program/faq/index.md +++ b/public/content/translations/tr/contributing/translation-program/faq/index.md @@ -1,10 +1,10 @@ --- -title: Çeviri Programı sıkça sorulan sorular (SSS) +title: "Çeviri Programı sıkça sorulan sorular (SSS)" lang: tr -description: Ethereum.org Çeviri Programı hakkında sık sorulan sorular +description: "Ethereum.org Çeviri Programı hakkında sık sorulan sorular" --- -# Ethereum.org çeviri rehberi {#translating-ethereum-guide} +# ethereum.org çeviri kılavuzu {#translating-ethereum-guide} Çeviri Programında yeniyseniz ve başlamakta tereddüt ediyorsanız, başlamanıza yardımcı olabilecek bazı SSS'ler burada bulunuyor. En yaygın soruların cevaplarını bulmak için bu rehberi kullanın. @@ -18,20 +18,20 @@ Ethereum.org Çeviri Programı, bunun bir uzantısıdır ve benzer bir felsefe g Bu nedenle Çeviri Programı açık ve gönüllü olup katılım ücrete tabi değildir. Çevirmenlere çevirdikleri kelime sayısı kadar ücret verseydik, sadece yeterli çeviri tecrübesi olanları (profesyonel çevirmenleri) Çeviri Programına davet edebilirdik. Bu, Çeviri Programını dışlayıcı hâle getirir ve belirtilen hedeflere, özellikle de herkesin katılmasına ve ekosisteme dahil olmasına izin vermemize engel olacaktır. -Katkıda bulunanların Ethereum ekosisteminde başarılı olmalarını sağlamak için her türlü çabayı gösteriyoruz; [POAP'ler sunmak](/contributing/translation-program/acknowledgements/#poap), [çevirmen sertifikası](/contributing/translation-program/acknowledgements/#certificate) ve ayrıca [Çeviri Lider Tabloları](/contributing/translation-program/acknowledgements/) ve [sitede tüm çevirmenlerimizin listelenmesi](/contributing/translation-program/contributors/) gibi pek çok parasal olmayan teşvik mevcuttur. +Katkıda bulunanlarımızın Ethereum ekosisteminde başarılı olmasını sağlamak için her türlü çabayı gösteriyoruz; [POAP'ler sunma](/contributing/translation-program/acknowledgements/#poap) ve [çevirmen sertifikası](/contributing/translation-program/acknowledgements/#certificate) gibi parasal olmayan birçok teşvikin yanı sıra, [Çeviri Lider Tablolarını](/contributing/translation-program/acknowledgements/) düzenliyor ve [sitede tüm çevirmenlerimizi listeliyoruz](/contributing/translation-program/contributors/). -## `` bulunan dizgileri nasıl çevirebilirim? {#tags} +## `` içeren dizeleri nasıl çevirebilirim? {#tags} -Her dizgi saf yazı biçiminde yazılmamıştır. HTML etiketleri gibi farklı karakterler bulunduran dizgiler mevcuttur (`<0>`, ``). Bu, genelde hyperlink veya cümle ortasında alternatif stil yaratmak için kullanılır. +Her dizgi saf yazı biçiminde yazılmamıştır. HTML etiketleri (`<0>`, ``) gibi karışık komut dosyaları içeren bazı dizeler vardır. Bu genellikle bir cümlenin ortasındaki köprüler veya alternatif biçimlendirme içindir. -- Etiketlerin içindeki yazıları çevirin, fakat etiketleri çevirmeyin. `<` ve `>` işaretleri içerisindeki hiçbir şey çevrilmemeli ya da silinmemelidir. +- Etiketlerin içindeki yazıları çevirin, fakat etiketleri çevirmeyin. `<` ve `>` içindeki hiçbir şey çevrilmemeli veya kaldırılmamalıdır. - Dizgiyi güvende tutmak için sol alttaki "Copy Source" (Kaynağı Kopyala) düğmesine basmanızı öneririz. Bu, orijinal dizgiyi kopyalayıp metin kutusuna yapıştırır. Bui etiketlerin nerede olduğunu anlamayı sağlar ve hata yapmamaya yardımcı olur. -![Kaynağı kopyala düğmesinin vurgulandığı bir Crowdin ara yüzü](./html-tag-strings.png) +![Kaynağı kopyala düğmesinin vurgulandığı bir Crowdin arayüzü](./html-tag-strings.png) Dilinizde daha doğal olması için dizgideki etiketlerin yerlerini değiştirebilirsiniz: Sadece etiketin tamamının yerini değiştirdiğinize emin olun. -Etiketler ve kod parçacıklarıyla ilgili daha ayrıntılı bilgi için lütfen [ethereum.org Çeviri Stili Rehberine](/contributing/translation-program/translators-guide/#dealing-with-tags) bakın. +Etiketler ve kod parçacıklarıyla ilgili daha ayrıntılı bilgi için lütfen [ethereum.org Çeviri Stil Kılavuzuna](/contributing/translation-program/translators-guide/#dealing-with-tags) bakın. ## Dizgiler nerede yaşar? {#strings} @@ -40,7 +40,7 @@ Bazen kaynak dizgileri doğru bir çeviri sağlamanız için yeterli olmayabilir - Daha fazla bilgi için "ekran fotoğrafları"na ve "bağlam"a bakabilirsiniz. Kaynak dizgi kısmında size metini nasıl kullandığımızı gösteren bir ekran fotoğrafı göreceksiniz. - Eğer hâlâ emin değilseniz, "yorum kısmı"nda işaret koyabilirsiniz. [Nasıl yorum bırakacağınızı bilmiyor musunuz?](#comment) -![Bir ekran görüntüsü ile bir dizginin bağlamının nasıl sağlanabileceğinin gösterimi](./source-string.png) +![Bir ekran görüntüsü ile bir dizenin bağlamının nasıl sağlanabileceğinin gösterimi](./source-string.png) ![Bağlam için eklenmiş örnek bir ekran görüntüsü](./source-string-2.png) @@ -56,7 +56,7 @@ Dikkat gerektiren özel bir dizgiyi işaretlemek istiyorsanız, yorum yapmaktan ## Çeviri Belleği (ÇB) nedir? {#translation-memory} -Çeviri Belleği (ÇB), Crowdin'in önceden çevrilmiş tüm dizgileri [ethereum.org](https://ethereum.org/) üzerinde depolayan bir özelliğidir. Bir dizgi çevirildiğinde, otomatik olarak proje ÇB'mize kaydedilir. Bu, zaman kazanmanıza yardımcı olacak yararlı bir araç olabilir! +Çeviri Belleği (ÇB), Crowdin'in önceden çevrilmiş tüm dizgileri ethereum.org üzerinde depolayan bir özelliğidir. Bir dizgi çevirildiğinde, otomatik olarak proje ÇB'mize kaydedilir. Bu, zaman kazanmanıza yardımcı olacak yararlı bir araç olabilir! - "ÇB ve MÇ Önerileri" kısmına bakarak diğer çevirmenlerin aynı veya benzer bir dizgiyi nasıl çevirdiğini görebilirsiniz. Yüksek eşleşme oranı olan bir öneri bulursanız, tıklayarak çeviriden yararlanmaktan çekinmeyin. - Listede herhangi bir şey yoksa, önceden yapılmış çeviriler için ÇB'yi arayabilir ve tutarlılık için bu çevirileri yeniden kullanabilirsiniz. @@ -75,11 +75,11 @@ Crowdin sözlüğü, terim ve anlamların açıklanması için en iyi yerdir. S - İkinci olarak, eğer size tanıdık gelmeyen ve altı çizili olmayan bir terim görürseniz, terimler sekmesinde (sağdaki sütunun üçüncü butonu) arattırabilirsiniz. Spesifik terimlerin açıklamalarını ve projede geçmişte kullanılmış olanları bulacaksınız. -![Crowdin'de terimler sekmesinin nerede bulunacağını gösteren bir ekran görüntüsü](./glossary-tab.png) +![Crowdin'de sözlük sekmesinin nerede bulunacağını gösteren bir ekran görüntüsü](./glossary-tab.png) - Eğer hâlâ bulamıyorsanız, yeni bir terim ekleme şansınız var! Bir arama motorunda aramanızı ve açıklamasını sözlüğe eklemenizi öneririz. Çevirmenlerimizin terimi daha iyi anlaması için büyük yardımda bulunmuş olursunuz. -![Crowdin'e bir sözlük teriminin nasıl ekleneceğini gösteren ekran görüntüsü](./add-glossary-term.png) +![Crowdin'e bir sözlük teriminin nasıl ekleneceğini gösteren bir ekran görüntüsü](./add-glossary-term.png) ### Terminoloji çeviri politikası {#terminology} @@ -93,7 +93,7 @@ Dikkatli bir değerlendirmenin sonucunda en sık kullanılan terminolojiyi siz Size tanıdık olmayan bir kelimeyle karşılaştığınızda yapmanızı önerdiklerimiz: -- [Terimler sözlüğüne](#glossary) başvurun, diğer çevirmenlerin bu terimi daha önce nasıl çevirdiklerini bulabilirsiniz. Eğer terimin önceki çevirisinin alakasız olduğunu düşünüyorsanız, Crowdin sözlüğüne yeni terim ekleyerek çevirinizi onarmakta özgürsünüz. +- [Terimler Sözlüğü'ne](#glossary) başvurun, diğer çevirmenlerin bu terimi daha önce nasıl çevirdiklerini bulabilirsiniz. Eğer terimin önceki çevirisinin alakasız olduğunu düşünüyorsanız, Crowdin sözlüğüne yeni terim ekleyerek çevirinizi onarmakta özgürsünüz. - Eğer böyle bir çeviri hâlihazırda sözlükte yoksa sizi topluluğumuz tarafından aslında nasıl kullanıldığını gösteren bir arama motoru araması veya medya makalesinde aramaya teşvik ediyoruz. - Eğer hiç referans bulamadıysanız kendi sezginize güvenmekte ve yeni bir çeviri önermekte özgürsünüz! - Eğer bunu yapmaktan emin değilseniz, terimi çevirmeden bırakın. Bazen, İngilizce terimler doğru tanımı iletmek için fazlasıyla yeterli. @@ -102,18 +102,18 @@ Size tanıdık olmayan bir kelimeyle karşılaştığınızda yapmanızı önerd ## İnceleme süreci nasıl işliyor? {#review-process} -Çevirilerimizde belirli bir kalite ve tutarlılık düzeyi sağlamak için, dünyanın en büyük dil hizmeti sağlayıcılarından biri olan [Acolad](https://www.acolad.com/) ile çalışıyoruz. Acolad'in 20.000 profesyonel dil uzmanı vardır, bu da ihtiyaç duyduğumuz her dil ve içerik türü için profesyonel inceleyiciler sağlayabilecekleri anlamına gelir. +Çevirilerimizde belirli bir kalite ve tutarlılık düzeyi sağlamak için, küresel olarak en büyük dil hizmeti sağlayıcılarından biri olan [Acolad](https://www.acolad.com/) ile çalışıyoruz. Acolad'in 20.000 profesyonel dil uzmanı vardır, bu da ihtiyaç duyduğumuz her dil ve içerik türü için profesyonel inceleyiciler sağlayabilecekleri anlamına gelir. -İnceleme süreci basittir; belirli bir [içerik grubu](/contributing/translation-program/content-buckets) %100 çevrildiğinde, o içerik grubu için bir inceleme siparişi veririz. İnceleme süreci doğrudan Crowdin'de gerçekleşir. İnceleme tamamlandıktan sonra, web sitesini çevrilmiş içerikle güncelleriz. +Gözden geçirme süreci basittir; bir dizi içerik %100 çevrildiğinde, o içerik grubu için bir gözden geçirme siparişi veririz. İnceleme süreci doğrudan Crowdin'de gerçekleşir. İnceleme tamamlandıktan sonra, web sitesini çevrilmiş içerikle güncelleriz. ## Kendi dilimde nasıl içerik eklerim? {#adding-foreign-language-content} Şu anda, İngilizce olmayan tüm içerik doğrudan İngilizce kaynak içerikten çevrilmektedir ve İngilizce'de olmayan herhangi bir içerik başka dillere eklenemez. -Ethereum.org için yeni içerik önermek için GitHub'da [konu açabilirsiniz](https://github.com/ethereum/ethereum-org-website/issues). Eklenmesi hâlinde içerik İngilizce yazılacak ve Crowdin kullanılarak diğer dillere çevrilecektir. +ethereum.org için yeni içerik önermek isterseniz, GitHub'da [bir konu oluşturabilirsiniz](https://github.com/ethereum/ethereum-org-website/issues). Eklenmesi hâlinde içerik İngilizce yazılacak ve Crowdin kullanılarak diğer dillere çevrilecektir. Yakın gelecekte İngilizce olmayan içerik eklenmesi için destek eklemeyi planlıyoruz. ## İletişime geçin {#contact} -Bunların hepsini okuduğunuz için teşekkürler. Umarız bu, programımıza katılmamıza yardımcı olmuştur. Soru sormak ve diğer çevirmenlerle işbirliği yapmak için [Discord translation channel](https://discord.gg/ethereum-org)'a katılmaktan çekinmeyin veya translations@ethereum.org adresinden bize ulaşın! +Bunların hepsini okuduğunuz için teşekkürler. Umarız bu, programımıza katılmamıza yardımcı olmuştur. Soru sormak ve diğer çevirmenlerle işbirliği yapmak için [Discord çeviri kanalımıza](https://discord.gg/ethereum-org) katılmaktan çekinmeyin veya bize translations@ethereum.org adresinden ulaşın! diff --git a/public/content/translations/tr/contributing/translation-program/how-to-translate/index.md b/public/content/translations/tr/contributing/translation-program/how-to-translate/index.md index 2829f32f843..6e2058a6249 100644 --- a/public/content/translations/tr/contributing/translation-program/how-to-translate/index.md +++ b/public/content/translations/tr/contributing/translation-program/how-to-translate/index.md @@ -1,10 +1,10 @@ --- -title: Çevirme yöntemi +title: "Çevirme yöntemi" lang: tr -description: Ethererum.org çevirisinde Crowdin kullanım talimatları +description: "Ethererum.org çevirisinde Crowdin kullanım talimatları" --- -# Çevirme yöntemi {#how-to-translate} +# Nasıl çeviri yapılır {#how-to-translate} ## Görsel rehber {#visual-guide} @@ -24,27 +24,26 @@ Crowdin hesabınızda oturum açmanız veya henüz hesabınız yoksa Crowdin hes ### Dilinizi açın {#open-language} -Crowdin'e giriş yaptıktan sonra bir proje açıklaması ile kullanılabilir tüm dillerin bir listesini göreceksiniz. Her dil ayrıca toplam çevrilebilir kelime sayısı hakkında bilgi ve ilgili dilde ne kadar içeriğin çevrildiğine ve onaylandığına dair bir genel görünüm içerir. +Crowdin'e giriş yaptıktan sonra bir proje açıklaması ile kullanılabilir tüm dillerin bir listesini göreceksiniz. +Her dil ayrıca toplam çevrilebilir kelime sayısı hakkında bilgi ve ilgili dilde ne kadar içeriğin çevrildiğine ve onaylandığına dair bir genel görünüm içerir. Çevrilmeye hazır dosyaların listesini görmek için çevirmek istediğiniz dili açın. -![Crowdin'deki diller listesi](./list-of-languages.png) +![Crowdin'deki dillerin listesi](./list-of-languages.png) -### Üzerinde çalışmak istediğiniz bir belge bulun {#find-document} +### Üzerinde çalışılacak bir belge bulun {#find-document} Web site içeriği, çok sayıda belge ve içerik gruplarına bölünmüştür. Her belgenin ilerleme durumunu sağ taraftan kontrol edebilirsiniz; çevirinin ilerleme durumu %100'ün altındaysa lütfen katkıda bulunun! -Dilinizi listede göremiyor musunuz? [Bir konu açın](https://github.com/ethereum/ethereum-org-website/issues/new/choose) veya [Discord'da](https://discord.gg/ethereum-org) sorun +Dilinizi listede göremiyor musunuz? [Bir sorun bildirin](https://github.com/ethereum/ethereum-org-website/issues/new/choose) veya [Discord](https://discord.gg/ethereum-org) sunucumuzda sorabilirsiniz. -![Crowdin'de çevrilmiş ve çevrilmemiş dosyalar](./crowdin-files.png) +![Crowdin'deki çevrilmiş ve çevrilmemiş dosyalar](./crowdin-files.png) -İçerik grupları hakkında bir not: En yüksek öncelikli içeriğin önce yayımlanmasını sağlamak için Crowdin içinde "içerik grupları" kullanıyoruz. Bir dili kontrol ettiğinizde, örneğin [Filipince](https://crowdin.com/project/ethereum-org/fil#), içerik grubu klasörlerini görürsünüz ("1. Anasayfa", "2. Esaslar", "3. Keşfetme", vs). +İçerik grupları hakkında bir not: En yüksek öncelikli içeriğin önce yayımlanmasını sağlamak için Crowdin içinde "içerik grupları" kullanıyoruz. Bir dili, örneğin [Filipince](https://crowdin.com/project/ethereum-org/fil#) dilini kontrol ettiğinizde, içerik grubu ("1. için olan) klasörleri görürsünüz. Anasayfa", "2. Esaslar", "3. Keşfetme", vs). En yüksek etkiye sahip sayfaların önce çevrilmesini sağlamak için şu sayısal sıralamayla (1 → 2 → 3 → ⋯) çeviri yapmanızı öneririz. -[Ethereum.org içerik grupları hakkında daha fazla bilgi edinin](/contributing/translation-program/content-buckets/) - -### Çevirin {#translate} +### Çeviri yapın {#translate} Çevirmek istediğiniz dosyayı seçtiğinizde, bu dosya çevrimiçi düzenleyicide açılacaktır. Crowdin'i daha önce hiç kullanmadıysanız, temel bilgileri gözden geçirmek için bu hızlı rehberi kullanabilirsiniz. @@ -60,7 +59,8 @@ Belirli dizeleri aramak, durumlarına göre filtrelemek veya görünümü deği **_2 – Düzenleyici alanı_** -Ana çeviri alanı – kaynak metin, varsa ek bağlam ve ekran görüntüleri ile birlikte en üstte görüntülenir. Yeni bir çeviri önermek için çevirinizi "Çeviriyi buraya yazın" alanına girin ve Kaydet'e tıklayın. +Ana çeviri alanı – kaynak metin, varsa ek bağlam ve ekran görüntüleri ile birlikte en üstte görüntülenir. +Yeni bir çeviri önermek için çevirinizi "Çeviriyi buraya yazın" alanına girin ve Kaydet'e tıklayın. Ayrıca bu bölümde dizenin mevcut çevirilerini ve diğer dillere çevrilmiş halini, ayrıca çeviri belleği eşleşmelerini ve makine çevirisi önerilerini bulabilirsiniz. @@ -70,11 +70,11 @@ Burada yorumları, çeviri belleği girdilerini ve sözlük girdilerini bulabili Üstteki düğmeleri kullanarak mevcut çevirileri arayabileceğiniz Çeviri Belleğine veya anahtar terimlerin açıklamalarını ve standart çevirilerini içeren Sözlüğe de geçiş yapabilirsiniz. -Daha fazlasını mı öğrenmek istiyorsunuz? [Crowdin çevrimiçi düzenleyiciyi kullanımıyla ilgili dokümanlara](https://support.crowdin.com/online-editor/) göz atmaktan çekinmeyin +Daha fazlasını mı öğrenmek istiyorsunuz? [Crowdin çevrimiçi düzenleyiciyi kullanma dokümanlarına](https://support.crowdin.com/online-editor/) göz atmaktan çekinmeyin. ### Gözden geçirme süreci {#review-process} -Çeviriyi tamamladığınızda (yani, içerik grubundaki tüm dosyalar 100% olarak göründüğünde) profesyonel çeviri hizmeti aldığımız kurum içeriği gözden geçirecektir (ve potansiyel olarak düzeltecektir). Gözden geçirme tamamlandıktan sonra (yani gözden geçirmenin ilerleme durumu %100 olduğunda) çevirileri web sitesine ekleriz. +Çeviriyi tamamladığınızda (yani, bir içerik grubu için tüm dosyalar %100 olarak göründüğünde), profesyonel çeviri hizmetimiz içeriği gözden geçirecek (ve potansiyel olarak düzenleyecektir). Gözden geçirme tamamlandıktan sonra (yani gözden geçirme ilerlemesi %100 olduğunda), çevirileri web sitesine ekleriz. @@ -85,7 +85,7 @@ Daha fazlasını mı öğrenmek istiyorsunuz? [Crowdin çevrimiçi düzenleyiciy ### İletişime geçin {#get-in-touch} -Sormak istediğiniz bir şey mi var? Ekibimizle ve diğer çevirmenlerle iş birliği yapmak mı istiyorsunuz? Lütfen [ethereum.org Discord sunucumuzun](https://discord.gg/ethereum-org) #translations kanalına yazın +Sormak istediğiniz bir şey mi var? Ekibimizle ve diğer çevirmenlerle iş birliği yapmak mı istiyorsunuz? Lütfen [ethereum.org Discord sunucumuzdaki](https://discord.gg/ethereum-org) #translations kanalına yazın. Bize translations@ethereum.org adresinden de ulaşabilirsiniz diff --git a/public/content/translations/tr/contributing/translation-program/index.md b/public/content/translations/tr/contributing/translation-program/index.md index 3d319da5bcb..a45708ba4b1 100644 --- a/public/content/translations/tr/contributing/translation-program/index.md +++ b/public/content/translations/tr/contributing/translation-program/index.md @@ -1,7 +1,7 @@ --- -title: Çeviri Programı +title: "Çeviri Programı" lang: tr -description: Ethererum.org Çeviri Programı hakkında bilgi +description: "Ethererum.org Çeviri Programı hakkında bilgi" --- # Çeviri Programı {#translation-program} @@ -10,57 +10,58 @@ description: Ethererum.org Çeviri Programı hakkında bilgi ![](./enterprise-eth.png) -## Çevirmemize yardım edin {#help-us-translate} +## Çevirmemize yardımcı olun {#help-us-translate} Ethereum.org Çeviri Programı açıktır ve herkes katkı verebilir! 1. Crowdin hesabınıza giriş yapmalı veya Crowdin'e kaydolmalısınız. 2. Katkıda bulunmak istediğiniz dili seçin. -3. Başlamadan önce lütfen, Crowdin'in nasıl kullanılacağını öğrenmek için [Nasıl çevrilir](/contributing/translation-program/how-to-translate/) rehberini ve en iyi uygulamalar ile ipuçları için [Çeviri Stili Rehberini](/contributing/translation-program/translators-guide/) inceleyin. +3. Başlamadan önce, Crowdin'i nasıl kullanacağınızı öğrenmek için lütfen [Nasıl çeviri yapılır](/contributing/translation-program/how-to-translate/) kılavuzuna ve ipuçları ile en iyi uygulamalar için [Çeviri Stili Kılavuzu'na](/contributing/translation-program/translators-guide/) göz atın. 4. Makine çevirileri onaylanmayacaktır. 5. Tüm çeviriler siteye eklenmeden önce incelenir, dolayısıyla çevirilerinizi sitede görebilmek için biraz beklemeniz gerekebilir. -_Çeviriler konusunda iş birliği yapmak, sorular sormak, geribildirim ve fikir paylaşmak veya bir tercüme grubuna katılmak için [ethereum.org Discord](https://discord.gg/ethereum-org)'una katılın._ +_Çevirilerde işbirliği yapmak, sorular sormak, geri bildirim ve fikirlerinizi paylaşmak ya da bir çeviri grubuna katılmak için [ethereum.org Discord](https://discord.gg/ethereum-org) sunucusuna katılın._ Çeviriye başlayın -## Çeviri Programı hakkında {#about-us} +## Çeviri Programı Hakkında {#about-us} Ethereum topluluğu, küresel ve kapsayıcı olmayı hedefliyor ancak içeriğinin çoğu yalnızca İngilizce konuşanlara hitap ediyor ve dünyada İngilizce konuşmayan 6 milyar insanı dışarıda bırakıyor. Ethereum.org'un dünya çapındaki topluluk için Ethereum'a giriş portalı görevi görmesi için İngilizce konuşmayan kişilere ana dillerinde Ethereum içeriği sağlamanın çok önemli olduğuna inanıyoruz. Ethereum.org Çeviri Programı, ethereum.org ve diğer Ethereum içeriğini mümkün olduğunca çok dile çevirerek Ethereum'u herkes için erişilebilir hâle getirmeyi amaçlıyor. -Ethereum.org Çeviri Programının [misyon ve vizyonu](/contributing/translation-program/mission-and-vision) hakkında daha fazla bilgi edinin. +ethereum.org Çeviri Programı'nın [misyon ve vizyonu](/contributing/translation-program/mission-and-vision) hakkında daha fazlasını okuyun. -### Şimdiye kadarki ilerleme durumumuz {#our-progress} +### Şimdiye kadarki ilerlememiz {#our-progress} -- [**6.900'ün üzerinde** çevirmen](/contributing/translation-program/contributors/) -- **68** dilde yayınlanan site içeriği -- [2024'te **2,89 milyon** kelime çevirisi](/contributing/translation-program/acknowledgements/) +- [**6.900'dan fazla** çevirmen](/contributing/translation-program/contributors/) +- **68** dil sitede yayında +- [2024 yılında çevrilen **2,89 milyon** kelime](/contributing/translation-program/acknowledgements/) -### Onaylar {#acknowledgements} +### Teşekkürler {#acknowledgements} -Ethereum.org, binlerce topluluk üyesi tarafından çevrilmektedir ve bu kişiler, Çeviri Programının anahtar parçalarıdır. Çevirmenlerimize onları takdir ettiğimizi göstermek ve kariyer yollarında desteklemek isteriz. Çevirmenlerimizi takdir etme yöntemlerimizden bazıları: +Ethereum.org, binlerce topluluk üyesi tarafından çevrilmektedir ve bu kişiler, Çeviri Programının anahtar parçalarıdır. +Çevirmenlerimize onları takdir ettiğimizi göstermek ve kariyer yollarında desteklemek isteriz. Çevirmenlerimizi takdir etme yöntemlerimizden bazıları: #### Sertifika {#certificate} -Çeviri Programına katkıda bulunduysanız ve çevirdiğiniz kelimelerden en az 5000 tanesi onaylandıysa ethereum.org çevirmen sertifikasına hak kazanırsınız. [Sertifikalar hakkında daha fazla bilgi](/contributing/translation-program/acknowledgements/#certificate) +Çeviri Programına katkıda bulunduysanız ve çevirdiğiniz kelimelerden en az 5000 tanesi onaylandıysa ethereum.org çevirmen sertifikasına hak kazanırsınız. [Sertifikalar hakkında daha fazlası](/contributing/translation-program/acknowledgements/#certificate) #### OAT'ler {#oats} -Çeviri Programı'na katkıda bulunanlar, 2024 yılında çevirdikleri kelime sayısına göre farklı sayıda OAT (zincir üstünde başarı jetonu) almaya hak kazanacaktır. OAT'ler, ethereum.org Çeviri Programı'na katkınızı kanıtlayan NFT'lerdir. [OAT'ler hakkında daha fazla bilgi](/contributing/translation-program/acknowledgements/#oats) +Çeviri Programı'na katkıda bulunanlar, 2024 yılında çevirdikleri kelime sayısına göre farklı sayıda OAT (zincir üstünde başarı jetonu) almaya hak kazanacaktır. OAT'ler, ethereum.org Çeviri Programı'na katkınızı kanıtlayan NFT'lerdir. [OAT'ler hakkında daha fazlası](/contributing/translation-program/acknowledgements/#oats) -#### Çevirmenlere teşekkür {#translator-acknowledgements} +#### Çevirmen teşekkürleri {#translator-acknowledgements} -En iyi çevirmenlerimize [lider tablosu](/contributing/translation-program/acknowledgements/) ve [Çeviri Programına katkıda bulunanlar tam listesi](/contributing/translation-program/contributors/) aracılığıyla açık teşekkür. +[Liderlik tabloları](/contributing/translation-program/acknowledgements/) ve [Çeviri Programı'na katkıda bulunanların tümünün bir listesi](/contributing/translation-program/contributors/) kullanılarak en iyi çevirmenlerimizin halka açık olarak takdir edilmesi. #### Ödüller {#rewards} -Geçmişte, en aktif şekilde katkıda bulunanları, özel ethereum.org ürünlerinin yanı sıra [Devcon](https://devcon.org/en/) ve [Devconnect](https://devconnect.org/) gibi Ethereum konferanslarının biletleriyle geriye dönük ödüllendirdik. +Geçmişte, en aktif katkıda bulunanlarımızı [Devcon](https://devcon.org/en/) ve [Devconnect](https://devconnect.org/) gibi Ethereum konferanslarına biletlerin yanı sıra özel ethereum.org ürünleriyle de geriye dönük olarak ödüllendirdik. Katkıda bulunan kişileri ödüllendirmek için sürekli yeni ve yaratıcı yollar arıyoruz; bizi izlemeye devam edin! @@ -68,22 +69,22 @@ Katkıda bulunan kişileri ödüllendirmek için sürekli yeni ve yaratıcı yol Çeviri Programına katkıda bulunuyor ya da programda yer almayı düşünüyorsanız aşağıdaki çeviri rehberlerini gözden geçirmelisiniz: -- [Çeviri Stili Rehberi](/contributing/translation-program/translators-guide/) _– ethereum.org çevirmenleri için talimatlar ve ipuçları_ +- [Çeviri Stili Kılavuzu](/contributing/translation-program/translators-guide/) _– ethereum.org çevirmenleri için talimatlar ve ipuçları_ - [Çeviri SSS'leri](/contributing/translation-program/faq/) _– ethereum.org Çeviri Programı hakkında sıkça sorulan sorular ve yanıtları_ -- [Crowdin çevrimiçi düzenleyici rehberi](https://support.crowdin.com/online-editor/) _– Crowdin çevrimiçi düzenleyicisini ve Crowdin'in bazı gelişmiş özelliklerini kullanmaya yönelik ayrıntılı bir rehber_ -- [İçerik grupları](/contributing/translation-program/content-buckets/) _– ethereum.org'un her içerik grubunda bulunan sayfalar_ +- [Crowdin çevrimiçi düzenleyici kılavuzu](https://support.crowdin.com/online-editor/) _– Crowdin çevrimiçi düzenleyicisini ve Crowdin'in bazı gelişmiş özelliklerini kullanmaya yönelik ayrıntılı bir kılavuz_ Diğer kullanışlı çeviri araçları, çevirmen toplulukları ve Çeviri Programı blog gönderileri için lütfen [Kaynaklar sayfasını](/contributing/translation-program/resources/) ziyaret edin. ## İletişime geçin {#get-in-touch} -Sormak istediğiniz bir şey mi var? Ekibimizle ve diğer çevirmenlerle iş birliği yapmak mı istiyorsunuz? Lütfen [ethereum.org Discord sunucumuzun](https://discord.gg/ethereum-org) #translations kanalına yazın +Sormak istediğiniz bir şey mi var? Ekibimizle ve diğer çevirmenlerle iş birliği yapmak mı istiyorsunuz? Lütfen [ethereum.org Discord sunucumuzdaki](https://discord.gg/ethereum-org) #translations kanalına yazın. -Ayrıca bize translations@ethereum.org adresinden de ulaşabilirsiniz +Bize translations@ethereum.org adresinden de ulaşabilirsiniz ## Kendi çeviri programınızı başlatma {#starting-a-translation-program} -Ethereum içeriğini mümkün olduğunca çok dile çevirme ve eğitim içeriğini herkesin kullanımına sunma konusunda kararlıyız. Çevirilere odaklanmaya paralel olarak, diğer Ethereum projelerinin kendi çeviri çabalarını düzenlemelerine, yönetmelerine ve geliştirmelerine yardımcı olmak istiyoruz. +Ethereum içeriğini mümkün olduğunca çok dile çevirme ve eğitim içeriğini herkesin kullanımına sunma konusunda kararlıyız. +Çevirilere odaklanmaya paralel olarak, diğer Ethereum projelerinin kendi çeviri çabalarını düzenlemelerine, yönetmelerine ve geliştirmelerine yardımcı olmak istiyoruz. Bu nedenle, ethereum.org'u çevirme sürecinde edindiğimiz bazı ipuçlarını ve en iyi uygulamaları içeren bir [Çeviri Programı Kural Kitabı](/contributing/translation-program/playbook/) oluşturduk. diff --git a/public/content/translations/tr/contributing/translation-program/mission-and-vision/index.md b/public/content/translations/tr/contributing/translation-program/mission-and-vision/index.md index 523428e31f4..eb78cd334e1 100644 --- a/public/content/translations/tr/contributing/translation-program/mission-and-vision/index.md +++ b/public/content/translations/tr/contributing/translation-program/mission-and-vision/index.md @@ -1,7 +1,7 @@ --- title: Misyon ve vizyon lang: tr -description: ethereum.org Tercüme Programının misyonu ve vizyonu +description: "ethereum.org Tercüme Programının misyonu ve vizyonu" --- # Misyon ve vizyon {#mission-and-vision} diff --git a/public/content/translations/tr/contributing/translation-program/playbook/index.md b/public/content/translations/tr/contributing/translation-program/playbook/index.md new file mode 100644 index 00000000000..a7f3ff0da87 --- /dev/null +++ b/public/content/translations/tr/contributing/translation-program/playbook/index.md @@ -0,0 +1,317 @@ +--- +title: "Çeviri programı kılavuzu" +lang: tr +description: "Bir çeviri programı kurmaya yönelik ipuçları ve önemli hususlar koleksiyonu" +--- + +# Çeviri Programı Kılavuzu {#translation-program-playbook} + +İngilizce, dünyada en çok konuşulan dillerden biridir ve açık ara dünyanın en çok öğrenilen dilidir. İngilizce internette, özellikle de sosyal medyada kullanılan en yaygın dil olduğundan ve çok dilli programlama dilleri kıt olduğundan, blokzincir alanındaki içeriğin büyük çoğunluğu doğal olarak İngilizce yazılmıştır. + +Ancak, dünyadaki 6 milyardan fazla insanın (nüfusun %75'inden fazlası) hiç İngilizce konuşmaması, dünya nüfusunun büyük çoğunluğu için Ethereum'a girişte büyük bir engel teşkil etmektedir. + +Bu nedenle, bu alandaki giderek artan sayıda proje, içeriklerini farklı dillere çevirtmeyi ve küresel topluluklar için yerelleştirmeyi hedefliyor. + +Çok dilli içerik sağlamak, küresel topluluğunuzu büyütmenin, İngilizce bilmeyenlere eğitim vermenin, içeriğinizin ve iletişimlerinizin daha geniş bir kitleye ulaşmasını sağlamanın ve bu alana daha fazla insanı dahil etmenin basit ve etkili bir yoludur. + +Bu kılavuz, içerik yerelleştirmesi hakkındaki yaygın zorlukları ve yanlış kanıları ele almayı amaçlamaktadır. İçerik yönetimi, çeviri ve gözden geçirme süreci, kalite güvencesi, çevirmenlere ulaşma ve yerelleştirme sürecinin diğer hayati yönleri için adım adım bir kılavuz sunmaktadır. + +## İçerik Yönetimi {#content-management} + +Çeviri içerik yönetimi, çeviri iş akışını otomatikleştirme sürecini ifade eder; bu da tekrarlayan manuel iş ihtiyacını ortadan kaldırır, verimliliği ve kaliteyi artırır, daha iyi kontrol sağlar ve iş birliğini mümkün kılar. + +Yerelleştirme sürecinde içerik yönetimine, içeriğe ve ihtiyaçlarınıza bağlı olarak birçok farklı yaklaşım vardır. + +İçeriği yönetmenin temel yolu, kaynak ve hedef metni içeren iki dilli dosyalar oluşturmaktır. Bu, basitlik dışında önemli bir avantaj sunmadığı için çeviride nadiren kullanılır. + +Çeviri ajansları genellikle çeviri yönetimine, proje yönetimi yetenekleri sağlayan ve dosyalar, içerik ve dilbilimciler üzerinde çok daha fazla kontrol imkanı tanıyan çeviri yönetimi yazılımı veya yerelleştirme araçları kullanarak yaklaşır. + +İçerik yönetimi hakkında daha fazlasını okuyun: + +[Trados'a göre çeviri yönetimi nedir?](https://www.trados.com/solutions/translation-management/) + +[Phrase'e göre çok dilli içerik yönetimi](https://phrase.com/blog/posts/multilingual-content-management/) + +### Çeviri Yönetim Yazılımı {#translation-management-software} + +Pek çok çeviri yönetim sistemi ve yerelleştirme aracı vardır ve yazılım seçimi temel olarak ihtiyaçlarınıza bağlıdır. + +Bazı projeler çeviri yönetim sistemlerini kullanmamayı ve çevirileri manuel olarak (doğrudan iki dilli dosyalarda veya GitHub gibi barındırma hizmetlerinde) halletmeyi tercih etse de bu durum kontrolü, verimliliği, kaliteyi, ölçeklenebilirliği ve iş birliği olanaklarını önemli ölçüde azaltır. Böyle bir yaklaşım, küçük ölçekli veya tek seferlik çeviri projeleri için en faydalısı olabilir. + +En güçlü ve yaygın olarak kullanılan çeviri yönetimi araçlarından bazılarına hızlı bir bakış: + +**Kitle kaynak ve iş birliği için en iyisi** + +[Crowdin](https://crowdin.com/) + +- Açık kaynaklı projeler için ücretsizdir (sınırsız sayıda dize ve proje) +- TM ve terimler sözlüğü tüm planlarda mevcuttur +- 60'tan fazla desteklenen dosya biçimi, 70'ten fazla API entegrasyonu + +[Lokalise](https://lokalise.com/) + +- 2 ekip üyesi için ücretsiz, daha fazla katılımcı için ücretli planlar (çoğu plan için sınırlı sayıda dize) +- TM ve terimler sözlüğü bazı ücretli planlarda mevcuttur +- 30'dan fazla desteklenen dosya biçimi, 40'tan fazla API entegrasyonu + +[Transifex](https://www.transifex.com/) + +- Yalnızca ücretli planlar (çoğu plan için sınırlı sayıda dize) +- TM ve terimler sözlüğü tüm ücretli planlarda mevcuttur +- 30'dan fazla desteklenen dosya biçimi, 20'den fazla API entegrasyonu + +[Phrase](https://phrase.com/) + +- Yalnızca ücretli planlar (tüm planlar için sınırsız sayıda dize, sınırlı sayıda proje ve ekip üyesi) +- TM ve terimler sözlüğü bazı ücretli planlarda mevcuttur +- 40'tan fazla desteklenen dosya biçimi, 20'den fazla API entegrasyonu + +[Smartcat](https://www.smartcat.com/) + +- Ücretli gelişmiş özelliklere sahip temel ücretsiz plan (tüm planlar için sınırsız sayıda dize ve proje) +- TM ve terimler sözlüğü tüm planlarda mevcuttur +- 60'tan fazla desteklenen dosya biçimi, 20'den fazla API entegrasyonu + +[POEditor](https://poeditor.com/) + +- Açık kaynaklı projeler için ücretsizdir (tüm projeler için sınırlı sayıda dize, açık kaynaklı projeler için sınırsız) +- TM ve terimler sözlüğü ücretli planlarda mevcuttur +- 20'den fazla desteklenen dosya biçimi, 10'dan fazla API entegrasyonu + +ve diğerleri... + +**Profesyonel çeviri araçları** + +[SDL Trados Studio](https://www.trados.com/products/trados-studio/) + +- Serbest çevirmenler ve ekipler için ücretli planlar +- Çok güçlü bilgisayar destekli çeviri (CAT) aracı ve çevirmen verimliliği yazılımı + +[MemoQ](https://www.memoq.com/) + +- Gelişmiş özellikler için çeşitli ücretli planların yanı sıra sınırlı bir ücretsiz sürümü de mevcuttur +- Şirketler, dil hizmeti sağlayıcıları ve çevirmenler için çeviri yönetim yazılımı + +[Memsource](https://www.memsource.com/) + +- Bireysel çevirmenler için ücretsiz, ekipler için çeşitli ücretli planlar +- Bulut tabanlı bilgisayar destekli çeviri ve çeviri yönetim sistemi + +ve diğerleri... + +Çeviri yönetim yazılımı hakkında daha fazlasını okuyun: + +[Wikipedia'da çeviri yönetim sistemleri tanımı](https://en.wikipedia.org/wiki/Translation_management_system) + +[Phrase'e göre her çeviri yönetim yazılımının sahip olması gereken 7 şey](https://phrase.com/blog/posts/7-things-every-translation-management-software-should-have/) + +[MemoQ'ya göre çeviri yönetim sistemi nedir?](https://www.memoq.com/tools/what-is-a-translation-management-system) + +[Gengo'nun en iyi 16 çeviri yönetim sistemi listesi](https://gengo.com/translator-product-updates/16-best-translation-management-systems/) + +## İş Akışı {#workflow} + +Çeviri alanında, çeviri iş akışı birbiriyle bir şekilde ilişkili olan ve projeniz için önemli hususlar içeren birkaç farklı anlama gelebilir. + +Aşağıda her ikisini de inceleyeceğiz. + +**Anlam 1** + +Bu, muhtemelen çeviri iş akışları hakkında en yaygın düşünme biçimidir ve genellikle iş akışı kelimesi duyulduğunda akla gelen şeydir. + +Özünde bu, çeviriler hakkında düşünmeye başlamaktan çevrilmiş içeriği ürününüzde kullanmaya kadar uzanan 'iş akışıdır'. + +Bu durumda örnek bir iş akışı şöyle olabilir: + +1. **Dosyaları çeviriye hazırlama** – Kulağa basit gelse de birkaç önemli şeyi göz önünde bulundurmanız gerekir. Bu adımda, tüm sürecin nasıl işlemesi gerektiğine dair net bir planınız olmalıdır. + +- _Hangi dosya türlerini kullanacaksınız?_ Çevrilmiş dosyalarınızı hangi formatta almak istersiniz?_ + - İçeriğiniz DOCX veya MD formatında mevcutsa, yaklaşım, tanıtım belgenizin veya diğer belgelerinizin PDF sürümünü çevirmenize kıyasla çok daha basit olacaktır. +- _Hangi yerelleştirme araçları bu dosya türünü destekliyor?_ Dosya, orijinal biçimlendirmeyi koruyacak şekilde çevrilebilir mi?_ + - Tüm dosya türleri doğrudan yerelleştirmeyi desteklemez (örneğin PDF dosyaları, resim dosyaları) ve tüm yerelleştirme araçları da tüm dosya türlerini desteklemez. +- _İçeriği kim çevirecek?_ Profesyonel çeviriler mi yaptıracaksınız yoksa gönüllülere mi güveneceksiniz?_ + - Bu, vermeniz gereken bir dizi başka kararı da etkiler. Örneğin, profesyonel çevirmenler gelişmiş yerelleştirme araçlarıyla çalışırken gönüllülere göre daha rahattır. +- _Dilbilimcilerden beklentileriniz nelerdir?_ Bir dil hizmeti sağlayıcısı kullanıyorsanız, sizden ne bekliyorlar?_ + - Bu, hedeflerinizin, beklentilerinizin ve zaman çizelgelerinizin uyumlu olduğundan emin olma adımıdır. +- _Çevrilecek tüm içerik eşit derecede önemli mi?_ Bazı içerikler önce mi çevrilmeli?_ + - Önce çevrilmesi ve uygulanması gereken belirli içeriğe öncelik vermenin bazı yolları vardır. Örneğin, çevrilecek çok fazla içeriğiniz varsa, çevirmenlerin hangisine öncelik vermeleri gerektiğinin farkında olmalarını sağlamak için sürüm kontrolünü kullanabilirsiniz. + +2. **Çeviri için dosyaları paylaşma** – Bu adım aynı zamanda uzun vadeli düşünmeyi de gerektirir ve kaynak dosyaları bir dil hizmeti sağlayıcısına göndermek kadar basit değildir. + +- _İçeriği kim çevirecek?_ _Bu sürece kaç kişi dahil olacak?_ + - Bir yerelleştirme aracı kullanmayı planlıyorsanız, kaynak dosyaları doğrudan araca yükleyebileceğiniz için bu adım basitleşir. Çeviri süreci barındırma hizmetinde gerçekleşiyorsa da bu geçerlidir, çünkü kaynak dosyaların hiçbir yere dışa aktarılması gerekmez. +- _Kaynak dosyalar manuel olarak mı işlenecek yoksa bu süreç otomatikleştirilebilir mi?_ + - Çoğu yerelleştirme aracı, dosya yönetimi sürecinin bir tür entegrasyonuna veya otomasyonuna izin verir. Öte yandan, bireysel çevirmenlerle çalışıyorsanız ve bir yerelleştirme aracı kullanmıyorsanız, yüzlerce veya binlerce çevirmene manuel olarak kaynak dosyaları göndermek ölçeklenebilir bir süreç değildir. +- _Yerelleştirme için hangi araçlar kullanılacak?_ + - Bu sorunun cevabı, diğer her şeye nasıl yaklaşacağınızı belirleyecektir. Doğru aracı seçmek; içerik yönetimini otomatikleştirmenize, Çeviri Belleğini ve Terimler Sözlüğünü yönetmenize, çevirmenleri yönetmenize, çeviri/gözden geçirme ilerlemesini takip etmenize vb. yardımcı olabilir, bu yüzden biraz zaman ayırın ve hangi aracı kullanmak istediğiniz konusunda biraz araştırma yapın. Bir yerelleştirme aracı kullanmayı planlamıyorsanız, yukarıdakilerin tümünün manuel olarak yapılması gerekir. +- _Çeviri süreci ne kadar sürecek?_ Ne kadara mal olacak?_ + - Bu noktada, kaynak dosyaları dil hizmeti sağlayıcısı veya çevirmen havuzu ile paylaşmaya hazır olmalısınız. Dil hizmeti sağlayıcısı, kelime sayısını analiz etmenize ve çeviri süreci için ücretleri ve zaman çizelgesini içeren bir teklif sunmanıza yardımcı olabilir. +- _Bu süreçte kaynak içerikte değişiklik/güncelleme yapmayı planlıyor musunuz?_ + - İçeriğiniz dinamikse ve sık sık değişiyorsa, herhangi bir değişiklik veya güncelleme çeviri ilerlemesini kesintiye uğratabilir. Bir Çeviri Belleği kullanmak bunu önemli ölçüde azaltmaya yardımcı olabilir, ancak yine de sürecin nasıl işleyeceğini ve çevirmenlerin kaydettiği ilerlemeyi engellemekten nasıl kaçınabileceğinizi düşünmek önemlidir. + +3. **Çeviri sürecini yönetme** – Kaynak içerik dil hizmeti sağlayıcısına veya çevirmenlere teslim edildikten sonra işiniz bitmez. Çevirilerin en iyi kalitede olmasını sağlamak için içerik oluşturucuları çeviri sürecine mümkün olduğunca dahil olmalıdır. + +- _Çevirmenlerle nasıl iletişim kurmayı planlıyorsunuz?_ + - Bir yerelleştirme aracı kullanmayı planlıyorsanız iletişim doğrudan araç üzerinden gerçekleşebilir. Çevirmenlerle alternatif bir iletişim kanalı kurmanız da tavsiye edilir, çünkü size ulaşmaktan daha az çekinebilirler ve mesajlaşma araçları daha serbest bir iletişime olanak tanır. +- _Çevirmenlerden gelen sorular nasıl ele alınmalı?_ Bu soruları kim cevaplamalı?_ + - Çevirmenler (hem profesyonel hem de profesyonel olmayan) genellikle açıklama veya ek bağlam için sorular ve taleplerin yanı sıra geri bildirim ve iyileştirme fikirleriyle size ulaşacaktır. Bu soruları yanıtlamak genellikle daha iyi etkileşime ve çevrilen içeriğin kalitesinin artmasına yol açabilir. Onlara mümkün olduğunca çok kaynak sağlamak da değerlidir (örneğin, kılavuzlar, ipuçları, terminoloji yönergeleri, SSS'ler vb.). +- _İnceleme süreci nasıl ele alınmalı?_ Bunu dışarıdan birine mi yaptırmak istersiniz, yoksa şirket içinde inceleme yapacak kapasiteniz var mı?_ + - Her zaman gerekli olmasa da, incelemeler en uygun çeviri sürecinin ayrılmaz bir parçasıdır. Genellikle inceleme sürecini profesyonel incelemecilere dış kaynak olarak vermek en kolay yoldur. Ancak, büyük bir uluslararası ekibiniz varsa, incelemeler veya Kalite Güvencesi (QA) dahili olarak da halledilebilir. + +4. **Çevrilmiş içeriği uygulama** – İş akışının son kısmı olsa da, önceden dikkate alınması yine de önemlidir. + +- _Tüm çeviriler aynı anda mı tamamlanacak?_ + - Eğer değilse, hangi çevirilere öncelik verilmesi gerektiğini, devam eden çevirilerin nasıl takip edileceğini ve çeviriler yapılırken uygulamanın nasıl ele alınacağını düşünmelisiniz. +- _Çevrilen içerik size nasıl teslim edilecek?_ Hangi formatta olacak?_ + - Hangi yaklaşımı kullanırsanız kullanın, bu önemli bir husustur. Yerelleştirme araçları, hedef dosya formatı ve dışa aktarma süreci üzerinde kontrol sahibi olmanızı sağlar ve genellikle barındırma hizmetiyle entegrasyonu etkinleştirerek otomasyonu destekler. +- _Çevirileri projenizde nasıl uygulayacaksınız?_ + - Bazı durumlarda bu, çevrilmiş dosyayı yüklemek veya belgelerinize eklemek kadar basit olabilir. Ancak web sitesi veya uygulama çevirileri gibi daha karmaşık projelerde, kodun uluslararasılaştırmayı desteklediğinden emin olmalı ve uygulama sürecinin önceden nasıl ele alınacağını belirlemelisiniz. +- _Biçimlendirme kaynaktan farklı olursa ne olur?_ + - Yukarıdakine benzer şekilde, basit metin dosyalarını çeviriyorsanız biçimlendirme muhtemelen çok önemli değildir. Ancak, bir web sitesi veya uygulama içeriği gibi daha karmaşık dosyalarda, projenizde uygulanabilmesi için biçimlendirmenin ve kodun kaynakla aynı olması gerekir. Değilse, hedef dosyaların ya çevirmenler ya da geliştiricileriniz tarafından düzenlenmesi gerekir. + +**Anlam 2** + +Dahili kararları ve yaklaşımları hesaba katmayan alternatif bir çeviri iş akışı. Buradaki temel husus, içeriğin akışının kendisidir. + +Bu durumda örnek bir iş akışı şöyle olabilir: + +1. _Çeviri → Uygulama_ + +- En basit iş akışı, çevirinin muhtemelen insan çevirisi olacağıdır, çünkü uygulamadan önce kaliteyi değerlendirmek ve çevirileri düzenlemek için bir inceleme veya kalite güvencesi (QA) süreci yoktur. +- Bu iş akışında, çevirmenlerin belirli bir kalite seviyesini koruyabilmeleri önemlidir, bu da proje yöneticileri ve çevirmenler arasında uygun kaynakları ve iletişimi gerektirecektir. + +2. _Çeviri → İnceleme → Uygulama_ + +- Çevirilerin kalitesinin kabul edilebilir ve tutarlı olmasını sağlamak için bir inceleme ve düzenleme süreci içeren daha gelişmiş bir iş akışı. +- Bu iş akışına yönelik bir dizi yaklaşım vardır; çeviriler profesyonel çevirmenler veya gönüllüler tarafından yapılabilirken, inceleme süreci muhtemelen hedef dilde uyulması gereken tüm dilbilgisi ve yazım kurallarına aşina olan profesyonel incelemeciler tarafından ele alınacaktır. + +3. _Çeviri → İnceleme → Kalite Güvence (QA) → Uygulama_ + +- En yüksek kalite seviyesini sağlamak için en uygun iş akışı. Kalite güvencesi her zaman gerekli olmasa da, çeviri ve incelemeden sonra çevrilmiş metnin kalitesi hakkında size daha iyi bir fikir vermesi açısından faydalı olabilir. +- Bu iş akışıyla, çeviriler yalnızca gönüllüler veya hatta makine çevirisi tarafından yapılabilir. İnceleme süreci profesyonel çevirmenler tarafından yapılmalı, kalite güvencesi ise bir dil hizmeti sağlayıcısı tarafından veya hedef dillerde anadili konuşan çalışanlarınız varsa şirket içinde yapılabilir. + +Çeviri iş akışları hakkında daha fazlasını okuyun: + +[Content Rules'a göre çeviri iş akışının beş aşaması](https://contentrules.com/creating-translation-workflow/) + +[Smartling'e göre çeviri iş akışı yönetimi nedir](https://www.smartling.com/resources/101/what-is-translation-workflow-management/) + +[RixTrans'a göre çeviri iş akışı](https://www.rixtrans.com/translation-workflow) + +## Terminoloji Yönetimi {#terminology-management} + +Terminolojinin nasıl ele alınacağına dair net bir plan oluşturmak, çevirilerinizin kalitesini ve tutarlılığını sağlamak ve çevirmenlerinize zaman kazandırmak için en önemli adımlardan biridir. + +Çeviri alanında bu, terminoloji yönetimi olarak bilinir ve dil hizmeti sağlayıcılarının, dilbilimci havuzlarına erişim ve içerik yönetiminin yanı sıra müşterilerine sundukları temel hizmetlerden biridir. + +Terminoloji yönetimi, projeniz için önemli olan ve her zaman doğru ve tutarlı bir şekilde çevrilmesi gereken terminolojiyi belirleme, toplama ve yönetme sürecini ifade eder. + +Terminoloji yönetimi hakkında düşünmeye başlarken izlenmesi gereken birkaç adım vardır: + +- Terim tabanına dahil edilmesi gereken anahtar terimleri belirleyin. +- Terimler ve tanımlarından oluşan bir terimler sözlüğü oluşturun. +- Terimleri çevirin ve terimler sözlüğüne ekleyin. +- Çevirileri kontrol edin ve onaylayın. +- Terimler sözlüğünü koruyun ve önemli hale geldikçe yeni terimlerle güncelleyin. + +Terminoloji yönetimi hakkında daha fazlasını okuyun: + +[Trados'a göre terminoloji yönetimi nedir](https://www.trados.com/solutions/terminology-management/translation-101-what-is-terminology-management.html) + +[Language Scientific'e göre terminoloji yönetimi neden önemlidir](https://www.languagescientific.com/terminology-management-why-it-matters/#:~:text=Terminology%20management%20is%20the%20process,are%20related%20to%20each%20other.) + +[Clear Words Translation'a göre terminoloji yönetimi nedir ve neden önemlidir](http://clearwordstranslations.com/language/en/what-is-terminology-management/) + +### Çeviri Belleği (TM) ve Terimler Sözlüğü {#tm-and-glossary} + +Çeviri Belleği (TM) ve Terimler Sözlüğü, çeviri endüstrisinde önemli araçlardır ve çoğu dil hizmeti sağlayıcısının güvendiği bir şeydir. + +Bu terimlerin ne anlama geldiğine ve birbirlerinden nasıl farklı olduklarına bakalım: + +**Çeviri belleği (TM)** – Daha uzun metin blokları, tam cümleler, paragraflar ve bireysel terimler de dahil olmak üzere bölümleri veya dizeleri, ayrıca her dildeki mevcut ve önceki çevirilerini otomatik olarak depolayan bir veritabanıdır. + +Çoğu yerelleştirme aracı, çeviri yönetim sistemi ve bilgisayar destekli çeviri aracının yerleşik çeviri bellekleri vardır ve bunlar genellikle dışa aktarılabilir ve diğer benzer araçlarda da kullanılabilir. + +Bir çeviri belleği kullanmanın faydaları arasında daha hızlı çeviriler, daha iyi çeviri kalitesi, kaynak içeriği güncellerken veya değiştirirken belirli çevirileri koruma yeteneği ve tekrarlayan içerik için daha ucuz çeviri maliyetleri bulunur. + +Çeviri bellekleri, farklı segmentler arasındaki yüzde eşleşmesine göre çalışır ve genellikle iki segment aynı içeriğin %50'sinden fazlasını içerdiğinde en kullanışlıdır. Ayrıca, %100 eşleşen tekrarlayan segmentleri otomatik olarak çevirmek için de kullanılırlar, böylece tekrarlayan içeriği birden fazla kez çevirme ihtiyacını ortadan kaldırırlar. + +Çeviri bellekleri hakkında daha fazlasını okuyun: + +[Memsource'ta çeviri bellekleri](https://www.memsource.com/translation-memory/) + +[Smartling'e göre çeviri belleği nedir](https://www.smartling.com/resources/101/what-is-translation-memory/) + +**Terimler Sözlüğü –** Önemli veya hassas terimlerin, tanımlarının, işlevlerinin ve yerleşik çevirilerinin bir listesidir. Bir terimler sözlüğü ile bir çeviri belleği arasındaki temel fark, bir terimler sözlüğünün otomatik olarak oluşturulmaması ve tam cümle çevirileri içermemesidir. + +Çoğu yerelleştirme aracı, çeviri yönetim sistemi ve bilgisayar destekli çeviri aracının, projeniz için önemli terminolojiyi içerdiğinden emin olmak için sürdürebileceğiniz yerleşik terimler sözlükleri vardır. TM gibi, terimler sözlüğü de genellikle dışa aktarılabilir ve diğer yerelleştirme araçlarında kullanılabilir. + +Çeviri projenize başlamadan önce, çevirmenleriniz ve incelemecileriniz için bir terimler sözlüğü oluşturmak için biraz zaman ayırmanız şiddetle tavsiye edilir. Bir terimler sözlüğü kullanmak, önemli terimlerin doğru çevrilmesini sağlar, çevirmenlere çok ihtiyaç duyulan bağlamı sağlar ve çevirilerde tutarlılığı garanti eder. + +Terimler sözlükleri çoğunlukla hedef dillerde yerleşik çeviriler içerse de, bunlar olmadan da kullanışlıdırlar. Yerleşik çeviriler olmasa bile, bir terimler sözlüğü teknik terimlerin tanımlarını içerebilir, çevrilmemesi gereken terimleri vurgulayabilir ve çevirmenlere belirli bir terimin isim, fiil, özel isim veya başka bir sözcük türü olarak kullanılıp kullanılmadığını bildirebilir. + +Terimler sözlükleri hakkında daha fazlasını okuyun: + +[Lionbridge'e göre çeviri terimler sözlüğü nedir](http://info.lionbridge.com/rs/lionbridge/images/Lionbridge%20FAQ_Glossary_2013.pdf) + +[Transifex'te terimler sözlükleri](https://docs.transifex.com/glossary/glossary) + +Projeniz için bir yerelleştirme aracı kullanmayı planlamıyorsanız, muhtemelen bir çeviri belleği ve terimler sözlüğü kullanamayacaksınız (bir excel dosyasında bir terimler sözlüğü veya terim tabanı oluşturabilirsiniz, ancak otomatik terimler sözlükleri çevirmenlerin terimleri ve tanımlarını manuel olarak arama ihtiyacını ortadan kaldırır). + +Bu, tüm tekrarlayan ve benzer içeriğin her seferinde manuel olarak çevrilmesi gerektiği anlamına gelir. Ayrıca, çevirmenler belirli bir terimin çevrilmesi gerekip gerekmediği, metinde nasıl kullanıldığı ve bir terimin zaten yerleşik bir çevirisi olup olmadığı konusunda sorularla size ulaşmak zorunda kalacaklardır. + +_ethereum.org çeviri belleğini ve terimler sözlüğünü projenizde kullanmak ister misiniz?_ Bize translations@ethereum.org adresinden ulaşın._ + +## Çevirmenlere Ulaşma {#translator-outreach} + +**Bir dil hizmeti sağlayıcısıyla çalışma** + +Bir dil hizmeti sağlayıcısıyla ve onların profesyonel çevirmenleriyle çalışıyorsanız bu bölüm sizin için pek geçerli olmayabilir. + +Bu durumda, birçok dilde ihtiyacınız olan tüm hizmetleri (örneğin çeviri, inceleme, Kalite Güvence) sağlama kapasitesine sahip bir dil hizmeti sağlayıcısı seçmek önemlidir. + +Yalnızca sundukları oranlara göre bir dil hizmeti sağlayıcısı seçmek cazip gelse de, en büyük dil hizmeti sağlayıcılarının daha yüksek oranlara sahip olmasının bir nedeni olduğunu belirtmek önemlidir. + +- Veritabanlarında on binlerce dilbilimci bulunur, bu da projenize özel sektörünüz hakkında yeterli deneyime ve bilgiye sahip çevirmenler (yani teknik çevirmenler) atayabilecekleri anlamına gelir. +- Farklı projelerde çalışma ve müşterilerinin çeşitli ihtiyaçlarını karşılama konusunda önemli deneyime sahiptirler. Bu, özel iş akışınıza uyum sağlama, çeviri süreciniz için değerli öneriler ve potansiyel iyileştirmeler sunma ve ihtiyaçlarınızı, gereksinimlerinizi ve son teslim tarihlerinizi karşılama olasılıklarının daha yüksek olduğu anlamına gelir. +- En büyük dil hizmeti sağlayıcılarının çoğunun kullanabileceğiniz kendi yerelleştirme araçları, çeviri bellekleri ve terimler sözlükleri de vardır. Eğer yoksa, en azından havuzlarında, çevirmenlerinin kullanmak istediğiniz herhangi bir yerelleştirme aracına aşina olmalarını ve bunlarla çalışabilmelerini sağlayacak kadar dilbilimci bulunur. + +[2021 Nimdzi 100 raporunda](https://www.nimdzi.com/nimdzi-100-top-lsp/), dünyanın en büyük dil hizmeti sağlayıcılarının derinlemesine bir karşılaştırmasını, her biri hakkında bazı ayrıntıları ve sağladıkları hizmetlere, coğrafi verilere vb. göre dökümleri bulabilirsiniz. + +**Profesyonel olmayan çevirmenlerle çalışma** + +Profesyonel olmayan çevirmenlerle çalışıyor ve çeviri yapmanıza yardımcı olacak gönüllüler arıyor olabilirsiniz. + +İnsanlara ulaşmanın ve onları projenize katılmaya davet etmenin birkaç yolu vardır. Bu, büyük ölçüde ürününüze ve halihazırda ne kadar büyük bir topluluğa sahip olduğunuza bağlı olacaktır. + +Gönüllüleri dahil etmenin bazı yolları aşağıda özetlenmiştir: + +**Ulaşım –** Bu, aşağıdaki noktalarda bir şekilde ele alınsa da, potansiyel gönüllülere ulaşmak ve çeviri girişiminizden haberdar olmalarını sağlamak kendi başına etkili olabilir. + +Birçok insan en sevdikleri projelere dahil olmak ve katkıda bulunmak ister, ancak genellikle geliştirici olmadan veya özel teknik becerilere sahip olmadan bunu yapmanın net bir yolunu göremezler. Projeniz hakkında farkındalık yaratabilirseniz, birçok iki dilli insan muhtemelen dahil olmaya istekli olacaktır. + +**Topluluğunuz içinde arama –** Bu alandaki çoğu projenin zaten büyük ve aktif toplulukları vardır. Topluluk üyelerinizin çoğu muhtemelen projeye basit bir şekilde katkıda bulunma şansını takdir edecektir. + +Açık kaynaklı projelere katkıda bulunmak genellikle içsel motivasyona dayansa da, aynı zamanda harika bir öğrenme deneyimidir. Projeniz hakkında daha fazla bilgi edinmek isteyen herkes, muhtemelen bir çeviri programına gönüllü olarak katılmaktan memnuniyet duyacaktır, çünkü bu, önemsedikleri bir şeye katkıda bulunmuş olmaları gerçeğini yoğun bir uygulamalı öğrenme deneyimiyle birleştirmelerini sağlayacaktır. + +**Ürününüzde girişimden bahsetme –** Ürününüz popülerse ve çok sayıda insan tarafından kullanılıyorsa, çeviri programınızı vurgulamak ve kullanıcıları ürünü kullanırken eyleme çağırmak son derece etkili olabilir. + +Bu, uygulamalar ve web siteleri için ürününüze bir CTA (eylem çağrısı) içeren bir banner veya açılır pencere eklemek kadar basit olabilir. Bu etkilidir çünkü hedef kitleniz topluluğunuzdur - ilk etapta dahil olma olasılığı en yüksek olan kişilerdir. + +**Sosyal medya –** Sosyal medya, çeviri programınız hakkında farkındalık yaratmak ve topluluk üyelerinize ve henüz topluluğunuzun üyesi olmayan diğer kişilere ulaşmak için etkili bir yol olabilir. + +Bir Discord sunucunuz veya Telegram kanalınız varsa, bunu erişim, çevirmenlerinizle iletişim ve katkıda bulunanlarınızı takdir etmek için kullanmak kolaydır. + +X (eski adıyla Twitter) gibi platformlar, yeni topluluk üyelerini dahil etmek ve katkıda bulunanlarınızı herkese açık bir şekilde takdir etmek için de yararlı olabilir. + +Linux Vakfı, açık kaynak katılımcılarını ve motivasyonlarını analiz eden kapsamlı bir [2020 FOSS katılımcı anketi Raporu](https://www.linuxfoundation.org/wp-content/uploads/2020FOSSContributorSurveyReport_121020.pdf) hazırlamıştır. + +## Sonuç {#conclusion} + +Bu belge, her çeviri programının bilmesi gereken bazı temel hususları içermektedir. Bu kesinlikle kapsamlı bir kılavuz değildir, ancak çeviri endüstrisinde hiç deneyimi olmayan herkesin projesi için bir çeviri programı düzenlemesine yardımcı olabilir. + +Farklı araçların, süreçlerin ve bir çeviri programını yönetmenin kritik yönlerinin daha ayrıntılı talimatlarını ve dökümlerini arıyorsanız, en büyük dil hizmeti sağlayıcılarından bazıları bloglar tutar ve genellikle yerelleştirme sürecinin farklı yönleri hakkında makaleler yayınlar. Yukarıdaki konulardan herhangi birine daha derinlemesine dalmak ve yerelleştirme sürecinin profesyonel olarak nasıl çalıştığını anlamak istiyorsanız, bunlar en iyi kaynaklardır. + +Her bölümün sonunda bazı ilgili bağlantılar bulunmaktadır; ancak, çevrimiçi olarak daha birçok kaynak bulabilirsiniz. + +İş birliği teklifleri veya ethereum.org Çeviri Programını sürdürerek edindiğimiz ek bilgiler, öğrenimler ve en iyi uygulamalar için translations@ethereum.org adresinden bize ulaşmaktan çekinmeyin. diff --git a/public/content/translations/tr/contributing/translation-program/resources/index.md b/public/content/translations/tr/contributing/translation-program/resources/index.md index a88064d6781..b8e049d872d 100644 --- a/public/content/translations/tr/contributing/translation-program/resources/index.md +++ b/public/content/translations/tr/contributing/translation-program/resources/index.md @@ -1,7 +1,7 @@ --- -title: Tercümanlar için kaynaklar +title: "Tercümanlar için kaynaklar" lang: tr -description: ethererum.org tercümanları için kullanışlı kaynaklar +description: "ethereum.org tercümanları için kullanışlı kaynaklar" --- # Kaynaklar {#resources} @@ -10,35 +10,40 @@ Tercüme toplulukları ve güncellemelerinin yanı sıra, ethereum.org tercüman ## Kılavuzlar {#guides} -- [Tercüme stil kılavuzu](/contributing/translation-program/translators-guide/) _– ethereum.org tercümanları için talimatlar ve ipuçları_ +- [Çeviri stil kılavuzu](/contributing/translation-program/translators-guide/) _– ethereum.org çevirmenleri için talimatlar ve ipuçları_ - [Çeviri SSS'leri](/contributing/translation-program/faq/) _– ethereum.org Çeviri Programı hakkında sıkça sorulan sorular ve yanıtları_ -- [Crowdin çevrimiçi düzenleyici rehberi](https://support.crowdin.com/online-editor/) _– Crowdin çevrimiçi düzenleyicisini ve Crowdin'in bazı gelişmiş özelliklerini kullanmaya yönelik ayrıntılı bir rehber_ -- [İçerik grupları](/contributing/translation-program/content-buckets/) _– ethereum.org'un her içerik grubunda bulunan sayfalar_ +- [Crowdin çevrimiçi düzenleyici kılavuzu](https://support.crowdin.com/online-editor/) _– Crowdin çevrimiçi düzenleyicisini ve Crowdin'in bazı gelişmiş özelliklerini kullanmaya yönelik ayrıntılı bir kılavuz_ ## Araçlar {#tools} -- [Linguee](https://www.linguee.com/) _– kelime veya kelime öbeği ile arama yapmayı sağlayan çeviriler ve sözlükler için arama motoru_ -- [Proz terim arama](https://www.proz.com/search/) _– özel terimler için çeviri sözlükleri ve sözlükler veritabanı_ -- [Eurotermbank](https://www.eurotermbank.com/) _– 42 dilde Avrupa terminolojisi koleksiyonları_ +- [Linguee](https://www.linguee.com/) + _– kelime veya ifadeyle arama yapmanızı sağlayan bir çeviri arama motoru ve sözlük_ +- [Proz term search](https://www.proz.com/search/) + _– özel terimler için çeviri sözlükleri ve sözlükçelerden oluşan bir veritabanı_ +- [Eurotermbank](https://www.eurotermbank.com/) + _– 42 dilde Avrupa terminolojisi koleksiyonları_ ## Topluluklar {#communities} -- [Dile özgü Discord tercüme grupları](https://discord.gg/ethereum-org) _– ethereum.org tercümanlarını Tercüme Gruplarına bağlama amaçlı bir girişim_ -- [Çince çevirmenler grubu](https://www.notion.so/Ethereum-org-05375fe0a94c4214acaf90f42ba40171) _– Çince çevirmenler arasında daha kolay koordinasyon için fikir sayfası_ +- [Dile özel Discord çeviri grupları](https://discord.gg/ethereum-org) + _– ethereum.org çevirmenlerini Çeviri Gruplarına bağlamayı amaçlayan bir girişim_ +- [Çinli çevirmenler grubu](https://www.notion.so/Ethereum-org-05375fe0a94c4214acaf90f42ba40171) + _– Çinli çevirmenler arasında daha kolay koordinasyon için Notion sayfası_ ## En son güncellemeler {#latest-updates} -En son Çeviri Programı ilerlemesinden haberdar olmak için [Ethereum Foundation bloğunu](https://blog.ethereum.org/) takip edebilirsiniz: +Çeviri Programındaki en son gelişmelerden haberdar olmak için [Ethereum Foundation blogunu](https://blog.ethereum.org/) takip edebilirsiniz: -- [Ekim 2021 kilometre taşları güncellemesi](https://blog.ethereum.org/2021/10/04/translation-program-update/) -- [Aralık 2020 kilometre taşları güncellemesi](https://blog.ethereum.org/2020/12/21/translation-program-milestones-updates-20/) -- [Temmuz 2020 kilometre taşları güncellemesi](https://blog.ethereum.org/2020/07/29/ethdotorg-translation-milestone/) -- [Ağustos 2019 Çeviri Programının başlatılması](https://blog.ethereum.org/2019/08/20/translating-ethereum-for-our-global-community/) +- [Ekim 2021 kilometre taşı güncellemesi](https://blog.ethereum.org/2021/10/04/translation-program-update/) +- [Aralık 2020 kilometre taşı güncellemesi](https://blog.ethereum.org/2020/12/21/translation-program-milestones-updates-20/) +- [Temmuz 2020 kilometre taşı güncellemesi](https://blog.ethereum.org/2020/07/29/ethdotorg-translation-milestone/) +- [Ağustos 2019 Çeviri Programı başlangıcı](https://blog.ethereum.org/2019/08/20/translating-ethereum-for-our-global-community/) ## Çevirmenler için çalışma saatleri {#office-hours} -Çevirmenler için çalışma saatlerimiz, her ayın ikinci Çarşamba günüdür. Bunlar, tam saatleri ve ek ayrıntıları da bulabileceğiniz [ethereum.org Discord](https://discord.gg/ethereum-org)'daki #office-hours ses kanalında düzenlenmektedir. +Çevirmenler için çalışma saatlerimiz, her ayın ikinci Çarşamba günüdür. Bu saatler, tam zamanlarını ve ek ayrıntıları da bulabileceğiniz [ethereum.org Discord](https://discord.gg/ethereum-org) sunucusundaki #office-hours ses kanalında düzenlenir. -Ofis saatleri tercümanlarımızın tercüme süreci hakkında soru sormalarına, program hakkında geri dönüş sağlamalarına, fikirlerini paylaşmalarına veya ethereum.org ana ekibiyle mesajlaşmalarına olanak sağlar. Son olarak, bu çağrıları Çeviri Programı ile ilgili son gelişmeleri iletmek ve önemli ipuçlarını ve talimatları katkıda bulunanlarla paylaşmak için kullanmak istiyoruz. +Ofis saatleri tercümanlarımızın tercüme süreci hakkında soru sormalarına, program hakkında geri dönüş sağlamalarına, fikirlerini paylaşmalarına veya ethereum.org ana ekibiyle mesajlaşmalarına olanak sağlar. +Son olarak, bu çağrıları Çeviri Programı ile ilgili son gelişmeleri iletmek ve önemli ipuçlarını ve talimatları katkıda bulunanlarla paylaşmak için kullanmak istiyoruz. Eğer bir ethereum.org tercümanıysanız veya tercüman olmak istiyorsanız, bu oturumlardan birinde bize katılmaktan çekinmeyin. diff --git a/public/content/translations/tr/contributing/translation-program/translatathon/details/index.md b/public/content/translations/tr/contributing/translation-program/translatathon/details/index.md new file mode 100644 index 00000000000..e900adb530a --- /dev/null +++ b/public/content/translations/tr/contributing/translation-program/translatathon/details/index.md @@ -0,0 +1,90 @@ +--- +title: "Ayrıntılar ve kurallar" +lang: tr +template: translatathon +--- + +![](./participate.png) + +Translatathon herkese açıktır ve dileyen herkes başvuru formunu doldurarak ve Crowdin'deki projeye katılarak yer alabilir. + +Çevirmenler, çeviri dönemi boyunca Crowdin düzenleyicisinde kendi dillerindeki çevrilmemiş dizeler için çeviriler önererek puan toplarlar. + +Her katılımcının nihai puanı, çeviri dönemi boyunca çevirdikleri kelime sayısına ve topladıkları olası bonus puanlara göre liderlik tablosundaki konumlarına göre belirlenir. + +## Başlarken {#getting-started} + +Çeviri süreci, Crowdin'deki ethereum.org projesinde gerçekleşir ve çevirmenler, neredeyse tüm ethereum.org web sitesi içeriğinden oluşan çevrilmemiş dizeler için çevirilerini önerirler. + +Çeviriler doğrudan çevrimiçi düzenleyicide önerilir, bu nedenle herhangi bir dosya veya teslim edilebilir indirmenize veya yüklemenize gerek yoktur. Çevrilen her kelime takip edilir ve sayılır. + +**1) Projeye katılın** + +- Katkıda bulunmaya başlamak için [Crowdin'deki ethereum.org projesine](https://crowdin.com/project/ethereum-org) katılın +- Giriş yapmanız veya bir hesap oluşturmanız gerekecek - tek gereken bir e-posta adresi ve şifredir + +**2) Dilinizi seçin** + +- Hedef diller listesinde dilinizi bulun ve adına veya bayrağına tıklayarak açın +- Kullanılabilir olmayan bir dile çeviri yapmak isterseniz, Crowdin'de [Ethereum.org Ekibi](https://crowdin.com/profile/ethdotorg) ile iletişime geçin veya bize translations@ethereum.org adresinden bir e-posta gönderin; talep üzerine ek hedef diller ekleyeceğiz + +**3) Çevrilmemiş bir dosyayı açın** + +- Çevirmeye başlamak için ilk çevrilmemiş dosyayı bulun. Kaynak dosyaları içeren klasörler önceliğe göre sıralanmıştır, bu nedenle çevrilmemiş dosyaları içeren ilk klasörü çevirmeye başlamalısınız +- Her dosyanın, dosyadaki çevrilebilir içeriğin ne kadarının çevrildiğini ve onaylandığını gösteren bir ilerleme göstergesi vardır… herhangi bir dosyanın çeviri ilerlemesi %100'ün altındaysa, lütfen onu çevirin + +**4) Çevrilmemiş dizeleri çevirin** + +- Çevirmek için bir dosya açtığınızda, yalnızca çevrilmemiş dizeleri çevirdiğinizden emin olun! +- Her dizenin _Çevrildi_, _Çevrilmedi_ veya _Onaylandı_ olup olmadığını gösteren bir durum göstergesi vardır. Bir kaynak dizenin dilinizde zaten önerilen bir çevirisi varsa, onu çevirmenize gerek yoktur +- Ayrıca düzenleyicideki dizeleri _Önce Çevrilmemiş Olanlar_ veya _Sadece Çevrilmemiş Olanlar_ olarak gösterecek şekilde filtreleyebilirsiniz + +Crowdin düzenleyicisinde gezinme ve onu kullanma hakkında ayrıntılı bir kılavuz için, tüm Translatathon katılımcılarının [Nasıl çeviri yapılır](/contributing/translation-program/how-to-translate/) kılavuzumuzu okumalarını öneririz. + +Ayrıca [çeviri stili kılavuzumuza](/contributing/translation-program/translators-guide/) göz atarak bazı ipuçları ve en iyi uygulamaları bulabilirsiniz. + +**Puanlar nasıl çalışır** + +Her Translatathon katılımcısı, ethereum.org Crowdin projesindeki ve diğer uygun projelerdeki (uygun projelerin tam listesi aşağıda mevcuttur) içeriği çevirerek nihai puanları için puan kazanacaktır. + +Puanlama basittir: **çevrilen 1 kelime = 1 puan** + +Nihai puan tahsisinizi alabilmek için, önerilen çevirilerinizin, profesyonel yorumcuların her katılımcının çevirilerini kontrol ederek minimum kalite eşiğini karşıladığından ve süreçte makine veya yapay zeka çevirilerinin kullanılmadığından emin olacakları değerlendirme sürecinden geçmesi gerekecektir. + +## Ekosistem içeriği {#ecosystem-content} + +ethereum.org çeviri programı her zaman aktif olduğundan, web sitesindeki bazı hedef dillerdeki çeviri ilerlemesi diğerlerinden önemli ölçüde daha yüksektir. + +Tüm Translatathon katılımcılarının olabildiğince fazla içerik çevirmek ve en büyük ödüller için yarışmak için eşit fırsata sahip olmasını sağlamak amacıyla, Translatathon'un bir parçası olan kaynak içerik yalnızca ethereum.org web sitesi içeriğiyle sınırlı değildir. + +Uygun projelerden herhangi birini çeviren katılımcılar eşit miktarda puan kazanacaktır, herhangi bir projedeki 1 çevrilmiş kelime = 1 puan. + +2025 Translatathon'un bir parçası olan tüm uygun projelerin listesi aşağıdadır: + +- [Ethereum.org](https://crowdin.com/project/ethereum-org) + +- [Ethereum.org geliştirici öğreticileri](https://crowdin.com/project/33388446abbe9d7aa21e42e49bba7f97) + +- [EthStaker mevduat CLI'ı](https://crowdin.com/project/ethstaker-deposit-cli) + +- [Eth Docker belgeleri](https://crowdin.com/project/eth-docker-docs) + +- [Remix IDE belgeleri](https://crowdin.com/project/remix-translation) + +- [Remix LearnEth](https://crowdin.com/project/remix-learneth) + +- [web3.py](https://crowdin.com/project/web3py) + +## Değerlendirme süreci {#evaluation-process} + +Tüm çeviriler, profesyonel dilbilimcilerin gönderimleri kalite ve doğruluğa göre değerlendireceği kalite güvencesi ve geri bildirime tabi tutulacaktır. + +Ayrıca makine veya yapay zeka çevirilerini otomatik olarak tespit eden bazı araçlar kullanarak **makine çevirisi karşıtı önlemler** de uygulayacağız. + +Çeviri kalitesi puanlamada kritik bir rol oynamasa da, **makine veya yapay zeka çevirileri kullandığı tespit edilen** veya düşük kaliteli ve yanlış çeviriler öneren katılımcılar ödüllere hak kazanamayacaktır! + +Değerlendirme dönemi Eylül ayı boyunca gerçekleşecek ve sonuçlar 25 Eylül'deki ethereum.org topluluk çağrısında duyurulacaktır. + +Tüm çeviriler de web sitesine eklenmeden önce tamamen incelenecektir. + + diff --git a/public/content/translations/tr/contributing/translation-program/translatathon/index.md b/public/content/translations/tr/contributing/translation-program/translatathon/index.md new file mode 100644 index 00000000000..5201ae3851a --- /dev/null +++ b/public/content/translations/tr/contributing/translation-program/translatathon/index.md @@ -0,0 +1,100 @@ +--- +title: 2025 ethereum.org Translatathon +lang: tr +template: translatathon +--- + + + + + + + +## Giriş {#introduction} + +Ethereum içeriğinin ve ilk katılım kaynaklarının, konuştukları dilden bağımsız olarak herkes için erişilebilir olması gerektiğine inanıyoruz. +Bu hedefe yaklaşmak için ethereum.org çeviri programı, web sitesini mümkün olduğunca çok dile çevirmeyi amaçlayan bir girişimdir. + +Çeviri programının bir parçası olarak, daha az aktif dillerdeki çeviri katkılarını teşvik etmeyi, sitede mevcut olan dil ve içerik miktarını artırmayı, yeni katkıda bulunanları dahil etmeyi ve mevcut olanları ödüllendirmeyi amaçlayan çeviri yarışmamız Translatathon'un 3.sünü düzenliyoruz. + +İngilizce dışında bir dilin anadil konuşucusuysanız ve ödüller için yarışırken Ethereum içeriğini daha erişilebilir hale getirmeye yardımcı olmak istiyorsanız, daha fazlasını öğrenmek için okumaya devam edin! + +[ethereum.org çeviri programı hakkında daha fazla bilgi edinin](/contributing/translation-program/) + +## Zaman Çizelgesi {#timeline} + +2025 Translatathon için önemli tarihler şunlardır: + + + + + +## Katılın {#participate} + +![Topluluk ve dünya küresi görseli](./participate.png) + + + +

Kimler katılabilir?

+ 18 yaşından büyük, İngilizce dışında en az bir dili anadili olarak konuşan ve İngilizceye hakim olan herkes. +
+ +

Çevirmen olmam gerekiyor mu?

+ Hayır. Sadece iki dil bilmeniz ve insan çevirileri önermeniz yeterlidir (makine çevirisi kullanmak yasaktır!) elinizden gelenin en iyisini yaparak, profesyonel deneyim gerekmez. +
+
+ + + +

Ne kadar zaman ayırmam gerekiyor?

+ İstediğiniz kadar. Ödüllere hak kazanmak için minimum eşik 1.000 çevrilmiş kelimedir ve bu yaklaşık 2 saat sürer, en büyük ödüller için yarışmak ise daha fazla zaman ayırmayı gerektirecektir. +
+ +

Ethereum'a aşina olmam gerekiyor mu?

+ Hayır. Ethereum'a aşina olmak verimliliğinize ve kalitenize yardımcı olabilirken, Translatathon aynı zamanda bir öğrenme deneyimidir ve herkes katılırken Ethereum hakkında daha fazla bilgi edinmeye ve katılmaya davetlidir. +
+
+ +Daha fazla ayrıntı için, [tüm Şartlar ve koşullar'ı inceleyin](/contributing/translation-program/translatathon/terms-and-conditions) + +### Adım adım talimatlar {#step-by-step-instructions} + + + +## Ödüller {#prizes} + +| Sıralama | Ödül miktarı | +| ------------------------------------------------------- | ------------ | +| 1. sıra | $4000 | +| 2. sıra | $2500 | +| 3. sıra | $1500 | +| 4. sıra | $1100 | +| 5. sıra | $1000 | +| 6. sıra | $600 | +| 7. sıra | $550 | +| 8. sıra | $500 | +| 9. sıra | $450 | +| 10. sıra | $400 | +| 11. - 20. sıra | $240 | +| 21. - 50. sıra | $120 | +| 51. - 100. sıra | $60 | +| 101. - 150. sıra | $40 | +| Geriye kalanlar | $20 | + +Tüm ödüller ETH olarak ödenecektir. + + + + diff --git a/public/content/translations/tr/contributing/translation-program/translators-guide/index.md b/public/content/translations/tr/contributing/translation-program/translators-guide/index.md index 4b30fc949f8..d41df801694 100644 --- a/public/content/translations/tr/contributing/translation-program/translators-guide/index.md +++ b/public/content/translations/tr/contributing/translation-program/translators-guide/index.md @@ -1,24 +1,24 @@ --- -title: Çevirmen rehberi +title: "Çevirmen rehberi" lang: tr -description: Ethereum.org çevirmenleri için talimatlar ve ipuçları +description: "Ethereum.org çevirmenleri için talimatlar ve ipuçları" --- -# Ethereum.org Çeviri Stili Rehberi {#style-guide} +# Ethereum.org Çeviri Stil Rehberi {#style-guide} Ethereum.org çeviri stili rehberi, web sitesini yerelleştirmemize yardımcı olan çevirmenler için en önemli yönergelerden, talimatlardan ve ipuçlarından bazılarını içerir. Bu belge, genel bir rehber görevi görür ve herhangi bir dile özgü değildir. -Herhangi bir sorunuz, öneriniz veya geri bildiriminiz varsa lütfen translations@ethereum.org adresinden bize ulaşın, Crowdin'de @ethdotorg'a bir mesaj gönderin veya #translations kanalından bize mesaj gönderebileceğiniz veya ekip üyelerinden herhangi birine ulaşabileceğiniz [Discord](https://discord.gg/ethereum-org)'umuza katılın. +Herhangi bir sorunuz, öneriniz veya geri bildiriminiz varsa, translations@ethereum.org adresinden bize ulaşmaktan çekinmeyin, Crowdin'de @ethdotorg'a bir mesaj gönderin veya bize #translations kanalından mesaj gönderebileceğiniz ya da ekip üyelerinden herhangi birine ulaşabileceğiniz [Discord'umuza katılın](https://discord.gg/ethereum-org). -## Crowdin kullanma {#using-crowdin} +## Crowdin Kullanımı {#using-crowdin} -[Çeviri Programı sayfasında](/contributing/translation-program/#how-to-translate) Crowdin'de projeye nasıl katılacağınıza ve Crowdin çevrimiçi düzenleyicisinin nasıl kullanılacağına ilişkin temel talimatları bulabilirsiniz. +Crowdin'de projeye nasıl katılacağınıza ve Crowdin çevrimiçi düzenleyicisini nasıl kullanacağınıza dair temel talimatları [Çeviri Programı sayfasında](/contributing/translation-program/#how-to-translate) bulabilirsiniz. Crowdin hakkında daha fazla bilgi edinmek ve gelişmiş özelliklerinden bazılarını kullanmak istiyorsanız, [Crowdin bilgi bankası](https://support.crowdin.com/online-editor/) birçok kapsamlı kılavuz ve tüm Crowdin işlevlerine genel bakış içerir. -## Mesajın özünü yakalama {#capturing-the-essence} +## Mesajın özünü yakalamak {#capturing-the-essence} Ethereum.org içeriğini çevirirken, kelimenin tam anlamıyla çeviri yapmaktan kaçının. @@ -28,7 +28,7 @@ Farklı dillerin farklı gramer kuralları, kuralları ve kelime sırası vardı Kaynak metni kelimesi kelimesine tercüme etmek yerine, tüm cümleyi okumanız ve onu hedef dilin kurallarına uyacak şekilde uyarlamanız tavsiye edilir. -## Resmi ve günlük dil {#formal-vs-informal} +## Resmi ve Gayriresmi {#formal-vs-informal} Her zaman, kibar ve tüm ziyaretçiler için uygun olan resmi hitap biçimini kullanırız. @@ -36,13 +36,13 @@ Resmi hitap biçimini kullanmak, günlük veya saldırgan görünmekten kaçınm Hint-Avrupa ve Afro-Asya dillerinin çoğu, eril ve dişil kelimeler arasında ayrım yapan cinsiyete özgü ikinci şahıs zamirlerini kullanır. Kullanıcıya hitap ederken veya iyelik zamirlerini kullanırken, resmi hitap şekli genellikle nasıl tanımlandıklarına bakılmaksızın uygulanabilir ve tutarlı olduğundan, ziyaretçinin cinsiyetini varsaymaktan kaçınabiliriz. -## Basit ve net kelime haznesi ve anlam {#simple-vocabulary} +## Basit ve net kelime dağarcığı ve anlam {#simple-vocabulary} Amacımız, web sitesindeki içeriği mümkün olduğunca çok kişi için anlaşılır kılmaktır. Çoğu durumda bu, kolayca anlaşılabilir kısa ve basit kelimeler kullanılarak kolayca başarılabilir. Kendi dilinizde aynı anlama sahip belirli bir kelimenin birden fazla olası çevirisi varsa, en iyi seçenek çoğu zaman anlamı açıkça yansıtan en kısa kelimedir. -## Yazım sistemi {#writing-system} +## Yazı sistemi {#writing-system} Ethereum.org, Latince'ye alternatif yazma sistemleri (veya komut dosyaları yazma) kullanarak birçok dilde kullanılabilir. @@ -50,17 +50,17 @@ Ethereum.org, Latince'ye alternatif yazma sistemleri (veya komut dosyaları yazm İçeriği çevirirken çevirilerin tutarlı olmasına ve Latince karakter içermemesine dikkat etmelisiniz. -Yaygın bir yanılgı, Ethereum'un her zaman Latince yazılması gerektiğidir. Bu çoğunlukla yanlıştır, lütfen kendi dilinize özgü Ethereum yazımını kullanın (örn. Çince'de 以太坊, Arapça'da إيثيريوم, vb.). +Yaygın bir yanılgı, Ethereum'un her zaman Latince yazılması gerektiğidir. Bu çoğunlukla yanlıştır, lütfen kendi dilinize özgü Ethereum yazımını kullanın (ör. Çince'de 以太坊, Arapça'da إيثيريوم, vb.). **Yukarıdakiler, özel isimlerin kural olarak tercüme edilmemesi gereken diller için geçerli değildir.** -## Sayfa meta verilerini çevirme {#translating-metadata} +## Sayfa üst verilerini çevirme {#translating-metadata} Bazı sayfalar sayfada "başlık", "dil", "açıklama", "kenar çubuğu" vb. gibi meta veriler içerir. Crowdin'e yeni sayfalar yüklerken çevirmenlerin asla çevirmemesi gereken içeriği gizleriz, bu da çevirmenlerin Crowdin'de görebildiği tüm meta verilerin çevrilmesi gerektiği anlamına gelir. -Lütfen kaynak metnin "en" olduğu dizeleri çevirirken özellikle dikkatli olun. Bu, sayfanın mevcut olduğu dili temsil eder ve [dilinizin ISO dil koduna çevrilmesi gerekir](https://www.andiamo.co.uk/resources/iso-language-codes/). Bu dizgiler her zaman hedef dile özgü yazı dizisi değil, Latin karakterler kullanılarak çevrilmelidir. +Lütfen kaynak metnin "en" olduğu dizeleri çevirirken özellikle dikkatli olun. Bu, sayfanın mevcut olduğu dili temsil eder ve [dilinizin ISO dil koduna](https://www.andiamo.co.uk/resources/iso-language-codes/) çevrilmelidir. Bu dizgiler her zaman hedef dile özgü yazı dizisi değil, Latin karakterler kullanılarak çevrilmelidir. Hangi dil kodunu kullanacağınızdan emin değilseniz, Crowdin'deki çeviri belleğini kontrol edebilir veya Crowdin çevrimiçi düzenleyicideki sayfanın URL'sinde kendi dilinizin dil kodunu bulabilirsiniz. @@ -72,23 +72,26 @@ En çok konuşulan diller için bazı dil kodları örnekleri: - Hintçe - hi - İspanyolca - es -## Harici makalelerin başlıkları {#external-articles} +## Harici makale başlıkları {#external-articles} Bazı dizgiler, harici makalelerin başlıklarını içerir. Geliştirici belgesi sayfalarımızın çoğu, daha fazla okuma için harici makalelere yönlendiren bağlantılar içerir. Sayfayı kendi dillerinde görüntüleyen ziyaretçiler için daha tutarlı bir kullanıcı deneyimi sağlamak için makalenin dilinden bağımsız olarak makale başlıklarını içeren dizgilerin çevrilmesi gerekir. Bu dizgilerin çevirmenler için nasıl göründüğüne ve bunların nasıl tanımlanacağına ilişkin bazı örnekleri aşağıda bulabilirsiniz (makalelere yönlendiren bağlantılar çoğunlukla bu sayfaların alt kısmında, "Daha fazla bilgi" bölümünde bulunabilir): -![Sidebar.png'deki makale başlıkları](./article-titles-in-sidebar.png) ![editor.png'deki makale başlıkları](./article-titles-in-editor.png) +![Kenar çubuğundaki makale başlıkları.png](./article-titles-in-sidebar.png) +![Düzenleyicideki makale başlıkları.png](./article-titles-in-editor.png) ## Crowdin uyarıları {#crowdin-warnings} -Crowdin, çevirmenleri hata yapmak üzereyken uyaran yerleşik bir özelliğe sahiptir. Çevrilmemesi gereken öğeleri çevirirseniz, kaynaktan bir etiket eklemeyi, birkaç ardışık boşluk eklemeyi, son noktalama işaretlerini koymayı vb. unutursanız, Crowdin çevirinizi kaydetmeden önce sizi bu konuda otomatik olarak uyaracaktır. Bunun gibi bir uyarı görürseniz lütfen geri dönün ve önerilen çeviriyi tekrar kontrol edin. +Crowdin, çevirmenleri hata yapmak üzereyken uyaran yerleşik bir özelliğe sahiptir. Çevrilmemesi gereken öğeleri çevirirseniz, kaynaktan bir etiket eklemeyi, birkaç ardışık boşluk eklemeyi, son noktalama işaretlerini koymayı vb. unutursanız, Crowdin çevirinizi kaydetmeden önce sizi bu konuda otomatik olarak uyaracaktır. +Bunun gibi bir uyarı görürseniz lütfen geri dönün ve önerilen çeviriyi tekrar kontrol edin. **Bu uyarıları asla göz ardı etmeyin, çünkü bunlar genellikle bir şeylerin yanlış olduğu veya çevirinin kaynak metnin önemli bir bölümünün eksik olduğu anlamına gelir.** -Çevirinize bir etiket eklemeyi unuttuğunuzda verilen bir Crowdin uyarısı örneği: ![Bir Crowdin uyarısı örneği](./crowdin-warning-example.png) +Çevirinize bir etiket eklemeyi unuttuğunuzda alacağınız bir Crowdin uyarısı örneği: +![Bir Crowdin uyarısı örneği](./crowdin-warning-example.png) -## Etiketler ve kod parçacıkları hakkında yapılacaklar {#dealing-with-tags} +## Etiketler ve kod parçacıkları ile çalışma {#dealing-with-tags} Kaynak içeriğin çoğu, Crowdin düzenleyicisinde sarı renkle vurgulanan etiketler ve değişkenler içerir. Bunlar, farklı fonksiyonlar gerçekleştirir ve bunlara doğru bir şekilde yaklaşılmalıdır. @@ -96,15 +99,18 @@ Kaynak içeriğin çoğu, Crowdin düzenleyicisinde sarı renkle vurgulanan etik Etiket yönetimini kolaylaştırmak ve onları doğrudan kaynağından kopyalamak için Crowdin düzenleyicisinden ayarlarınızı değiştirmenizi öneririz. -1. Açık ayarlar ![Düzenleyicide ayarları açma](./editor-settings.png) +1. Ayarları açın + ![Düzenleyicide ayarlar nasıl açılır](./editor-settings.png) 2. "HTML etiketlerini görüntüleme" bölümüne inin -3. "Sakla" öğesini seçin ![Lütfen "Gizle" öğesini seçin](./hide-tags.png) +3. 'Gizle'yi seçin + ![Lütfen 'Gizle'yi seçin](./hide-tags.png) 4. "Kaydet" öğesine tıklayın -Bu seçeneği seçtikten sonra tüm etiket metni artık gösterilmez ve onun yerine bir sayı gösterilir. Tercüme yaparken bu etikete tıkladığınızda, aynı etiket tercüme alanına doğrudan kopyalanır. +Bu seçeneği seçtikten sonra tüm etiket metni artık gösterilmez ve onun yerine bir sayı gösterilir. +Tercüme yaparken bu etikete tıkladığınızda, aynı etiket tercüme alanına doğrudan kopyalanır. **Bağlantılar** @@ -114,15 +120,15 @@ Bunlar kaynakla aynı olmalı; değiştirilmemeli veya tercüme edilmemelidir. B Bağlantılar için yapılacak en iyi şey, üzerlerine tıklayarak veya "Kaynağı Kopyala" düğmesini (Alt+C) kullanarak onları doğrudan kaynaktan kopyalamaktır. -![Link örneği.png](./example-of-link.png) +![Bağlantı örneği.png](./example-of-link.png) -Bağlantılar, kaynak metinde etiketler biçiminde de görünür (örn. \<0> \). Etiketin üzerine geldiğinizde, düzenleyici tam içeriğini gösterir: Bazen bu etiketler bağlantıları temsil eder. +Bağlantılar ayrıca kaynak metinde etiketler biçiminde görünür (ör. `<0>` ``). Etiketin üzerine geldiğinizde, düzenleyici tam içeriğini gösterir: Bazen bu etiketler bağlantıları temsil eder. Bağlantıları kaynaktan kopyalamak ve sıralarını değiştirmemek çok önemlidir. Etiketlerin sırası değiştirilirse temsil ettikleri bağlantı çalışmaz. -![Etiketlerin içinde link örnekleri.png](./example-of-links-inside-tags.png) +![Etiketler içindeki bağlantıların örneği.png](./example-of-links-inside-tags.png) **Etiketler ve değişkenler** @@ -136,9 +142,9 @@ Etiketler her zaman bir açma ve kapatma etiketi içerir. Çoğu durumda, açma Decentralized - _Çevrilebilir metin_ -`` - _Kapatma etiketi_ +`` - _Kapanış etiketi_ -!["strong" etiketlerinin örneği.png](./example-of-strong-tags.png) +!['strong' etiketleri örneği.png](./example-of-strong-tags.png) Kod parçacıkları, çevrilmemesi gereken kodlar içerdiğinden diğer etiketlerden biraz farklı bir şekilde ele alınmalıdır. @@ -148,19 +154,19 @@ Kod parçacıkları, çevrilmemesi gereken kodlar içerdiğinden diğer etiketle nonce - _Çevrilmemesi gereken metin_ -`` - _Kapatma etiketi_ +`` - _Kapanış etiketi_ -![Kod parçacıklarının örneği.png](./example-of-code-snippets.png) +![Kod parçacıkları örneği.png](./example-of-code-snippets.png) Kaynak metin, yalnızca sayıları içeren kısaltılmış etiketler de içerir; yani, bunların fonksiyonu hemen anlaşılabilir olmayabilir. Tam olarak hangi fonksiyonu yerine getirdiklerini görmek için imleci bu etiketlerin üzerine götürebilirsiniz. -Aşağıdaki örnekte, imleç üzerine götürüldüğünde \<0> etiketin `` öğesini temsil ettiğini ve bir kod parçacığı içerdiğini görebilirsiniz; bu nedenle, bu etiketlerin içindeki içerik çevrilmemelidir. +Aşağıdaki örnekte, `<0>` etiketinin üzerine geldiğinizde, etiketin `` etiketini temsil ettiğini ve bir kod parçacığı içerdiğini görebilirsiniz, bu nedenle bu etiketlerin içindeki içerik çevrilmemelidir. -![Belirsiz etiketlerin örneği.png](./example-of-ambiguous-tags.png) +![Belirsiz etiketler örneği.png](./example-of-ambiguous-tags.png) -## Kısa vs. eksiksiz hâller/kısatmalar {#short-vs-full-forms} +## Kısa ve tam biçimler/kısaltmalar {#short-vs-full-forms} -Web sitesinde kullanılan birçok kısaltma vardır, örn. dapps, NFT, DAO, DeFi vb. Bu kısaltmalar genellikle İngilizce olarak kullanılır ve web sitesini ziyaret edenlerin çoğu bunlara aşinadır. +Web sitesinde kullanılan birçok kısaltma vardır, ör. dapps, NFT, DAO, DeFi vb. Bu kısaltmalar genellikle İngilizce olarak kullanılır ve web sitesini ziyaret edenlerin çoğu bunlara aşinadır. Genellikle diğer dillerde yerleşik çevirileri olmadığı için bu ve benzeri terimleri ele almanın en iyi yolu, tam hâlinin açıklayıcı bir çevirisini sağlamak ve İngilizce kısaltmasını parantez içinde eklemektir. @@ -168,9 +174,9 @@ Genellikle diğer dillerde yerleşik çevirileri olmadığı için bu ve benzeri Dapps kısaltmasının nasıl çevrilmesi gerektiğine dair örnek: -- Merkeziyetsiz uygulamalar (dapps) → _Tercüme edilmiş tam metin (parantez içinde İngilizce kısaltması)_ +- Merkeziyetsiz uygulamalar (dapps) → _Çevrilmiş tam biçim (parantez içinde İngilizce kısaltma)_ -## Yerleşmiş çevirileri olmayan terimler {#terms-without-established-translations} +## Yerleşik çevirisi olmayan terimler {#terms-without-established-translations} Bazı terimlerin diğer dillerde yerleşmiş çevirileri bulunmayabilir ve bu terimler, orijinal İngilizce hâliyle yaygın olarak biliniyor olabilir. Proof-of-work, proof-of-stake, Beacon Chain, staking vb. nispeten yeni olan terimler buna örnek gösterilebilir. @@ -180,13 +186,13 @@ Bunları çevirirken yaratıcı ve açıklayıcı çeviriler kullanmaktan çekin **Bazı terimleri İngilizce bırakmak yerine çoğu terimin çevrilmesinin nedeni, Ethereum ve ilgili teknolojileri daha fazla insan kullanmaya başladıkça, bu yeni terminolojinin gelecekte daha yaygın hâle geleceği gerçeğidir. Dünyanın her yerinden daha fazla insanı bu alana dahil etmek istiyorsak, kendimiz oluşturmamız gerekse bile mümkün olduğunca çok dilde anlaşılır terminoloji sağlamamız gerekir.** -## Butonlar ve CTA'lar {#buttons-and-ctas} +## Düğmeler ve CTA'lar {#buttons-and-ctas} Web sitesi, diğer içeriklerden farklı şekilde çevrilmesi gereken çok sayıda düğme içerir. Düğme metni, çoğu dizeyle bağlantılı bağlam ekran görüntülerini görüntüleyerek veya düzenleyicideki "düğme" ifadesini içeren bağlamı kontrol ederek anlaşılabilir. -Biçimlendirme uyumsuzluklarını önlemek için düğmelerin çevirileri mümkün olduğunca kısa olmalıdır. Ek olarak, düğme çevirileri emir kipi hâlinde olmalıdır, yani bir komut veya istek içermelidir. +Biçimlendirme uyumsuzluklarını önlemek için düğmelerin çevirileri mümkün olduğunca kısa olmalıdır. Ek olarak, düğme çevirileri emir kipinde olmalıdır, yani bir komut veya istek sunmalıdır. ![Bir düğme nasıl bulunur.png](./how-to-find-a-button.png) @@ -200,7 +206,7 @@ Kapsayıcılığın başka bir biçimi; herhangi bir ülkeye, ırka veya bölgey Son olarak üslup, tüm kullanıcılara ve her yaşa uygun olmalıdır. -## Dile özel çeviriler {#language-specific-translations} +## Dile özgü çeviriler {#language-specific-translations} Çeviri yaparken kaynaktan kopyalamak yerine kendi dilinizde kullanılan dil bilgisi kurallarına, kabullere ve biçimlendirmeye uymak önemlidir. Kaynak metin, İngilizce dil bilgisi kural ve kabullerine uygundur; bu kural ve kabuller, diğer birçok dil için geçerli değildir. @@ -208,7 +214,7 @@ Dilinizin kurallarını bilmeli ve buna göre çeviri yapmalısınız. Yardıma Özellikle nelere dikkat edilmesi gerektiğine dair bazı örnekler: -### Noktalama, biçimlendirme {#punctuation-and-formatting} +### Noktalama işaretleri ve biçimlendirme {#punctuation-and-formatting} **Büyük/Küçük Harf** @@ -220,8 +226,8 @@ Dilinizin kurallarını bilmeli ve buna göre çeviri yapmalısınız. Yardıma - İmla kuralları, her dil için boşluk kullanımını tanımlar. Boşluklar her yerde kullanıldığından, bu kurallar en belirgin olanlardan bazılarıdır ve boşluklar en yanlış çevrilen öğelerden bazılarıdır. - İngilizce ve diğer diller arasındaki boşluk bırakma ilgili bazı yaygın farklılıklar: - - Ölçü birimlerinden ve para birimlerinden önceki boşluk (ör. USD, EUR, kB, MB) - - Derece işaretlerinden önceki boşluk (örneğin, °C, ℉) + - Ölçü birimlerinden ve para birimlerinden önce boşluk (ör. USD, EUR, kB, MB) + - Derece işaretlerinden önce boşluk (ör. °C, ℉) - Bazı noktalama işaretlerinden önce boşluk, özellikle üç nokta (…) - Taksimlerden (/) önce ve sonra boşluk @@ -229,7 +235,7 @@ Dilinizin kurallarını bilmeli ve buna göre çeviri yapmalısınız. Yardıma - Her dilin liste yazmak için çeşitli ve karmaşık kuralları vardır. Bunlar İngilizceden önemli ölçüde farklı olabilir. - Bazı dillerde, her yeni satırın ilk kelimesi büyük harfle yazılmalı, bazılarında ise yeni satırlar küçük harflerle başlamalıdır. Ayrıca birçok dilde, her satırın uzunluğuna bağlı olarak, listelerde büyük harf kullanımıyla ilgili farklı kurallar vardır. -- Aynısı satır öğelerinin noktalama işaretleri için de geçerlidir. Listelerdeki son noktalama işaretleri, dile bağlı olarak nokta (**.**), virgül (**,**) veya noktalı virgül (**;**) olabilir. +- Aynısı satır öğelerinin noktalama işaretleri için de geçerlidir. Listelerdeki son noktalama işaretleri, dile bağlı olarak nokta (.), virgül (,) veya noktalı virgül (;) olabilir. **Tırnak işaretleri** diff --git a/public/content/translations/tr/dao/index.md b/public/content/translations/tr/dao/index.md index b5b791d745f..2753447018d 100644 --- a/public/content/translations/tr/dao/index.md +++ b/public/content/translations/tr/dao/index.md @@ -1,165 +1,167 @@ --- -title: Merkeziyetsiz otonom organizasyonlar (DAO'lar) -description: Ethereum'daki DAO'lara genel bakış +title: DAO nedir? +metaTitle: DAO nedir? | Merkeziyetsiz Otonom Organizasyon +description: "Ethereum'daki DAO'lara genel bakış" lang: tr template: use-cases emoji: ":handshake:" sidebarDepth: 2 image: /images/use-cases/dao-2.png -alt: Bir teklif üzerinde oy kullanan bir DAO'nun temsili. -summaryPoint1: Merkezi liderliği olmayan üyelere ait topluluklar. -summaryPoint2: İnternette tanımadığnız kişilerle iş birliği yapmanın güvenli bir yolu. -summaryPoint3: Belirli bir amaca para yatırmak için güvenli bir yer. +alt: "Bir teklif üzerinde oy kullanan bir DAO'nun gösterimi." +summaryPoint1: "Merkeziyetsiz liderliğe sahip olmayan, üyelere ait topluluklar." +summaryPoint2: "İnternette tanımadığınız kişilerle iş birliği yapmanın güvenli bir yolu." +summaryPoint3: "Belirli bir amaca para yatırmak için güvenli bir yer." --- ## DAO'lar Nedir? {#what-are-daos} -DAO, müşterek bir görev için çalışan, müşterek olarak sahip olunan, blokzincir tarafından yönetilen bir organizasyondur. +DAO, ortak bir misyon için çalışan, toplu olarak sahip olunan bir kuruluştur. -DAO'lar, fonları veya operasyonları yönetmesi için hayırsever bir lidere güvenmeden dünyanın dört bir yanındaki benzer fikirlere sahip kişilerle çalışmamıza olanak tanır. Burada, fonları canı istediği gibi harcayan bir CEO veya hesapları manipüle edecek bi CFO yok. Bunun yerine, kodda işlenen blok zinciri tabanlı kurallar, kuruluşun nasıl çalıştığını ve fonların nasıl harcandığını tanımlar. +DAO'lar, fonları veya operasyonları yönetme konusunda hayırsever bir lidere güvenmek zorunda kalmadan dünyanın dört bir yanındaki benzer fikirlere sahip kişilerle çalışmamıza olanak tanır. Burada, fonları canı istediği gibi harcayan bir CEO veya hesapları manipüle edecek bi CFO yoktur. Bunun yerine, kuruluşun nasıl çalışacağını ve fonların nasıl harcanacağını koda gömülen blokzincir tabanlı kurallar tanımlar. -Grubun onayı olmadan kimsenin erişme otoritesine sahip olmadığı yerleşik hazinelere sahiplerdir. Kararlar, kuruluştaki herkesin söz sahibi olmasını sağlamak için teklifler ve oylamalarla yönetilir ve her şey zincir üzerinde şeffaf bir şekilde gerçekleşir. +Grubun onayı olmadan kimsenin erişme yetkisine sahip olmadığı yerleşik hazinelere sahiplerdir. Kararlar, organizasyondaki herkesin söz sahibi olmasını sağlamak için teklifler ve oylama ile yönetilir ve her şey şeffaf bir şekilde [zincir üstünde](/glossary/#onchain) gerçekleşir. -## Neden DAO'lara ihtiyacımız var? {#why-dao} +## DAO'lara neden ihtiyacımız var? {#why-dao} -Birisiyle finansman ve para içeren bir organizasyon başlatmak, çalıştığınız kişilerle ileri düzeyde güven gerektirir. Ancak yalnızca internette etkileşimde bulunduğunuz birine güvenmek zordur. DAO'larla gruptaki başka kimseye güvenmeniz gerekmez, yalnızca DAO'nun %100 şeffaf ve herkes tarafından doğrulanabilir koduna güvenmeniz gerekir. +Birisiyle finansman ve para kullanılan bir organizasyon kurmak için çalıştığınız kişilere ileri düzeyde güven duyabilmeniz gerekir. Ancak yalnızca internette etkileşimde bulunduğunuz birine güvenmek zordur. DAO'lar sayesinde gruptaki başka herhangi birine güvenmeniz gerekmez, sadece DAO'nun %100 şeffaf ve herkes tarafından doğrulanabilir koduna güvenmeniz yeterlidir. -Bu küresel iş birliği ve koordinasyon için birçok yeni fırsat sunar. +Bu küresel iş birliği ve koordinasyon açısından birçok yeni fırsat sunar. ### Bir karşılaştırma {#dao-comparison} -| DAO | Geleneksel bir organizasyon | -| ------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------- | -| Genelde düz ve tamamen demokratikleştirilmiş. | Genelde hiyerarşik. | -| Herhangi bir değişikliğin uygulanması için üyeler tarafından oylama yapılması gerekli. | Yapısına bağlı olarak, değişiklikler tekil bir partiden istenebilir veya oylama önerilebilir. | -| Oylar toplanır ve sonuç güvenilir bir aracı olmadan otomatik şekilde uygulanır. | Eğer oylamaya izin verildiyse, oylar içeride toplanır ve oylamanın sonucu manuel şekilde idare edilir. | -| Teklif edilen servisler merkezi olmadan ve otomatik bir şekilde idare edilir (örnek olarak hayırseverlik fonları). | İnsan idaresi veya merkezi şekilde kontrol edilen bir otomasyon gerektirir, bu da manipülasyona açıktır. | -| Tüm etkinlikler şeffaftır ve tamamen halka açıktır. | Etkinlikler genelde gizlidir ve tamamı halka açılmaz. | +| DAO | Geleneksel organizasyon | +| --------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- | +| Genelde yatay ve tamamen demokratik. | Genelde hiyerarşik. | +| Herhangi bir değişikliğin uygulanması için üyeler tarafından oylama yapılması gerekli. | Yapısına bağlı olarak, değişiklikler tek bir tarafça istenebilir veya oylama önerilebilir. | +| Oylar toplanır ve sonuç, güvenilir bir aracı olmadan otomatik şekilde uygulanır. | Oylamaya izin veriliyorsa, oylar organizasyon içinde toplanır ve oylamanın sonucu manuel olarak belirlenir. | +| Sunulan hizmetler, merkezi olmayan ve otomatik bir şekilde idare edilir (örnek olarak hayır amaçlı fonların dağıtımı). | İnsan müdahalesi veya merkezi kontrollü otomasyon gerektirir ve bu nedenle manipülasyona açıktır. | +| Tüm etkinlikler şeffaftır ve tamamen halka açıktır. | Etkinlikler genelde gizlidir ve tamamı halka açılmaz. | ### DAO örnekleri {#dao-examples} -Bunun biraz daha mantıklı olması için, burada bir DAO'yu nasıl kullanabileceğiniz hakkında birkaç örnek mevcut: +DAO'yu nasıl kullanabileceğinize dair birkaç örnek ile bunu daha anlaşılır kılalım: -- Hayır kurumu - Dünyanın herhangi bir yerinden bağışları kabul edebilir ve bu bağışların neler için kullanılacağını oylamaya sunabilirsiniz. -- Kolektif mülkiyet – fiziksel veya dijital varlıklar satın alabilir ve üyeler bunların nasıl kullanılacağına oy verebilir. -- Girişimler ve hibeler: Yatırım sermayesini bir araya toplayan ve desteklenecek girişimlere oy veren bir girişim fonu oluşturabilirsiniz. Geri ödenen para daha sonrasında DAO üyeleri arasında yeniden dağıtılabilir. +- **Hayır kurumu** – Dünyanın herhangi bir yerinden bağış kabul edebilir ve bu bağışların neler için kullanılacağı oylamaya sunabilirsiniz. +- **Kolektif mülkiyet** – Fiziksel veya dijital varlıklar satın alabilir ve üyeler bunların nasıl kullanılacağına dair oy kullanabilir. +- **Girişimler ve hibeler** – Yatırım sermayesini bir havuzda toplayan ve desteklenecek girişimlere oy veren bir girişim fonu oluşturabilirsiniz. Geri ödenen para daha sonrasında DAO üyeleri arasında yeniden dağıtılabilir. + + ## DAO'lar nasıl çalışır? {#how-daos-work} -Bir DAO'nun bel kemiği, organizasyonun kurallarını tanımlayan ve grubun hazinesini içeren akıllı sözleşmesidir. Sözleşmenin Ethereum'da yayınlandığı andan itibaren kimse oylama olmadan kuralları değiştiremez. Birisi koddaki kurallara veya mantığa uymayan bir şey yapmaya çalışırsa, başarılı olamaz. Ayrıca, hazinenin de akıllı sözleşme tarafından belirlenmesi, kimsenin grubun onayı olmadan parayı harcayamayacağı anlamına gelir. Bu, DAO'ların merkezi bir otoriteye ihtiyacı olmadığı anlamına gelir. Bunun yerine, grup kararları toplu olarak alır ve oylar geçtiğinde ödemeler otomatik olarak yetkilendirilir. +Bir DAO'nun bel kemiği, organizasyonun kurallarını tanımlayan ve grubun hazinesini tutan [akıllı sözleşmesidir](/glossary/#smart-contract). Sözleşmenin Ethereum'da yayınlandığı andan itibaren kimse oylama olmadan kuralları değiştiremez. Birisi koddaki kurallara veya mantığa uymayan bir şey yapmaya çalışırsa, başarılı olamaz. Ayrıca, hazinenin de akıllı sözleşme tarafından belirlenmesi, kimsenin grubun onayı olmadan parayı harcayamayacağı anlamına gelir. Bu, DAO'ların merkezi bir otoriteye ihtiyacı olmadığı anlamına gelir. Bunun yerine, grup kararları toplu olarak alır ve oylar geçtiğinde ödemeler otomatik olarak yetkilendirilir. Bu, akıllı sözleşmelerin Ethereum'da yayınlandıktan sonra kurcalanamaz olmaları sayesinde mümkündür. İnsanlar fark etmeden kodu (yani DAO'ların kurallarını) değiştiremezsiniz çünkü her şey halka açıktır. - - Akıllı kontratlar hakkında daha fazla bilgi - - ## Ethereum ve DAO'lar {#ethereum-and-daos} Ethereum, birkaç nedenden dolayı DAO'lar için mükemmel bir temeldir: -- Ethereum'un mutabakatı organizasyonların ağa güvenmesini sağlayacak kadar dağıtılmış ve yerleşmiştir. +- Ethereum'un kendi mutabakatı, merkeziyetsiz ve organizasyonların ağa güvenmesini sağlayacak kadar köklüdür. - Akıllı sözleşme kodu, yayınlandıktan sonra sahipleri tarafından bile düzenlenemez. Bu, DAO'nun yazıldığı kurallar çerçevesinde çalışmasını sağlar. - Akıllı sözleşmeler fon gönderebilir/alabilir. Bu olmasaydı grup fonlarını yönetmek için güvenilir bir aracıya ihtiyacınız olurdu. - Ethereum topluluğu, en iyi yöntemlerin ve destek sistemlerinin hızlıca ortaya çıkmasına izin vererek rekabetçi değil; iş birlikçi olduğunu kanıtlamıştır. ## DAO yönetişimi {#dao-governance} -Bir DAO'yu yönetirken karar vermeniz gereken birçok husus vardır Mesela oylamaların ve tekliflerin nasıl çalıştığı gibi. +Bir DAO'yu yönetirken oylama ve tekliflerin nasıl işlediği gibi pek çok unsur dikkate alınır. ### Delegasyon {#governance-delegation} -Delegasyon, temsiliyetçi demokrasinin DAO versiyonu gibidir. Token sahipleri, kendi kendilerini aday gösteren ve protokole hizmet etmeyi ve bilgi sahibi olmayı taahhüt eden kullanıcılara oy yetkisi verir. - -#### Meşhur bir örnek {#governance-example} +Delegasyon, temsili demokrasinin DAO versiyonu gibidir. Jeton sahipleri, kendilerini aday gösteren ve protokole hizmet etmeyi ve bilgi sahibi olmayı taahhüt eden kullanıcılara oy yetkisi verir. -[ENS](https://claim.ens.domains/delegate-ranking) – ENS sahipleri, kendilerini temsil etmeleri için ilgili topluluk üyelerine oylarını devredebilir. +#### Ünlü bir örnek {#governance-example}[ENS](https://claim.ens.domains/delegate-ranking) – ENS sahipleri, kendilerini temsil etmeleri için oylarını ilgili topluluk üyelerine devredebilirler. -### Otomatik İşlem yönetişimi {#governance-example} +### Otomatik işlem yönetişimi {#governance-example} Birçok DAO'da, üyelerin çoğunluğu olumlu oy kullanırsa işlemler otomatik olarak yürütülür. -#### Meşhur bir örnek {#governance-example} +#### Ünlü bir örnek {#governance-example} -[Nouns](https://nouns.wtf) – Nouns DAO'da, kurucular tarafından veto edilmediği sürece, bir oy yeter sayısı sağlandığında ve çoğunluk olumlu oy kullandığında bir işlem otomatik olarak yürütülür. +[Nouns](https://nouns.wtf) – Nouns DAO'da bir işlem, kurucular tarafından veto edilmediği sürece, oy yeter sayısına ulaşılırsa ve çoğunluk olumlu oy kullanırsa otomatik olarak yürütülür. -### Çoklu imzalı yönetişim {#governance-example} +### Çoklu imza yönetişimi {#governance-example} -DAO'ların binlerce oylama üyesi olabilirken, fonlar güvenilir ve genellikle "doxxed" (topluluk tarafından gerçek kimliği bilinen) olan 5-20 aktif topluluk üyesi tarafından paylaşılan bir cüzdanda tutulabilir. Oylamadan sonra, çoklu imza imzalayacılıları, topluluğun isteğini hayata geçirir. +DAO'ların binlerce oy kullanan üyesi olabilse de fonlar, güvenilir ve genellikle doxxed (kimlikleri topluluk tarafından bilinen) olan 5-20 aktif topluluk üyesi tarafından paylaşılan bir [cüzdanda](/glossary/#wallet) tutulabilir. Oylamadan sonra, [çoklu imza](/glossary/#multisig) imzalayanları topluluğun iradesini yerine getirir. ## DAO yasaları {#dao-laws} -1977'de Wyoming, girişimcileri koruyan ve sorumluluklarını sınırlayan LLC'yi (Sınırlı Sorumlu Şirket) icat etti. Daha yakın zamanlarda, DAO'lar için yasal statü oluşturan DAO yasasına öncülük ettiler. Şu anda Wyoming, Vermont ve Virgin Adaları bir şekilde DAO yasalarına sahiptir. +1977'de Wyoming, girişimcileri koruyan ve sorumluluklarını sınırlayan Sınırlı Sorumlu Şirketi icat etti. Daha yakın zamanlarda, DAO'lar için yasal statü oluşturan DAO yasasına öncülük ettiler. Şu anda Wyoming, Vermont ve Virgin Adaları bir şekilde DAO yasalarına sahiptir. -### Meşhur bir örnek {#law-example} +### Ünlü bir örnek {#law-example} -[CityDAO](https://citizen.citydao.io/) – CityDAO, Wyoming'in DAO yasasını kullanarak Yellowstone Milli Parkı yakınında 40 dönümlük arazi satın aldı. +[CityDAO](https://citizen.citydao.io/) – CityDAO, Yellowstone Ulusal Parkı yakınlarında 40 akre arazi satın almak için Wyoming'in DAO yasasını kullandı. ## DAO üyeliği {#dao-membership} -DAO üyeliği için farklı modeller bulunmaktadır. Üyelik, oylamanın nasıl işleyeceğini ve DAO'nun diğer önemli kısımlarını belirleyebilir. +DAO üyeliği için farklı modeller bulunmaktadır. Üyeler, oylamanın nasıl işleyeceğini ve DAO'nun diğer önemli kısımlarını belirleyebilir. -### Token tabanlı üyelik {#token-based-membership} +### Jeton tabanlı üyelik {#token-based-membership} -Kullanılan token'a bağlı olarak genelde tamamen yetkisizdir. Çoğunlukla bu yönetişim token'ları yetkisiz bir şekilde merkeziyetsiz bir borsada takas edilebilir. Diğerleri ise likidite sağlayarak veya başka bir "iş ispatı" ile kazanılabilir. İki şekilde de sadece token'a sahip olmak oy hakkı sağlar. +Kullanılan jetona bağlı olarak genellikle tamamen [izinsizdir](/glossary/#permissionless). Çoğunlukla bu yönetişim jetonları, bir [merkeziyetsiz borsada](/glossary/#dex) izinsiz olarak takas edilebilir. Diğerleri ise likidite veya başka bir "iş ispatı" sağlayarak kazanılabilir. İki şekilde de sadece jetona sahip olmak oy hakkı sağlar. -_Tipik olarak geniş merkeziyetsiz protokolleri ve/veya token'ları yönetmek için kullanılır._ +_Tipik olarak geniş merkeziyetsiz protokolleri ve/veya jetonları yönetmek için kullanılır._ -#### Meşhur bir örnek {#token-example} +#### Ünlü bir örnek {#token-example} -[MakerDAO](https://makerdao.com) – MakerDAO'nun belirteci MKR, merkezi olmayan borsalarda geniş çapta mevcuttur ve herkes Maker protokolünün geleceği üzerinde oylama gücüne sahip olmayı satın alabilir. +[MakerDAO](https://makerdao.com) – MakerDAO'nun jetonu MKR, merkeziyetsiz borsalarda yaygın olarak bulunur ve herkes Maker protokolünün geleceği üzerinde oy gücüne sahip olmak için satın alabilir. ### Hisse tabanlı üyelik {#share-based-membership} -Hisse tabanlı DAO'lar daha çok yetki içerir ama yine de oldukça açıktırlar. Herhangi bir olası üye, DAO'ya katılmak için bir teklif sunabilir ve genellikle token veya çalışma şeklinde bir miktar değere sahip bir komisyon sunar. Hisseler, direkt oy gücünü ve sahipliğini temsil eder. Üyeler istedikleri zaman hazineden hisselerini ayrılabilirler. +Hisse tabanlı DAO'lar daha fazla izin gerektirir ama yine de oldukça açıktırlar. Herhangi bir olası üye, DAO'ya katılmak için bir teklif sunabilir ve genellikle jeton veya çalışma şeklinde bir miktar değere sahip bir komisyon sunar. Hisseler, doğrudan oy verme hakkını ve sahipliğini temsil eder. Üyeler istedikleri zaman hazineden kendi hisselerini alıp çıkış yapabilir. -_Tipik olarak hayır kurumları, işçi kolektifleri ve girişim kulüpleri gibi birbirine bağlı, insan merkezli organizasyonlarda kullanılır. Token'ları ve protokolleri de yönetebilir._ +_Genellikle hayır kurumları, işçi kolektifleri ve yatırım kulüpleri gibi birbirine bağlı, insan merkezli organizasyonlarda kullanılır. Protokolleri ve jetonları da yönetebilir._ -#### Meşhur bir örnek {#share-example} +#### Ünlü bir örnek {#share-example} -[MolochDAO](http://molochdao.com/) – MolochDAO, Ethereum projelerini finanse etmeye odaklıdır. Üyelik için bir teklif gerektirirler, bu sayede grup potansiyel imtiyaz sahipleri hakkında bilinçli kararlar vermek için yeterli deneyim ve sermayeye sahip olup olmadığınızı değerlendirebilir. Serbest piyasada bir DAO'ya erişim satın alamazsınız. +[MolochDAO](http://molochdao.com/) – MolochDAO, Ethereum projelerini finanse etmeye odaklanmıştır. Üyelik için teklifi şart koştuğundan grup, potansiyel imtiyaz sahipleri hakkında bilinçli kararlar vermek için yeterli deneyim ve sermayeye sahip olup olmadığınızı değerlendirebilir. Serbest piyasada bir DAO'ya erişim satın alamazsınız. -### İtibara dayalı üyelik {#reputation-based-membership} +### İtibar tabanlı üyelik {#reputation-based-membership} -İtibar, katılımın kanıtını temsil eder ve DAO'da oy kullanma yetkisi verir. Token veya hisse tabanlı üyeliğin aksine, itibara dayalı DAO'lar mülkiyeti, katkıda bulunanlara devretmez. İtibar satın alınamaz, devredilemez veya başkası tarafından temsil edilemez; DAO üyeleri katılım yoluyla itibar kazanmalıdır. Zincir üzerinde oylama izinsizdir ve potansiyel üyeler, DAO'ya katılmak için serbestçe teklif gönderebilir ve katkıları karşılığında ödül olarak itibar ve token almayı talep edebilir. +İtibar, katılım kanıtı görevi görür ve DAO'da oy kullanma yetkisi verir. İtibar tabanlı DAO'lar, jeton veya hisse tabanlı üyeliğin aksine, mülkiyeti katkıda bulunanlara devretmez. İtibar satın alınamaz, aktarılamaz veya başkasına devredilemez; DAO üyeleri katılım yoluyla itibar kazanmalıdır. Zincir üstü oylama izinsizdir ve müstakbel üyeler DAO'ya katılmak için özgürce teklif sunabilir ve katkıları karşılığında ödül olarak itibar ve jeton almayı talep edebilirler. -_Protokollerin ve merkeziyetsiz uygulamaların merkeziyetsiz gelişimi ve yönetişimi için kullanılır, ancak aynı zamanda hayır kurumları, işçi kolektifleri, yatırım kulüpleri vb. gibi çeşitli kuruluşlar için de çok uygundur._ +_Genellikle protokollerin ve [merkeziyetsiz uygulamaların](/glossary/#dapp) merkeziyetsiz gelişimi ve yönetişimi için kullanılır, ancak aynı zamanda hayır kurumları, işçi kolektifleri, yatırım kulüpleri vb. gibi çeşitli kuruluşlar için de uygundur._ -#### Meşhur bir örnek {#reputation-example} +#### Ünlü bir örnek {#reputation-example} -[DXdao](https://DXdao.eth.link) – DXdao, 2019'dan beri merkeziyetsiz protokolleri yöneten ve uygulamalar oluşturan küresel bağımsız bir kolektiftir. Fonları koordine etmek ve yönetmek için itibara dayalı yönetişim ve holografik mutabakattan yararlanır, bu da hiç kimsenin geleceğini etkileme yolunu satın alamayacağı anlamına gelir. +[DXdao](https://DXdao.eth.limo) – DXdao, 2019'dan beri merkeziyetsiz protokoller ve uygulamalar inşa eden ve yöneten küresel, egemen bir kolektifti. Fonları koordine etmek ve yönetmek için itibar tabanlı yönetişimden ve [holografik mutabakattan](/glossary/#holographic-consensus) yararlandı; bu da kimsenin para kullanarak geleceğini veya yönetişimini etkileyemeyeceği anlamına geliyordu. -## Bir DAO başlatma veya DAO'ya katılma {#join-start-a-dao} +## Bir DAO'ya katıl / bir DAO başlat {#join-start-a-dao} ### Bir DAO'ya katıl {#join-a-dao} -- [Ethereum topluluk DAO'ları](/community/get-involved/#decentralized-autonomous-organizations-daos) +- [Ethereum topluluğu DAO'ları](/community/get-involved/#decentralized-autonomous-organizations-daos) - [DAOHaus'un DAO listesi](https://app.daohaus.club/explore) -- [DAO'ların tally.xyz listesi](https://www.tally.xyz) +- [Tally.xyz'nin DAO listesi](https://www.tally.xyz/explore) +- [DeGov.AI'nin DAO listesi](https://apps.degov.ai/) -### Bir DAO başlatma {#start-a-dao} +### Bir DAO başlat {#start-a-dao} -- [DAOHaus ile bir DAO çağırma](https://app.daohaus.club/summon) -- [Tally ile bir Governor DAO başlatma](https://www.tally.xyz/add-a-dao) -- [Aragon tarafından desteklenen bir DAO oluşturma](https://aragon.org/product) -- [Bir koloni başlatma](https://colony.io/) -- [DAOstack'in holografik mutabakatıyla bir DAO oluşturun](https://alchemy.daostack.io/daos/create) +- [DAOHaus ile bir DAO başlat](https://app.daohaus.club/summon) +- [Tally ile bir Governor DAO başlat](https://www.tally.xyz/get-started) +- [Aragon destekli bir DAO oluştur](https://aragon.org/product) +- [Bir koloni başlat](https://colony.io/) +- [DAOstack'in holografik mutabakatı ile bir DAO oluştur](https://alchemy.daostack.io/daos/create) +- [DeGov Başlatıcısı ile bir DAO başlat](https://docs.degov.ai/integration/deploy) -## Daha fazla okuma {#further-reading} +## Daha fazla kaynak {#further-reading} ### DAO Makaleleri {#dao-articles} -- [Bir DAO nedir?](https://aragon.org/dao) – [Aragon](https://aragon.org/) -- [DAO El Kitabı](https://daohandbook.xyz) -- [DAO'lar Evi](https://wiki.metagame.wtf/docs/great-houses/house-of-daos) – [Metagame](https://wiki.metagame.wtf/) -- [Bir DAO nedir ve amacı nedir?](https://daohaus.substack.com/p/-what-is-a-dao-and-what-is-it-for) – [DAOhaus](https://daohaus.club/) -- [DAO Destekli bir Dijital Topluluk Nasıl Başlatılır](https://daohaus.substack.com/p/four-and-a-half-steps-to-start-a) – [DAOhaus](https://daohaus.club/) -- [Bir DAO nedir?](https://coinmarketcap.com/alexandria/article/what-is-a-dao) – [Coinmarketcap](https://coinmarketcap.com) +- [DAO nedir?](https://aragon.org/dao) – [Aragon](https://aragon.org/) +- [House of DAOs](https://wiki.metagame.wtf/docs/great-houses/house-of-daos) – [Metagame](https://wiki.metagame.wtf/) +- [DAO nedir ve ne işe yarar?](https://daohaus.substack.com/p/-what-is-a-dao-and-what-is-it-for) – [DAOhaus](https://daohaus.club/) +- [DAO Destekli Dijital Topluluk Nasıl Başlatılır](https://daohaus.substack.com/p/four-and-a-half-steps-to-start-a) – [DAOhaus](https://daohaus.club/) +- [DAO nedir?](https://coinmarketcap.com/alexandria/article/what-is-a-dao) – [Coinmarketcap](https://coinmarketcap.com) - [Holografik Mutabakat Nedir?](https://medium.com/daostack/holographic-consensus-part-1-116a73ba1e1c) - [DAOstack](https://daostack.io/) -- [DAO'lar Vitalik'e göre özerk kuruluşlarda ademi merkeziyetçiliğin önemli olduğu şirketler değildir:](https://vitalik.eth.limo/general/2022/09/20/daos.html) -- [DAO'lar, DAC'ler, DA'lar ve Daha Fazlası: Tamamlanmamış Terminoloji Rehberi](https://blog.ethereum.org/2014/05/06/daos-dacs-das-and-more-an-incomplete-terminology-guide) - [Ethereum Blogu](https://blog.ethereum.org) +- [Vitalik'ten: DAO'lar şirket değildir, özerk organizasyonlarda merkeziyetsizlik önemlidir](https://vitalik.eth.limo/general/2022/09/20/daos.html) +- [DAO'lar, DAC'ler, DA'lar ve Daha Fazlası: Eksik Bir Terminoloji Kılavuzu](https://blog.ethereum.org/2014/05/06/daos-dacs-das-and-more-an-incomplete-terminology-guide) - [Ethereum Blog](https://blog.ethereum.org) ### Videolar {#videos} -- [Kripto dünyasında DAO nedir?](https://youtu.be/KHm0uUPqmVE) -- [Bir DAO Şehir Kurabilir mi?](https://www.ted.com/talks/scott_fitsimones_could_a_dao_build_the_next_great_city) – [TED](https://www.ted.com/) +- [Kriptoda DAO nedir?](https://youtu.be/KHm0uUPqmVE) +- [Bir DAO Şehir İnşa Edebilir mi?](https://www.ted.com/talks/scott_fitsimones_could_a_dao_build_the_next_great_city) – [TED](https://www.ted.com/) + + + + diff --git a/public/content/translations/tr/decentralized-identity/index.md b/public/content/translations/tr/decentralized-identity/index.md index 516c12bc540..67e291e24a9 100644 --- a/public/content/translations/tr/decentralized-identity/index.md +++ b/public/content/translations/tr/decentralized-identity/index.md @@ -1,25 +1,25 @@ --- title: Merkeziyetsiz kimlik -description: Merkeziyetsiz kimlik nedir ve neden önemlidir? +description: "Merkeziyetsiz kimlik nedir ve neden önemlidir?" lang: tr template: use-cases emoji: ":id:" sidebarDepth: 2 image: /images/eth-gif-cat.png -summaryPoint1: Geleneksel kimlik sistemleri, tanımlayıcılarınızın verilmesini, bakımını ve kontrolünü merkezileştirdi. -summaryPoint2: Merkeziyetsiz kimlik, merkezi üçüncü taraflara olan bağımlılığı ortadan kaldırır. -summaryPoint3: Kripto sayesinde, kullanıcılar artık kendi tanımlayıcılarını ve onaylarını yayınlama, tutma ve kontrol etme araçlarına bir kez daha sahipler. +summaryPoint1: "Geleneksel kimlik sistemleri tanımlayıcılarınızın belirlenmesini, korunmasını ve kontrolünü merkezleştirdi." +summaryPoint2: "Merkeziyetsiz kimlik, merkezi üçüncü taraflara olan bağımlılığı ortadan kaldırır." +summaryPoint3: "Kripto sayesinde, kullanıcılar artık kendi tanımlayıcılarını ve onaylarını yayınlama, tutma ve kontrol etme araçlarına bir kez daha sahipler." --- Kimlik, bugün hayatınızın neredeyse her yönünün temelini oluşturuyor. Çevrimiçi hizmetleri kullanmak, bir banka hesabı açmak, seçimlerde oy kullanmak, mülk satın almak, istihdam sağlamak - bunların tümü kimliğinizi kanıtlamayı gerektirir. -Bununla birlikte, geleneksel kimlik yönetim sistemleri uzun süredir kimlik tanımlayıcılarınızı ve [tasdiklerinizi](/glossary/#attestation) düzenleyen, tutan ve kontrol eden merkezi aracıları kullanmaktadır. Bu, kimlikle ilgili bilgilerinizi kontrol edemeyeceğiniz veya kişisel olarak tanımlanabilir bilgilere (PII) kimin erişebileceğine ve bu tarafların ne kadar erişime sahip olduğuna karar veremeyeceğiniz anlamına gelir. +Ancak, geleneksel kimlik yönetim sistemleri uzun süredir tanımlayıcılarınızı ve [tasdiklerinizi](/glossary/#attestation) düzenleyen, tutan ve kontrol eden merkezi aracılara dayanmaktadır. Bu, kimlikle ilgili bilgilerinizi kontrol edemeyeceğiniz veya kişisel olarak tanımlanabilir bilgilere (PII) kimin erişebileceğine ve bu tarafların ne kadar erişime sahip olduğuna karar veremeyeceğiniz anlamına gelir. -Bu sorunları çözmek için Ethereum gibi halka açık blok zincirler üzerine inşa edilmiş merkeziyetsiz kimlik sistemlerimiz var. Merkeziyetsiz kimlik, bireylerin kimlikle ilgili bilgilerini yönetmelerine olanak tanır. Merkeziyetsiz kimlik çözümleriyle, hizmet sağlayıcılar veya hükûmetler gibi merkezi yetkililere güvenmeden tanımlayıcılar oluşturabilir ve tasdiklerinizi _talep edebilir_ ve _tutabilirsiniz._ +Bu sorunları çözmek için Ethereum gibi halka açık blok zincirler üzerine inşa edilmiş merkeziyetsiz kimlik sistemlerimiz var. Merkeziyetsiz kimlik, bireylerin kimlikle ilgili bilgilerini yönetmelerine olanak tanır. Merkeziyetsiz kimlik çözümleriyle _siz_, hizmet sağlayıcılar veya hükümetler gibi merkezi otoritelere güvenmeden tanımlayıcılar oluşturabilir, tasdiklerinizi talep edebilir ve tutabilirsiniz. ## Kimlik nedir? {#what-is-identity} -Kimlik, bir bireyin benzersiz özelliklerle tanımlanan benlik duygusu anlamına gelir. Kimlik, bir _birey_, yani ayrı bir insan varlığı anlamına gelir. Kimlik ayrıca bir kuruluş veya otorite gibi diğer insan dışı varlıklara da atıfta bulunabilir. +Kimlik, bir bireyin benzersiz özelliklerle tanımlanan benlik duygusu anlamına gelir. Kimlik, bir _birey_ olma, yani ayrı bir insan varlığı olma durumunu ifade eder. Kimlik ayrıca bir kuruluş veya otorite gibi diğer insan dışı varlıklara da atıfta bulunabilir. @@ -35,19 +35,19 @@ Tanımlayıcı, belirli bir kimliğe veya kimliklere işaret etme işlevi gören Bu geleneksel tanımlayıcı örnekleri merkezi kuruluşlar tarafından düzenlenir, tutulur ve kontrol edilir. İsminizi değiştirmek için devletinizden veya kullanıcı adınızı değiştirmek için bir sosyal medya platformundan izin almanız gerekir. -## Merkeziyetsiz kimliğin avantajları {#benefits-of-decentralized-identity} +## Merkeziyetsiz kimliğin faydaları {#benefits-of-decentralized-identity} 1. Merkeziyetsiz kimlik, tanımlayıcı bilgilerin bireysel kontrolünü arttırır. Merkeziyetsiz tanımlayıcılar ve tasdikler, merkezi otoritelere veya üçüncü taraflara ihtiyaç duymadan doğrulanabilir. -2. Merkeziyetsiz kimlik çözümleri güvene dayalı olmayan, sorunsuz ve kullanıcı kimliğini yönetirken ve doğrularken gizliliğini korumayı sağlar. +2. Merkeziyetsiz kimlik çözümleri, kullanıcı kimliğini doğrulamak ve yönetmek için güven gerektirmeyen, sorunsuz ve gizliliği koruyan bir yöntem sunar. 3. Merkeziyetsiz kimlik, blok zincir teknolojisinden yararlanır, bu farklı taraflar arasında güven yaratır ve tasdiklerin geçerliliğini kanıtlayan kriptografik garantiler sağlar. 4. Merkeziyetsiz kimlik, kimlik verilerini taşınabilir kılar. Kullanıcılar tasdikleri ve tanımlayıcıları mobil cüzdanlarında depolayıp istedikleri herhangi bir tarafla paylaşabilirler. Merkeziyetsiz tanımlayıcılar ve tasdikler, veren kuruluşların veritabanında kilitli değildir. -5. Merkeziyetsiz kimliklerin, bireylerin bir şeye sahip olduklarını veya o şeyin ne olduğunu açıklamadan bir şey yaptıklarını kanıtlamalarını sağlayacak yeni [sıfır bilgi](/glossary/#zk-proof) teknolojileri ile iyi çalışması beklenir. Bu oylama benzeri uygulamalar için güven ve gizliliği birleştirmenin güçlü bir yolu olabilir. +5. Merkeziyetsiz kimlik, bireylerin sahip oldukları veya yaptıkları bir şeyin ne olduğunu açıklamadan kanıtlamalarını sağlayacak olan, gelişmekte olan [sıfır bilgi](/glossary/#zk-proof) teknolojileriyle iyi çalışmalıdır. Bu oylama benzeri uygulamalar için güven ve gizliliği birleştirmenin güçlü bir yolu olabilir. -6. Merkeziyetsiz kimlik, bir insanın bir sistemi kandırmak veya spamlamak için birden fazla insan gibi davrandığını tespit etmeye yarayan [Sybil önleyici](/glossary/#anti-sybil) mekanizmaları mümkün kılar. +6. Merkeziyetsiz kimlik, bir insanın bir sistemi kandırmak veya spamlamak için birden fazla insan gibi davrandığını tespit etmek üzere [anti-Sybil](/glossary/#anti-sybil) mekanizmalarını etkinleştirir. ## Merkeziyetsiz kimlik kullanım örnekleri {#decentralized-identity-use-cases} @@ -55,25 +55,51 @@ Merkeziyetsiz kimliğin birçok potansiyel kullanım örneği vardır: ### 1. Evrensel girişler {#universal-dapp-logins} -Merkeziyetsiz kimlik, şifre bazlı giriş yöntemlerinin merkeziyetsiz doğrulama ile değiştirilmesine yardımcı olabilir. Hizmet sağlayıcılar, kullanıcılara tasdik verebilir, bu tasdikler bir Ethereum cüzdanında saklanabilir. Bir tasdik örneği, sahibinin çevrimiçi topluluğa erişimini sağlayan bir [NFT](/glossary/#nft) olabilir. +Merkeziyetsiz kimlik, şifre bazlı giriş yöntemlerinin merkeziyetsiz doğrulama ile değiştirilmesine yardımcı olabilir. Hizmet sağlayıcılar, kullanıcılara tasdik verebilir, bu tasdikler bir Ethereum cüzdanında saklanabilir. Örnek bir tasdik, sahibine bir çevrimiçi topluluğa erişim sağlayan bir [NFT](/glossary/#nft) olabilir. -[Ethereum ile Oturum Açma](https://siwe.xyz/) işlevi, sunucuların kullanıcının Ethereum hesabını onaylamasını ve hesap adreslerinden gerekli tasdiği almasına olanak tanır. Bu, kullanıcıların uzun şifreleri ezberlemek zorunda kalmadan platformlara ve web sitelerine erişebileceği ve kullanıcılar için çevrimiçi deneyimi iyileştirebileceği anlamına gelir. +Bir [Ethereum ile Oturum Açma](https://siwe.xyz/) işlevi daha sonra sunucuların kullanıcının Ethereum hesabını onaylamasını ve hesap adreslerinden gerekli tasdiği almasını sağlar. Bu, kullanıcıların uzun şifreleri ezberlemek zorunda kalmadan platformlara ve web sitelerine erişebileceği ve kullanıcılar için çevrimiçi deneyimi iyileştirebileceği anlamına gelir. ### 2. KYC kimlik doğrulaması {#kyc-authentication} Birçok çevrimiçi hizmeti kullanmak, bireylerin ehliyet veya ulusal pasaport gibi tasdik ve kimlik bilgilerini sağlamasını gerektirir. Ancak bu yaklaşım sorunludur çünkü özel kullanıcı bilgilerinin güvenliği ihlal edilebilir ve hizmet sağlayıcılar tasdiğin gerçekliğini doğrulayamaz. -Merkeziyetsiz kimlik, şirketlerin geleneksel [Müşterini Tanı (KYC)](https://en.wikipedia.org/wiki/Know_your_customer) süreçlerini atlamalarına ve Doğrulanabilir Kimlik Bilgileri aracılığıyla kullanıcı kimliklerini doğrulamalarına olanak tanır. Bu, kimlik yönetimi maliyetini düşürür ve sahte dokümanların kullanılmasını önler. +Merkeziyetsiz kimlik, şirketlerin geleneksel [Müşterini Tanı (KYC)](https://en.wikipedia.org/wiki/Know_your_customer) süreçlerini atlamasına ve Doğrulanabilir Kimlik Bilgileri aracılığıyla kullanıcı kimliklerini doğrulamasına olanak tanır. Bu, kimlik yönetimi maliyetini düşürür ve sahte dokümanların kullanılmasını önler. ### 3. Oylama ve çevrimiçi topluluklar {#voting-and-online-communities} -Çevrimiçi oylama ve sosyal medya, merkeziyetsiz kimlik için iki yeni uygulamadır. Çevrimiçi oylama düzenleri, özellikle kötü niyetli aktörler oy vermek için sahte kimlikler oluşturursa manipülasyona açıktır. Bireylerden zincir üstünde tasdikler sunmalarını istemek, çevrimiçi oylama süreçlerinin dürüstlüğünü iyileştirebilir. +Çevrimiçi oylama ve sosyal medya, merkeziyetsiz kimlik için iki yeni uygulamadır. Çevrimiçi oylama düzenleri, özellikle kötü niyetli aktörler oy vermek için sahte kimlikler oluşturursa manipülasyona açıktır. Bireylerden zincir üstü tasdikler sunmalarını istemek, çevrimiçi oylama süreçlerinin bütünlüğünü artırabilir. -Merkeziyetsiz kimlik, sahte hesaplardan arınmış çevrimiçi topluluklar oluşturmaya yardımcı olabilir. Örneğin, her kullanıcının bot olasılığını azaltarak Ethereum İsim Hizmeti gibi bir zincir üstünde kimlik sistemi kullanarak kimliğini doğrulaması gerekebilir. +Merkeziyetsiz kimlik, sahte hesaplardan arınmış çevrimiçi topluluklar oluşturmaya yardımcı olabilir. Örneğin, her kullanıcının kimliğini Ethereum İsim Hizmeti gibi zincir üstü bir kimlik sistemi kullanarak doğrulaması gerekebilir, bu da bot olasılığını azaltır. -### 4. Sybil'e karşı koruma {#sybil-protection} +### 4. Anti-Sybil koruması {#sybil-protection} -[Kuadratik oylama](/glossary/#quadratic-voting) kullanarak hibe veren uygulamalar, [Sybil saldırılarına](/glossary/#sybil-attack) karşı savunmasızdır. Çünkü bir hibenin değeri, daha fazla kişi oy verdiğinde artar ve kullanıcıları, katkılarını birçok kimliğe bölmeye teşvik eder. Merkeziyetsiz kimlikler, her katılımcının gerçekten insan olduğunu kanıtlama yükünü kaldırarak bunu önlemeye yardımcı olur ve bunu genelde özel bilgileri açığa çıkarmaya gerek duymadan yaparlar. +[Karesel oylama](/glossary/#quadratic-voting) kullanan hibe veren uygulamalar, [Sybil saldırılarına](/glossary/#sybil-attack) karşı savunmasızdır, çünkü bir hibenin değeri daha fazla kişi oy verdiğinde artar ve bu durum kullanıcıları katkılarını birçok kimliğe bölmeye teşvik eder. Merkeziyetsiz kimlikler, her katılımcının gerçekten insan olduğunu kanıtlama yükünü kaldırarak bunu önlemeye yardımcı olur ve bunu genelde özel bilgileri açığa çıkarmaya gerek duymadan yaparlar. + +### 5. Ulusal ve Hükümet Kimliği {#national-and-government-id} + +Hükümetler, çevrimiçi kimlik doğrulamasında sahtekarlığı ve kalpazanlığı azaltmak için güçlü kriptografik özgünlük garantileri sağlayarak, ulusal kimlikler, pasaportlar veya ehliyetler gibi temel kimlik belgelerini Ethereum üzerinde doğrulanabilir kimlik bilgileri olarak yayınlamak için merkeziyetsiz kimlik ilkelerini kullanabilirler. Vatandaşlar bu tasdikleri kişisel [cüzdanlarında](/wallets/) saklayabilir ve bunları kimliklerini, yaşlarını veya oy kullanma haklarını kanıtlamak için kullanabilirler. + +Bu model, özellikle [sıfır bilgili ispat (ZKP)](/zero-knowledge-proofs/) gizlilik teknolojisi ile birleştirildiğinde seçici açıklamaya olanak tanır. Örneğin, bir vatandaş, yaş kısıtlamalı bir hizmete erişmek için tam doğum tarihini açıklamadan 18 yaşından büyük olduğunu kriptografik olarak kanıtlayabilir, bu da geleneksel bir kimliğe göre daha fazla gizlilik sunar. + +#### 💡Vaka çalışması: Ethereum üzerinde Butan Ulusal Dijital Kimliği (NDI) {#case-study-bhutan-ndi} + +- Butan'ın yaklaşık 800.000 vatandaşı için doğrulanabilir kimlik bilgilerine erişim sağlar +- Ekim 2025'te Polygon ağından [Ethereum ana ağına](https://www.bhutanndi.com/article/bhutan-adopts-ethereum-for-national-identity-a-new-chapter-in-digital-sovereignty_2d0c7ec2-5605-4c42-b258-bd9361ae8878) taşındı +- Mart 2025 itibarıyla [234.000'den fazla dijital kimlik](https://www.blockchain-council.org/blockchain/bhutan-uses-blockchain-in-digital-id-project/) düzenlendi + +Butan Krallığı, [Ulusal Dijital Kimlik (NDI) sistemini](https://www.bhutanndi.com/article/bhutan-adopts-ethereum-for-national-identity-a-new-chapter-in-digital-sovereignty_2d0c7ec2-5605-4c42-b258-bd9361ae8878) Ekim 2025'te Ethereum'a taşıdı. Merkeziyetsiz kimlik ve kendi kendine egemen kimlik ilkeleri üzerine inşa edilen Butan'ın NDI sistemi, dijital olarak imzalanmış kimlik bilgilerini doğrudan bir vatandaşın kişisel cüzdanına vermek için merkeziyetsiz tanımlayıcılar ve doğrulanabilir kimlik bilgileri kullanır. Bu kimlik bilgilerinin kriptografik kanıtlarını Ethereum'a sabitleyerek, sistem bunların özgün, kurcalamaya karşı korumalı ve merkezi bir otoriteyi sorgulamadan herhangi bir tarafça doğrulanabilir olmasını sağlar. + +Sistemin mimarisi, [sıfır bilgili ispat (ZKP)](/zero-knowledge-proofs/) teknolojisinin kullanımı yoluyla gizliliği vurgular. Bu "seçici açıklama" uygulaması, vatandaşların tam kimlik numaraları veya doğum tarihleri gibi temel kişisel verileri açıklamadan hizmetlere erişmek için belirli gerçekleri (ör. "18 yaşından büyüğüm" veya "Ben bir vatandaşım") kanıtlamalarına olanak tanır. Bu, güvenli, kullanıcı merkezli ve gizliliği koruyan bir ulusal kimlik sistemi için Ethereum'un güçlü, gerçek dünya kullanımını göstermektedir. + +#### 💡Vaka çalışması: Buenos Aires Şehri'nin Ethereum [Katman 2](/layer-2/) ZKSync Era üzerindeki QuarkID'si {#case-study-buenos-aires-quarkid} + +- Lansman sırasında [3,6 milyondan fazla kullanıcıya](https://buenosaires.gob.ar/innovacionytransformaciondigital/miba-con-tecnologia-quarkid-la-ciudad-de-buenos-aires-incorporo) merkeziyetsiz kimlik bilgileri verildi +- QuarkID, BM Sürdürülebilir Kalkınma Hedefleri kapsamında bir [Dijital Kamu Malı](https://www.digitalpublicgoods.net/r/quarkid) olarak tanınan açık kaynaklı bir protokoldür +- Şehrin protokole sahip olmadığı, vatandaşlara tam veri sahipliği ve gizlilik sağlayan bir "[kullanıcı olarak hükümet](https://buenosaires.gob.ar/innovacionytransformaciondigital/miba-con-tecnologia-quarkid-la-ciudad-de-buenos-aires-incorporo)" modelini vurgular + +2024'te, Buenos Aires Şehri Hükümeti (GCBA), GCBA'nın İnovasyon ve Dijital Dönüşüm Sekreterliği tarafından oluşturulan açık kaynaklı "dijital güven çerçevesi" olan QuarkID'yi, şehir sakinlerinin devlet hizmetlerine ve resmi belgelere erişmesi için şehrin resmi uygulaması olan miBA'ya entegre etti. Lansman sırasında, miBA'nın 3,6 milyondan fazla kullanıcısının tümüne, vatandaşlık belgeleri, doğum, evlilik ve ölüm sertifikaları, vergi kayıtları, aşı kayıtları ve daha fazlası dahil olmak üzere doğrulanabilir dijital belgeleri ve sertifikaları zincir üstünde yönetmelerine ve paylaşmalarına olanak tanıyan merkeziyetsiz dijital kimlikler verildi. + +Ethereum [Katman 2](/layer-2/) ağı ZKSync Era üzerine inşa edilen QuarkID sistemi, vatandaşların gereksiz kişisel verileri açığa çıkarmadan mobil cihazları aracılığıyla kişisel kimlik bilgilerini eşler arası doğrulamalarına olanak sağlamak için ZKP teknolojisini kullanır. Program, GCBA'nın merkezi bir sahip olarak hareket etmek yerine açık kaynaklı, birlikte çalışabilir QuarkID protokolünün bir kullanıcısı olarak hareket ettiği bir "kullanıcı olarak hükümet" modelini vurgular. Bu ZKP özellikli mimari önemli bir gizlilik özelliği sunar: GCBA dahil hiçbir üçüncü taraf, bir vatandaşın kimlik bilgilerini nasıl, ne zaman veya neden kullandığını izleyemez. Bu başarılı program, vatandaşlara tamamen kendi kendine egemen kimlik ve hassas verileri üzerinde kontrol sağlar ve tümü Ethereum'un küresel olarak dağıtılmış ağı tarafından güvence altına alınır. ## Tasdik nedir? {#what-are-attestations} @@ -85,17 +111,17 @@ Tasdikler tanımlayıcılardan farklıdır. Bir tasdik, belirli bir kimliğe at Yasal isminiz, e-posta adresiniz gibi geleneksel tanımlayıcılar, üçüncü taraflara (hükümet veya e-posta servis sağlayıcılar) bağlıdır. Merkeziyetsiz tanımlayıcılar (MT'ler) farklıdır. Bunlar çıkarılmaz, yönetilmez veya merkezi bir kuruluş tarafından kontrol edilmez. -Merkeziyetsiz tanımlayıcılar bireyler tarafından çıkarılır, tutulur ve kontrol edilir. Bir [Ethereum hesabı](/glossary/#account), merkeziyetsiz tanımlayıcıya bir örnek teşkil eder. Kimseden izin almadan veya merkezi bir depolamaya ihtiyaç duymadan istediğiniz kadar hesap oluşturabilirsiniz. +Merkeziyetsiz tanımlayıcılar bireyler tarafından çıkarılır, tutulur ve kontrol edilir. Bir [Ethereum hesabı](/glossary/#account), merkeziyetsiz bir tanımlayıcı örneğidir. Kimseden izin almadan veya merkezi bir depolamaya ihtiyaç duymadan istediğiniz kadar hesap oluşturabilirsiniz. -Merkeziyetsiz kimlikler, dağıtık defterlerde ([blokzincirler](/glossary/#blockchain)) ya da [eşler arası ağlarda](/glossary/#peer-to-peer-network) depolanır. Bu MT'leri [küresel olarak eşsiz, yüksek kullanımda bile çözümlenebilir ve kriptografik olarak doğrulanabilir yapar](https://w3c-ccg.github.io/did-primer/). Merkeziyetsiz bir tanımlayıcı; kişiler, kuruluşlar veya devlet kurumları dahil olmak üzere farklı varlıklarla ilişkilendirilebilir. +Merkeziyetsiz tanımlayıcılar, dağıtılmış defterlerde ([blokzincirler](/glossary/#blockchain)) veya [eşler arası ağlarda](/glossary/#peer-to-peer-network) depolanır. Bu, DID'leri [küresel olarak benzersiz, yüksek kullanılabilirlikle çözülebilir ve kriptografik olarak doğrulanabilir](https://w3c-ccg.github.io/did-primer/) kılar. Merkeziyetsiz bir tanımlayıcı; kişiler, kuruluşlar veya devlet kurumları dahil olmak üzere farklı varlıklarla ilişkilendirilebilir. ## Merkeziyetsiz tanımlayıcıları mümkün kılan nedir? {#what-makes-decentralized-identifiers-possible} ### 1. Açık Anahtar Kriptografisi {#public-key-cryptography} -Açık anahtar kriptografisi, bir varlık için birer [açık anahtar](/glossary/#public-key) ve [özel anahtar](/glossary/#private-key) oluşturan bilgi güvenliği önlemidir. Açık anahtar [kriptografisi](/glossary/#cryptography), blokzincir ağlarında kullanıcı kimliklerini ve dijital varlıkların mülkiyetini doğrulamak için kullanılır. +Açık anahtar kriptografisi, bir varlık için bir [açık anahtar](/glossary/#public-key) ve bir [özel anahtar](/glossary/#private-key) üreten bir bilgi güvenliği önlemidir. Açık anahtar [kriptografisi](/glossary/#cryptography), blokzincir ağlarında kullanıcı kimliklerini doğrulamak ve dijital varlıkların mülkiyetini kanıtlamak için kullanılır. -Bazı merkeziyetsiz tanımlayıcıların, (Ethereum hesabı gibi) açık ve özel anahtarları vardır. Açık anahtar hesabın yöneticisini tanımlar, özel anahtarsa bu hesap için mesajları imzalayıp şifrelerini çözebilir. Açık anahtar kriptografisi, varlıkların kimliğini doğrulamak ve sahte kimliklerin kullanımını ve taklit edilmesini önlemek adına gereken kanıtları sağlamak üzere [kriptografik imzalar](https://andersbrownworth.com/blockchain/public-private-keys/) kullanarak tüm iddiaları doğrular. +Bazı merkeziyetsiz tanımlayıcıların, (Ethereum hesabı gibi) açık ve özel anahtarları vardır. Açık anahtar hesabın yöneticisini tanımlar, özel anahtarsa bu hesap için mesajları imzalayıp şifrelerini çözebilir. Açık anahtar kriptografisi, tüm iddiaları doğrulamak için [kriptografik imzalar](https://andersbrownworth.com/blockchain/public-private-keys/) kullanarak varlıkların kimliğini doğrulamak, kimliğe bürünmeyi ve sahte kimliklerin kullanımını önlemek için gereken kanıtları sağlar. ### 2. Merkeziyetsiz veri depoları {#decentralized-datastores} @@ -103,11 +129,11 @@ Bir blok zincir açık, güvensiz (güvene ihtiyaç duymayan) ve merkeziyetsiz v Eğer bir merkeziyetsiz tanımlayıcının geçeriliğinin kontrol edilmesi gerekirse blok zincirde karşılığı olan açık anahtara bakılabilir. Bu üçüncü tarafların doğrulamalarının gerektiği geleneksel tanımlayıcılardan farklıdır. -## Merkeziyetsiz tanımlayıcılar ve tasdikler merkeziyetsiz kimliği nasıl mümkün kılar? {#how-decentralized-identifiers-and-attestations-enable-decentralized-identity} +## Merkeziyetsiz tanımlayıcılar ve tasdikler merkeziyetsiz kimliği nasıl mümkün kılar? Merkeziyetsiz tanımlayıcılar ve tasdikler, merkeziyetsiz kimliği nasıl mümkün kılar? {#how-decentralized-identifiers-and-attestations-enable-decentralized-identity} Merkeziyetsiz kimlik, kimlikle ilgili bilgilerin kendi kendini kontrol eden, özel ve taşınabilir olması gerektiği, merkeziyetsiz tanımlayıcılar ve onayların birincil yapı taşları olduğu fikridir. -Merkezi olmayan kimlik bağlamında, tasdikler ([Doğrulanabilir Kimlik Bilgileri](https://www.w3.org/TR/vc-data-model/) olarak da bilinir), ihraççı tarafından yapılan kurcalamaya karşı korumalı, kriptografik olarak doğrulanabilir iddialardır. Bir varlığın (ör. bir kuruluş) verdiği her onay veya Doğrulanabilir Kimlik Bilgisi, MT'leriyle ilişkilendirilir. +Merkeziyetsiz kimlik bağlamında tasdikler (aynı zamanda [Doğrulanabilir Kimlik Bilgileri](https://www.w3.org/TR/vc-data-model/) olarak da bilinir), düzenleyici tarafından yapılan, kurcalamaya karşı korumalı, kriptografik olarak doğrulanabilir iddialardır. Bir varlığın (ör. bir kuruluş) verdiği her onay veya Doğrulanabilir Kimlik Bilgisi, MT'leriyle ilişkilendirilir. MT'ler blok zincirde depolandığından herkes, verenin Ethereum'daki MT'sini çapraz kontrol ederek bir tasdikin geçerliliğini doğrulayabilir. Esasen, Ethereum blok zinciri, belirli varlıklarla ilişkili MT'lerin doğrulanmasını sağlayan küresel bir dizin gibi davranır. @@ -119,73 +145,74 @@ Merkeziyetsiz tanımlayıcılar, merkeziyetsiz kimlik aracılığıyla kişisel Tasdik bilgilerinin Ethereum tabanlı bir kimlik ekosisteminde nasıl depolandığı ve alındığı, geleneksel kimlik yönetiminden farklıdır. Burada, merkeziyetsiz kimlik sistemlerinde tasdiklerin yayınlanması, saklanması ve doğrulanmasına yönelik çeşitli yaklaşımlara genel bir bakış sunulmaktadır: -### Zincir dışındaki tasdikler {#off-chain-attestations} +### Zincir dışı tasdikler {#offchain-attestations} -Tasdikleri zincir üstünde tutmanın endişelerinden biri, bireylerin gizli tutmak isteyeceği bilgiler içerebilmeleridir. Ethereum blok zincirinin açık doğası bu gibi tasdiklerin depolanmasını tercih edilmez hale getirmektedir. +Tasdikleri zincir üstünde saklamayla ilgili bir endişe, bireylerin gizli tutmak isteyebileceği bilgileri içerebilmeleridir. Ethereum blok zincirinin açık doğası bu gibi tasdiklerin depolanmasını tercih edilmez hale getirmektedir. -Bu soruna çözüm tasdikleri çıkarıp kullanıcıların zincir dışı dijital cüzdanlarında tutmasıdır. Tasdiklerse çıkaranın zincirde depolanan MT'si ile imzalanacaktır. Bu tasdikler [JSON Web Token'ları](https://en.wikipedia.org/wiki/JSON_Web_Token) olarak kodlanır ve çıkaranın dijital imzasını içerir, bu da zincir dışı iddiaların kolayca doğrulanmasını sağlar. +Çözüm, kullanıcılar tarafından zincir dışında dijital cüzdanlarda tutulan, ancak düzenleyicinin zincir üstünde saklanan DID'si ile imzalanan tasdikler yayınlamaktır. Bu tasdikler [JSON Web Token'ları](https://en.wikipedia.org/wiki/JSON_Web_Token) olarak kodlanır ve düzenleyicinin dijital imzasını içerir; bu da zincir dışı iddiaların kolayca doğrulanmasını sağlar. -Burada, zincir dışı tasdikleri açıklamak için varsayımsal bir senaryo verilmiştir: +İşte zincir dışı tasdikleri açıklamak için varsayımsal bir senaryo: 1. Bir üniversite (çıkaran), bir tasdik (dijital akademik sertifika) oluşturur, anahtarları ile imzalar ve Bob'a (kimlik sahibine) verir. 2. Bob işe başvurur ve akademik niteliklerini işverene kanıtlamak ister ve mobil cüzdanındaki tasdiği paylaşır. Şirket (doğrulayan) tasdiğin geçerliliğini çıkaranın MT'sini (ör. Ethereum'daki açık anahtarını) kontrol ederek doğrulayabilir. -### Kalıcı erişime sahip zincir dışındaki tasdikler {#offchain-attestations-with-persistent-access} +### Kalıcı erişime sahip zincir dışı tasdikler {#offchain-attestations-with-persistent-access} -Bu düzenleme kapsamında tasdikler JSON dosyalarına dönüştürülür ve zincir dışında depolanır (ideal olarak IPFS veya Swarm gibi [merkeziyetsiz bulut depolama](/developers/docs/storage/) platformlarında). Ancak JSON dosyasının [karması](/glossary/#hash) zincirde depolanır ve MT'nin zincir üztündeki kaydına bağlanır. Bağlantılı MT, tasdiğin çıkaranı veya alıcısı olabilir. +Bu düzenleme kapsamında tasdikler JSON dosyalarına dönüştürülür ve zincir dışında (tercihen IPFS veya Swarm gibi [merkeziyetsiz bir bulut depolama](/developers/docs/storage/) platformunda) saklanır. Ancak, JSON dosyasının bir [karma](/glossary/#hash) değeri zincir üstünde depolanır ve zincir üstü bir kayıt aracılığıyla bir DID'ye bağlanır. Bağlantılı MT, tasdiğin çıkaranı veya alıcısı olabilir. Bu yaklaşım tasdikleri şifreli ve doğrulanabilir kılarken blok zincir temelli kalıcılığını da sağlar. Ayrıca özel anahtarın sahibi bilginin şifresini açabilidiği için seçici gösterimi de mümkün kılar. -### Zincir üstündeki tasdikler {#onchain-attestations} +### Zincir üstü tasdikler {#onchain-attestations} -Zincir üstündeki tasdikler, Ethereum blokzincirindeki [akıllı sözleşmelerde](/glossary/#smart-contract) tutulur. Akıllı sözleşme (kayıt defteri işlevi görür) tasdiği zincir üstündeki bir kimliğe (açık anahtara) bağlar. +Zincir üstü tasdikler, Ethereum blokzincirindeki [akıllı sözleşmelerde](/glossary/#smart-contract) tutulur. Akıllı sözleşme (bir kayıt defteri gibi davranarak), bir tasdiği ilgili zincir üstü merkeziyetsiz tanımlayıcıyla (bir açık anahtar) eşler. -Burada, zincir üstündeki tasdiklerin uygulamada nasıl çalışabileceğine bir örnek verilmiştir: +İşte zincir üstü tasdiklerin pratikte nasıl çalışabileceğini gösteren bir örnek: 1. Bir şirket (XYZ Şirketi) hisselerini akıllı sözleşme kullanarak satmayı planlıyor ama sadece sabıka kaydı yaptırmış alıcıların alabilmesini istiyor. -2. XYZ Şirketi Ethereum zinciri üstünde tasik çıkarmak için firmanın sabıka kaydı kontrolleri yapmasını sağlayabilir. Bu tasdik bir kimsenin sabıka kaydı kontrolünden geçtiğini herhangi bir kişisel veri teşhir etmeden onaylar. +2. XYZ Corp, geçmiş kontrolleri yapan şirkete Ethereum üzerinde zincir üstü tasdikler yayınlatabilir. Bu tasdik bir kimsenin sabıka kaydı kontrolünden geçtiğini herhangi bir kişisel veri teşhir etmeden onaylar. 3. Akıllı sözleşme satan hisse senetleri, taranan alıcıların kimlikleri için sicil sözleşmesini kontrol edebilir ve akıllı sözleşmenin kimin hisse satın almasına izin verilip verilmediğini belirlemesini mümkün kılar. ### Soulbound token'lar ve kimlik {#soulbound} -[Soulbould jetonlar](https://vitalik.eth.limo/general/2022/01/26/soulbound.html) ([transfer edilemez NFTler](/glossary/#nft)), her cüzdana özgü olan bilgileri toplamak için kullanılabilir. Bu, başarıları (örneğin, belirli bir çevrimiçi kursu bitirme veya bir oyunda bir eşik puanını geçme) veya topluluk katılımını temsil eden tokenleri içerebilen belirli bir Ethereum adresine bağlı benzersiz bir zincir-üstü kimlik oluşturur. +[Soulbound token'lar](https://vitalik.eth.limo/general/2022/01/26/soulbound.html) ([devredilemez NFT'ler](/glossary/#nft)), belirli bir cüzdana özgü bilgileri toplamak için kullanılabilir. Bu, başarıları (örneğin belirli bir çevrimiçi kursu bitirmek veya bir oyunda bir eşik puanını geçmek) veya topluluk katılımını temsil eden token'ları içerebilen belirli bir Ethereum adresine bağlı benzersiz bir zincir üstü kimliği etkili bir şekilde oluşturur. -## Merkeziyetsiz kimliği kullanın {#use-decentralized-identity} +## Merkeziyetsiz kimlik kullanın {#use-decentralized-identity} Merkeziyetsiz kimlik çözümlerinin temeli olarak Ethereum'u kullanan çok sayıda iddialı proje vardır: -- **[Ethereum İsim Servisi (ENS)](https://ens.domains/)** - _Ethereum cüzdan adresleri, içerik karmaları ve metaveriler için zincir üstünde, makine tarafından okunabilen, merkeziyetsiz isimlendirme sistemi._ +- **[Ethereum İsim Hizmeti (ENS)](https://ens.domains/)** - _Ethereum cüzdan adresleri, içerik karmaları ve meta veriler gibi zincir üstü, makine tarafından okunabilir tanımlayıcılar için merkeziyetsiz bir adlandırma sistemi._ +- **[Ethereum ile Oturum Açma (SIWE)](https://siwe.xyz/)** - _Ethereum hesaplarıyla kimlik doğrulaması için açık standart._ - **[SpruceID](https://www.spruceid.com/)** - _Kullanıcıların üçüncü taraf hizmetlerine güvenmek yerine Ethereum hesapları ve ENS profilleri ile dijital kimliği kontrol etmelerini sağlayan merkeziyetsiz bir kimlik projesi._ -- **[Ethereum Tasdik Hizmeti (EAS)](https://attest.sh/)** - _Her şey hakkında zincir üstünde veya dışında tasdik etmek için merkeziyetsiz bir ledger'dır/protokoldür._ -- **[Proof of Humanity](https://www.proofofhumanity.id)** - _Proof of Humanity (veya PoH) Ethereum üzerine inşa edilmiş bir sosyal kimlik doğrulama sistemidir._ -- **[BrightID](https://www.brightid.org/)** - _Bir sosyal grafiğin oluşturulması ve analizi yoluyla kimlik doğrulamasını yeniden düzenlemeyi amaçlayan merkeziyetsiz, açık kaynaklı bir sosyal kimlik ağı._ -- **[walt.id](https://walt.id)** — _Geliştiricilerin ve kuruluşların kendi kendine egemen kimlik ve NFT'lerden/SBT'lerden yararlanmasına olanak tanıyan açık kaynaklı merkezi olmayan kimlik ve cüzdan altyapısı._ -- **[Veramo](https://veramo.io/)** - _Kendi uygulamalarında kriptografik olarak doğrulanabilir veri kullanmak isteyen kişilerin işini kolaylaştıran bir JavaScript kitaplığı._ +- **[Ethereum Tasdik Hizmeti (EAS)](https://attest.org/)** - _Herhangi bir şey hakkında zincir üstü veya zincir dışı tasdiklerde bulunmak için merkeziyetsiz bir kayıt defteri/protokol._ +- **[Proof of Humanity](https://www.proofofhumanity.id)** - _Proof of Humanity (veya PoH), Ethereum üzerine kurulmuş bir sosyal kimlik doğrulama sistemidir._ +- **[BrightID](https://www.brightid.org/)** - _Bir sosyal grafiğin oluşturulması ve analizi yoluyla kimlik doğrulamasını yeniden şekillendirmeyi amaçlayan merkeziyetsiz, açık kaynaklı bir sosyal kimlik ağı._ +- **[walt.id](https://walt.id)** — _Geliştiricilerin ve kuruluşların kendi kendine egemen kimlikten ve NFT'lerden/SBT'lerden yararlanmasını sağlayan açık kaynaklı merkeziyetsiz kimlik ve cüzdan altyapısı._ +- **[Veramo](https://veramo.io/)** - _Herkesin uygulamalarında kriptografik olarak doğrulanabilir verileri kullanmasını kolaylaştıran bir JavaScript çerçevesi._ -## Daha fazla okuma {#further-reading} +## Daha fazla kaynak {#further-reading} ### Makaleler {#articles} -- [Blockchain Use Cases: Blockchain in Digital Identity](https://consensys.net/blockchain-use-cases/digital-identity/) — _ConsenSys_ -- [What is Ethereum ERC725? Self-Sovereign Identity Management on the Blockchain](https://cryptoslate.com/what-is-erc725-self-sovereign-identity-management-on-the-blockchain/) — _Sam Town_ -- [How Blockchain Could Solve the Problem of Digital Identity](https://time.com/6142810/proof-of-humanity/) — _Andrew R. Chow_ -- [What Is Decentralized Identity And Why Should You Care?](https://web3.hashnode.com/what-is-decentralized-identity) — _Emmanuel Awosika_ -- [Introduction to Decentralized Identity](https://walt.id/white-paper/digital-identity) — _Dominik Beron_ +- [Blokzincir Kullanım Alanları: Dijital Kimlikte Blokzincir](https://consensys.net/blockchain-use-cases/digital-identity/) — _ConsenSys_ +- [What is Ethereum ERC725? [Blokzincirde Kendi Kendine Egemen Kimlik Yönetimi](https://cryptoslate.com/what-is-erc725-self-sovereign-identity-management-on-the-blockchain/) — _Sam Town_ +- [Blokzincir Dijital Kimlik Sorununu Nasıl Çözebilir?](https://time.com/6142810/proof-of-humanity/) — _Andrew R. Chow_ +- [Merkeziyetsiz Kimlik Nedir ve Neden Önemsemelisiniz?](https://web3.hashnode.com/what-is-decentralized-identity) — _Emmanuel Awosika_ +- [Merkeziyetsiz Kimliğe Giriş](https://walt.id/white-paper/digital-identity) — _Dominik Beron_ ### Videolar {#videos} -- [Decentralized Identity (Bonus Livestream Session)](https://www.youtube.com/watch?v=ySHNB1za_SE&t=539s) — _Andreas Antonopoulos'tan merkezi olmayan kimlik üzerine harika bir açıklayıcı video_ -- [Sign In with Ethereum and Decentralized Identity with Ceramic, IDX, React, and 3ID Connect](https://www.youtube.com/watch?v=t9gWZYJxk7c) — _Nader Dabit tarafından Ethereum cüzdanı kullanarak bir profili oluşturmak, okumak ve güncellemek için bir kimlik yönetim sistemi oluşturmaya yönelik YouTube eğitimi_ -- [BrightID - Decentralized Identity on Ethereum](https://www.youtube.com/watch?v=D3DbMFYGRoM) — _Ethereum için merkeziyetsiz bir kimlik çözümü olan BrightID'yi tartışan Bankless podcast bölümü_ -- [The Off Chain Internet: Decentralized Identity & Verifiable Credentials](https://www.youtube.com/watch?v=EZ_Bb6j87mg) — Evin McMullen tarafından yapılan EthDenver 2022 sunumu -- [Verifiable Credentials Explained](https://www.youtube.com/watch?v=ce1IdSr-Kig) -Tamino Baumann'ın demosunu içeren açıklayıcı YouTube videosu +- [Merkeziyetsiz Kimlik (Bonus Canlı Yayın Oturumu)](https://www.youtube.com/watch?v=ySHNB1za_SE&t=539s) — _Andreas Antonopoulos'tan merkeziyetsiz kimlik üzerine harika bir açıklayıcı video_ +- [Ethereum ile Oturum Açma ve Ceramic, IDX, React ve 3ID Connect ile Merkeziyetsiz Kimlik](https://www.youtube.com/watch?v=t9gWZYJxk7c) — _Nader Dabit tarafından, bir kullanıcının profilini Ethereum cüzdanını kullanarak oluşturmak, okumak ve güncellemek için bir kimlik yönetim sistemi oluşturmaya yönelik YouTube eğitimi_ +- [BrightID - Ethereum'da Merkeziyetsiz Kimlik](https://www.youtube.com/watch?v=D3DbMFYGRoM) — _Ethereum için merkeziyetsiz bir kimlik çözümü olan BrightID'yi ele alan Bankless podcast bölümü_ +- [Zincir Dışı İnternet: Merkeziyetsiz Kimlik ve Doğrulanabilir Kimlik Bilgileri](https://www.youtube.com/watch?v=EZ_Bb6j87mg) — Evin McMullen tarafından EthDenver 2022 sunumu +- [Doğrulanabilir Kimlik Bilgilerinin Açıklaması](https://www.youtube.com/watch?v=ce1IdSr-Kig) - Tamino Baumann'ın demosunu içeren açıklayıcı YouTube videosu ### Topluluklar {#communities} -- [ERC-725 Alliance on GitHub](https://github.com/erc725alliance) — _Ethereum blok zincirinde kimlik yönetimi için ERC725 standardının destekçileri_ -- [EthID Discord server](https://discord.com/invite/ZUyG3mSXFD) — _Ethereum ile oturum açma üzerinde çalışan meraklılar ve geliştiriciler için topluluk_ -- [Veramo Labs](https://discord.gg/sYBUXpACh4) — _Uygulamalar için doğrulanabilir veriler için bir çerçeve oluşturmaya katkıda bulunan bir geliştiriciler topluluğu_ -- [walt.id](https://discord.com/invite/AW8AgqJthZ) — _Çeşitli sektörlerde merkezi olmayan kimlik kullanım örnekleri üzerinde çalışan geliştiricilerden ve derleyicilerden oluşan bir topluluk_ +- [GitHub'da ERC-725 Alliance](https://github.com/erc725alliance) — _Ethereum blokzincirinde kimlik yönetimi için ERC725 standardının destekçileri_ +- [EthID Discord sunucusu](https://discord.com/invite/ZUyG3mSXFD) — _Ethereum ile Oturum Açma ve Ethereum Takip Protokolü üzerinde çalışan meraklılar ve geliştiriciler için topluluk_ +- [Veramo Labs](https://discord.gg/sYBUXpACh4) — _Uygulamalar için doğrulanabilir veriler için bir çerçeve oluşturmaya katkıda bulunan bir geliştirici topluluğu_ +- [walt.id](https://discord.com/invite/AW8AgqJthZ) — _Çeşitli sektörlerde merkeziyetsiz kimlik kullanım durumları üzerinde çalışan geliştiricilerden ve oluşturuculardan oluşan bir topluluk_ diff --git a/public/content/translations/tr/defi/index.md b/public/content/translations/tr/defi/index.md index fb0fe6c0e04..5c44c741f5f 100644 --- a/public/content/translations/tr/defi/index.md +++ b/public/content/translations/tr/defi/index.md @@ -1,18 +1,19 @@ --- title: Merkeziyetsiz finans (DeFi) -description: Ethereum'da DeFi'ye genel bakış +metaTitle: "DeFi nedir? Merkeziyetsiz Finans'ın Kullanımı ve Yararları" +description: "Ethereum'da DeFi'ye genel bakış" lang: tr template: use-cases emoji: ":money_with_wings:" image: /images/use-cases/defi.png -alt: Lego parçalarından yapılmış bir Eth logosu. +alt: "Lego parçalarından yapılmış bir Eth logosu." sidebarDepth: 2 -summaryPoint1: Mevcut finansal sisteme küresel ve açık bir alternatif. -summaryPoint2: Ödünç almanıza, tasarruf etmenize, yatırım yapmanıza, ticaret yapmanıza ve daha pek çok şeye olanak veren ürünler. -summaryPoint3: Herkesin programlayabileceği açık kaynak teknolojisine dayalıdır. +summaryPoint1: "Mevcut finansal sisteme küresel ve açık bir alternatif." +summaryPoint2: "Ödünç almanıza, tasarruf etmenize, yatırım yapmanıza, ticaret yapmanıza ve daha pek çok şeye olanak veren ürünler." +summaryPoint3: "Herkesin programlayabileceği açık kaynak teknolojisine dayalıdır." --- -DeFi, şeffaf olmayan, sıkı bir şekilde kontrol edilen ve onlarca yıllık altyapı ve süreçler tarafından bir arada tutulan bir sisteme alternatif olarak internet çağı için oluşturulmuş açık ve küresel bir finansal sistemdir. Paranız üzerinde kontrol ve görünürlük sağlar. Küresel pazarlara erişim sağlar ve yerel para biriminize veya bankacılık seçeneklerine alternatifler sunar. DeFi ürünleri, internet bağlantısı olan herkese finansal hizmetler sunar ve büyük ölçüde kullanıcılarına aittirler ve kullanıcılar tarafından sürdürülürler. Şimdiye kadar, DeFi uygulamalarından on milyarlarca dolar değerinde kripto para aktı ve bu miktar her geçen gün artıyor. +DeFi, şeffaf olmayan, sıkı bir şekilde kontrol edilen ve onlarca yıllık altyapı ve süreçler tarafından bir arada tutulan bir sisteme alternatif olarak internet çağı için oluşturulmuş açık ve küresel bir finansal sistemdir. Paranız üzerinde kontrol ve görünürlük sağlar. Küresel pazarlara erişim sağlar ve yerel para biriminize veya bankacılık seçeneklerine alternatifler sunar. DeFi ürünleri, internet bağlantısı olan herkese finansal hizmetler sunar ve büyük ölçüde kullanıcılarına aittirler ve kullanıcılar tarafından sürdürülürler. Şimdiye kadar on milyarlarca dolar değerinde kripto para DeFi uygulamalarından geçti ve bu miktar her geçen gün artıyor. ## DeFi nedir? {#what-is-defi} @@ -22,7 +23,7 @@ Borç verebileceğiniz, ödünç alabileceğiniz, uzun/kısa pozisyonlara girebi -## Geleneksel finansa karşı DeFi {#defi-vs-tradfi} +## DeFi vs. Geleneksel Finans {#defi-vs-tradfi} DeFi'nin potansiyelini görmenin en iyi yollarından biri, bugün var olan sorunları anlamaktır. @@ -31,21 +32,21 @@ DeFi'nin potansiyelini görmenin en iyi yollarından biri, bugün var olan sorun - Finansal hizmetler ödeme almanızı engelleyebilir. - Finansal hizmetlerin gizli bir ücreti, kişisel verilerinizdir. - Hükümetler ve merkezi kurumlar piyasaları istedikleri zaman kapatabilirler. -- İşlem saatleri genelde belirli bir saat diliminin iş saatleriyle sınırlıdır. +- İşlem saatleri genellikle belirli bir saat diliminin mesai saatleriyle sınırlıdır. - Para transferleri içsel insan süreçleri nedeniyle günler alabilir. - Aracı kurumların pay almaya ihtiyacı olduğu için finansal hizmetler için bir ücret bulunur. ### Bir karşılaştırma {#defi-comparison} -| DeFi | Geleneksel finans | -| ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | -| Paranızı siz saklarsınız. | Paranız şirketler tarafından saklanır. | -| Paranızın nereye gittiğini ve nasıl harcandığını siz kontrol edersiniz. | Borç vermesi riskli olan kişilere borç vermek gibi paranızı yanlış şekilde yönetmemeleri için şirketlere güvenmelisiniz. | -| Para transferleri dakikalar içinde gerçekleşir. | Manuel işlemler nedeniyle ödemeler günler sürebilmektedir. | -| İşlem etkinliği takma addır. | Finansal etkinlik, kimliğinizle sıkı sıkıya bağlıdır. | -| DeFi herkese açıktır. | Finansal hizmetlerden yararlanmak için başvurmanız gerekir. | -| Piyasalar her zaman açıktır. | Çalışanların molaya ihtiyacı olduğu için piyasalar kapanır. | -| Şeffaflık üzerine kurulmuştur: Herkes bir ürünün verilerine bakabilir ve sistemin nasıl çalıştığını inceleyebilir. | Finansal kurumlar kapalı kutulardır: Kredi geçmişlerini, yönetilen varlıklarının kaydını vb. görmeyi talep edemezsiniz. | +| DeFi | Geleneksel finans | +| -------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Paranızı siz saklarsınız. | Paranız şirketler tarafından saklanır. | +| Paranızın nereye gittiğini ve nasıl harcandığını siz kontrol edersiniz. | Borç vermesi riskli olan kişilere borç vermek gibi paranızı yanlış şekilde yönetmemeleri için şirketlere güvenmelisiniz. | +| Para transferleri dakikalar içinde gerçekleşir. | Manuel işlemler nedeniyle ödemeler günler sürebilmektedir. | +| İşlem etkinliği takma addır. | Finansal etkinlik, kimliğinizle sıkı sıkıya bağlıdır. | +| DeFi herkese açıktır. | Finansal hizmetlerden yararlanmak için başvurmanız gerekir. | +| Piyasalar her zaman açıktır. | Çalışanların molaya ihtiyacı olduğu için piyasalar kapanır. | +| Şeffaflık üzerine kurulmuştur: Herkes bir ürünün verilerine bakabilir ve sistemin nasıl çalıştığını inceleyebilir. | Finansal kurumlar kapalı kutulardır: Kredi geçmişlerini, yönetilen varlıklarının kaydını vb. görmeyi talep edemezsiniz. | DeFi uygulamalarını keşfedin @@ -61,14 +62,14 @@ Ethereum bunun üzerine kurulu. Bitcoin gibi, kurallar sizin aleyhinize değişe ## Programlanabilir para {#programmable-money} -Bu kulağa tuhaf geliyor... "Neden paramı programlamak isteyeyim ki"? Bununla birlikte, bu daha çok Ethereum'daki token'ların varsayılan bir özelliğidir. Herkes ödemelerin içine mantık programlayabilir. Böylece Bitcoin'in kontrolünü ve güvenliğini finans kurumlarının sunduğu hizmetler ile karıştırarak elde edebilirsiniz. Bu, borç verme ve borç alma, ödemeleri planlama, endeks fonlarına yatırım yapma ve daha fazlası gibi Bitcoin ile yapamayacağınız şeyleri kripto para birimleriyle yapmanızı sağlar. +Bu kulağa tuhaf geliyor... "Neden paramı programlamak isteyeyim ki?" Ancak bu, Ethereum'daki token'ların yalnızca varsayılan bir özelliği olmaktan daha fazlasıdır. Herkes ödemelerin içine mantık programlayabilir. Böylece Bitcoin'in kontrolünü ve güvenliğini finans kurumlarının sunduğu hizmetler ile karıştırarak elde edebilirsiniz. Bu, borç verme ve borç alma, ödemeleri planlama, endeks fonlarına yatırım yapma ve daha fazlası gibi Bitcoin ile yapamayacağınız şeyleri kripto para birimleriyle yapmanızı sağlar. - +
Ethereum'da yeniyseniz denemek için DeFi uygulamalarına yönelik önerilerimizi keşfedin.
- DeFi uygulamalarını keşfet + DeFi uygulamalarını keşfedin
@@ -77,12 +78,12 @@ Bu kulağa tuhaf geliyor... "Neden paramı programlamak isteyeyim ki"? Bununla b Çoğu finansal hizmetin merkezi olmayan bir alternatifi var. Ancak Ethereum, tamamen yeni olan finansal ürünler yaratmak için fırsatlar da yaratıyor. Bu sürekli büyüyen bir liste. -- [Dünyanın her yerine para gönderin](#send-money) +- [Dünyanın dört bir yanına para gönderin](#send-money) - [Dünya çapında para akışı sağlayın](#stream-money) - [Sabit para birimlerine erişin](#stablecoins) -- [Teminat ile borç alın](#lending) +- [Teminatla borç alın](#lending) - [Teminatsız borç alın](#flash-loans) -- [Kripto biriktirmeye başlayın](#saving) +- [Kripto birikimi yapmaya başlayın](#saving) - [Token ticareti yapın](#swaps) - [Portföyünüzü büyütün](#investing) - [Fikirlerinizi fonlayın](#crowdfunding) @@ -91,30 +92,30 @@ Bu kulağa tuhaf geliyor... "Neden paramı programlamak isteyeyim ki"? Bununla b -### Dünyanın her yerine çabucak para gönderin {#send-money} +### Dünyanın her yerine hızla para gönderin {#send-money} -Bir blok zinciri olarak Ethereum, işlemleri güvenli ve küresel bir şekilde göndermek için tasarlanmıştır. Bitcoin gibi, Ethereum da dünyanın her yerine para göndermeyi bir e-posta göndermek kadar kolay hâle getiriyor. Cüzdanınızdan alıcınızın [ENS adını](/glossary/#ens) (bob.eth gibi) veya hesap adresini girdikten sonra ödemeniz (genellikle) dakikalar içinde doğrudan alıcıya gidecektir. Ödeme göndermek veya almak için bir [cüzdan](/wallets/) gerekir. +Bir blok zinciri olarak Ethereum, işlemleri güvenli ve küresel bir şekilde göndermek için tasarlanmıştır. Bitcoin gibi, Ethereum da dünyanın her yerine para göndermeyi bir e-posta göndermek kadar kolay hâle getiriyor. Cüzdanınızdan alıcınızın [ENS adını](/glossary/#ens) (ör. bob.eth) veya hesap adresini girin, ödemeniz (genellikle) dakikalar içinde doğrudan kendilerine ulaşacaktır. Ödeme göndermek veya almak için bir [cüzdana](/wallets/) ihtiyacınız olacaktır. - Ödeme dApp'lerini gör + Ödeme merkeziyetsiz uygulamalarını görün #### Dünya çapında para akışı sağlayın... {#stream-money} Ayrıca Ethereum üzerinden para akışı da yapabilirsiniz. Bu, birisine maaşını saniyede ödemenize izin vererek, ihtiyaç duyduklarında paralarına erişmelerini sağlar. Ya da anında depo veya elektrikli scooter gibi bir şeyler kiralayın. -Değerinin değişebileceğinden dolayı [ETH](/glossary/#ether) göndermek veya akış yapmak istemiyorsanız, Ethereum'da alternatif para birimleri vardır: [sabit paralar](/glossary/#stablecoin). +Ayrıca, değerinin ne kadar değişebileceği nedeniyle [ETH](/glossary/#ether) göndermek veya akışını sağlamak istemiyorsanız Ethereum'da alternatif para birimleri vardır: [sabit coinler](/glossary/#stablecoin). -### Stabil para birimlerine erişin {#stablecoins} +### Sabit para birimlerine erişim {#stablecoins} Kripto para birimi volatilitesi, birçok finansal ürün ve genel harcama için bir sorundur. DeFi topluluğu bunu sabit paralarla çözdü. Değerleri, genellikle dolar gibi popüler bir para birimi olan başka bir varlığa sabitlenir. Dai veya USDC gibi paralar, dolara birkaç sent kadar yakın bir değere sahiptir. Bu, onları kazanç veya perakende satış için mükemmel kılar. Latin Amerika'daki birçok insan, devlet tarafından verilen para birimleriyle ilgili büyük bir belirsizlik döneminde birikimlerini korumanın bir yolu olarak sabit paraları kullandı. - Sabit paralar hakkında daha fazlası + Sabit coinler hakkında daha fazlası @@ -127,7 +128,7 @@ Merkezi olmayan sağlayıcılardan borç para almanın iki ana çeşidi vardır. - Borç verenlerin, borç alacak kişilerin borç alabileceği bir havuza fon (likidite) sağladığı havuz tabanlı çeşit. - Borç alma dapp'leri gör + Borçlanma merkeziyetsiz uygulamalarını görün Merkezi olmayan bir borç veren kullanmanın birçok avantajı vardır... @@ -136,7 +137,7 @@ Merkezi olmayan bir borç veren kullanmanın birçok avantajı vardır... Bugün, borç vermek ve borç almak, ilgili kişilerin etrafında dönmektedir. Bankaların, borç vermeden önce bir krediyi geri ödeme olasılığınız olup olmadığını bilmesi gerekir. -Merkezi olmayan borç verme, tarafların kendilerini tanımlamasına gerek kalmadan çalışır. Böylece, borç alan kişi kredisini geri ödemezse kredi verenin otomatik olarak alacağı bir teminat sunulmuş olur. Bazı borç verenler, [NFT'leri](/glossary/#nft) teminat olarak bile kabul eder. NFT'ler, bir tablo gibi benzersiz bir varlığın tapusudur. [NFT'ler hakkında daha fazla bilgi](/nft/) +Merkezi olmayan borç verme, tarafların kendilerini tanımlamasına gerek kalmadan çalışır. Böylece, borç alan kişi kredisini geri ödemezse kredi verenin otomatik olarak alacağı bir teminat sunulmuş olur. Hatta bazı borç verenler teminat olarak [NFT'leri](/glossary/#nft) bile kabul etmektedir. NFT'ler, bir tablo gibi benzersiz bir varlığın tapusudur. [NFT'ler hakkında daha fazlası](/nft/) Bu, kredi kontrolü olmadan veya özel bilgileri teslim etmeden borç para almanızı sağlar. @@ -144,11 +145,11 @@ Bu, kredi kontrolü olmadan veya özel bilgileri teslim etmeden borç para alman Merkezi olmayan bir borç veren kullandığınızda, yalnızca seçtiğiniz banka veya kurumun gözetimindeki fonlara değil, dünyanın her yerinden yatırılan fonlara erişebilirsiniz. Bu, kredileri daha erişilebilir hâle getirir ve faiz oranlarını iyileştirir. -#### Vergi açısından verimlilik {#tax-efficiencies} +#### Vergi verimliliği {#tax-efficiencies} -Borçlanma, ETH'nizi satmanıza (vergiye tabi bir eylem) gerek kalmadan ihtiyacınız olan fonlara erişmenizi sağlayabilir. Bunun yerine, bir sabit para kredisi için teminat olarak ETH'yi kullanabilirsiniz. Bu, size ihtiyacınız olan nakit akışını sağlar ve ETH'nizi korumanıza izin verir. Sabit paralar, ETH gibi değerlerinde dalgalanma olmadığı için nakit ihtiyacınız olduğunda çok daha iyi olan token'lardır. [Sabit paralar hakkında daha fazla bilgi](#stablecoins) +Borçlanma, ETH'nizi satmanıza (vergiye tabi bir eylem) gerek kalmadan ihtiyacınız olan fonlara erişmenizi sağlayabilir. Bunun yerine, bir sabit para kredisi için teminat olarak ETH'yi kullanabilirsiniz. Bu, size ihtiyacınız olan nakit akışını sağlar ve ETH'nizi korumanıza izin verir. Sabit paralar, ETH gibi değerlerinde dalgalanma olmadığı için nakit ihtiyacınız olduğunda çok daha iyi olan token'lardır. [Sabit coinler hakkında daha fazlası](#stablecoins) -#### Hızlı krediler (flash loan) {#flash-loans} +#### Flaş Krediler {#flash-loans} Hızlı krediler, teminat olmadan veya herhangi bir kişisel bilgi vermeden borçlanmanıza izin veren, merkezi olmayan kredilendirmenin daha deneysel bir şeklidir. @@ -172,24 +173,24 @@ B borsasının arzı aniden düşerse ve kullanıcı orijinal krediyi karşılay Yukarıdaki örneği geleneksel finans dünyasında yapabilmek için çok büyük miktarda paraya ihtiyacınız var. Bu para kazanma stratejilerine yalnızca önceden bir servete sahip olanlar erişebilir. Hızlı krediler, paraya sahip olmanın para kazanmak için mutlaka bir ön koşul olmadığı bir geleceğe bir örnektir. - Hızlı krediler hakkında daha fazla bilgi + Flaş krediler hakkında daha fazlası -### Kripto ile biriktirmeye başlayın {#saving} +### Kripto ile birikim yapmaya başlayın {#saving} #### Borç Verme {#lending} Borç vererek kripto paranızdan faiz kazanabilir ve fonlarınızın gerçek zamanlı olarak büyümesini sağlayabilirsiniz. Şu anda faiz oranları, yerel bankanızda elde edebileceğinizden çok daha yüksek (eğer bir bankaya erişebilecek kadar şanslıysanız). İşte bir örnek: -- Bir [sabit para](/stablecoins/) olan 100 Dai'nizi Aave gibi bir ürüne borç veriyorsunuz. +- Bir [sabit coin](/stablecoins/) olan 100 Dai'nizi Aave gibi bir ürüne borç verirsiniz. - Borç verdiğiniz Dai'nizi temsil eden bir token olan 100 Aave Dai (aDai) alırsınız. -- aDai'niz faiz oranlarına göre artacak ve cüzdanınızdaki bakiyenizin büyüdüğünü görebilirsiniz. [APR](/glossary/#apr)'ye bağımlı olan cüzdan bakiyenizde birkaç gün hatta birkaç saat sonra 100,1234 gibi bir tutar görebilirsiniz! +- aDai'niz faiz oranlarına göre artacak ve cüzdanınızdaki bakiyenizin büyüdüğünü görebilirsiniz. [APR](/glossary/#apr) oranına bağlı olarak, cüzdan bakiyeniz birkaç gün, hatta birkaç saat sonra 100.1234 gibi bir değer olacaktır! - İstediğiniz zaman aDai bakiyenize eşit miktarda normal Dai çekebilirsiniz. - Borç verme uygulamalarına bakın + Borç verme merkeziyetsiz uygulamalarını görün #### Kayıpsız piyangolar {#no-loss-lotteries} @@ -210,43 +211,43 @@ PoolTogether gibi kayıpsız piyangolar, paradan tasarruf etmenin eğlenceli ve -### Takas token'ları {#swaps} +### Token takası {#swaps} Ethereum'da binlerce token var. Merkeziyetsiz borsalar (DEX'ler), istediğiniz zaman farklı token'larla işlem yapmanızı sağlar. Varlıklarınızın kontrolünü asla bırakmazsınız. Bu, farklı bir ülkeyi ziyaret ederken bir döviz bürosu kullanmak gibidir. Ancak DeFi sürümü asla kapanmaz. Piyasalar 7/24, yılda 365 gün açıktır ve teknoloji, her zaman bir ticareti kabul edecek birinin olacağını garanti ediyor. Örneğin, kayıpsız piyango PoolTogether'ı (yukarıda açıklanmıştır) kullanmak istiyorsanız, Dai veya USDC gibi bir token'a ihtiyacınız olacaktır. Bu DEX'ler, ETH'nizi bu token'larla değiştirmenize ve işiniz bittiğinde tekrar geri almanıza olanak tanır. - Token borsalarını gör + Token borsalarını görün -### Gelişmiş ticaret {#trading} +### Gelişmiş alım-satım {#trading} Biraz daha fazla kontrol isteyen borsa kullanıcıları için daha gelişmiş seçenekler bulunuyor. Limit emirleri, vadesizler, marj ticareti ve daha fazlası mümkündür. Merkezi olmayan ticaret ile küresel likiditeye erişirsiniz, piyasa asla kapanmaz ve varlıklarınızın kontrolü her zaman sizde olur. Merkezi bir borsa kullandığınızda, varlıklarınızı ticaretten önce yatırmanız ve varlıklarınızı koruması için merkezi borsaya güvenmeniz gerekir. Merkezi borsalar hacker'lar için önemli hedefler olduğundan varlıklarınız yatırıldıktan sonra risk altındadır. - Ticaret dapp'lerini gör + Alım-satım merkeziyetsiz uygulamalarını görün -### Portföyünüzü büyütün {#investing} +### Portföyünüzü büyütme {#investing} Ethereum'da, seçtiğiniz bir stratejiye dayalı olarak portföyünüzü büyütmeye çalışacak fon yönetimi ürünleri bulunmaktadır. Bu otomatiktir, herkese açıktır ve kârınızdan pay alan bir insan yöneticiye ihtiyaç duymaz. -İyi bir örnek: [DeFi Pulse Index fonu (DPI)](https://defipulse.com/blog/defi-pulse-index/). Bu, portföyünüzün toplam piyasa değerine göre her zaman en iyi DeFi jetonlarını içermesini sağlamak için otomatik olarak yeniden dengelenen bir fondur. Hiçbir zaman herhangi bir ayrıntıyı yönetmek zorunda kalmazsınız ve istediğiniz zaman fondan çıkabilirsiniz. +Buna iyi bir örnek [DeFi Pulse Index fonudur (DPI)](https://defipulse.com/blog/defi-pulse-index/). Bu, portföyünüzün toplam piyasa değerine göre her zaman en iyi DeFi jetonlarını içermesini sağlamak için otomatik olarak yeniden dengelenen bir fondur. Hiçbir zaman herhangi bir ayrıntıyı yönetmek zorunda kalmazsınız ve istediğiniz zaman fondan çıkabilirsiniz. - Yatırım dapp'lerini gör + Yatırım merkeziyetsiz uygulamalarını görün -### Fikirlerinizi fonlayın {#crowdfunding} +### Fikirlerinizi fonlama {#crowdfunding} Ethereum, kitle fonlaması için ideal bir platformdur: @@ -255,10 +256,10 @@ Ethereum, kitle fonlaması için ideal bir platformdur: - Fon toplayanlar, örneğin belirli bir son tarih ve karşılanmayan minimum tutar varsa otomatik geri ödemeler ayarlayabilir. - Kitle fonlaması dapp'lerini gör + Kitle fonlaması merkeziyetsiz uygulamalarını görün -#### İkinci dereceden finansman {#quadratic-funding} +#### İkinci dereceden fonlama {#quadratic-funding} Ethereum açık kaynaklı bir yazılımdır ve şimdiye kadar yapılan çalışmaların çoğu topluluk tarafından fonlanmıştır. Bu, ilginç bir yeni fon yaratma modelinin büyümesine yol açtı: ikinci dereceden finansman. Bu, gelecekte her tür kamu malını finanse etme şeklimizi iyileştirme potansiyeline sahiptir. @@ -272,7 +273,7 @@ Ethereum açık kaynaklı bir yazılımdır ve şimdiye kadar yapılan çalışm Bu, 1 dolarlık 100 bağışa sahip olan A Projesi'nin, tek bir 10.000 dolarlık bağışa sahip olan B Projesi'nden daha fazla fon alabilmesi anlamına gelir (eşleştirme havuzunun boyutuna bağlı olarak). - İkinci dereceden finansman hakkında daha fazla bilgi + İkinci dereceden fonlama hakkında daha fazlası @@ -281,10 +282,10 @@ Bu, 1 dolarlık 100 bağışa sahip olan A Projesi'nin, tek bir 10.000 dolarlık Merkezi olmayan sigorta; sigortayı daha ucuz, ödemesi daha hızlı ve daha şeffaf hâle getirmeyi amaçlar. Daha fazla otomasyonla, kapsama alanı daha ekonomiktir ve ödemeler çok daha hızlıdır. Tazminatınıza karar vermek için kullanılan veriler tamamen şeffaftır. -Ethereum ürünleri, herhangi bir yazılım gibi, hatalardan ve açıklardan zarar görebilir. Dolayısıyla şu anda bu alandaki birçok sigorta ürünü, kullanıcılarını fon kaybına karşı korumaya odaklanıyor. Ancak hayatın karşımıza çıkarabileceği her şeyi kapsamaya başlayan projeler mevcuttur. Güzel bir örnek: [Kenya'daki küçük çiftçileri kuraklık ve sele karşı korumayı](https://blog.etherisc.com/etherisc-teams-up-with-chainlink-to-deliver-crop-insurance-in-kenya-137e433c29dc) amaçlayan Etherisc'in Hasat teminatı. Merkezi olmayan sigorta, genellikle geleneksel sigortadan fiyatlandırılan çiftçiler için daha ucuz teminat sağlayabilir. +Ethereum ürünleri, herhangi bir yazılım gibi, hatalardan ve açıklardan zarar görebilir. Dolayısıyla şu anda bu alandaki birçok sigorta ürünü, kullanıcılarını fon kaybına karşı korumaya odaklanıyor. Ancak hayatın karşımıza çıkarabileceği her şeyi kapsamaya başlayan projeler mevcuttur. Buna iyi bir örnek, [Kenya'daki küçük çiftçileri kuraklık ve sele karşı korumayı](https://blog.etherisc.com/etherisc-teams-up-with-chainlink-to-deliver-crop-insurance-in-kenya-137e433c29dc) amaçlayan Etherisc'in Mahsul güvencesidir. Merkezi olmayan sigorta, genellikle geleneksel sigortadan fiyatlandırılan çiftçiler için daha ucuz teminat sağlayabilir. - Sigorta dapp'lerini gör + Sigorta merkeziyetsiz uygulamalarını görün @@ -294,7 +295,7 @@ Ethereum ürünleri, herhangi bir yazılım gibi, hatalardan ve açıklardan zar Bu kadar çok şey olurken, tüm yatırımlarınızı, kredilerinizi ve ticaretlerinizi takip etmenin bir yoluna ihtiyacınız olacak. Tüm DeFi aktivitelerinizi tek bir yerden koordine etmenize izin veren bir dizi ürün var. Bu, DeFi'nin açık mimarisinin güzelliğidir. Ekipler, ürünler arasında sadece bakiyelerinizi görmenin ötesinde ürünlerin özelliklerini de kullanabileceğiniz arayüzler oluşturabilir. DeFi keşfederken bunu faydalı bulabilirsiniz. - Portföy dapp'lerini gör + Portföy merkeziyetsiz uygulamalarını görün @@ -323,38 +324,43 @@ Ethereum, birkaç nedenden dolayı DeFi için mükemmel bir temeldir: DeFi'yi katmanlar halinde düşünebilirsiniz: 1. Blok zinciri: Ethereum, işlem geçmişini ve hesapların durumunu içerir. -2. Varlıklar: [ETH](/what-is-ether/) ve diğer token'lar (para birimleri). -3. Protokol – [akıllı sözleşmeler](/glossary/#smart-contract) işlevsellik sağlar; örneğin, bu varlıklara merkeziyetsiz borçlanmaya izin veren bir servis sağlar. -4. [Uygulamalar](/apps/): Protokolleri yönetmek ve bunlara erişmek için kullandığımız ürünler. +2. Varlıklar – [ETH](/what-is-ether/) ve diğer token'lar (para birimleri). +3. Protokoller – işlevselliği sağlayan [akıllı sözleşmelerdir](/glossary/#smart-contract); örneğin, varlıkların merkeziyetsiz olarak borç verilmesine olanak tanıyan bir hizmet. +4. [Uygulamalar](/apps/) – protokolleri yönetmek ve onlara erişmek için kullandığımız ürünler. -Not: DeFi'nin büyük bir kısmı [ERC-20 standardını](/glossary/#erc-20) kullanır. DeFi'deki uygulamalar, ETH için Sarılı Ether (WETH) adı verilen bir sarıcı kullanır. [Sarılı ether hakkında daha fazla bilgi edinin](/wrapped-eth). +Not: DeFi'nin büyük bir kısmı [ERC-20 standardını](/glossary/#erc-20) kullanır. DeFi'deki uygulamalar, Sarılı ether (WETH) adındaki ETH için bir sarıcı kullanır. [Sarılı ether hakkında daha fazla bilgi edinin](/wrapped-eth). -## DeFi oluşturun {#build-defi} +## DeFi Oluşturun {#build-defi} DeFi, açık kaynaklı bir akımdır. DeFi protokolleri ve uygulamaları; incelemeniz, çatallamanız ve yenilik yapmanız için tamamen açıktır. Bu katmanlı yığın sayesinde (hepsi aynı temel blok zincirini ve varlıkları paylaşır), benzersiz birleşik fırsatların kilidini açmak için protokoller karıştırılabilir ve eşleştirilebilir. - Dapp oluşturma hakkında daha fazla bilgi + Merkeziyetsiz uygulama oluşturma hakkında daha fazlası -## Daha fazla bilgi {#further-reading} +## Daha fazla kaynak {#further-reading} -### DeFi verisi {#defi-data} +### DeFi verileri {#defi-data} - [DeFi Prime](https://defiprime.com/) - [DeFi Llama](https://defillama.com/) ### DeFi makaleleri {#defi-articles} -- [DeFi Başlangıç Rehberi](https://blog.coinbase.com/a-beginners-guide-to-decentralized-finance-defi-574c68ff43c4) – _Sid Coelho-Prabhu, 6 Ocak 2020_ +- [DeFi'ye yeni başlayanlar için bir rehber](https://blog.coinbase.com/a-beginners-guide-to-decentralized-finance-defi-574c68ff43c4) – _Sid Coelho-Prabhu, 6 Ocak 2020_ +- [EEA DeFi Risk Değerlendirme Yönergeleri](https://entethalliance.org/specs/defi-risks/) – DeFi protokollerindeki kilit risklerin nasıl tanımlanacağını ve değerlendirileceğini gösteren, sektör destekli bir genel bakış. ### Videolar {#videos} -- [Finematics - merkeziyetsiz finans eğitimi](https://finematics.com/) – _DeFi ile ilgili Videolar_ -- [The Defiant](https://www.youtube.com/playlist?list=PLaDcID4s1KronHMKojfjwiHL0DdQEPDcq) - _DeFi ile ilgili temel bilgiler: Bu bazen kafa karıştırıcı olan alana giriş yapmak için bilmeniz gereken her şey._ -- [Whiteboard Crypto](https://youtu.be/17QRFlml4pA) _DeFi nedir?_ +- [Finematics - merkeziyetsiz finans eğitimi](https://finematics.com/) – _DeFi üzerine videolar_ +- [The Defiant](https://www.youtube.com/playlist?list=PLaDcID4s1KronHMKojfjwiHL0DdQEPDcq) - _DeFi'nin temelleri: Bu zaman zaman kafa karıştırıcı alana başlamak için bilmeniz gereken her şey._ +- [Whiteboard Crypto](https://youtu.be/17QRFlml4pA) _DeFi Nedir?_ ### Topluluklar {#communities} - [DeFi Llama Discord sunucusu](https://discord.defillama.com/) - [DeFi Pulse Discord sunucusu](https://discord.gg/Gx4TCTk) + + + + diff --git a/public/content/translations/tr/desci/index.md b/public/content/translations/tr/desci/index.md index 5b619c2d162..baf40b38805 100644 --- a/public/content/translations/tr/desci/index.md +++ b/public/content/translations/tr/desci/index.md @@ -1,88 +1,89 @@ --- title: Merkeziyetsiz bilim (DeSci) -description: Ethereum üzerindeki merkeziyetsiz bilime genel bakış +description: "Ethereum üzerindeki merkeziyetsiz bilime genel bakış" lang: tr template: use-cases emoji: ":microscope:" sidebarDepth: 2 image: /images/future_transparent.png alt: "" -summaryPoint1: Mevcut bilimsel sisteme küresel, açık bir alternatif. -summaryPoint2: Bilim insanlarının finansman sağlamasına, deneyler yürütmesine, veri paylaşmasına, görüşlerini dağıtmasına ve daha fazlasını yapmalarına olanak tanıyan teknoloji. -summaryPoint3: Açık bilim hareketine dayanır. +summaryPoint1: "Mevcut bilimsel sisteme küresel, açık bir alternatif." +summaryPoint2: "Bilim insanlarının finansman sağlamasına, deneyler yürütmesine, veri paylaşmasına, görüşlerini dağıtmasına ve daha fazlasını yapmalarına olanak tanıyan teknoloji." +summaryPoint3: "Açık bilim hareketine dayanır." --- ## Merkeziyetsiz bilim (DeSci) nedir? {#what-is-desci} -Merkeziyetsiz bilim (DeSci), [Web3](/glossary/#web3) yığını kullanılarak bilimsel bilginin adil ve eşit şekilde finanse edilmesi, oluşturulması, gözden geçirilmesi, depolanması, yayılması ve bilgiyi üretene atıfta bulunulmasına yönelik kamusal altyapıyı oluşturmayı hedefleyen bir harekettir. +Merkeziyetsiz bilim (DeSci), [Web3](/glossary/#web3) yığınını kullanarak bilimsel bilgiyi adil ve eşit bir şekilde finanse etmek, oluşturmak, gözden geçirmek, kredilendirmek, depolamak ve yaymak için kamu altyapısı oluşturmayı amaçlayan bir harekettir. DeSci, bilimsel araştırmalarını açıkça paylaşmaya teşvik edilen bilim insanlarının çalışmalarını kredi almalarına olanak tanıyan ve araştırmaya kolayca erişim sağlayan herkesin katkıda bulunabileceği bir ekosistem oluşturmayı hedefleyen bir harekettir. DeSci, bilimsel bilginin herkes tarafından erişilebilir olması gerektiği ve bilimsel araştırma sürecinin şeffaf olması gerektiği fikrinden yola çıkarak çalışır. Merkeziyetsiz bilim, daha merkeziyetsiz ve dağıtılmış bir bilimsel araştırma modeli yaratmayı amaçlamakta olup, bu sayede sansür ve merkezi otoritelerin kontrolüne daha dirençli hale gelmektedir. Merkeziyetsiz bilim, fonlamanın, bilimsel araçların ve iletişim kanallarının merkeziyetsizleştirilmesiyle yeni ve alışılmadık fikirlerin gelişebileceği bir ortam yaratmayı ummaktadır. -Merkeziyetsiz bilim, ([DAO'lardan](/glossary/#dao) [ikinci dereceden bağışlara](https://papers.ssrn.com/sol3/papers.cfm?abstract_id=2003531), kitlesel fonlamalara ve daha fazlasına) daha çeşitli fon kaynaklarına, daha erişilebilir veri ve yöntemlere olanak tanır ve yeniden üretilebilirliği teşvik eder. +Merkeziyetsiz bilim, ([DAO'lardan](/glossary/#dao), [ikinci dereceden bağışlardan](https://papers.ssrn.com/sol3/papers.cfm?abstract_id=2003531) kitle fonlamasına ve daha fazlasına kadar) daha çeşitli fon kaynaklarına, daha erişilebilir verilere ve yöntemlere olanak tanır ve yeniden üretilebilirlik için teşvikler sağlar. ### Juan Benet - DeSci Hareketi -## Merkeziyetsiz bilimin, bilimi nasıl geliştirdiği {#desci-improves-science} +## DeSci bilimi nasıl geliştirir {#desci-improves-science} Bilimdeki temel sorunlara dair eksik olan bir liste ve merkeziyetsiz bilimin bu sorunları ele alarak nasıl yardımcı olabileceği -| **Merkeziyetsiz bilim** | **Geleneksel bilim** | -| -------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | -| Fonların nasıl dağıtılacağı, ikinci dereceden bağışlar veya DAO'lar gibi mekanizmalar kullanılarak **topluluk tarafından belirlenir**. | Küçük, kapalı **merkezi gruplar** fonların dağıtımını kontrol eder. | -| Dinamik ekiplerde **dünyanın her yerinden** insanlarla iş birliği yaparsınız. | Finansman kuruluşları ve yerel kurumlar, iş birliklerinizi **sınırlar**. | -| Finansman ile ilgili kararlar, çevrimiçi ve** şeffaf** bir şekilde alınır. Yeni finansman mekanizmaları araştırılmaktadır. | Finansman ile ilgili kararlar, uzun bir geri dönüş süresi ve **sınırlı düzeyde şeffaflık** ile alınır. Birkaç finansman mekanizması mevcuttur. | -| [Web3](/glossary/#web3) teknolojisi kullanılarak laboratuvar hizmetlerini paylaşmak daha kolay ve şeffaf hale gelmiştir. | Laboratuvar kaynaklarının paylaşımı genellikle **yavaştır ve şeffaf değildir**. | -| Güven, şeffaflık ve evrensel erişim için Web3 ilkelerini kullanan **yeni yayınlama modelleri** geliştirilebilir. | Sık sık **verimsiz, önyargılı ve sömürücü** olarak bilinen yerleşik yollarla yayın yaparsınız. | -| **Yaptığınız eş değerlendirmesi çalışmaları karşılığında jeton ve itibar** kazanabilirsiniz. | **Eş değerlendirmesi çalışmalarınız karşılığında ödeme yapılmaz** ve bunlar, kâr amacı güden yayıncılara fayda sağlar. | -| Oluşturduğunuz **fikri mülkiyetin (IP)** sahibi sizsiniz ve bu mülkiyeti şeffaf koşullarda dağıtırsınız. | Oluşturduğunuz **fikri mülkiyetin (IP) sahibi, kendi kurumunuzdur**. IP'ye erişim şeffaf değildir. | -| Başarısız çalışmalardan elde edilen veriler de dahil olmak üzere, tüm adımların zincir üstünde olması yoluyla **tüm araştırmaların paylaşılması**. | **Yayın yanlılığı**, araştırmacıların başarılı sonuçlar almış olan deneyleri paylaşmaya daha meyilli oldukları anlamına gelir. | +| **Merkeziyetsiz bilim** | **Geleneksel bilim** | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Fonların dağıtımı, ikinci dereceden bağışlar veya DAO'lar gibi mekanizmalar kullanılarak **halk tarafından belirlenir**. | Küçük, kapalı, **merkezi gruplar** fonların dağıtımını kontrol eder. | +| Dinamik ekiplerde **dünyanın dört bir yanından** meslektaşlarınızla iş birliği yaparsınız. | Fon sağlayan kuruluşlar ve bağlı olduğunuz kurumlar iş birliklerinizi **sınırlar**. | +| Finansman kararları çevrimiçi ve **şeffaf bir şekilde** alınır. Yeni finansman mekanizmaları araştırılmaktadır. | Finansman kararları, uzun bir geri dönüş süresi ve **sınırlı şeffaflıkla** alınır. Birkaç finansman mekanizması mevcuttur. | +| [Web3](/glossary/#web3) teknolojisi kullanılarak laboratuvar hizmetlerinin paylaşımı daha kolay ve şeffaf hale getirilmiştir. | Laboratuvar kaynaklarının paylaşımı genellikle **yavaş ve şeffaf değildir**. | +| Güven, şeffaflık ve evrensel erişim için Web3 temel öğelerini kullanan **yeni yayınlama modelleri** geliştirilebilir. | Sık sık **verimsiz, taraflı ve sömürücü** olduğu kabul edilen yerleşik yollarla yayın yaparsınız. | +| Akran değerlendirmesi yaparak **token ve itibar kazanabilirsiniz**. | **Akran değerlendirmesi çalışmanız karşılıksızdır** ve kâr amacı güden yayıncılara fayda sağlar. | +| **Oluşturduğunuz fikri mülkiyetin (FM) sahibi sizsiniz** ve bu mülkiyeti şeffaf koşullarda dağıtırsınız. | **Oluşturduğunuz fikri mülkiyetin (FM) sahibi bağlı olduğunuz kurumdur**. IP'ye erişim şeffaf değildir. | +| Tüm adımların zincir üstünde yer alması yoluyla, başarısız denemelerden elde edilen veriler de dahil olmak üzere **tüm araştırmanın paylaşılması**. | **Yayın yanlılığı**, araştırmacıların başarılı sonuçlar almış olan deneyleri paylaşmaya daha meyilli oldukları anlamına gelir. | -## Ethereum ve Merkeziyetsiz Bilim {#ethereum-and-desci} +## Ethereum ve DeSci {#ethereum-and-desci} Merkeziyetsiz bir bilim sistemi, güçlü güvenlik, düşük maliyet, düşük işlem ücretleri ve uygulama geliştirme için zengin bir ekosistem gerektirir. Ethereum, merkeziyetsiz bilim teknolojisinin oluşturulabilmesi için gereken her şeyi sağlar. -## Merkeziyetsiz Bilim kullanım senaryoları {#use-cases} +## DeSci kullanım örnekleri {#use-cases} DeSci, geleneksel akademiyi dijital dünyaya taşımak için gereken bilimsel araç setini geliştiriyor. Aşağıda, Web3'ün bilimsel topluluğa sunabileceği kullanım durumlarından bazı örnekler bulunmaktadır. -### Yayımlama {#publishing} +### Yayıncılık {#publishing} -Bilim yayıncılığı, yayın evlerinin yönettiği ve bilim insanları, hakemler ve editörlerin ücretsiz emeğine dayanan, ardından fahiş yayıncılık ücretleri talep eden bir yapıya sahip olmasıyla ünlüdür. Eser ve yayın masraflarını genellikle dolaylı olarak vergilendirme yoluyla ödeyen halk, yayıncıya tekrar ödeme yapmadan aynı esere çoğu kez erişememektedir. Bir bilimsel makaleyi tek başına yayınlamak için gereken toplam ücret genellikle beş hanelidir ($USD); bu durum, bir [kamu malı](/glossary/#public-goods) olarak tüm bilimsel bilgi kavramını baltalarken küçük bir yayıncı grubu için muazzam kârlar sağlamaktadır. +Bilim yayıncılığı, yayın evlerinin yönettiği ve bilim insanları, hakemler ve editörlerin ücretsiz emeğine dayanan, ardından fahiş yayıncılık ücretleri talep eden bir yapıya sahip olmasıyla ünlüdür. Eser ve yayın masraflarını genellikle dolaylı olarak vergilendirme yoluyla ödeyen halk, yayıncıya tekrar ödeme yapmadan aynı esere çoğu kez erişememektedir. Bireysel bilimsel makaleleri yayınlamanın toplam ücretleri genellikle beş haneli rakamlara ($USD) ulaşır; bu durum bilimsel bilginin bir [kamu malı](/glossary/#public-goods) olduğu kavramının altını oyarken küçük bir yayıncı grubuna da muazzam kârlar sağlar. -[ArXiv](https://arxiv.org/) gibi baskı öncesi sunucular şeklinde ücretsiz ve açık erişimli platformlar mevcuttur. Bununla birlikte, bu platformlarda kalite kontrol, [sybil önleyici mekanizmaları](/glossary/#anti-sybil) yoktur ve bu platformlar genellikle makale seviyesindeki metrikleri izlemez, yani genellikle geleneksel bir yayıncıya sunulmadan önce yalnızca çalışmaları duyurmak için kullanılır. SciHub ayrıca yayınlanmış makaleleri, (yasal olarak değil) ancak yayıncılar ödemelerini aldıktan ve çalışmayı sıkı telif hakkı mevzuatına sardıktan sonra erişime ücretsiz hale getirir. Bu durum, yerleşik bir meşruiyet mekanizması ve teşvik modeli ile erişilebilir bilim makaleleri ve verileri için kritik bir boşluk bırakmaktadır. Böyle bir sistem oluşturmak için gerekli araçlar Web3'te mevcuttur. +[ArXiv](https://arxiv.org/) gibi baskı öncesi sunucular şeklinde ücretsiz ve açık erişimli platformlar mevcuttur. Ancak bu platformlarda kalite kontrolü ve [sybil karşıtı mekanizmalar](/glossary/#anti-sybil) bulunmaz ve genellikle makale düzeyindeki metrikleri izlemezler; bu da, genellikle yalnızca geleneksel bir yayıncıya gönderilmeden önce çalışmayı duyurmak için kullanıldıkları anlamına gelir. SciHub ayrıca yayınlanmış makaleleri, (yasal olarak değil) ancak yayıncılar ödemelerini aldıktan ve çalışmayı sıkı telif hakkı mevzuatına sardıktan sonra erişime ücretsiz hale getirir. Bu durum, yerleşik bir meşruiyet mekanizması ve teşvik modeli ile erişilebilir bilim makaleleri ve verileri için kritik bir boşluk bırakmaktadır. Böyle bir sistem oluşturmak için gerekli araçlar Web3'te mevcuttur. -### Tekrarlanabilirlik ve çoğaltılabilirlik {#reproducibility-and-replicability} +### Tekrar üretilebilirlik ve yinelenebilirlik {#reproducibility-and-replicability} Tekrarlanabilirlik ve çoğaltılabilirlik, kaliteli bilimsel keşfin temelleridir. - Tekrarlanabilir sonuçlar, aynı ekip tarafından aynı metodoloji kullanılarak arka arkaya birden fazla kez elde edilebilir. - Aynı deneysel düzeneği kullanan farklı bir grup tarafından tekrarlanabilir sonuçlar elde edilebilir. -Web3'e has yeni araçlar, tekrarlanabilirlik ve çoğaltılabilirliğin keşfin temeli olduğunu garanti edebilir. Kaliteli bilimi, akademinin teknolojik kumaşına işleyebiliriz. Web3; işlenmemiş veriler, hesaplama motoru ve uygulama sonucu gibi her bir analiz bileşeni için [tasdikler](/glossary/#attestation) oluşturma olanağı sunar. Bu bileşenlerin sürdürülebilirliğini sağlamak için güvenilir bir ağ oluşturulduğunda; her ağ katılımcısı, hesaplamayı tekrar tekrar yapıp her bir sonucu onaylayarak sorumluluk alabilir. Mutabakat sistemlerinin güzelliği buradadır. +Web3'e has yeni araçlar, tekrarlanabilirlik ve çoğaltılabilirliğin keşfin temeli olduğunu garanti edebilir. Kaliteli bilimi, akademinin teknolojik kumaşına işleyebiliriz. Web3; ham veriler, hesaplama motoru ve uygulama sonucu gibi her analiz bileşeni için [doğrulama beyanları](/glossary/#attestation) oluşturma olanağı sunar. Bu bileşenlerin sürdürülebilirliğini sağlamak için güvenilir bir ağ oluşturulduğunda; her ağ katılımcısı, hesaplamayı tekrar tekrar yapıp her bir sonucu onaylayarak sorumluluk alabilir. Mutabakat sistemlerinin güzelliği buradadır. ### Fonlama {#funding} -An itibarıyla bilime kaynak sağlamak için izlenen yol, bireylerin veya bir grup bilim insanının kaynak sağlayan kuruluşa yazılı başvuruda bulunmasıdır. Başvuranların küçük bir bölümüne kaynak sağlamadan önce, güvenilir kişilerden oluşan bir heyet başvuruları puanlar ve sonrasında adaylar mülakata girer. Bu modelin, hibeye başvurma ve alma arasında bazen **yıllarca beklemeye** yol açan darboğazlar yaratmasının yanı sıra, değerlendirme panelinin **önyargılarına, kişisel çıkarlarına ve politikalarına** karşı son derece savunmasız olduğu bilinmektedir. +An itibarıyla bilime kaynak sağlamak için izlenen yol, bireylerin veya bir grup bilim insanının kaynak sağlayan kuruluşa yazılı başvuruda bulunmasıdır. Başvuranların küçük bir bölümüne kaynak sağlamadan önce, güvenilir kişilerden oluşan bir heyet başvuruları puanlar ve sonrasında adaylar mülakata girer. Bir hibeye başvurmakla hibe almak arasında bazen **yıllarca bekleme** süresine yol açan darboğazlar yaratmasının yanı sıra, bu modelin inceleme panelinin **önyargılarına, kişisel çıkarlarına ve politikalarına karşı oldukça savunmasız** olduğu bilinmektedir. Çalışmalar, farklı panellere verilen aynı tekliflerin çok farklı sonuçları olduğundan, hibe inceleme panellerinin yüksek kaliteli teklifleri seçmekte yetersiz kaldığını göstermiştir. Finansman nadir hale geldikçe, entelektüel açıdan daha muhafazakar projelere sahip daha kıdemli araştırmacılardan oluşan daha küçük bir havuzda yoğunlaştı. Etki, hiper rekabetçi bir finansman ortamı yaratarak, sapkın teşvikleri sağlamlaştırdı ve yeniliği boğdu. -Web3, DAO'lar ve geniş çapta Web3 tarafından geliştirilen farklı teşvik modellerini deneyerek bu bozuk finansman modelini dağıtma potansiyeline sahiptir. Bilimin finansmanında köklü değişim yapabilecek Web3 araçlarına örnek olarak [geriye dönük kamu malları fonlaması](https://medium.com/ethereum-optimism/retroactive-public-goods-funding-33c9b7d00f0c), [ikinci dereceden finansman](https://papers.ssrn.com/sol3/papers.cfm?abstract_id=2003531), [DAO yönetişimi](https://www.antler.co/blog/daos-and-web3-governance-the-promise-implications-and-challenges-ahead) ve [jetonlaştırılmış teşvik yapıları](https://cdixon.org/2017/05/27/crypto-tokens-a-breakthrough-in-open-network-design) verilebilir. +Web3, DAO'lar ve geniş çapta Web3 tarafından geliştirilen farklı teşvik modellerini deneyerek bu bozuk finansman modelini dağıtma potansiyeline sahiptir. [Geriye dönük kamu malları finansmanı](https://medium.com/ethereum-optimism/retroactive-public-goods-funding-33c9b7d00f0c), [ikinci dereceden finansman](https://papers.ssrn.com/sol3/papers.cfm?abstract_id=2003531), [DAO yönetişimi](https://www.antler.co/blog/daos-and-web3-governance-the-promise-implications-and-challenges-ahead) ve [tokenlaştırılmış teşvik yapıları](https://cdixon.org/2017/05/27/crypto-tokens-a-breakthrough-in-open-network-design), bilim fonlamasında devrim yaratabilecek Web3 araçlarından bazılarıdır. -### Fikri mülkiyet sahipliği ve geliştirme {#ip-ownership} +### FM sahipliği ve geliştirme {#ip-ownership} -Fikri mülkiyet (IP), geleneksel bilimde büyük bir sorundur: üniversitelerde sıkışıp kalmaktan veya biyoteknolojilerde kullanılmamaktan, değer biçilmesinin çok zor olmasına kadar. Bununla birlikte dijital varlıkların (bilimsel veriler veya makaleler gibi) mülkiyeti, Web3'ün [eşsiz jetonlar (NFT'ler)](/glossary/#nft) kullanarak son derece iyi yaptığı bir şeydir. +Fikri mülkiyet (IP), geleneksel bilimde büyük bir sorundur: üniversitelerde sıkışıp kalmaktan veya biyoteknolojilerde kullanılmamaktan, değer biçilmesinin çok zor olmasına kadar. Ancak, dijital varlıkların (bilimsel veriler veya makaleler gibi) mülkiyeti, Web3'ün [değiştirilemez token'ları (NFT'ler)](/glossary/#nft) kullanarak son derece iyi yaptığı bir şeydir. NFT'ler gelecekteki işlem gelirlerini orijinal yaratıcıya aktarabilir. Aynı şekilde şeffaf değer eşleştirme zincirleri ile araştırmacılar, yönetim organları (DAOlar gibi), ve hatta veri toplayan özneler bile ödüllendirilebilir. -[IP-NFT'ler](https://medium.com/molecule-blog/ip-nfts-for-researchers-a-new-biomedical-funding-paradigm-91312d8d92e6), araştırma deneylerinin alınan ve NFT'ye aktarılan verilerin merkeziyetsiz olarak saklanması ve [DeFi](/glossary/#defi) finansallaştırılması (bölümlere ayırmadan, borç verme havuzlarında ve değerlemelere kadar) açısından anahtar bir görev görebilir. Bu durum zincir üstündeki varlıkların, örneğin DAO'ların, doğrudan zincir üstünde araştırma yapmasına olanak sağlar. Örnek olarak [VitaDAO](https://www.vitadao.com/) verilebilir. Başkalarına transfer edilemeyen ["soulbound" jetonların](https://vitalik.eth.limo/general/2022/01/26/soulbound.html) ortaya çıkması da bireylerin deneyimlerini ve Ethereum adreslerine bağlı kimlik bilgilerini kanıtlamalarına olanak sağlayarak DeSci'de önemli bir rol oynayabilir. +[FM-NFT'leri](https://medium.com/molecule-blog/ip-nfts-for-researchers-a-new-biomedical-funding-paradigm-91312d8d92e6), yürütülen araştırma deneylerinin merkeziyetsiz bir veri deposu için bir anahtar işlevi görebilir ve NFT ile [DeFi](/glossary/#defi) finansallaşmasına (kesirlere ayırmadan borç verme havuzlarına ve değer takdirine kadar) bağlanabilir. Ayrıca [VitaDAO](https://www.vitadao.com/) gibi DAO'lar gibi yerel zincir üstü varlıkların doğrudan zincir üstünde araştırma yapmasına olanak tanır. +Devredilemeyen ["ruha bağlı" token'ların](https://vitalik.eth.limo/general/2022/01/26/soulbound.html) ortaya çıkışı, bireylerin Ethereum adreslerine bağlı deneyimlerini ve kimlik bilgilerini kanıtlamalarına olanak tanıyarak DeSci'de önemli bir rol oynayabilir. ### Veri depolama, erişim ve mimari {#data-storage} Bilimsel veriler, Web3 uygulamaları yardmıyla çok daha işlevsel hale dönüştürülebilir. Ve bu işlenmiş bilimsel veriler sayesinden araştırmalar için daha olumlu sonuçlar sağlanabilir. -Başlangıç noktası, uygun doğrulanabilir kimlik bilgilerine sahip herhangi bir merkezi olmayan kimlik tarafından erişilebilen bir sistem olmalıdır. Bu durum, önemli verilerin güvenilir taraflarca güvenli bir şekilde çoğaltılmasına, tekrara ve sansüre karşı direnç sağlanmasına, sonuçların yeniden üretilmesine ve hatta birden fazla tarafın iş birliği yapmasına ve veri kümesine yeni veriler eklemesine olanak tanır. "Compute-to-data" gibi gizli bilgi işleme yöntemleri bizim için, sadeleştirilmiş veriye alternatif olarak erişimemizi sağlar ve bu veriler için Güvenilir Araştırma Ortamları oluşturur. [NHS kuruluşu, Güvenilir Araştırma Ortamları](https://medium.com/weavechain/whats-in-store-for-the-future-of-healthcare-data-b6398745fbbb) tabiri için veri gizliliği sağladığını ve araştırmacıların ekosistemleri güvenilir şekilde birbirleri arasında bilgi paylaşımı yaparak inşa etmelerine olanak sağladığı için faydalı bir çözüm yöntemi olduğunu belirtti. +Başlangıç noktası, uygun doğrulanabilir kimlik bilgilerine sahip herhangi bir merkezi olmayan kimlik tarafından erişilebilen bir sistem olmalıdır. Bu durum, önemli verilerin güvenilir taraflarca güvenli bir şekilde çoğaltılmasına, tekrara ve sansüre karşı direnç sağlanmasına, sonuçların yeniden üretilmesine ve hatta birden fazla tarafın iş birliği yapmasına ve veri kümesine yeni veriler eklemesine olanak tanır. [Veriye hesaplama](https://7wdata.be/predictive-analytics/compute-to-data-using-blockchain-to-decentralize-data-science-and-ai-with-the-ocean-protocol) gibi gizli bilgi işlem yöntemleri, ham veri replikasyonuna alternatif erişim mekanizmaları sağlayarak en hassas veriler için Güvenilir Araştırma Ortamları oluşturur. Güvenilir Araştırma Ortamları, [NHS tarafından](https://medium.com/weavechain/whats-in-store-for-the-future-of-healthcare-data-b6398745fbbb), araştırmacıların kod ve uygulamaları paylaşmak için standartlaştırılmış ortamlar kullanarak verilerle yerinde güvenli bir şekilde çalışabilecekleri bir ekosistem oluşturarak veri gizliliği ve iş birliği için geleceğe yönelik bir çözüm olarak gösterilmiştir. Esnek Web3 veri çözümleri yukarıda bahsedilen sorunları çözme konusunda yardımcı olur, ayrıca araştırmacıların ve meraklıların özgürce ve ücretsiz şekilde işlem yapabildiği bir bilim ortamı sağlar. Web3'ün IPFS, Arweave, Filecoin gibi veri çözümleri merkeziyetsizlik için optimize edilmiştir. Örneğin, dClimate meteoroloji istasyonları ve tahmini iklim modelleri de dahil olmak üzere iklim ve hava durumu verilerine evrensel erişim sağlar. @@ -91,45 +92,48 @@ Esnek Web3 veri çözümleri yukarıda bahsedilen sorunları çözme konusunda y DeSci topluluğuna katılın ve gelişmelerden haberdar olun! - [DeSci.Global: küresel etkinlikler ve buluşma takvimi](https://desci.global) -- [Bilim İçin Blok Zincir Telegram Adresi](https://t.me/BlockchainForScience) +- [Bilim için Blokzincir Telegram](https://t.me/BlockchainForScience) - [Molecule: Araştırma projeleriniz için fon sağlayın ve fon alın](https://www.molecule.xyz/) -- [VitaDAO: Uzun ömürlü araştırmalar için sponsorlu araştırma anlaşmalı yoluyla fon alın](https://www.vitadao.com/) -- [ResearchHub: Bilimsel bir sonuç yayınlayın ve taraflarla iletişime geçin](https://www.researchhub.com/) -- [dClimate API: Merkeziyetsiz bir topluluk tarafından toplanmış iklim verilerini sorgulayın](https://www.dclimate.net/) +- [VitaDAO: uzun ömür araştırmaları için sponsorlu araştırma anlaşmaları yoluyla fon alın](https://www.vitadao.com/) +- [ResearchHub: bilimsel bir sonuç yayınlayın ve meslektaşlarınızla sohbete katılın](https://www.researchhub.com/) +- [dClimate API: merkeziyetsiz bir topluluk tarafından toplanan iklim verilerini sorgulayın](https://www.dclimate.net/) - [DeSci Vakfı: DeSci yayınlama aracı oluşturucu](https://descifoundation.org/) -- [DeSci.Dünyası: Kullanıcıların merkeziyetsiz bilimi görüntülemesi ve etkileşim kurması için tek adres](https://desci.world) +- [DeSci.World: kullanıcıların merkeziyetsiz bilimi görüntülemesi ve onunla etkileşim kurması için tek adres](https://desci.world) - [OceanDAO: Veri ile ilgili bilimler için DAO tarafından yönetilen fonlama](https://oceanprotocol.com/) -- [Opscientia: Açık merkeziyetsiz bilim iş akışları](https://opsci.io/research/) -- [Bio.xyz: Biyoteknoloji DAO'nuz veya desci projeniz için fon toplayın](https://www.bio.xyz/) -- [Fleming Protokolü: Ortak çalışmaya dayalı biyomedikal buluşları destekleyen açık kaynak veri ekonomisi](http://flemingprotocol.io/) +- [Opscientia: açık merkeziyetsiz bilim iş akışları](https://opsci.io/research/) +- [Bio.xyz: biyoteknoloji DAO'nuz veya desci projeniz için fon alın](https://www.bio.xyz/) +- [Fleming Protokolü: iş birliğine dayalı biyomedikal keşifleri destekleyen açık kaynaklı veri ekonomisi](http://flemingprotocol.io/) - [Active Inference Institute](https://www.activeinference.org/) -- [IdealMarkets: Merkeziyetsiz bilimsel güvenilirliği sağlar](https://ideamarket.io/) -- [DeSci Laboratuvarları](https://www.desci.com/) -- [ValleyDAO: sentetik biyoloji araştırmaları için finansman ve çeviri desteği sunan açık, global bir topluluk](https://www.valleydao.bio) -- [Cerebrum DAO: beyin sağlığını geliştirmeye ve nörodejenerasyonu önlemeye yönelik çözümler için kaynak temin eder ve destek sağlar](https://www.cerebrumdao.com/) -- [CryoDAO: kriyoprezervasyon alanındaki umut vaat eden araştırmaların finansmanı](https://www.cryodao.org) +- [IdeaMarkets: merkeziyetsiz bilimsel güvenilirliği etkinleştirme](https://ideamarket.io/) +- [DeSci Labs](https://www.desci.com/) +- [ValleyDAO: sentetik biyoloji araştırmaları için fonlama ve uygulamalı destek sunan açık, küresel bir topluluk](https://www.valleydao.bio) +- [Cerebrum DAO: beyin sağlığını geliştirmek ve nörodejenerasyonu önlemek için çözümler bulma ve geliştirme](https://www.cerebrumdao.com/) +- [CryoDAO: kriyoprezervasyon alanındaki çığır açan araştırmaları finanse etme](https://www.cryodao.org) +- [Elata: Psikiyatrik tıbbın geleceğinde söz sahibi olun](https://www.elata.bio/) -Listelenecek yeni proje önerilerine açığız - başlamak için lütfen [listeleme politikamızı](/contributing/adding-desci-projects/) gözden geçirin! +Listelemek için yeni proje önerilerine açığız - başlamak için lütfen [listeleme politikamıza](/contributing/adding-desci-projects/) göz atın! -## Daha fazla bilgi {#further-reading} +## Daha fazla kaynak {#further-reading} -- [DeSci Wiki Jocelynn Pearl ve Ultrarare taradından hazırlandı](https://docs.google.com/document/d/1aQC6zn-eXflSmpts0XGE7CawbUEHwnL6o-OFXO52PTc/edit#) -- [Jocelynn Pearl tarafından a16z geleceği için merkeziyetsiz biyoteknoloji rehberi](https://future.a16z.com/a-guide-to-decentralized-biotech/) -- [DeSci için durum](https://gitcoin.co/blog/desci-the-case-for-decentralised-science/) +- [Jocelynn Pearl ve Ultrarare tarafından hazırlanan DeSci Wiki'si](https://docs.google.com/document/d/1aQC6zn-eXflSmpts0XGE7CawbUEHwnL6o-OFXO52PTc/edit#) +- [Jocelynn Pearl tarafından a16z future için hazırlanan merkeziyetsiz biyoteknoloji rehberi](https://future.a16z.com/a-guide-to-decentralized-biotech/) +- [DeSci'yi Savunma](https://gitcoin.co/blog/desci-the-case-for-decentralised-science/) - [DeSci Rehberi](https://future.com/what-is-decentralized-science-aka-desci/) - [Merkeziyetsiz bilim kaynakları](https://www.vincentweisser.com/desci) -- [Molekülün Biyofarması IP-NFT'ler - Teknik Bir Açıklama](https://www.molecule.xyz/blog/molecules-biopharma-ip-nfts-a-technical-description) -- [Bilim İçin Güvensiz Sistemler Geliştirmek, Jon Starr](https://medium.com/@jringo/building-systems-of-trustless-science-1cd2d072f673) -- [Paul Kohlhass - DeSci: Merkeziyetsiz Bilimin Geleceği (podcast)](https://anchor.fm/andrew-steinwold/episodes/Paul-Kohlhaas---DeSci-The-Future-of-Decentralized-Science---Zima-Red-ep-117-e1h683a) -- [Merkeziyetsiz Bilim İçin Bir Çıkarım Ontolojisi: Yerleşik Anlamlandırmadan Epistemik Müştereklere](https://zenodo.org/record/6320575) -- [DeSci: Araştırmanın Geleceği, Samuel Akinosho tarafından yazıldı](https://lucidsamuel.medium.com/desci-the-future-of-research-b76cfc88c8ec) -- [Bilim Fonlaması (Son söz: DeSci ve yeni kripto ilkeleri) Nadia tarafından](https://nadia.xyz/science-funding) -- [Merkeziyetsizcilik İlaç Geliştirmeyi Engelliyor](https://medium.com/id-theory/decentralisation-is-disrupting-drug-development-28b5ba5d447f) +- [Molecule'ün Biyofarma FM-NFT'leri - Teknik Bir Açıklama](https://www.molecule.xyz/blog/molecules-biopharma-ip-nfts-a-technical-description) +- [Jon Starr'dan Güven Gerektirmeyen Bilim Sistemleri İnşa Etme](https://medium.com/@jringo/building-systems-of-trustless-science-1cd2d072f673) +- [Paul Kohlhaas - DeSci: Merkeziyetsiz Bilimin Geleceği (podcast)](https://anchor.fm/andrew-steinwold/episodes/Paul-Kohlhaas---DeSci-The-Future-of-Decentralized-Science---Zima-Red-ep-117-e1h683a) +- [Merkeziyetsiz Bilim için Aktif Bir Çıkarım Ontolojisi: Durumsal Anlamlandırmadan Epistemik Müştereklere](https://zenodo.org/record/6320575) +- [Samuel Akinosho'dan DeSci: Araştırmanın Geleceği](https://lucidsamuel.medium.com/desci-the-future-of-research-b76cfc88c8ec) +- [Nadia'dan Bilim Fonlaması (Sonsöz: DeSci ve yeni kripto temel öğeleri)](https://nadia.xyz/science-funding) +- [Merkeziyetsizleşme İlaç Geliştirmeyi Dönüştürüyor](https://medium.com/id-theory/decentralisation-is-disrupting-drug-development-28b5ba5d447f) +- [DeSci – Merkeziyetsiz Bilim Nedir?](https://usadailytimes.com/2022/09/12/what-is-desci-decentralized-science/) ### Videolar {#videos} -- [Merkeziyetsiz Bilim nedir?](https://www.youtube.com/watch?v=-DeMklVWNdA) -- [Vitalik Buterin ve bilim insanı Aubrey de Grey'in uzun yaşam araştırmaları ve kriptonun kesişimi hakkındaki konuşması](https://www.youtube.com/watch?v=x9TSJK1widA) -- [Bilimsel Yayıncılık Bozuldu. Web3 Düzeltebilir mi?](https://www.youtube.com/watch?v=WkvzYgCvWj8) -- [Juan Benet - DeSci, Bağımsız Labaratuvarlar ve Büyük Ölçekli Veri Bilimi](https://www.youtube.com/watch?v=zkXM9H90g_E) -- [Sebastian Brunemeier - DeSci Biyomedikal Araştırmaları ve Girişim Şirketini Nasıl Dönüştürebilir](https://www.youtube.com/watch?v=qB4Tc3FcVbM) +- [Merkeziyetsiz Bilim Nedir?](https://www.youtube.com/watch?v=-DeMklVWNdA) +- [Vitalik Buterin ve bilim insanı Aubrey de Grey arasında uzun ömür araştırmaları ve kriptonun kesişimi üzerine sohbet](https://www.youtube.com/watch?v=x9TSJK1widA) +- [Bilimsel Yayıncılık Bozuldu. Web3 Bunu Düzeltebilir mi?](https://www.youtube.com/watch?v=WkvzYgCvWj8) +- [Juan Benet - DeSci, Bağımsız Laboratuvarlar ve Büyük Ölçekli Veri Bilimi](https://www.youtube.com/watch?v=zkXM9H90g_E) +- [Sebastian Brunemeier - DeSci, Biyomedikal Araştırmaları ve Girişim Sermayesini Nasıl Dönüştürebilir?](https://www.youtube.com/watch?v=qB4Tc3FcVbM) +- [Paige Donner - Web3 ve Blokzincir ile Açık Bilimi Araçlarla Donatmak](https://www.youtube.com/watch?v=nC-2QWQ-lgw&t=17s) diff --git a/public/content/translations/tr/developers/docs/accounts/index.md b/public/content/translations/tr/developers/docs/accounts/index.md index e36f0b42e8a..2092e6e7b49 100644 --- a/public/content/translations/tr/developers/docs/accounts/index.md +++ b/public/content/translations/tr/developers/docs/accounts/index.md @@ -1,28 +1,28 @@ --- -title: Ethereum hesapları -description: 'Ethereum hesaplarının bir açıklaması: Hesapların veri yapıları ve anahtar çifti kriptografisi ile ilişkileri.' +title: "Ethereum hesapları" +description: "Ethereum hesaplarının bir açıklaması: Hesapların veri yapıları ve anahtar çifti kriptografisi ile ilişkileri." lang: tr --- -Bir Ethereum hesabı, Ethereum üzerinde işlem gönderebilen bir ether (ETH) bakiyesi barındıran bir varlıktır. Hesaplar kullanıcılar tarafından kontrol edilebilir veya akıllı sözleşme olarak dağıtılabilirler. +Bir Ethereum hesabı, Ethereum'da mesaj gönderebilen, ether (ETH) bakiyesine sahip bir varlıktır. Hesaplar kullanıcılar tarafından kontrol edilebilir veya akıllı sözleşme olarak dağıtılabilirler. ## Ön Koşullar {#prerequisites} -Bu sayfayı daha iyi anlamanız için öncelikle [Ethereum'a giriş](/developers/docs/intro-to-ethereum/) kısmını okumanızı öneriyoruz. +Bu sayfayı daha iyi anlamanıza yardımcı olmak için, öncelikle [Ethereum'a giriş](/developers/docs/intro-to-ethereum/) yazımızı okumanızı öneriyoruz. ## Hesap türleri {#types-of-account} Ethereum'da iki tür hesap bulunur: - Harici olarak sahiplenilmiş hesaplar (EOA) - özel anahtarı olan herhangi biri tarafından kontrol edilir -- Sözleşme hesabı - kod tarafından kontrol edilen, ağ içine yayılmış bir akıllı sözleşme. [Akıllı sözleşmeler](/developers/docs/smart-contracts/) hakkında daha fazla bilgi +- Sözleşme hesabı - kod tarafından kontrol edilen, ağ içine yayılmış bir akıllı sözleşme. [Akıllı sözleşmeler](/developers/docs/smart-contracts/) hakkında bilgi edinin İki hesap türü de şunları yapabilir: - ETH ve token alma, tutma ve gönderme - Dağıtılmış akıllı sözleşmelerle etkileşime girme -### Önemli farkları {#key-differences} +### Temel farklılıklar {#key-differences} **Harici olarak sahiplenilmiş** @@ -34,20 +34,21 @@ Ethereum'da iki tür hesap bulunur: **Sözleşme** - Ağ depolaması kullandığınız için sözleşme oluşturmanın bir ücreti vardır -- Yalnızca bir işlemin alınmasına yanıt olarak işlem gönderebilir +- Yalnızca bir işlemin alınmasına yanıt olarak mesaj gönderebilir - Harici bir hesaptan bir sözleşme hesabına yapılan işlemler, token'ları aktarmak ve hatta yeni bir sözleşme oluşturmak gibi birçok farklı eylemi gerçekleştirebilen kodları tetikleyebilir - Sözleşme hesaplarının özel anahtarları yoktur. Bunun yerine, akıllı sözleşmenin kodunun mantığı tarafından kontrol edilirler -## Bir hesabın incelemesi {#an-account-examined} +## Bir hesabın incelenmesi {#an-account-examined} Ethereum hesaplarının dört alanı vardır: -- `nonce` –harici bir hesaptan gönderilmiş ya da bir sözleşme hesabı tarafından yaratılmış sözleşmelerin sayısını belirten bir sayaç. Verilen tek seferlik sayı ile her bir hesap için sadece bir işlem yürütülebilir, bu imzalanmış işlemlerin tekrarlı şekilde yayınlandığı ve yürütüldüğü tekrar saldırılarına karşı koruma sağlar. +- `nonce` – Harici olarak sahiplenilmiş bir hesaptan gönderilen işlem sayısını veya bir sözleşme hesabı tarafından oluşturulan sözleşme sayısını gösteren bir sayaç. Verilen tek seferlik sayı ile her bir hesap için sadece bir işlem yürütülebilir, bu imzalanmış işlemlerin tekrarlı şekilde yayınlandığı ve yürütüldüğü tekrar saldırılarına karşı koruma sağlar. - `balance` – Bu adrese ait wei sayısı. Wei, ETH'nin bir birimidir ve ETH başına 1e+18 wei bulunur. -- `codeHash` – Bu hash değeri, Ethereum sanal makinesi (EVM) üzerindeki bir hesabın _kodunu_ temsil eder. Sözleşme hesaplarına, farklı işlemler gerçekleştirebilen kod parçacıkları programlanmıştır. Hesap bir mesaj çağrısı aldıysa bu EVM kodu çalıştırılır. Diğer hesap alanlarının aksine değiştirilemez. Bu türdeki tüm kod parçaları, daha sonra geri alınmak üzere durum veri tabanında karşılık gelen hash'leri altında bulunur. Bu hash değeri codeHash olarak bilinir. Harici olarak sahiplenilmiş hesaplar için codeHash alanı, boş bir dizenin hash değeridir. -- `storageRoot` - Bazen depolama hash'i olarak da bilinir. Hesabın depolama içeriğini kodlayan bir Merkle Patricia ağaç kök düğümünün 256 bit hash değeri, (256 bit tamsayı değerleri arasında bir eşleme), 256-bit tam sayı anahtarlarının 256-bit Keccak hash değerinden RLP-kodlanmış 256-bit tamsayı değerlerine bir eşleme olarak ağaç içerisine kodlanmıştır. Bu ağaç, bu hesabın depolama içeriğinin hash değerini kodlar ve varsayılan olarak boştur. +- `codeHash` – Bu hash, Ethereum sanal makinesindeki (EVM) bir hesabın _koduna_ atıfta bulunur. Sözleşme hesaplarına, farklı işlemler gerçekleştirebilen kod parçacıkları programlanmıştır. Hesap bir mesaj çağrısı aldıysa bu EVM kodu çalıştırılır. Diğer hesap alanlarının aksine değiştirilemez. Bu türdeki tüm kod parçaları, daha sonra geri alınmak üzere durum veri tabanında karşılık gelen hash'leri altında bulunur. Bu hash değeri codeHash olarak bilinir. Harici olarak sahiplenilmiş hesaplar için codeHash alanı, boş bir dizenin hash değeridir. +- `storageRoot` – Bazen depolama karması olarak da bilinir. Hesabın depolama içeriğini kodlayan bir [Merkle Patricia Trie](/developers/docs/data-structures-and-encoding/patricia-merkle-trie/) kök düğümünün 256 bitlik karmasıdır. Bu depolama içeriği (256 bitlik tamsayı değerleri arasındaki bir eşleme), 256 bitlik tamsayı anahtarlarının Keccak 256 bitlik karmasından RLP ile kodlanmış 256 bitlik tamsayı değerlerine bir eşleme olarak trie'ye kodlanır. Bu ağaç, bu hesabın depolama içeriğinin hash değerini kodlar ve varsayılan olarak boştur. -![Bir hesabın oluşumunu gösteren diyagram](./accounts.png) _Diyagram [Ethereum EVM resmediciden](https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf) uyarlanmıştır_ +![Bir hesabın yapısını gösteren bir şema](./accounts.png) +_Şema, [Ethereum EVM illustrated](https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf) kaynağından uyarlanmıştır_ ## Harici olarak sahiplenilmiş hesaplar ve anahtar çiftleri {#externally-owned-accounts-and-key-pairs} @@ -67,30 +68,30 @@ Bir özel anahtar, 64 hex karakterinden oluşur ve şifrelenebilir. `fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd036415f` -Açık anahtar, [Eliptik Eğri Dijital İmza Algoritması](https://wikipedia.org/wiki/Elliptic_Curve_Digital_Signature_Algorithm) kullanılarak özel anahtar ile oluşturulur. Açık anahtarın Keccak-256 hash değerinin son 20 baytını alarak ve başına `0x` ekleyerek hesabınız için genel bir adres alırsınız. +Açık anahtar, özel anahtardan [Eliptik Eğri Dijital İmza Algoritması](https://wikipedia.org/wiki/Elliptic_Curve_Digital_Signature_Algorithm) kullanılarak üretilir. Açık anahtarın Keccak-256 karmasının son 20 baytını alıp başına `0x` ekleyerek hesabınız için bir açık adres elde edersiniz. -Bu, Dışarıdan sahip olunan hesabın (EOA) 42 karakterlik bir adrese sahip olduğu anlamına gelir (40 onaltılık karaktere ve `0x` önekine sahip 20 baytlık segment). +Bu, bir Harici Olarak Sahiplenilmiş Hesabın (EOA) 42 karakterli bir adrese sahip olduğu anlamına gelir (40 onaltılık karakterden ve `0x` önekinden oluşan 20 baytlık bölüm). Örnek: `0x5e97870f263700f46aa00d967821199b9bc5a120` -Aşağıdaki örnek bir [Clef](https://geth.ethereum.org/docs/tools/clef/introduction) imzalama aracının yeni bir hesap oluşturmak için nasıl kullanılacağını gösteriyor. Clef bir Ethereum İstemcisi ile donatılmış bir hesap yönetimi ve imzalama aracıdır,[Geth](https://geth.ethereum.org). `Clef newaccount` komutu yeni bir anahtar çifti oluşturur ve bunları şifrelenmiş olan anahtar deposuna yerleştirir. +Aşağıdaki örnek, yeni bir hesap oluşturmak için [Clef](https://geth.ethereum.org/docs/tools/clef/introduction) adlı bir imzalama aracının nasıl kullanılacağını gösterir. Clef, Ethereum istemcisi [Geth](https://geth.ethereum.org) ile birlikte gelen bir hesap yönetimi ve imzalama aracıdır. `clef newaccount` komutu yeni bir anahtar çifti oluşturur ve bunları şifrelenmiş bir anahtar depolama dosyasına kaydeder. ``` -> clef newaccount --keystore +> clef newaccount --keystore -Please enter a password for the new account to be created: -> +Lütfen oluşturulacak yeni hesap için bir parola girin: +> ------------ -INFO [10-28|16:19:09.156] Your new key was generated address=0x5e97870f263700f46aa00d967821199b9bc5a120 -WARN [10-28|16:19:09.306] Please backup your key file path=/home/user/go-ethereum/data/keystore/UTC--2022-10-28T15-19-08.000825927Z--5e97870f263700f46aa00d967821199b9bc5a120 -WARN [10-28|16:19:09.306] Please remember your password! -Generated account 0x5e97870f263700f46aa00d967821199b9bc5a120 +BİLGİ [10-28|16:19:09.156] Yeni anahtarınız oluşturuldu adres=0x5e97870f263700f46aa00d967821199b9bc5a120 +UYARI [10-28|16:19:09.306] Lütfen anahtar dosyanızı yedekleyin yol=/home/user/go-ethereum/data/keystore/UTC--2022-10-28T15-19-08.000825927Z--5e97870f263700f46aa00d967821199b9bc5a120 +UYARI [10-28|16:19:09.306] Lütfen parolanızı unutmayın! +Oluşturulan hesap 0x5e97870f263700f46aa00d967821199b9bc5a120 ``` -[Geth dokümanları](https://geth.ethereum.org/docs) +[Geth belgeleri](https://geth.ethereum.org/docs) Özel anahtarınızdan yeni açık anahtarlar türetebilirsiniz, ancak açık anahtarlardan bir özel anahtar türetemezsiniz. Özel anahtarlarınızı güvende ve adından da anlaşılacağı gibi **ÖZEL** tutmanız hayati önem taşır. @@ -110,7 +111,7 @@ Sözleşme adresi genellikle Ethereum Blok Zincirine bir sözleşme dağıtıld Ethereumda bir anahtar türü daha var ve ilk kez Ethereum iş ispatından mutabakata dayalı olan hisse ispatına geçtiğinde tanıtıldı. Bunlar doğrulayıcıları tanımlamak için kullanılan BLS anahtarları. Bu anahtarlar ağın mutabakata varabilmesi için gereken bant genişliğini kısmak için etkili bir şekilde birleşebilirler. Bu anahtar toplama süreci olmazsa bir doğrulayıcıya düşen minimum hisse çok daha fazla olurdu. -[Doğrulayıcı anahtarlarıyla ilgili daha fazlası](/developers/docs/consensus-mechanisms/pos/keys/). +[Doğrulayıcı anahtarları hakkında daha fazlası](/developers/docs/consensus-mechanisms/pos/keys/). ## Cüzdanlar hakkında bir not {#a-note-on-wallets} @@ -124,13 +125,13 @@ Austin'in karma fonksiyonlarını ve anahtar çiftlerini açıklamasını izleyi -## Daha fazla okuma {#further-reading} +## Daha fazla kaynak {#further-reading} -- [Ethereum hesaplarını anlamak](https://info.etherscan.com/understanding-ethereum-accounts/) - etherscan +- [Ethereum Hesaplarını Anlamak](https://info.etherscan.com/understanding-ethereum-accounts/) - etherscan -_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!_ -## İlgili konular {#related-topics} +## Alakalı başlıklar {#related-topics} - [Akıllı sözleşmeler](/developers/docs/smart-contracts/) - [İşlemler](/developers/docs/transactions/) diff --git a/public/content/translations/tr/developers/docs/apis/backend/index.md b/public/content/translations/tr/developers/docs/apis/backend/index.md index 574e3a46e6c..2b3c9deca41 100644 --- a/public/content/translations/tr/developers/docs/apis/backend/index.md +++ b/public/content/translations/tr/developers/docs/apis/backend/index.md @@ -1,18 +1,18 @@ --- -title: Arka uç API'si kütüphaneleri -description: Uygulamanızdan blok zinciri ile etkileşime girmenizi sağlayan Ethereum istemci API'lerine giriş. +title: "Arka uç API'si kütüphaneleri" +description: "Uygulamanızdan blok zinciri ile etkileşime girmenizi sağlayan Ethereum istemci API'lerine giriş." lang: tr --- Bir yazılım uygulamasının Ethereum blok zinciri ile etkileşime girmesi (yani blok zinciri verilerini okuması ve/veya ağa işlem göndermesi) için bir Ethereum düğümüne bağlanması gerekir. -Bu amaç doğrultusunda her Ethereum istemcisi [JSON-RPC](/developers/docs/apis/json-rpc/) spesifikasyonunu uygular, böylece uygulamaların güvenebileceği tek tip bir [yöntem](/developers/docs/apis/json-rpc/#json-rpc-methods) kümesi mevcut olur. +Bu amaç doğrultusunda her Ethereum istemcisi [JSON-RPC](/developers/docs/apis/json-rpc/) spesifikasyonunu uygular, böylece uygulamaların güvenebileceği tek tip bir [yöntemler](/developers/docs/apis/json-rpc/#json-rpc-methods) kümesi mevcut olur. Bir Ethereum düğümüne bağlanmak için belirli bir programlama dili kullanmak istiyorsanız, ekosistem içinde bunu çok daha kolay hâle getiren birkaç kolaylık kütüphanesi vardır. Bu kütüphanelerle geliştiriciler, Ethereum ile etkileşime giren JSON RPC taleplerini (arka planda) başlatmak için sezgisel ve tek satırlı yöntemler yazabilirler. ## Ön Koşullar {#prerequisites} -[Ethereum yığınını](/developers/docs/ethereum-stack/) ve [Ethereum istemcilerini](/developers/docs/nodes-and-clients/) anlamak yardımcı olabilir. +[Ethereum yığınını](/developers/docs/ethereum-stack/) ve [Ethereum istemcilerini](/developers/docs/nodes-and-clients/) anlamak faydalı olabilir. ## Neden bir kütüphane kullanılır? {#why-use-a-library} @@ -20,31 +20,31 @@ Bu kütüphaneler, bir Ethereum düğümü ile doğrudan etkileşim kurmanın ka ## Mevcut kütüphaneler {#available-libraries} -### Altyapı ve düğüm servisleri {#infrastructure-and-node-services} +### Altyapı ve düğüm hizmetleri {#infrastructure-and-node-services} **Alchemy -** **_Ethereum Geliştirme Platformu._** - [alchemy.com](https://www.alchemy.com/) -- [Belgeler](https://docs.alchemy.com/) +- [Dökümanlar](https://www.alchemy.com/docs/) - [GitHub](https://github.com/alchemyplatform) - [Discord](https://discord.com/invite/alchemyplatform) -**Düğüm ile İlgili Her Şey -** **_Hizmet olarak Düğüm._** +**All That Node -** **_Hizmet Olarak Düğüm._** - [All That Node.com](https://www.allthatnode.com/) -- [Belgeler](https://docs.allthatnode.com) +- [Dökümanlar](https://docs.allthatnode.com) - [Discord](https://discord.gg/GmcdVEUbJM) -**Bware Labs'den Blast -** **_Ethereum Ana Ağı ve Test Ağları için Merkeziyetsiz API'lar._** +**Blast by Bware Labs -** **_Ethereum Ana Ağı ve Test Ağları için Merkeziyetsiz API'lar._** - [blastapi.io](https://blastapi.io/) -- [Belgeler](https://docs.blastapi.io) -- [Discord](https://discord.gg/bwarelabs) +- [Dökümanlar](https://docs.blastapi.io) +- [Discord](https://discord.gg/SaRqmRUjjQ) -**BlockPi -** **_Daha verimli ve hızlı RPC servisleri sağlamak_** +**BlockPi -** **_Daha verimli ve hızlı RPC hizmetleri_** - [blockpi.io](https://blockpi.io/) -- [Belgeler](https://docs.blockpi.io/) +- [Dökümanlar](https://docs.blockpi.io/) - [GitHub](https://github.com/BlockPILabs) - [Discord](https://discord.com/invite/xTvGVrGVZv) @@ -53,46 +53,51 @@ Bu kütüphaneler, bir Ethereum düğümü ile doğrudan etkileşim kurmanın ka - [cloudflare-eth.com](https://www.cloudflare.com/application-services/products/web3/) **Etherscan - Blok Kâşifi ve İşlem API'leri** -- [Belgeler](https://docs.etherscan.io/) -**GetBlock-** **_Web3 geliştirme için servis olarak blok zincir_** +- [Dökümanlar](https://docs.etherscan.io/) + +**Blockscout - Açık Kaynaklı Blok Arayıcısı** + +- [Dökümanlar](https://docs.blockscout.com/) + +**GetBlock -** **_Web3 geliştirmesi için Hizmet Olarak Blok Zinciri_** - [GetBlock.io](https://getblock.io/) -- [Belgeler](https://getblock.io/docs/) +- [Dökümanlar](https://docs.getblock.io/) -**Infura -** **_Hizmet olarak Ethereum API._** +**Infura -** **_Hizmet olarak Ethereum API'ı._** - [infura.io](https://infura.io) -- [Dokümanlar](https://docs.infura.io/api) +- [Dökümanlar](https://docs.infura.io/api) - [GitHub](https://github.com/INFURA) -**Node RPC - _Uygun maliyetli EVM JSON-RPC sağlayıcı_** +**Node RPC - _Uygun maliyetli EVM JSON-RPC sağlayıcısı_** - [noderpc.xyz](https://www.noderpc.xyz/) -- [Belgeler](https://docs.noderpc.xyz/node-rpc) +- [Dökümanlar](https://docs.noderpc.xyz/node-rpc) **NOWNodes - _Tam Düğümler ve Blok Arayıcıları._** - [NOWNodes.io](https://nownodes.io/) -- [Dokümanlar](https://documenter.getpostman.com/view/13630829/TVmFkLwy#intro) +- [Dökümanlar](https://nownodes.gitbook.io/documentation) -**QuickNode -** **_Bir Hizmet Olarak Blok Zincir Altyapısı._** +**QuickNode -** **_Hizmet Olarak Blok Zinciri Altyapısı._** - [quicknode.com](https://quicknode.com) -- [Belgeler](https://www.quicknode.com/docs/welcome) +- [Dökümanlar](https://www.quicknode.com/docs/welcome) - [Discord](https://discord.gg/quicknode) -**Rivet -** **_Ethereum ve açık kaynaklı yazılım tarafından desteklenen bir hizmet olarak Ethereum Classic API'ları._** +**Rivet -** **_Açık kaynaklı yazılımla desteklenen, hizmet olarak Ethereum ve Ethereum Classic API'ları._** - [rivet.cloud](https://rivet.cloud) -- [Belgeler](https://rivet.cloud/docs/) +- [Dökümanlar](https://rivet.cloud/docs/) - [GitHub](https://github.com/openrelayxyz/ethercattle-deployment) -**Zmok -** **_JSON-RPC/WebSocket API olarak hız odaklı Ethereum düğümleri._** +**Zmok -** **_JSON-RPC/WebSockets API'ı olarak hız odaklı Ethereum düğümleri._** - [zmok.io](https://zmok.io/) - [GitHub](https://github.com/zmok-io) -- [Belgeler](https://docs.zmok.io/) +- [Dökümanlar](https://docs.zmok.io/) - [Discord](https://discord.gg/fAHeh3ka6s) ### Geliştirme araçları {#development-tools} @@ -103,105 +108,104 @@ Bu kütüphaneler, bir Ethereum düğümü ile doğrudan etkileşim kurmanın ka - [Örnekler](https://github.com/Kr1ptal/ethers-kt/tree/master/examples) - [Discord](https://discord.gg/rx35NzQGSb) -**Nethereum ** **_ Blok zincir için açık kaynaklı bir .NET entegrasyon kütüphanesi._** +**Nethereum -** **_Blok zinciri için açık kaynaklı bir .NET entegrasyon kütüphanesi._** - [GitHub](https://github.com/Nethereum/Nethereum) -- [Belgeler](http://docs.nethereum.com/en/latest/) +- [Dökümanlar](http://docs.nethereum.com/en/latest/) - [Discord](https://discord.com/invite/jQPrR58FxX) -**Python Tooling -** **_Python üzerinden Ethereum etkileşimi için çeşitli kütüphaneler._** +**Python Araçları -** **_Python aracılığıyla Ethereum etkileşimi için çeşitli kütüphaneler._** -- [py.ethereum.org](https://python.ethereum.org/) +- [py.ethereum.org](https://snakecharmers.ethereum.org/) - [web3.py GitHub](https://github.com/ethereum/web3.py) -- [web3.py Sohbeti](https://gitter.im/ethereum/web3.py) +- [web3.py Sohbet](https://gitter.im/ethereum/web3.py) -**Tatum -** **_üstün blok zincir geliştirme platformu._** +**Tatum -** **_Üst düzey blok zinciri geliştirme platformu._** - [Tatum](https://tatum.io/) - [GitHub](https://github.com/tatumio/) -- [Belgeler](https://docs.tatum.io/) +- [Dökümanlar](https://docs.tatum.io/) - [Discord](https://discord.gg/EDmW3kjTC9) **web3j -** **_Ethereum için bir Java/Android/Kotlin/Scala entegrasyon kütüphanesi._** - [GitHub](https://github.com/web3j/web3j) -- [Belgeler](https://docs.web3j.io/) +- [Dökümanlar](https://docs.web3j.io/) - [Gitter](https://gitter.im/web3j/web3j) -### Blokzincir servisleri {#blockchain-services} +### Blok zinciri hizmetleri {#blockchain-services} **BlockCypher -** **_Ethereum Web API'leri._** - [blockcypher.com](https://www.blockcypher.com/) -- [Dokümanlar](https://www.blockcypher.com/dev/ethereum/) +- [Dökümanlar](https://www.blockcypher.com/dev/ethereum/) **Chainbase -** **_Ethereum için hepsi bir arada web3 veri altyapısı._** - [chainbase.com](https://chainbase.com/) -- [Dokümanlar](https://docs.chainbase.com/) +- [Dökümanlar](https://docs.chainbase.com/) - [Discord](https://discord.gg/Wx6qpqz4AF) -**Chainstack -** **_Esnek ve özel Ethereum düğüm servisleri._** +**Chainstack -** **_Hizmet olarak esnek ve özel Ethereum düğümleri._** - [chainstack.com](https://chainstack.com) -- [Dokümanlar](https://docs.chainbase.com/docs) +- [Dökümanlar](https://docs.chainstack.com/) - [Ethereum API referansı](https://docs.chainstack.com/reference/ethereum-getting-started) -**Coinbase Bulut Düğümü -** **_Blok Zincir Altyapısı API'sı._** +**Coinbase Cloud Node -** **_Blok Zinciri Altyapı API'ı._** -- [Coinbase Bulut Düğümü](https://www.coinbase.com/cloud) -- [Dokümanlar](https://docs.cloud.coinbase.com/) +- [Coinbase Cloud Node](https://www.coinbase.com/developer-platform) +- [Dökümanlar](https://docs.cdp.coinbase.com/) **DataHub by Figment -** **_Ethereum Ana Ağı ve test ağları ile Web3 API hizmetleri._** - [DataHub](https://www.figment.io/) -- [Dokümanlar](https://docs.figment.io/) +- [Dökümanlar](https://docs.figment.io/) -**Moralis -** **_Kuruluş Seviyesi EVM API Sağlayıcısı._** +**Moralis -** **_Kurumsal Düzeyde EVM API Sağlayıcısı._** - [moralis.io](https://moralis.io) -- [Dokümanlar](https://docs.moralis.io/) +- [Dökümanlar](https://docs.moralis.io/) - [GitHub](https://github.com/MoralisWeb3) - [Discord](https://moralis.io/joindiscord/) - [Forum](https://forum.moralis.io/) -**NFTPort -** **_Ethereum Verisi ve Basım API'ları._** +**NFTPort -** **_Ethereum Veri ve Basım API'leri._** - [nftport.xyz](https://www.nftport.xyz/) -- [Dokümanlar](https://docs.nftport.xyz/) +- [Dökümanlar](https://docs.nftport.xyz/) - [GitHub](https://github.com/nftport/) - [Discord](https://discord.com/invite/K8nNrEgqhE) -**Tokenview -** **_Genel Multi Kripto Blok Zincir API'lar Platformu_** +**Tokenview -** **_Genel Çoklu Kripto Blok Zinciri API Platformu._** - [services.tokenview.io](https://services.tokenview.io/) -- [Dokümanlar](https://services.tokenview.io/docs?type=api) +- [Dökümanlar](https://services.tokenview.io/docs?type=api) - [GitHub](https://github.com/Tokenview) -**Watchdata -** **_Ethereum blok zincirine basit ve güvenilir API erişimi sağlayın._** +**Watchdata -** **_Ethereum blok zincirine basit ve güvenilir API erişimi sağlar._** - [Watchdata](https://watchdata.io/) -- [Dokümanlar](https://docs.watchdata.io/) +- [Dökümanlar](https://docs.watchdata.io/) - [Discord](https://discord.com/invite/TZRJbZ6bdn) -**Covalent -** **_200+ Zincir için Zenginleştirilmiş Blokzincir API'leri._** +**Covalent -** **_200'den fazla Zincir için Zenginleştirilmiş blok zinciri API'leri._** - [covalenthq.com](https://www.covalenthq.com/) -- [Dokümanlar](https://www.covalenthq.com/docs/api/) +- [Dökümanlar](https://www.covalenthq.com/docs/api/) - [GitHub](https://github.com/covalenthq) - [Discord](https://www.covalenthq.com/discord/) +## Daha fazla kaynak {#further-reading} -## Daha fazla bilgi {#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!_ -## İlgili konular {#related-topics} +## Alakalı başlıklar {#related-topics} -- [ Düğümler ve İstemciler](/developers/docs/nodes-and-clients/) -- [Geliştirici çerçeveleri](/developers/docs/frameworks/) +- [Düğümler ve istemciler](/developers/docs/nodes-and-clients/) +- [Geliştirme çerçeveleri](/developers/docs/frameworks/) ## İlgili öğreticiler {#related-tutorials} -- [JavaScript'te Ethereum blok zincirini kullanmak için Web3js'yi kurun](/developers/tutorials/set-up-web3js-to-use-ethereum-in-javascript/) _– Projenizde web3.js kurulumu için talimatlar._ -- [JavaScript'ten akıllı sözleşme çağırma](/developers/tutorials/calling-a-smart-contract-from-javascript/) _– DAI belirtecini kullanarak, JavaScript kullanan sözleşme işlevini nasıl çağıracağınızı görün._ +- [JavaScript'te Ethereum blok zincirini kullanmak için Web3js'yi Kurma](/developers/tutorials/set-up-web3js-to-use-ethereum-in-javascript/) _– Projenizde web3.js kurulumuna yönelik talimatlar._ +- [JavaScript'ten Akıllı Sözleşme Çağırma](/developers/tutorials/calling-a-smart-contract-from-javascript/) _– DAI jetonunu kullanarak JavaScript ile sözleşme fonksiyonlarının nasıl çağrılacağını görün._ diff --git a/public/content/translations/tr/developers/docs/apis/javascript/index.md b/public/content/translations/tr/developers/docs/apis/javascript/index.md index 5b31da0eeaa..49d69ae696a 100644 --- a/public/content/translations/tr/developers/docs/apis/javascript/index.md +++ b/public/content/translations/tr/developers/docs/apis/javascript/index.md @@ -1,42 +1,44 @@ --- -title: JavaScript API kütüphaneleri -description: Uygulamanızdan blok zinciri ile etkileşime girmenizi sağlayan JavaScript istemci kütüphanelerine giriş. +title: "JavaScript API kütüphaneleri" +description: "Uygulamanızdan blok zinciri ile etkileşime girmenizi sağlayan JavaScript istemci kütüphanelerine giriş." lang: tr --- -Bir web uygulamasının Ethereum blok zinciri ile etkileşime girebilmesi için (yani blok zinciri verilerini okuması ve/veya ağa işlem gönderebilmesi) bir Ethereum düğümüne bağlanması gerekir. +Bir web uygulamasının Ethereum blokzinciri ile etkileşime girebilmesi (ör. blokzincir verilerini okumak ve/veya ağa işlem göndermek) için bir Ethereum düğümüne bağlanması gerekir. -Bu amaçla, her Ethereum istemcisi [JSON-RPC](/developers/docs/apis/json-rpc/) özelliklerini uygular, böylece uygulamaların güvenebileceği tek tip [metotlar](/developers/docs/apis/json-rpc/#json-rpc-methods) olur. +Bu amaçla her Ethereum istemcisi [JSON-RPC](/developers/docs/apis/json-rpc/) spesifikasyonunu uygular, böylece uygulamaların güvenebileceği tek tip bir [yöntemler](/developers/docs/apis/json-rpc/#json-rpc-methods) seti bulunur. Eğer bir Ethereum düğümüne bağlanmak için JavaScript kullanmak istiyorsanız, düz JavaScript'i kullanmak mümkündür ancak ekosistem içinde bunu çok daha kolay hâle getiren birkaç kolaylık kütüphanesi bulunur. Bu kütüphanelerle geliştiriciler, Ethereum ile etkileşime giren JSON RPC taleplerini (arka planda) başlatmak için sezgisel ve tek satırlı yöntemler yazabilirler. -Lütfen "[Birleşim](/roadmap/merge/) olayından bu yana, bir düğümü çalıştırmak için iki bağlantılı Ethereum yazılımının parçası olan bir yürütüm istemcisi ve bir fikir birliği istemcisi gerektiğini unutmayın. Lütfen düğümünüzün hem bir yürütüm hem de fikir birliği istemcisini içerdiğinden emin olun. Eğer düğümünüz yerel makinanızda değilse (ör. düğümünüz bir AWS örneğinde çalışıyorsa) bu eğitimdeki IP adreslerini buna göre güncelleyin. Daha fazla bilgi için lütfen [bir düğüm çalıştırma](/developers/docs/nodes-and-clients/run-a-node/) sayfamıza bakın. +[Birleşim](/roadmap/merge/)'den bu yana bir düğümü çalıştırmak için birbirine bağlı iki Ethereum yazılımı parçasının (bir yürütüm istemcisi ve bir mutabakat istemcisi) gerektiğini lütfen unutmayın. Lütfen düğümünüzün hem bir yürütüm hem de fikir birliği istemcisini içerdiğinden emin olun. Düğümünüz yerel makinenizde değilse (ör. düğümünüz bir AWS örneğinde çalışıyorsa), öğreticideki IP adreslerini buna göre güncelleyin. Daha fazla bilgi için lütfen [düğüm çalıştırma](/developers/docs/nodes-and-clients/run-a-node/) sayfamıza bakın. -## Ön koşullar {#prerequisites} +## Ön Koşullar {#prerequisites} -JavaScript'i anlamanın yanı sıra, [Ethereum Yığınını](/developers/docs/ethereum-stack/) ve [Ethereum istemcilerini](/developers/docs/nodes-and-clients/) de anlamak faydalı olabilir. +JavaScript'i anlamanın yanı sıra [Ethereum yığınını](/developers/docs/ethereum-stack/) ve [Ethereum istemcilerini](/developers/docs/nodes-and-clients/) anlamak da faydalı olabilir. -## Neden bir kitaplık kullanılır? {#why-use-a-library} +## Neden bir kütüphane kullanılır? {#why-use-a-library} Bu kütüphaneler, bir Ethereum düğümü ile doğrudan etkileşim kurmanın karmaşıklığının çoğunu ortadan kaldırır. Ayrıca, bir geliştirici olarak Ethereum istemcilerinin karmaşıklıkları ile daha az zaman harcayarak ve uygulamanızın benzersiz işlevselliğine daha fazla zaman ayırabilmeniz için yardımcı işlevler (örneğin, ETH'yi Gwei'ye dönüştürmek) sağlarlar. ## Kütüphane özellikleri {#library-features} -### Ethereum düğümlerine bağlanın {#connect-to-ethereum-nodes} +### Ethereum düğümlerine bağlanma {#connect-to-ethereum-nodes} Bu kütüphaneler, sağlayıcıları kullanarak JSON-RPC, INFURA, Etherscan, Alchemy veya MetaMask üzerinden Ethereum'a bağlanmanıza ve Ethereum verilerini okumanıza olanak tanır. +> **Uyarı:** Web3.js 4 Mart 2025'te arşivlendi. [Duyuruyu okuyun](https://blog.chainsafe.io/web3-js-sunset/). Yeni projeler için [ethers.js](https://ethers.org) veya [viem](https://viem.sh) gibi alternatif kütüphaneleri kullanmayı düşünün. + **Ethers örneği** ```js -// Bir BrowserProvider, MetaMask'ın her sayfaya window.ethereum -// olarak enjekte ettiği standart bir Web3 sağlayıcısını sarar -// sabit sağlayıcı = yeni ethers.BrowserProvider(window.ethereum) - -// MetaMask eklentisi ayrıca işlemlerin imzalanmasına, ether göndermeye ve -// blokzincirdeki durumu değiştirmek için ödeme yapmaya olanak tanır. -// Bunun için hesap imzalayana ihtiyacımız var... -sabit imzalayan = sağlayıcı.getSigner() +// Bir BrowserProvider, MetaMask'ın her sayfaya window.ethereum olarak eklediği +// standart bir Web3 sağlayıcısını sarmalar +const provider = new ethers.BrowserProvider(window.ethereum) + +// MetaMask eklentisi ayrıca ether göndermek için işlemleri imzalamaya +// ve blokzincirdeki durumu değiştirmek için ödeme yapmaya olanak tanır. +// Bunun için hesap imzalayıcısına ihtiyacımız var... +const signer = provider.getSigner() ``` **Web3js örneği** @@ -68,31 +70,31 @@ Kurulduktan sonra blok zinciri aşağıdakiler için sorgulayabileceksiniz: - gaz tahminleri - akıllı sözleşme olayları - ağ kimliği -- ve daha fazlası... +- ve dahası... ### Cüzdan işlevselliği {#wallet-functionality} -Bu kitaplıklar size cüzdan oluşturma, anahtarları yönetme ve işlemleri imzalama işlevleri sunar. +Bu kütüphaneler size cüzdan oluşturma, anahtarları yönetme ve işlemleri imzalama işlevselliği sunar. -İşte Ether'lerden bir örnek +İşte Ethers'dan bir örnek ```js -// Bir anımsatıcıdan bir cüzdan örneği oluşturun... +// Bir anımsatıcı ifadeden bir cüzdan örneği oluşturun... mnemonic = "announce room limb pattern dry unit scale effort smooth jazz weasel alcohol" walletMnemonic = Wallet.fromPhrase(mnemonic) -// ...ya da özel anahtardan +// ...veya özel bir anahtardan walletPrivateKey = new Wallet(walletMnemonic.privateKey) walletMnemonic.address === walletPrivateKey.address // true -// Signer API'si uyarınca bir Promise olarak adres +// İmzalayıcı API'sine göre bir Promise olarak adres walletMnemonic.getAddress() // { Promise: '0x71CB05EE1b1F506fF321Da3dac38f25c0c9ce6E1' } -// Bir cüzdan adresi de senkronize olarak müsaittir +// Bir Cüzdan adresi eşzamanlı olarak da kullanılabilir walletMnemonic.address // '0x71CB05EE1b1F506fF321Da3dac38f25c0c9ce6E1' @@ -102,7 +104,7 @@ walletMnemonic.privateKey walletMnemonic.publicKey // '0x04b9e72dfd423bcf95b3801ac93f4392be5ff22143f9980eb78b3a860c4843bfd04829ae61cdba4b3b1978ac5fc64f5cc2f4350e35a108a9c9a92a81200a60cd64' -// Cüzdan mnemonic'i +// Cüzdan anımsatıcı ifadesi walletMnemonic.mnemonic // { // locale: 'en', @@ -110,12 +112,12 @@ walletMnemonic.mnemonic // phrase: 'announce room limb pattern dry unit scale effort smooth jazz weasel alcohol' // } -// Not: Özel anahtarla oluşturulan bir cüzdan -// mnemonic'e sahip değildir (türetme bunu engeller) +// Not: Özel bir anahtarla oluşturulan bir cüzdanın anımsatıcı ifadesi yoktur +// (türetme bunu engeller) walletPrivateKey.mnemonic // null -// Mesaj imzalama +// Bir mesajı imzalama walletMnemonic.signMessage("Hello World") // { Promise: '0x14280e5885a19f60e536de50097e96e3738c7acae4e9e62d67272d794b8127d31c03d9cd59781d4ee31fb4e1b893bd9b020ec67dfa65cfb51e2bdadbb1de26d91c' } @@ -124,12 +126,12 @@ tx = { value: utils.parseEther("1.0"), } -// İşlem imzalama +// Bir işlemi imzalama walletMnemonic.signTransaction(tx) // { Promise: '0xf865808080948ba1f109551bd432803012645ac136ddd64dba72880de0b6b3a7640000801ca0918e294306d177ab7bd664f5e141436563854ebe0a3e523b9690b4922bbb52b8a01181612cec9c431c4257a79b8c9f0c980a2c49bb5a0e6ac52949163eeb565dfc' } -// Bağlanma metodu yeni bir örneği -// sağlayıcıya bağlı olan cüzdana gönderir +// connect metodu, bir sağlayıcıya bağlı olan +// Cüzdan'ın yeni bir örneğini döndürür wallet = walletMnemonic.connect(provider) // Ağı sorgulama @@ -142,16 +144,16 @@ wallet.getTransactionCount() wallet.sendTransaction(tx) ``` -[Belgelerin tamamını okuyun](https://docs.ethers.io/v5/api/signer/#Wallet) +[Tüm belgeleri okuyun](https://docs.ethers.io/v5/api/signer/#Wallet) -Kurulduktan sonra şunları yapabileceksiniz: +Kurulumdan sonra şunları yapabileceksiniz: - hesap oluşturabilirsiniz - işlem gönderebilirsiniz - işlemleri imzalayabilirsiniz -- ve daha fazlası... +- ve dahası... -### Akıllı sözleşme fonksiyonlarıyla etkileşim kurmak {#interact-with-smart-contract-functions} +### Akıllı sözleşme işlevleriyle etkileşim kurma {#interact-with-smart-contract-functions} Javascript istemci kütüphaneleri, derlenmiş bir sözleşmenin Uygulama İkili Arayüzünü (ABI) okuyarak uygulamanızın akıllı sözleşme fonksiyonlarını çağırmasına olanak tanır. @@ -164,7 +166,7 @@ contract Test { uint a; address d = 0x12345678901234567890123456789012; - function Test(uint testInt) { a = testInt;} + constructor(uint testInt) { a = testInt;} event Event(uint indexed b, bytes32 c); @@ -217,7 +219,7 @@ Bu, şunları yapabileceğiniz anlamına gelir: Yardımcı fonksiyonlar, Ethereum ile oluşturmayı biraz daha kolaylaştıran kullanışlı kısayollar sunar. -ETH değerleri varsayılan olarak Wei cinsindendir. 1 ETH = 1.000.000.000.000.000.000 WEI – bu, çok sayıda sayıyla uğraştığınız anlamına gelir! `web3.utils.toWei`, ether'ı sizin için Wei'ye dönüştürür. +ETH değerleri varsayılan olarak Wei cinsindendir. 1 ETH = 1.000.000.000.000.000.000 WEI – bu, çok sayıda sayıyla uğraştığınız anlamına gelir! `web3.utils.toWei` sizin için ether'i Wei'ye dönüştürür. Ve ethers cinsinden şöyle görünür: @@ -233,58 +235,55 @@ ethers.utils.formatEther(balance) ``` - [Web3js yardımcı fonksiyonları](https://docs.web3js.org/api/web3-utils) -- [Ethers yardımcı fonksiyonları](https://docs.ethers.io/v5/api/utils/) +- [Ethers yardımcı fonksiyonları](https://docs.ethers.org/v6/api/utils/) ## Mevcut kütüphaneler {#available-libraries} -**Web3.js -** **_Ethereum JavaScript API._** +**Web3.js -** **_Ethereum JavaScript API'si._** -- [Belgeler](https://docs.web3js.org/) -- [GitHub](https://github.com/ethereum/web3.js/) +- [Belgeler](https://docs.web3js.org) +- [GitHub](https://github.com/ethereum/web3.js) -**Ethers.js -** **_JavaScript ve TypeScript'te eksiksiz Ethereum cüzdan uygulamaları ve araçları._** +**Ethers.js -** **_JavaScript ve TypeScript'te eksiksiz Ethereum cüzdanı uygulaması ve yardımcı programları._** -- [Belgeler](https://docs.ethers.io/) -- [GitHub](https://github.com/ethers-io/ethers.js/) +- [Ethers.js ana sayfası](https://ethers.org/) +- [Belgeler](https://docs.ethers.io) +- [GitHub](https://github.com/ethers-io/ethers.js) -**The Graph -** **_Ethereum ve IPFS verilerini endekslemek ve GraphQL kullanarak sorgulamak için bir protokol._** +**The Graph -** **_Ethereum ve IPFS verilerini dizine eklemek ve GraphQL kullanarak sorgulamak için bir protokol._** -- [The Graph](https://thegraph.com/) -- [Graph Gezgini](https://thegraph.com/explorer/) -- [Belgeler](https://thegraph.com/docs/) -- [GitHub](https://github.com/graphprotocol/) +- [The Graph](https://thegraph.com) +- [Graph Gezgini](https://thegraph.com/explorer) +- [Belgeler](https://thegraph.com/docs) +- [GitHub](https://github.com/graphprotocol) - [Discord](https://thegraph.com/discord) -**light.js -** **_Hafif istemciler için yüksek seviyede duyarlı JS kütüphanesidir._** - -- [GitHub](https://github.com/openethereum/js-libs/tree/master/packages/light.js) - -**Alchemyweb3 -** **_Otomatik yeniden denemeler ve geliştirilmiş API'lar ile Web3.js odaklı paketleyici._** +**Alchemy SDK -** **_Gelişmiş API'lere sahip Ethers.js için bir sarmalayıcı._** -- [Belgeler](https://docs.alchemy.com/reference/api-overview) -- [GitHub](https://github.com/alchemyplatform/alchemy-web3) +- [Belgeler](https://www.alchemy.com/docs) +- [GitHub](https://github.com/alchemyplatform/alchemy-sdk-js) -**Alchemy NFT API -** **_Sahiplik, meta veri özellikleri ve daha fazlası dahil olmak üzere NFT verilerini almak için API._** +**viem -** **_Ethereum için TypeScript Arayüzü._** -- [Belgeler](https://docs.alchemy.com/alchemy/enhanced-apis/nft-api) -- [GitHub](https://github.com/alchemyplatform/alchemy-web3) +- [Belgeler](https://viem.sh) +- [GitHub](https://github.com/wagmi-dev/viem) -**viem -** **_Ethereum için TypeScript Arayüzü_** +**Drift -** **_Dahili önbelleğe alma, kancalar ve test taklitleri içeren TypeScript meta kütüphanesi._** -- [Dokümanlar](https://viem.sh) -- [GitHub](https://github.com/wagmi-dev/viem) +- [Belgeler](https://ryangoree.github.io/drift/) +- [GitHub](https://github.com/ryangoree/drift/) -## 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!_ -## İlgili konular {#related-topics} +## Alakalı başlıklar {#related-topics} -- [ Düğümler ve İstemciler](/developers/docs/nodes-and-clients/) -- [Geliştirici çerçeveleri](/developers/docs/frameworks/) +- [Düğümler ve istemciler](/developers/docs/nodes-and-clients/) +- [Geliştirme çerçeveleri](/developers/docs/frameworks/) ## İlgili öğreticiler {#related-tutorials} -- [JavaScript'te Ethereum blok zincirini kullanmak için Web3js'yi kurun](/developers/tutorials/set-up-web3js-to-use-ethereum-in-javascript/) _– Projenizde web3.js kurulumu için talimatlar._ -- [JavaScript'ten akıllı sözleşme çağırma](/developers/tutorials/calling-a-smart-contract-from-javascript/) _– DAI belirtecini kullanarak, JavaScript kullanan sözleşme işlevini nasıl çağıracağınızı görün._ -- [Web3 ve Alchemy kullanarak işlem gönderme](/developers/tutorials/sending-transactions-using-web3-and-alchemy/) _– Arka uçtan işlem göndermek için adım adım izlenecek yol._ +- [JavaScript'te Ethereum blok zincirini kullanmak için Web3js'yi Kurma](/developers/tutorials/set-up-web3js-to-use-ethereum-in-javascript/) _– Projenizde web3.js kurulumuna yönelik talimatlar._ +- [JavaScript'ten Akıllı Sözleşme Çağırma](/developers/tutorials/calling-a-smart-contract-from-javascript/) _– DAI jetonunu kullanarak JavaScript ile sözleşme fonksiyonlarının nasıl çağrılacağını görün._ +- [web3 ve Alchemy kullanarak işlem gönderme](/developers/tutorials/sending-transactions-using-web3-and-alchemy/) _– Arka uçtan işlem göndermek için adım adım kılavuz._ diff --git a/public/content/translations/tr/developers/docs/apis/json-rpc/index.md b/public/content/translations/tr/developers/docs/apis/json-rpc/index.md index ef646de8279..3034080a7d6 100644 --- a/public/content/translations/tr/developers/docs/apis/json-rpc/index.md +++ b/public/content/translations/tr/developers/docs/apis/json-rpc/index.md @@ -1,36 +1,36 @@ --- title: JSON-RPC API -description: Ethereum istemcileri için durum bilgisi olmayan, hafif bir uzaktan prosedür çağrısı (RPC) protokolü. +description: "Ethereum istemcileri için durum bilgisi olmayan, hafif bir uzaktan prosedür çağrısı (RPC) protokolü." lang: tr --- Bir yazılım uygulamasının Ethereum blok zinciriyle etkileşimde bulunabilmesi - blok zincir verilerini okuma ya da ağa işlemler gönderme yoluyla - bir Ethereum düğümüne bağlanmasını gerektirmektedir. -Bu amaçla, her [Ethereum müşterisi](/developers/docs/nodes-and-clients/#execution-clients), belirli bir düğüm veya istemci uygulamasından bağımsız olarak uygulamaların güvendikleri bir yöntem seti olması için bir [JSON-RPC özellikleri](https://github.com/ethereum/execution-apis) uygular. +Bu amaçla her [Ethereum istemcisi](/developers/docs/nodes-and-clients/#execution-clients), belirli düğüm veya istemci uygulamasından bağımsız olarak uygulamaların güvenebileceği tek tip bir metotlar kümesi olması için bir [JSON-RPC spesifikasyonu](https://github.com/ethereum/execution-apis) uygular. -[JSON-RPC](https://www.jsonrpc.org/specification) durumsuz, hafifliği özel bir uzaktan prosedür çağrısı (RPC) protokolüdür. Birkaç veri yapısını ve bunların işlenmesiyle ilgili kuralları tanımlar. Kavramların aynı süreç içinde, soketler üzerinden, HTTP üzerinden veya birçok farklı mesaj geçiş ortamında kullanılabilir olması açısından aktarımdan bağımsızdır. Veri formatı olarak JSON (RFC 4627) kullanır. +[JSON-RPC](https://www.jsonrpc.org/specification), durum bilgisi olmayan, hafif bir uzaktan yordam çağrısı (RPC) protokolüdür. Birkaç veri yapısını ve bunların işlenmesiyle ilgili kuralları tanımlar. Kavramların aynı süreç içinde, soketler üzerinden, HTTP üzerinden veya birçok farklı mesaj geçiş ortamında kullanılabilir olması açısından aktarımdan bağımsızdır. Veri formatı olarak JSON (RFC 4627) kullanır. ## İstemci uygulamaları {#client-implementations} -Ethereum istemcilerinin her biri, JSON-RPC şartnamesini uygularken farklı programlama dilleri kullanabilir. Belirli programlama dilleriyle ilgili daha fazla ayrıntı için [istemci belgelerine](/developers/docs/nodes-and-clients/#execution-clients) bakın. En güncel API destek bilgileri için her istemcinin belgelerini kontrol etmenizi öneririz. +Ethereum istemcilerinin her biri, JSON-RPC şartnamesini uygularken farklı programlama dilleri kullanabilir. Belirli programlama dilleriyle ilgili daha fazla ayrıntı için bireysel [istemci belgelerine](/developers/docs/nodes-and-clients/#execution-clients) bakın. En güncel API destek bilgileri için her istemcinin belgelerini kontrol etmenizi öneririz. -## Kolaylık Kütüphaneleri {#convenience-libraries} +## Kolaylaştırıcı Kütüphaneler {#convenience-libraries} -JSON-RPC API aracılığıyla Ethereum istemcileriyle doğrudan etkileşim kurmayı seçebilseniz de, dapp geliştiricileri için genellikle daha kolay seçenekler vardır. JSON-RPC API'sinin üzerinde paketleyiciler sağlamak için birçok [JavaScript](/developers/docs/apis/javascript/#available-libraries) ve [arka uç API'si](/developers/docs/apis/backend/#available-libraries) kütüphanesi bulunur. Bu kütüphanelerle geliştiriciler, Ethereum ile etkileşime giren JSON RPC taleplerini (arka planda) başlatmak için tercih ettikleri programlama dilinde sezgisel ve tek satırlı yöntemler yazabilirler. +JSON-RPC API aracılığıyla Ethereum istemcileriyle doğrudan etkileşim kurmayı seçebilseniz de, dapp geliştiricileri için genellikle daha kolay seçenekler vardır. JSON-RPC API'sinin üzerinde sarmalayıcılar sağlamak için birçok [JavaScript](/developers/docs/apis/javascript/#available-libraries) ve [arka uç API](/developers/docs/apis/backend/#available-libraries) kütüphanesi mevcuttur. Bu kütüphanelerle geliştiriciler, Ethereum ile etkileşime giren JSON RPC taleplerini (arka planda) başlatmak için tercih ettikleri programlama dilinde sezgisel ve tek satırlı yöntemler yazabilirler. -## Fikir birliği istemci API'ları {#consensus-clients} +## Mutabakat istemcisi API'leri {#consensus-clients} Bu sayfa, özellikle Ethereum yürütüm istemcileri tarafından kullanılan JSON-RPC API'sı ile ilgilidir. Ancak, fikir birliği istemcileri de kullanıcıların bir düğümden bilgi sorgulamasına, İşaret bloklarını, İşaret durumunu ve mutabakat ile ilgili diğer bilgileri direkt talep etmesine olanak veren bir RPC API'sına sahiptir. Bu API, [Beacon API web sayfasında](https://ethereum.github.io/beacon-APIs/#/) belgelenmiştir. -Bir düğüm içinde müşteri veya istemci arası iletişim için dahili bir API da kullanılır; - yani, bu fikir birliği istemcisinin ve yürütüm istemcisinin veri takas etmesini sağlar. Buna "Motor API'sı" denir ve özellikler [GitHub](https://github.com/ethereum/execution-apis/blob/main/src/engine/common.md)'da mevcuttur. +Bir düğüm içinde müşteri veya istemci arası iletişim için dahili bir API da kullanılır; - yani, bu fikir birliği istemcisinin ve yürütüm istemcisinin veri takas etmesini sağlar. Buna 'Motor API'si' denir ve teknik özellikler [GitHub](https://github.com/ethereum/execution-apis/blob/main/src/engine/common.md) üzerinde mevcuttur. -## Yürütüm istemcisi özellikleri {#spec} +## Yürütme istemcisi spesifikasyonu {#spec} -[GitHub'da tam JSON-RPC API özelliklerini okuyun](https://github.com/ethereum/execution-apis). Bu API, [Yürütme API'si web sayfasında](https://ethereum.github.io/execution-apis/api-documentation/) belgelenmiştir ve mevcut tüm yöntemleri denemek için bir Denetçi içerir. +[GitHub'daki tam JSON-RPC API spesifikasyonunu okuyun](https://github.com/ethereum/execution-apis). Bu API, [Yürütme API'si web sayfasında](https://ethereum.github.io/execution-apis/) belgelenmiştir ve mevcut tüm yöntemleri denemek için bir Denetçi içerir. -## Konvansiyonlar {#conventions} +## Kurallar {#conventions} -### Onaltılık değer kodlaması {#hex-encoding} +### Hex değer kodlaması {#hex-encoding} JSON üzerinden iki temel veri türü geçirilir: biçimlendirilmemiş bayt dizileri ve miktarlar. Her ikisi de bir on altılı kodlamayla geçirilir, ancak biçimlendirme için farklı gereksinimler vardır. @@ -46,7 +46,7 @@ Miktarları (tamsayılar, sayılar) kodlarken: on altılı olarak kodlayın, ön - YANLIŞ: 0x0400 (baştaki sıfırlara izin verilmez) - YANLIŞ: ff (0x ön eki olmalıdır) -### Formatlanmamış bilgi {#unformatted-data-encoding} +### Biçimlendirilmemiş veri {#unformatted-data-encoding} Biçimlendirilmemiş verileri kodlarken (bayt dizileri, hesap adresleri, karmalar, bayt kodu dizileri): ön ek "0x" ile, bayt başına iki on altılık basamak ve on altılı olarak kodlayın. @@ -58,9 +58,9 @@ Biçimlendirilmemiş verileri kodlarken (bayt dizileri, hesap adresleri, karmala - YANLIŞ: 0xf0f0f (hane sayısı çift olmalıdır) - YANLIŞ: 004200 (0x ön eki olmalıdır) -### Varsayılan blok parametresi {#default-block} +### Blok parametresi {#block-parameter} -Aşağıdaki yöntemlerde fazladan bir varsayılan blok parametresi bulunur: +Aşağıdaki metotların bir blok parametresi vardır: - [eth_getBalance](#eth_getbalance) - [eth_getCode](#eth_getcode) @@ -68,43 +68,44 @@ Aşağıdaki yöntemlerde fazladan bir varsayılan blok parametresi bulunur: - [eth_getStorageAt](#eth_getstorageat) - [eth_call](#eth_call) -Ethereum durumuna göre hareket eden istekler yapıldığında, son varsayılan blok parametresi blokun yüksekliğini belirler. +Ethereum'un durumunu sorgulayan istekler yapıldığında, sağlanan blok parametresi bloğun yüksekliğini belirler. -DefaultBlock parametresi için aşağıdaki seçenekler mümkündür: +Blok parametresi için aşağıdaki seçenekler mevcuttur: -- `HEX String` - bir tamsayı blok numarası -- `String "earliest"` en erken/genesis bloğu için -- `String "latest"` - önerilen son blok için -- `"Güvenli" dizesi` - en son güvenli baş blok için -- `"Kesinleşmiş" dizesi` - kesinleşmiş en son blok için -- `"Bekleyen" dizesi` - bekleyen durum/işlemler için +- `HEX Dizesi` - bir tam sayı blok numarası +- `"earliest" Dizesi` - en erken/başlangıç bloğu için +- `"latest" Dizesi` - en son önerilen blok için +- `"safe" Dizesi` - en son güvenli baş blok için +- `"finalized" Dizesi` - en son kesinleşmiş blok için +- `"pending" Dizesi` - bekleyen durum/işlemler için ## Örnekler -Bu sayfada, komut satırı aracı [curl](https://curl.se) kullanılarak ayrı ayrı JSON_RPC API uç noktalarının nasıl kullanılacağına ilişkin örnekler sunuyoruz. Bu ayrı uç nokta örnekleri, aşağıda [Kıvrılma örnekleri](#curl-examples) bölümünde bulunur. Sayfanın ilerleyen kısımlarında, Geth düğümü, JSON_RPC API ve kıvrılma kullanarak akıllı bir sözleşme derlemek ve dağıtmak için [uçtan uca bir örnek](#usage-example) de sağlıyoruz. +Bu sayfada, komut satırı aracı olan [curl](https://curl.se) kullanarak bireysel JSON_RPC API uç noktalarının nasıl kullanılacağına dair örnekler sunuyoruz. Bu bireysel uç nokta örnekleri, aşağıdaki [Curl örnekleri](#curl-examples) bölümünde bulunmaktadır. Sayfanın ilerleyen bölümlerinde, bir Geth düğümü, JSON_RPC API'si ve curl kullanarak bir akıllı sözleşmeyi derlemek ve dağıtmak için bir [uçtan uca örnek](#usage-example) de sunuyoruz. -## Kıvrılma örnekleri {#curl-examples} +## Curl örnekleri {#curl-examples} -Bir Ethereum düğümüne [curl](https://curl.se) istekleri yaparak JSON_RPC API'sını kullanma örnekleri aşağıda verilmiştir. Her örnek belirli uç noktanın bir tanımını, parametrelerini, dönüş türünü ve nasıl kullanılması gerektiğine dair çalışılmış bir örneği içerir. +Bir Ethereum düğümüne [curl](https://curl.se) istekleri yaparak JSON_RPC API'sini kullanma örnekleri aşağıda verilmiştir. Her örnek +belirli uç noktanın bir tanımını, parametrelerini, dönüş türünü ve nasıl kullanılması gerektiğine dair çalışılmış bir örneği içerir. -Kıvrılma istekleri, içerik türüyle ilgili bir hata mesajı döndürebilir. Bunun nedeni, `--data` seçeneğinin içerik türünü `application/x-www-form-urlencoded` olarak ayarlamasıdır. Düğümünüz bundan şikâyet ederse, aramanın başına `-H "Content-Type: application/json"` koyarak başlığı manuel olarak ayarlayın. Örnekler ayrıca kıvrılma için verilen son argüman olması gereken URL/IP ve bağlantı noktası kombinasyonunu içermez. (ör. `127.0.0.1:8545`). Bu ek verileri içeren eksiksiz bir kıvrılma isteği aşağıdaki formu alır: +Kıvrılma istekleri, içerik türüyle ilgili bir hata mesajı döndürebilir. Bunun nedeni, `--data` seçeneğinin içerik türünü `application/x-www-form-urlencoded` olarak ayarlamasıdır. Düğümünüz bu konuda şikayet ederse, çağrının başına `-H "Content-Type: application/json"` yerleştirerek başlığı manuel olarak ayarlayın. Örnekler ayrıca curl'e verilen son argüman olması gereken URL/IP ve bağlantı noktası kombinasyonunu içermez (örn. `127.0.0.1:8545`). Bu ek verileri içeren eksiksiz bir kıvrılma isteği aşağıdaki formu alır: ```shell curl -H "Content-Type: application/json" -X POST --data '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":67}' 127.0.0.1:8545 ``` -## Dedikodu, Durum, Geçiş {#gossip-state-history} +## Gossip, Durum, Geçmiş {#gossip-state-history} -Bir avuç temel JSON-RPC yöntemi, Ethereum ağından veri gerektirir ve düzgün bir şekilde üç ana kategoriye ayrılır: _Dedikodu, Durum ve Geçmiş_. Her bir yönteme atlamak için bu bölümlerdeki bağlantıları kullanın veya tüm yöntemler listesini keşfetmek için içindekiler tablosunu kullanın. +Birkaç temel JSON-RPC metodu, Ethereum ağından veri gerektirir ve üç ana kategoriye ayrılır: _Gossip, Durum ve Geçmiş_. Her bir yönteme atlamak için bu bölümlerdeki bağlantıları kullanın veya tüm yöntemler listesini keşfetmek için içindekiler tablosunu kullanın. -### Dedikodu Yöntemleri {#gossip-methods} +### Gossip Metotları {#gossip-methods} > Bu yöntemler zincirin başını izler. Bu, işlemlerin ağ etrafında nasıl dolaştığını, blokların içinde nasıl yer bulduğunu ve istemcilerin yeni bloklar hakkında nasıl bilgi sahibi olduğunu gösterir. - [eth_blockNumber](#eth_blocknumber) - [eth_sendRawTransaction](#eth_sendrawtransaction) -### Durum Yöntemleri {#state_methods} +### Durum Metotları {#state_methods} > Depolanan tüm verinin mevcut durumunu raporlayan yöntemlerdir. "Durum" RAM'nin paylaşımlı, büyük tek bir parçası gibidir ve hesap bakiyelerini, sözleşme verilerini ve gaz tahminlerini içerir. @@ -115,7 +116,7 @@ Bir avuç temel JSON-RPC yöntemi, Ethereum ağından veri gerektirir ve düzgü - [eth_call](#eth_call) - [eth_estimateGas](#eth_estimategas) -### Geçmiş Yöntemleri {#history_methods} +### Geçmiş Metotları {#history_methods} > Başlangıça kadar her blokun geçmiş kayıtlarını alır. Bu tek büyük sadece ekleme yapılabilen bir dosya gibidir ve tüm blok başlıklarını, blok gövdelerini, amca bloklarını ve işlem makbuzlarını içerir. @@ -134,9 +135,9 @@ Bir avuç temel JSON-RPC yöntemi, Ethereum ağından veri gerektirir ve düzgü ## JSON-RPC API Deneme Alanı -API yöntemlerini denemek ve yeni yöntemler keşfetmek için [deneme alanı aracını](https://ethereum-json-rpc.com) kullanabilirsiniz. Ayrıca, çeşitli düğüm sağlayıcıları tarafından hangi yöntemlerin ve ağların desteklendiğini de gösterir. +API metotlarını keşfetmek ve denemek için [oyun alanı aracını](https://ethereum-json-rpc.com) kullanabilirsiniz. Ayrıca, çeşitli düğüm sağlayıcıları tarafından hangi yöntemlerin ve ağların desteklendiğini de gösterir. -## JSON-RPC API Yöntemleri {#json-rpc-methods} +## JSON-RPC API Metotları {#json-rpc-methods} ### web3_clientVersion {#web3_clientversion} @@ -146,16 +147,16 @@ Geçerli istemci sürümünü döndürür. Hiçbiri -**Dönüşler** +**Döndürülenler** -`String` - Geçerli istemci sürümü +`Dize` - Mevcut istemci sürümü **Örnek** ```js -// Request +// İstek curl -X POST --data '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":67}' -// Result +// Sonuç { "id":67, "jsonrpc":"2.0", @@ -165,26 +166,26 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[], ### web3_sha3 {#web3_sha3} -Verilen verilerin Keccak-256'sını (standartlaştırılmış SHA3-256 _olmayan_) döndürür. +Verilen verinin Keccak-256'sını (_standartlaştırılmış SHA3-256'yı değil_) döndürür. **Parametreler** -1. `DATA` - SHA3 karmasına dönüştürülecek veriler +1. `VERİ` - SHA3 karmasına dönüştürülecek veri ```js params: ["0x68656c6c6f20776f726c64"] ``` -**Dönüşler** +**Döndürülenler** -`DATA` - Verilen dizenin SHA3 sonucu. +`VERİ` - Verilen dizenin SHA3 sonucu. **Örnek** ```js -// Request +// İstek curl -X POST --data '{"jsonrpc":"2.0","method":"web3_sha3","params":["0x68656c6c6f20776f726c64"],"id":64}' -// Result +// Sonuç { "id":64, "jsonrpc": "2.0", @@ -200,22 +201,22 @@ Geçerli ağ kimliğini döndürür. Hiçbiri -**Dönüşler** +**Döndürülenler** -`String` - Geçerli ağ kimliği. +`Dize` - Mevcut ağ kimliği. -Mevcut ağ kimliklerinin tam listesi [chainlist.org](https://chainlist.org) adresinde bulunabilir. Bazı yaygın olanları: +Mevcut ağ kimliklerinin tam listesi [chainlist.org](https://chainlist.org) adresinde mevcuttur. Bazı yaygın olanları: - `1`: Ethereum Ana Ağı - `11155111`: Sepolia test ağı -- `17000`: Hoodi test ağı +- `560048` : Hoodi Test Ağı **Örnek** ```js -// Request +// İstek curl -X POST --data '{"jsonrpc":"2.0","method":"net_version","params":[],"id":67}' -// Result +// Sonuç { "id":67, "jsonrpc": "2.0", @@ -225,22 +226,22 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"net_version","params":[],"id":67 ### net_listening {#net_listening} -İstemci aktif olarak ağ bağlantılarını dinliyorsa `true` değerini döndürür. +İstemci ağ bağlantılarını aktif olarak dinliyorsa `true` döndürür. **Parametreler** Hiçbiri -**Dönüşler** +**Döndürülenler** `Boolean` - Dinlerken `true`, aksi takdirde `false`. **Örnek** ```js -// Request +// İstek curl -X POST --data '{"jsonrpc":"2.0","method":"net_listening","params":[],"id":67}' -// Result +// Sonuç { "id":67, "jsonrpc":"2.0", @@ -256,16 +257,16 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"net_listening","params":[],"id": Hiçbiri -**Dönüşler** +**Döndürülenler** -`QUANTITY` - bağlı eşlerin sayısının tam sayısı. +`MİKTAR` - bağlı olan eşlerin sayısının tam sayısı. **Örnek** ```js -// Request +// İstek curl -X POST --data '{"jsonrpc":"2.0","method":"net_peerCount","params":[],"id":74}' -// Result +// Sonuç { "id":74, "jsonrpc": "2.0", @@ -275,22 +276,22 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"net_peerCount","params":[],"id": ### eth_protocolVersion {#eth_protocolversion} -Geçerli Ethereum protokol sürümünü döndürür. Bu yöntemin [Geth'de mevcut olmadığını](https://github.com/ethereum/go-ethereum/pull/22064#issuecomment-788682924) aklınızda tutun. +Geçerli Ethereum protokol sürümünü döndürür. Bu metodun [Geth'te mevcut olmadığını](https://github.com/ethereum/go-ethereum/pull/22064#issuecomment-788682924) unutmayın. **Parametreler** Hiçbiri -**Dönüşler** +**Döndürülenler** -`String` - Geçerli Ethereum protokolü sürümü +`Dize` - Mevcut Ethereum protokol sürümü **Örnek** ```js -// Request +// İstek curl -X POST --data '{"jsonrpc":"2.0","method":"eth_protocolVersion","params":[],"id":67}' -// Result +// Sonuç { "id":67, "jsonrpc": "2.0", @@ -300,21 +301,25 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_protocolVersion","params":[] ### eth_syncing {#eth_syncing} -Senkronizasyon durumu veya `false` ile ilgili verileri içeren bir nesne döndürür. +Senkronizasyon durumu hakkında veri içeren bir nesne veya `false` döndürür. + + + Uç noktayı oyun alanında deneyin + **Parametreler** Hiçbiri -**Dönüşler** +**Döndürülenler** -Kesin dönüş verileri, istemci uygulamaları arasında farklılık gösterir. Tüm istemciler düğüm eşitlenmediğinde `False` değerini döndürür aynı zamanda da tüm istemciler aşağıdaki alanları döndürür. +Kesin dönüş verileri, istemci uygulamaları arasında farklılık gösterir. Düğüm senkronize olmadığında tüm istemciler `False` döndürür ve tüm istemciler aşağıdaki alanları döndürür. -`Nesne|Boolean`, Senkronizasyon durumu verisi olan veya senkronize edilmediğinde `FALSE` olan bir nesne: +`Nesne|Boolean`, Senkronizasyon durumu verileri içeren bir nesne veya senkronize olmadığında `FALSE`: -- `startingBlock`: `QUANTITY` - İçe aktarmanın başladığı blok (yalnızca senkronizasyon kafasına ulaştıktan sonra sıfırlanır) -- `currentBlock`: `QUANTITY` - Geçerli blok, eth_blockNumber ile aynı -- `highestBlock`: `QUANTITY` - Tahmini en yüksek blok +- `startingBlock`: `MİKTAR` - İçe aktarmanın başladığı blok (yalnızca senkronizasyon kendi baş bloğuna ulaştıktan sonra sıfırlanır) +- `currentBlock`: `MİKTAR` - Mevcut blok, eth_blockNumber ile aynı +- `highestBlock`: `MİKTAR` - Tahmini en yüksek blok Ancak, bireysel istemciler ek veriler de sağlayabilir. Örneğin Geth aşağıdakileri döndürür: @@ -362,9 +367,9 @@ Daha fazla ayrıntı için bakmak istediğiniz spesifik istemcinin dokümanları **Örnek** ```js -// Request +// İstek curl -X POST --data '{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":1}' -// Result +// Sonuç { "id":1, "jsonrpc": "2.0", @@ -374,7 +379,7 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":1} highestBlock: '0x454' } } -// Or when not syncing +// Veya senkronize değilken { "id":1, "jsonrpc": "2.0", @@ -386,20 +391,26 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":1} İstemci para tabanı adresini döndürür. + + Uç noktayı oyun alanında deneyin + + +> **Not:** Bu metot **v1.14.0** itibarıyla kullanımdan kaldırılmıştır ve artık desteklenmemektedir. Bu metodu kullanmaya çalışmak "Metot desteklenmiyor" hatasıyla sonuçlanacaktır. + **Parametreler** Hiçbiri -**Dönüşler** +**Döndürülenler** -`DATA`, 20 bayt - mevcut para tabanı adresi. +`VERİ`, 20 bayt - mevcut coinbase adresi. **Örnek** ```js -// Request +// İstek curl -X POST --data '{"jsonrpc":"2.0","method":"eth_coinbase","params":[],"id":64}' -// Result +// Sonuç { "id":64, "jsonrpc": "2.0", @@ -411,20 +422,24 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_coinbase","params":[],"id":6 Tekrardan korumalı işlemleri imzalamak için kullanılan zincir kimliğini döndürür. + + Uç noktayı oyun alanında deneyin + + **Parametreler** Hiçbiri -**Dönüşler** +**Döndürülenler** -`chainId`, mevcut zincir kimliğinin sayısal değerini temsil eden metin olarak on altılı değer. +`chainId`, mevcut zincir kimliğinin tam sayısını temsil eden bir dize olarak onaltılık değer. **Örnek** ```js -// Request +// İstek curl -X POST --data '{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":67}' -// Result +// Sonuç { "id":67, "jsonrpc": "2.0", @@ -434,20 +449,24 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":67 ### eth_mining {#eth_mining} -İstemci aktif olarak yeni bloklar basıyorsa `true` değerini döndürür. Bu, yalnızca iş ispatı kullanan ağlar için `true` değerini döndürebilir ancak [Birleşim](/roadmap/merge/) gerçekleştiğinden beri bazı istemcilerde kullanılamıyor olabilir. +İstemci aktif olarak yeni bloklar çıkarıyorsa `true` döndürür. Bu, yalnızca iş ispatı ağları için `true` döndürebilir ve [Birleşim](/roadmap/merge/) sonrasında bazı istemcilerde mevcut olmayabilir. + + + Uç noktayı oyun alanında deneyin + **Parametreler** Hiçbiri -**Dönüşler** +**Döndürülenler** -`Boolean` - istemcinin madencilik yaptığı `true` değerini, aksi takdirde `false` değerini döndürür. +`Boolean` - istemci madencilik yapıyorsa `true`, aksi takdirde `false` döndürür. **Örnek** ```js -// Request +// İstek curl -X POST --data '{"jsonrpc":"2.0","method":"eth_mining","params":[],"id":71}' // { @@ -459,22 +478,26 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_mining","params":[],"id":71} ### eth_hashrate {#eth_hashrate} -Düğümün madencilik yaptığı saniye başına karma sayısını döndürür. Bu, yalnızca iş ispatı kullanan ağlar için `true` değerini döndürebilir ancak [Birleşim](/roadmap/merge/) gerçekleştiğinden beri bazı istemcilerde kullanılamıyor olabilir. +Düğümün madencilik yaptığı saniye başına karma sayısını döndürür. Bu, yalnızca iş ispatı ağları için `true` döndürebilir ve [Birleşim](/roadmap/merge/) sonrasında bazı istemcilerde mevcut olmayabilir. + + + Uç noktayı oyun alanında deneyin + **Parametreler** Hiçbiri -**Dönüşler** +**Döndürülenler** -`QUANTITY` - saniyedeki karma sayısı. +`MİKTAR` - saniye başına karma sayısı. **Örnek** ```js -// Request +// İstek curl -X POST --data '{"jsonrpc":"2.0","method":"eth_hashrate","params":[],"id":71}' -// Result +// Sonuç { "id":71, "jsonrpc": "2.0", @@ -486,20 +509,24 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_hashrate","params":[],"id":7 Wei cinsinden gaz başına mevcut fiyatın bir tahminini döndürür. Örneğin, Besu istemcisi son 100 bloğu inceler ve varsayılan medyan gaz birim fiyatını döndürür. + + Uç noktayı oyun alanında deneyin + + **Parametreler** Hiçbiri -**Dönüşler** +**Döndürülenler** -`QUANTITY` - wei cinsinden mevcut gaz fiyatının tam sayısıdır. +`MİKTAR` - wei cinsinden mevcut gaz fiyatının tam sayısı. **Örnek** ```js -// Request +// İstek curl -X POST --data '{"jsonrpc":"2.0","method":"eth_gasPrice","params":[],"id":73}' -// Result +// Sonuç { "id":73, "jsonrpc": "2.0", @@ -511,20 +538,24 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_gasPrice","params":[],"id":7 İstemcinin sahip olduğu adreslerin listesini döndürür. + + Uç noktayı oyun alanında deneyin + + **Parametreler** Hiçbiri -**Dönüşler** +**Döndürülenler** -`Array of DATA`, 20 Bayt, istemciye ait adresler. +`VERİ Dizisi`, 20 Bayt - istemcinin sahip olduğu adresler. **Örnek** ```js -// Request +// İstek curl -X POST --data '{"jsonrpc":"2.0","method":"eth_accounts","params":[],"id":1}' -// Result +// Sonuç { "id":1, "jsonrpc": "2.0", @@ -536,20 +567,24 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_accounts","params":[],"id":1 En son bloğun numarasını döndürür. + + Uç noktayı oyun alanında deneyin + + **Parametreler** Hiçbiri -**Dönüşler** +**Döndürülenler** -`QUANTITY` - istemcinin açık olduğu mevcut blok numarasının tam sayısıdır. +`MİKTAR` - istemcinin bulunduğu mevcut blok numarasının tam sayısı. **Örnek** ```js -// Request +// İstek curl -X POST --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":83}' -// Result +// Sonuç { "id":83, "jsonrpc": "2.0", @@ -559,27 +594,31 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id ### eth_getBalance {#eth_getbalance} -Verilen adresin hesabının bakiyesini döndürür. +Belirli bir adresteki hesabın bakiyesini döndürür. + + + Uç noktayı oyun alanında deneyin + **Parametreler** -1. `DATA`, 20 Bayt - bakiye için bakılması gereken adres. -2. `QUANTITY|TAG` - tamsayı blok numarası veya `"latest"`,`"earliest"`,`"pending"`,`"safe"` veya `"finalized"` dizesi, [default block parameter](/developers/docs/apis/json-rpc/#default-block) kısmına göz atabilirsiniz +1. `VERİ`, 20 Bayt - bakiye kontrolü için adres. +2. `MİKTAR|ETİKET` - tam sayı blok numarası veya `"latest"`, `"earliest"`, `"pending"`, `"safe"` ya da `"finalized"` dizesi, bkz. [blok parametresi](/developers/docs/apis/json-rpc/#block-parameter) ```js params: ["0x407d73d8a49eeb85d32cf465507dd71d507100c1", "latest"] ``` -**Dönüşler** +**Döndürülenler** -`QUANTITY` - mevcut bakiyenin wei cinsinden tam sayısıdır. +`MİKTAR` - wei cinsinden mevcut bakiyenin tam sayısı. **Örnek** ```js -// Request +// İstek curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBalance","params":["0x407d73d8a49eeb85d32cf465507dd71d507100c1", "latest"],"id":1}' -// Result +// Sonuç { "id":1, "jsonrpc": "2.0", @@ -591,30 +630,35 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBalance","params":["0x407 Belirli bir adresteki bir depolama konumundan değeri döndürür. + + Uç noktayı oyun alanında deneyin + + **Parametreler** -1. `DATA`, 20 Bayt - depolamanın adresi. -2. `QUANTITY` - depolamadaki pozisyonun sayısı. -3. `QUANTITY|TAG`- tamsayı blok numarası veya `"latest"`,`"earliest"`,`"pending"`,`"safe"` veya `"finalized"` dizesi, [default block parameter](/developers/docs/apis/json-rpc/#default-block) kısmına göz atabilirsiniz +1. `VERİ`, 20 Bayt - depolama adresi. +2. `MİKTAR` - depolamadaki konumun tam sayısı. +3. `MİKTAR|ETİKET` - tam sayı blok numarası veya `"latest"`, `"earliest"`, `"pending"`, `"safe"` ya da `"finalized"` dizesi, bkz. [blok parametresi](/developers/docs/apis/json-rpc/#block-parameter) -**Dönüşler** +**Döndürülenler** -`DATA` - bu depolama konumundaki değerdir. +`VERİ` - bu depolama konumundaki değer. -**Örnek** Doğru konumun hesaplanması, alınacak depolamaya bağlıdır. `0x295a70b2de5e3953354a6a8344e616ed314d7251`, `0x391694e7e0b0cce554cb130d723a9d27458f9298` adresinde dağıtılan aşağıdaki sözleşmeyi dikkate alın. +**Örnek** +Doğru konumu hesaplamak, alınacak depolamaya bağlıdır. Aşağıdaki, `0x391694e7e0b0cce554cb130d723a9d27458f9298` adresi tarafından `0x295a70b2de5e3953354a6a8344e616ed314d7251` adresinde dağıtılan sözleşmeyi göz önünde bulundurun. ``` contract Storage { uint pos0; mapping(address => uint) pos1; - function Storage() { + constructor() { pos0 = 1234; pos1[msg.sender] = 5678; } } ``` -Pos0 değerini almak basittir: +pos0'ın değerini almak basittir: ```js curl -X POST --data '{"jsonrpc":"2.0", "method": "eth_getStorageAt", "params": ["0x295a70b2de5e3953354a6a8344e616ed314d7251", "0x0", "latest"], "id": 1}' localhost:8545 @@ -658,28 +702,32 @@ curl -X POST --data '{"jsonrpc":"2.0", "method": "eth_getStorageAt", "params": [ Bir adresten _gönderilen_ işlem sayısını döndürür. + + Uç noktayı oyun alanında deneyin + + **Parametreler** -1. `DATA`, 20 Bayt - adres. -2. `QUANTITY|TAG`- tamsayı blok numarası veya `"latest"`,`earliest"`,`"pending"`,`"safe"` veya `"finalized"` dizesi, [default block parameter](/developers/docs/apis/json-rpc/#default-block) kısmına göz atabilirsiniz +1. `VERİ`, 20 Bayt - adres. +2. `MİKTAR|ETİKET` - tam sayı blok numarası veya `"latest"`, `"earliest"`, `"pending"`, `"safe"` ya da `"finalized"` dizesi, bkz. [blok parametresi](/developers/docs/apis/json-rpc/#block-parameter) ```js params: [ "0x407d73d8a49eeb85d32cf465507dd71d507100c1", - "latest", // state at the latest block + "latest", // en son bloktaki durum ] ``` -**Dönüşler** +**Döndürülenler** -`QUANTITY` - bu adresten gönderilen işlem sayısının tamsayısıdır. +`MİKTAR` - bu adresten gönderilen işlem sayısının tam sayısı. **Örnek** ```js -// Request +// İstek curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionCount","params":["0x407d73d8a49eeb85d32cf465507dd71d507100c1","latest"],"id":1}' -// Result +// Sonuç { "id":1, "jsonrpc": "2.0", @@ -691,17 +739,21 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionCount","params Verilen blok karması ile eşleşen bir bloktaki işlem sayısını döndürür. + + Uç noktayı oyun alanında deneyin + + **Parametreler** -1. `DATA`, 32 Bayt - bir blokun karması +1. `VERİ`, 32 Bayt - bir bloğun karması ```js params: ["0xd03ededb7415d22ae8bac30f96b2d1de83119632693b963642318d87d1bece5b"] ``` -**Dönüşler** +**Döndürülenler** -`QUANTITY` - bu bloktaki işlem sayısının tamsayısıdır. +`MİKTAR` - bu bloktaki işlem sayısının tam sayısı. **Örnek** @@ -720,9 +772,13 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockTransactionCountByHa Verilen blok numarasıyla eşleşen bloktaki işlem sayısını döndürür. + + Uç noktayı oyun alanında deneyin + + **Parametreler** -1. `QUANTITY|TAG`- tamsayı blok numarası veya `"latest"`,`earliest"`,`"pending"`,`"safe"` veya `"finalized"` dizesi, [default block parameter](/developers/docs/apis/json-rpc/#default-block) kısmına göz atabilirsiniz. +1. `MİKTAR|ETİKET` - bir blok numarasının tam sayısı veya [blok parametresinde](/developers/docs/apis/json-rpc/#block-parameter) olduğu gibi `"earliest"`, `"latest"`, `"pending"`, `"safe"` ya da `"finalized"` dizesi. ```js params: [ @@ -730,9 +786,9 @@ params: [ ] ``` -**Dönüşler** +**Döndürülenler** -`QUANTITY` - bu bloktaki işlem sayısının tamsayısıdır. +`MİKTAR` - bu bloktaki işlem sayısının tam sayısı. **Örnek** @@ -751,6 +807,10 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockTransactionCountByNu Verilen blok karması ile eşleşen bir bloktaki amcaların sayısını döndürür. + + Uç noktayı oyun alanında deneyin + + **Parametreler** 1. `VERİ`, 32 Bayt - bir bloğun karması @@ -759,9 +819,9 @@ Verilen blok karması ile eşleşen bir bloktaki amcaların sayısını döndür params: ["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2"] ``` -**Dönüşler** +**Döndürülenler** -`QUANTITY` - bu bloktaki amcaların sayısının tamsayısıdır. +`MİKTAR` - bu bloktaki amca (uncle) sayısının tam sayısı. **Örnek** @@ -780,9 +840,13 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleCountByBlockHash","p Verilen blok numarası ile eşleşen bir bloktan olan bir bloktaki amcaların sayısını döndürür. + + Uç noktayı oyun alanında deneyin + + **Parametreler** -1. `QUANTITY|TAG`- tamsayı blok numarası veya `"latest"`,`earliest"`,`"pending"`,`"safe"` veya `"finalized"` dizesi, [default block parameter](/developers/docs/apis/json-rpc/#default-block) kısmına göz atabilirsiniz +1. `MİKTAR|ETİKET` - tam sayı blok numarası veya `"latest"`, `"earliest"`, `"pending"`, `"safe"` ya da `"finalized"` dizesi, bkz. [blok parametresi](/developers/docs/apis/json-rpc/#block-parameter) ```js params: [ @@ -790,9 +854,9 @@ params: [ ] ``` -**Dönüşler** +**Döndürülenler** -`QUANTITY` - bu bloktaki amcaların sayısının tamsayısıdır. +`MİKTAR` - bu bloktaki amca (uncle) sayısının tam sayısı. **Örnek** @@ -811,10 +875,14 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleCountByBlockNumber", Belirli bir adreste kod döndürür. + + Uç noktayı oyun alanında deneyin + + **Parametreler** -1. `DATA`, 20 Bayt - adres -2. `QUANTITY|TAG`- tamsayı blok numarası veya `"latest"`,`earliest"`,`"pending"`,`"safe"` veya `"finalized"` dizesi, [default block parameter](/developers/docs/apis/json-rpc/#default-block) kısmına göz atabilirsiniz +1. `VERİ`, 20 Bayt - adres +2. `MİKTAR|ETİKET` - tam sayı blok numarası veya `"latest"`, `"earliest"`, `"pending"`, `"safe"` ya da `"finalized"` dizesi, bkz. [blok parametresi](/developers/docs/apis/json-rpc/#block-parameter) ```js params: [ @@ -823,9 +891,9 @@ params: [ ] ``` -**Dönüşler** +**Döndürülenler** -`DATA` - verilen adresten gelen kod. +`VERİ` - verilen adresten kod. **Örnek** @@ -842,27 +910,27 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getCode","params":["0xC02aaA ### eth_sign {#eth_sign} -İmza yöntemi, Ethereum'a özel bir imzayı şu şekilde hesaplar: `sign(keccak256("\x19Ethereum Signed Message:\n" + len(message) + message)))`. +İmzalama yöntemi, Ethereum'a özgü bir imzayı şu şekilde hesaplar: `sign(keccak256("\x19Ethereum Signed Message:\n" + len(message) + message)))`. -Mesaja bir önek ekleyerek hesaplanan imzanın Ethereum'a özel bir imza olarak tanınmasını sağlar. Bu, kötü niyetli bir merkeziyetsiz uygulamanın keyfi verileri imzalayabildiği (ör. işlem) ve imzayı kurbanın kimliğine bürünmek için kullandığı durumlarda kötüye kullanımı önler. +Mesaja bir önek ekleyerek hesaplanan imzanın Ethereum'a özel bir imza olarak tanınmasını sağlar. Bu, kötü niyetli bir merkeziyetsiz uygulamanın rastgele verileri (ör. işlem) imzalayabildiği ve imzayı kurbanın kimliğine bürünmek için kullandığı kötüye kullanımı önler. Not: İmzalanacak adresin kilidi açık olmalıdır. **Parametreler** 1. `VERİ`, 20 Bayt - adres -2. `DATA`, N Bayt - imzalanacak mesaj +2. `VERİ`, N Bayt - imzalanacak mesaj -**Dönüşler** +**Döndürülenler** -`DATA`: İmza +`VERİ`: İmza **Örnek** ```js -// Request +// İstek curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sign","params":["0x9b2055d370f73ec7d8a03e965129118dc8f5bf83", "0xdeadbeaf"],"id":1}' -// Result +// Sonuç { "id":1, "jsonrpc": "2.0", @@ -872,31 +940,31 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sign","params":["0x9b2055d37 ### eth_signTransaction {#eth_signtransaction} -[eth_sendRawTransaction](#eth_sendrawtransaction) ile kullanılarak daha sonra ağa gönderilebilecek bir işlemi imzalar. +Daha sonra [eth_sendRawTransaction](#eth_sendrawtransaction) ile ağa gönderilebilecek bir işlemi imzalar. **Parametreler** -1. `Object` - İşlem nesnesi +1. `Nesne` - İşlem nesnesi -- `type`: -- `from`: `DATA`, 20 Bayt - İşlemin gönderildiği adres. -- `to`: `DATA`, 20 Bayt - (yeni sözleşme oluştururken isteğe bağlı) İşlemin yönlendirildiği adres. -- `gas`: `QUANTITY` - (isteğe bağlı, varsayılan: 90000) İşlemin yürütülmesi için sağlanan gazın tam sayısı. Kullanılmayan gazı geri verecektir. -- `gasPrice`: `QUANTITY` - (isteğe bağlı, varsayılan: Belirlenecek) Wei'de her ücretli gaz için kullanılan gasPrice'ın tamsayısıdır. -- `value`: `QUANTITY` - (isteğe bağlı) Wei cinsinden bu işlemle gönderilen değerin tamsayısıdır. -- `data`: `DATA` - Bir sözleşmenin derlenmiş kodu VEYA çağrılan yöntem imzasının ve kodlanmış parametrelerin karması. -- `nonce`: `QUANTITY` - (isteğe bağlı) nonce tam sayısı. Bu, aynı nonce'yi kullanan kendi bekleyen işlemlerinizin üzerine yazmanıza izin verir. +- `tür`: +- `from`: `VERİ`, 20 Bayt - İşlemin gönderildiği adres. +- `to`: `VERİ`, 20 Bayt - (yeni sözleşme oluştururken isteğe bağlı) İşlemin yönlendirildiği adres. +- `gas`: `MİKTAR` - (isteğe bağlı, varsayılan: 90000) İşlemin yürütülmesi için sağlanan gazın tam sayısı. Kullanılmayan gazı geri verecektir. +- `gasPrice`: `MİKTAR` - (isteğe bağlı, varsayılan: Belirlenecek) Wei cinsinden ödenen her gaz için kullanılan gasPrice tam sayısı. +- `value`: `MİKTAR` - (isteğe bağlı) Wei cinsinden bu işlemle gönderilen değerin tam sayısı. +- `data`: `VERİ` - Bir sözleşmenin derlenmiş kodu VEYA çağrılan metot imzasının ve kodlanmış parametrelerin karması. +- `nonce`: `MİKTAR` - (isteğe bağlı) Bir nonce'un tam sayısı. Bu, aynı nonce'yi kullanan kendi bekleyen işlemlerinizin üzerine yazmanıza izin verir. -**Dönüşler** +**Döndürülenler** -`DATA`, Belirtilen hesap tarafından imzalanan RLP kodlu işlem nesnesidir. +`VERİ`, Belirtilen hesap tarafından imzalanan RLP kodlu işlem nesnesi. **Örnek** ```js -// Request +// İstek curl -X POST --data '{"id": 1,"jsonrpc": "2.0","method": "eth_signTransaction","params": [{"data":"0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675","from": "0xb60e8dd61c5d32be8058bb8eb970870f07233155","gas": "0x76c0","gasPrice": "0x9184e72a000","to": "0xd46e8dd67c5d32be8058bb8eb970870f07244567","value": "0x9184e72a"}]}' -// Result +// Sonuç { "id": 1, "jsonrpc": "2.0", @@ -910,15 +978,15 @@ Veri alanı kod içeriyorsa, yeni bir mesaj çağrı işlemi veya sözleşme olu **Parametreler** -1. `Object` - İşlem nesnesi +1. `Nesne` - İşlem nesnesi -- `from`: `DATA`, 20 Bayt - İşlemin gönderildiği adres. -- `to`: `DATA`, 20 Bayt - (yeni sözleşme oluştururken isteğe bağlı) İşlemin yönlendirildiği adres. -- `gas`: `QUANTITY` - (isteğe bağlı, varsayılan: 90000) İşlemin yürütülmesi için sağlanan gazın tam sayısı. Kullanılmayan gazı geri verecektir. -- `gasPrice`: `QUANTITY` - (isteğe bağlı, varsayılan: Belirlenecek) Ücretli her gaz için kullanılan gasPrice'ın tam sayısı. -- `değer`: `QUANTITY` - (isteğe bağlı) Bu işlemle gönderilen değerin tam sayısı. -- `input`: `DATA` - Bir sözleşmenin derlenmiş kodu VEYA çağrılan yöntem imzasının ve kodlanmış parametrelerin karmasıdır. -- `nonce`: `QUANTITY` - (isteğe bağlı) nonce tam sayısı. Bu, aynı nonce'yi kullanan kendi bekleyen işlemlerinizin üzerine yazmanıza izin verir. +- `from`: `VERİ`, 20 Bayt - İşlemin gönderildiği adres. +- `to`: `VERİ`, 20 Bayt - (yeni sözleşme oluştururken isteğe bağlı) İşlemin yönlendirildiği adres. +- `gas`: `MİKTAR` - (isteğe bağlı, varsayılan: 90000) İşlemin yürütülmesi için sağlanan gazın tam sayısı. Kullanılmayan gazı geri verecektir. +- `gasPrice`: `MİKTAR` - (isteğe bağlı, varsayılan: Belirlenecek) Ücretli her gaz için kullanılan gasPrice tam sayısı. +- `value`: `MİKTAR` - (isteğe bağlı) Bu işlemle gönderilen değerin tam sayısı. +- `input`: `VERİ` - Bir sözleşmenin derlenmiş kodu VEYA çağrılan metot imzasının ve kodlanmış parametrelerin karması. +- `nonce`: `MİKTAR` - (isteğe bağlı) Bir nonce'un tam sayısı. Bu, aynı nonce'yi kullanan kendi bekleyen işlemlerinizin üzerine yazmanıza izin verir. ```js params: [ @@ -934,18 +1002,18 @@ params: [ ] ``` -**Dönüşler** +**Döndürülenler** -`DATA`, 32 Bayt - işlem karması veya işlem henüz mevcut değilse sıfır karma. +`VERİ`, 32 Bayt - işlem karması veya işlem henüz mevcut değilse sıfır karma. Bir sözleşme oluşturduğunuzda, işlem bir blokta önerildikten sonra sözleşme adresini almak için [eth_getTransactionReceipt](#eth_gettransactionreceipt) öğesini kullanın. **Örnek** ```js -// Request +// İstek curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendTransaction","params":[{see above}],"id":1}' -// Result +// Sonuç { "id":1, "jsonrpc": "2.0", @@ -959,7 +1027,7 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendTransaction","params":[{ **Parametreler** -1. `DATA`, İmzalanmış işlem verisi. +1. `VERİ`, İmzalanmış işlem verisi. ```js params: [ @@ -967,18 +1035,18 @@ params: [ ] ``` -**Dönüşler** +**Döndürülenler** -`DATA`, 32 Bayt - işlem karması veya işlem henüz mevcut değilse sıfır karma. +`VERİ`, 32 Bayt - işlem karması veya işlem henüz mevcut değilse sıfır karma. Bir sözleşme oluşturduğunuzda, işlem bir blokta önerildikten sonra sözleşme adresini almak için [eth_getTransactionReceipt](#eth_gettransactionreceipt) öğesini kullanın. **Örnek** ```js -// Request +// İstek curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendRawTransaction","params":[{see above}],"id":1}' -// Result +// Sonuç { "id":1, "jsonrpc": "2.0", @@ -990,29 +1058,33 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendRawTransaction","params" Blokzincirde bir işlem oluşturmadan hemen yeni bir mesaj çağrısı yürütür. Genellikle yalnızca okuma işlemi yapan akıllı sözleşme fonksiyonlarını çalıştırmak için kullanılır, örneğin bir ERC-20 sözleşmesi için `balanceOf` fonksiyonu. + + Uç noktayı oyun alanında deneyin + + **Parametreler** -1. `Object` - İşlem çağrısı nesnesi +1. `Nesne` - İşlem çağrısı nesnesi -- `from`: `DATA`, 20 Bayt - (isteğe bağlı) İşlemin gönderildiği adres. -- `to`: `DATA`, 20 Bayt - İşlemin yönlendirildiği adres. -- `gas`: `QUANTITY` - (isteğe bağlı) İşlemin yürütülmesi için sağlanan gazın tam sayısı. eth_call sıfır gaz tüketir, ancak bazı uygulamalarda bu parametreye ihtiyaç duyulabilir. -- `gasPrice`: `QUANTITY` - (isteğe bağlı) Ücretli her gaz için kullanılan gasPrice'ın tam sayısı -- `değer`: `QUANTITY` - (isteğe bağlı) Bu işlemle gönderilen değerin tam sayısı -- `input`: `DATA` - (isteğe bağlı) Yöntem imzasının ve kodlanmış parametrelerin karmasıdır. Ayrıntılar için [Solidity dokümanlarındaki Ethereum Sözleşmesi ABI'sine bakın](https://docs.soliditylang.org/en/latest/abi-spec.html). +- `from`: `VERİ`, 20 Bayt - (isteğe bağlı) İşlemin gönderildiği adres. +- `to`: `VERİ`, 20 Bayt - İşlemin yönlendirildiği adres. +- `gas`: `MİKTAR` - (isteğe bağlı) İşlemin yürütülmesi için sağlanan gazın tam sayısı. eth_call sıfır gaz tüketir, ancak bazı uygulamalarda bu parametreye ihtiyaç duyulabilir. +- `gasPrice`: `MİKTAR` - (isteğe bağlı) Ücretli her gaz için kullanılan gasPrice'ın tam sayısı +- `value`: `MİKTAR` - (isteğe bağlı) Bu işlemle gönderilen değerin tam sayısı +- `input`: `VERİ` - (isteğe bağlı) Metot imzasının ve kodlanmış parametrelerin karması. Ayrıntılar için [Solidity belgelerindeki Ethereum Contract ABI](https://docs.soliditylang.org/en/latest/abi-spec.html) bölümüne bakın. -2. `QUANTITY|TAG`- tamsayı blok numarası veya `"latest"`,`earliest"`,`"pending"`,`"safe"` veya `"finalized"` dizesi, [default block parameter](/developers/docs/apis/json-rpc/#default-block) kısmına göz atabilirsiniz +2. `MİKTAR|ETİKET` - tam sayı blok numarası veya `"latest"`, `"earliest"`, `"pending"`, `"safe"` ya da `"finalized"` dizesi, bkz. [blok parametresi](/developers/docs/apis/json-rpc/#block-parameter) -**Dönüşler** +**Döndürülenler** -`DATA` - yürütülen sözleşmenin dönüş değeridir. +`VERİ` - yürütülen sözleşmenin dönüş değeri. **Örnek** ```js -// Request +// İstek curl -X POST --data '{"jsonrpc":"2.0","method":"eth_call","params":[{see above}],"id":1}' -// Result +// Sonuç { "id":1, "jsonrpc": "2.0", @@ -1024,13 +1096,17 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_call","params":[{see above}] İşlemin tamamlanmasına izin vermek için ne kadar gazın gerekli olduğuna dair bir tahmin oluşturur ve döndürür. İşlem, blokzincire eklenmez. Tahminin, ESM mekaniği ve düğüm performansı dahil olmak üzere çeşitli nedenlerle işlem tarafından fiilen kullanılan gaz miktarından önemli ölçüde daha fazla olabileceğini unutmayın. + + Uç noktayı oyun alanında deneyin + + **Parametreler** -[eth_call](#eth_call) parametrelerine bakın, tüm seçeneklerin isteğe bağlı olması hariç. Gaz limiti belirtilmemişse geth, bekleyen bloktan gelen blok gaz limitini üst sınır olarak kullanır. Sonuç olarak, gaz miktarı bekleyen blok gaz limitinden daha yüksek olduğunda, döndürülen tahmin çağrıyı/işlemi gerçekleştirmek için yeterli olmayabilir. +[eth_call](#eth_call) parametrelerine bakın, tüm özelliklerin isteğe bağlı olması dışında. Gaz limiti belirtilmemişse geth, bekleyen bloktan gelen blok gaz limitini üst sınır olarak kullanır. Sonuç olarak, gaz miktarı bekleyen blok gaz limitinden daha yüksek olduğunda, döndürülen tahmin çağrıyı/işlemi yürütmek için yeterli olmayabilir. -**Dönüşler** +**Döndürülenler** -`QUANTITY` - kullanılan gaz miktarıdır. +`MİKTAR` - kullanılan gaz miktarı. **Örnek** @@ -1049,9 +1125,13 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_estimateGas","params":[{see Karma ile bir blok hakkında bilgi döndürür. + + Uç noktayı oyun alanında deneyin + + **Parametreler** -1. `DATA`, 32 Bayt - bir blokun şifresi. +1. `VERİ`, 32 Bayt - Bir bloğun karması. 2. `Boolean` - `true` ise tam işlem nesnelerini döndürür, `false` ise yalnızca işlemlerin karmalarını döndürür. ```js @@ -1061,41 +1141,40 @@ params: [ ] ``` -**Dönüşler** - -`Object` - Bir blok nesnesi veya blok bulunamadığında `null`: - -- `number`: `QUANTITY` - blok numarası. `null` Bekleyen blok olduğunda. -- `hash`: `DATA`, 32 Bayt - blokun özeti. `null` Bekleyen blok olduğunda. -- `parentHash`: `DATA`, 32 Bayt - ana blokun karması. -- `nonce`: `DATA`, 8 Bayt - oluşturulan iş ispatının karması. `null` Bekleyen blok olduğunda. -- `sha3Uncles`: `DATA`, 32 Bayt - bloktaki amca verilerinin SHA3'ü. -- `logsBloom`: `DATA`, 256 Bayt - blokun günlükleri için çiçek filtresi. `null` Bekleyen blok olduğunda. -- `transactionsRoot`: `DATA`, 32 Bayt - blokun işlem denemesinin kökü. -- `stateRoot`: `DATA`, 32 Bayt - blokun son durum denemesinin kökü. -- `receiptsRoot`: `DATA`, 32 Bayt - blokun makbuz denemesinin kökü. -- `madenci`: `DATA`, 20 Bayt - madencilik ödüllerinin verildiği yararlanıcının adresi. -- `difficulty`: `QUANTITY` - bu blok için zorluğun tam sayısı. -- `totalDifficulty`: `QUANTITY` - bu bloka kadar zincirin toplam zorluğunun tam sayısı. -- `extraData`: `DATA` - bu blokun "ekstra veri" alanı. -- `size`: `QUANTITY` - bu blokun bayt cinsinden boyutunun tam sayısı. -- `gasLimit`: `QUANTITY` - bu blokta izin verilen maksimum gaz. -- `GasUsed`: `QUANTITY` - bu bloktaki tüm işlemler tarafından kullanılan toplam gaz. -- `timestamp`: `QUANTITY` - blokun harmanlandığı zamana ilişkin unix zaman damgası. -- `transactions`: `Array` - Son verilen parametreye bağlı olarak işlem nesneleri dizisi veya 32 Bayt işlem karmaları. -- `uncles`: `Array` - Amca karmaları dizisi. +**Döndürülenler** + +`Nesne` - Bir blok nesnesi veya blok bulunamadığında `null`: + +- `number`: `MİKTAR` - blok numarası. Bekleyen bir blok olduğunda `null`. +- `hash`: `VERİ`, 32 Bayt - bloğun karması. Bekleyen bir blok olduğunda `null`. +- `parentHash`: `VERİ`, 32 Bayt - ana bloğun karması. +- `nonce`: `VERİ`, 8 Bayt - oluşturulan iş ispatının karması. Bekleyen bir blok olduğunda `null`, hisse ispatı blokları için `0x0` (Birleşim'den beri) +- `sha3Uncles`: `VERİ`, 32 Bayt - bloktaki amca (uncle) verilerinin SHA3'ü. +- `logsBloom`: `VERİ`, 256 Bayt - bloğun günlükleri için bloom filtresi. Bekleyen bir blok olduğunda `null`. +- `transactionsRoot`: `VERİ`, 32 Bayt - bloğun işlem trie'sinin kökü. +- `stateRoot`: `VERİ`, 32 Bayt - bloğun son durum trie'sinin kökü. +- `receiptsRoot`: `VERİ`, 32 Bayt - bloğun makbuz trie'sinin kökü. +- `miner`: `VERİ`, 20 Bayt - blok ödüllerinin verildiği lehtarın adresi. +- `difficulty`: `MİKTAR` - bu bloğun zorluğunun tam sayısı. +- `totalDifficulty`: `MİKTAR` - bu bloka kadar zincirin toplam zorluğunun tam sayısı. +- `extraData`: `VERİ` - bu bloğun "ekstra veri" alanı. +- `size`: `MİKTAR` - bu bloğun bayt cinsinden boyutunun tam sayısı. +- `gasLimit`: `MİKTAR` - bu blokta izin verilen maksimum gaz. +- `gasUsed`: `MİKTAR` - bu bloktaki tüm işlemler tarafından kullanılan toplam gaz. +- `timestamp`: `MİKTAR` - bloğun derlendiği zamana ilişkin unix zaman damgası. +- `transactions`: `Dizi` - İşlem nesneleri dizisi veya son verilen parametreye bağlı olarak 32 Bayt'lık işlem karmaları. +- `uncles`: `Dizi` - Amca (uncle) karmaları dizisi. **Örnek** ```js -// Request +// İstek curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockByHash","params":["0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae", false],"id":1}' -// Result -{ +// Sonuç { -"jsonrpc": "2.0", -"id": 1, -"result": { + "jsonrpc": "2.0", + "id": 1, + "result": { "difficulty": "0x4ea3f27bc", "extraData": "0x476574682f4c5649562f76312e302e302f6c696e75782f676f312e342e32", "gasLimit": "0x1388", @@ -1118,7 +1197,7 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockByHash","params":["0 "transactionsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncles": [ ] -} + } } ``` @@ -1126,9 +1205,13 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockByHash","params":["0 Blok numarasına göre bir blok hakkında bilgi döndürür. + + Uç noktayı oyun alanında deneyin + + **Parametreler** -1. `QUANTITY|TAG`- tamsayı blok numarası veya `"latest"`,`earliest"`,`"pending"`,`"safe"` veya `"finalized"` dizesi, [default block parameter](/developers/docs/apis/json-rpc/#default-block) kısmına göz atabilirsiniz. +1. `MİKTAR|ETİKET` - bir blok numarasının tam sayısı veya [blok parametresinde](/developers/docs/apis/json-rpc/#block-parameter) olduğu gibi `"earliest"`, `"latest"`, `"pending"`, `"safe"` ya da `"finalized"` dizesi. 2. `Boolean` - `true` ise tam işlem nesnelerini döndürür, `false` ise yalnızca işlemlerin karmalarını döndürür. ```js @@ -1138,12 +1221,13 @@ params: [ ] ``` -**İadeler** Bkz. [eth_getBlockByHash](#eth_getblockbyhash) +**Döndürülenler** +Bkz. [eth_getBlockByHash](#eth_getblockbyhash) **Örnek** ```js -// Request +// İstek curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockByNumber","params":["0x1b4", true],"id":1}' ``` @@ -1153,39 +1237,43 @@ Sonuç bkz. [eth_getBlockByHash](#eth_getblockbyhash) İşlem karması tarafından istenen bir işlem hakkındaki bilgileri döndürür. + + Uç noktayı oyun alanında deneyin + + **Parametreler** -1. `DATA`, 32 Bayt - bir işlemin özeti +1. `VERİ`, 32 Bayt - bir işlemin karması ```js params: ["0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b"] ``` -**Dönüşler** +**Döndürülenler** -`Object` - Bir işlem nesnesi veya işlem bulunamadığında `null`: +`Nesne` - Bir işlem nesnesi veya işlem bulunamadığında `null`: -- `blockHash`: `DATA`, 32 Bayt - bu işlemin yapıldığı blokun karması. `null` beklediğinde. -- `blockNumber`: `QUANTITY` - bu işlemin yapıldığı blok numarası. `null` beklediğinde. -- `from`: `DATA`, 20 Bayt - gönderenin adresi. -- `gas`: `QUANTITY` - gönderen tarafından sağlanan gaz. -- `gasPrice`: `QUANTITY` - Wei'de gönderen tarafından sağlanan gaz fiyatı. -- `hash`: `DATA`, 32 Bayt - işlemin özeti. -- `input`: `DATA` - işlemle birlikte gönderilen veriler. -- `nonce`: `QUANTITY` - göndericinin bundan önce yaptığı işlem sayısı. -- `to`: `DATA`, 20 Bayt - alıcının adresi. `null` bir sözleşme oluşturma işlemi olduğunda. -- `transactionIndex`: `QUANTITY` - bloktaki işlem endeksi pozisyonunun tam sayısı. `null` beklediğinde. -- `value`: `QUANTITY` - Wei'de aktarılan değer. -- `v`: `QUANTITY` - ECDSA kurtarma kimliği -- `r`: `QUANTITY` - ECDSA imzası r -- `r`: `QUANTITY` - ECDSA imzası s +- `blockHash`: `VERİ`, 32 Bayt - bu işlemin bulunduğu bloğun karması. Beklemedeyken `null`. +- `blockNumber`: `MİKTAR` - bu işlemin bulunduğu blok numarası. Beklemedeyken `null`. +- `from`: `VERİ`, 20 Bayt - göndericinin adresi. +- `gas`: `MİKTAR` - gönderici tarafından sağlanan gaz. +- `gasPrice`: `MİKTAR` - gönderici tarafından Wei cinsinden sağlanan gaz fiyatı. +- `hash`: `VERİ`, 32 Bayt - işlemin karması. +- `input`: `VERİ` - işlemle birlikte gönderilen veriler. +- `nonce`: `MİKTAR` - göndericinin bundan önce yaptığı işlem sayısı. +- `to`: `VERİ`, 20 Bayt - alıcının adresi. Bir sözleşme oluşturma işlemi olduğunda `null`. +- `transactionIndex`: `MİKTAR` - bloktaki işlemler dizin konumunun tam sayısı. Beklemedeyken `null`. +- `value`: `MİKTAR` - Wei cinsinden aktarılan değer. +- `v`: `MİKTAR` - ECDSA kurtarma kimliği +- `r`: `MİKTAR` - ECDSA imzası r +- `s`: `MİKTAR` - ECDSA imzası s **Örnek** ```js -// Request +// İstek curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByHash","params":["0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b"],"id":1}' -// Result +// Sonuç { "jsonrpc":"2.0", "id":1, @@ -1212,10 +1300,14 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByHash","param Blok karması ve işlem dizini konumuna göre bir işlem hakkındaki bilgileri döndürür. + + Uç noktayı oyun alanında deneyin + + **Parametreler** -1. `DATA`, 32 Bayt - bir blokun karması. -2. `QUANTITY` - işlem endeks pozisyonunun sayısı. +1. `VERİ`, 32 Bayt - bir bloğun karması. +2. `MİKTAR` - işlem dizin konumunun tam sayısı. ```js params: [ @@ -1224,7 +1316,8 @@ params: [ ] ``` -**Dönüşler** Bkz. [eth_getTransactionByHash](#eth_gettransactionbyhash) +**Döndürülenler** +Bkz. [eth_getTransactionByHash](#eth_gettransactionbyhash) **Örnek** @@ -1239,10 +1332,14 @@ Sonuç bkz. [eth_getTransactionByHash](#eth_gettransactionbyhash) Blok numarasına ve işlem dizini konumuna göre bir işlem hakkında bilgi döndürür. + + Uç noktayı oyun alanında deneyin + + **Parametreler** -1. `QUANTITY|TAG`- tamsayı blok numarası veya `"earliest"`,`"latest""`,`"pending"`,`"safe"` veya `"finalized"` dizesi, [default block parameter](/developers/docs/apis/json-rpc/#default-block) kısmına göz atabilirsiniz. -2. `QUANTITY` - işlem endeks pozisyonu. +1. `MİKTAR|ETİKET` - bir blok numarası veya [blok parametresinde](/developers/docs/apis/json-rpc/#block-parameter) olduğu gibi `"earliest"`, `"latest"`, `"pending"`, `"safe"` ya da `"finalized"` dizesi. +2. `MİKTAR` - işlem dizin konumu. ```js params: [ @@ -1251,12 +1348,13 @@ params: [ ] ``` -**Dönüşler** Bkz. [eth_getTransactionByHash](#eth_gettransactionbyhash) +**Döndürülenler** +Bkz. [eth_getTransactionByHash](#eth_gettransactionbyhash) **Örnek** ```js -// Request +// İstek curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByBlockNumberAndIndex","params":["0x9c47cf", "0x24"],"id":1}' ``` @@ -1270,39 +1368,40 @@ Sonuç bkz. [eth_getTransactionByHash](#eth_gettransactionbyhash) **Parametreler** -1. `VERİ`, 32 Bayt - bir işlemin özeti +1. `VERİ`, 32 Bayt - bir işlemin karması ```js params: ["0x85d995eba9763907fdf35cd2034144dd9d53ce32cbec21349d4b12823c6860c5"] ``` -**Dönüşler** `Object` - Bir işlem makbuzu nesnesi veya makbuz bulunamadığında `null`: +**Döndürülenler** +`Nesne` - Bir işlem makbuzu nesnesi veya makbuz bulunamadığında `null`: -- `transactionHash`: `DATA`, 32 Bayt - işlemin özeti. -- `transactionIndex`: `QUANTITY` - bloktaki işlem endeksi pozisyonunun tam sayısı. -- `blockHash`: `DATA`, 32 Bayt - bu işlemin yapıldığı blokun karması. -- `blockNumber`: `QUANTITY` - bu işlemin yapıldığı blok numarası. -- `from`: `DATA`, 20 Bayt - gönderenin adresi. -- `to`: `DATA`, 20 Bayt - alıcının adresi. bir sözleşme oluşturma işlemi olduğunda null. -- `cumulativeGasUsed` : `QUANTITY` - Bu işlem blokta yürütüldüğünde kullanılan toplam gaz miktarı. -- `effectiveGasPrice` : `QUANTITY` - Ana ücretin ve gaz birimi başına ödenen bahşişin toplamı. -- `GasUsed`: `QUANTITY` - Yalnızca bu özel işlem tarafından kullanılan gaz miktarı. -- `contractAddress`: `DATA`, 20 Bayt - İşlem bir sözleşme oluşturma ise, oluşturulan sözleşme adresi, aksi takdirde `null`. -- `logs`: `Array` - Bu işlemin oluşturduğu günlük nesneleri dizisi. -- `logsBloom`: `DATA`, 256 Bayt - Hafif istemcilerin ilgili günlükleri hızlı bir şekilde alması için çiçek filtresi. -- `type`: `QUANTITY` - işlem türünün tam sayısı, eski tarz işlemler için `0x0`, erişim listesi türleri için `0x1`, değişken ücretler için `0x2`. +- `transactionHash `: `VERİ`, 32 Bayt - işlemin karması. +- `transactionIndex`: `MİKTAR` - bloktaki işlemler dizin konumunun tam sayısı. +- `blockHash`: `VERİ`, 32 Bayt - bu işlemin bulunduğu bloğun karması. +- `blockNumber`: `MİKTAR` - bu işlemin bulunduğu blok numarası. +- `from`: `VERİ`, 20 Bayt - göndericinin adresi. +- `to`: `VERİ`, 20 Bayt - alıcının adresi. bir sözleşme oluşturma işlemi olduğunda null. +- `cumulativeGasUsed` : `MİKTAR` - Bu işlem blokta yürütüldüğünde kullanılan toplam gaz miktarı. +- `effectiveGasPrice` : `MİKTAR` - Taban ücretin ve gaz birimi başına ödenen bahşişin toplamı. +- `gasUsed `: `MİKTAR` - Yalnızca bu özel işlem tarafından kullanılan gaz miktarı. +- `contractAddress `: `VERİ`, 20 Bayt - İşlem bir sözleşme oluşturma ise, oluşturulan sözleşme adresi, aksi takdirde `null`. +- `logs`: `Dizi` - Bu işlemin oluşturduğu günlük nesneleri dizisi. +- `logsBloom`: `VERİ`, 256 Bayt - İlgili günlükleri hızlı bir şekilde almak için hafif istemciler için Bloom filtresi. +- `type`: `MİKTAR` - işlem türünün tam sayısı, eski işlemler için `0x0`, erişim listesi türleri için `0x1`, dinamik ücretler için `0x2`. -Ayrıca _her ikisinden birini_ döndürür: +Ayrıca şunlardan birini döndürür: -- `root` : `DATA` 32 bayt işlem sonrası durum kökü (Bizans öncesi) -- `status`: `QUANTITY` ya `1` (başarılı) veya `0` (başarısız) +- `root` : `VERİ` 32 bayt işlem sonrası durum kökü (Bizans öncesi) +- `status`: `MİKTAR` ya `1` (başarılı) ya da `0` (başarısız) **Örnek** ```js -// Request +// İstek curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionReceipt","params":["0x85d995eba9763907fdf35cd2034144dd9d53ce32cbec21349d4b12823c6860c5"],"id":1}' -// Result +// Sonuç { "jsonrpc": "2.0", "id": 1, @@ -1310,15 +1409,15 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionReceipt","para "blockHash": "0xa957d47df264a31badc3ae823e10ac1d444b098d9b73d204c40426e57f47e8c3", "blockNumber": "0xeff35f", - "contractAddress": null, // string of the address if it was created + "contractAddress": null, // oluşturulmuşsa adresin dizesi "cumulativeGasUsed": "0xa12515", "effectiveGasPrice": "0x5a9c688d4", "from": "0x6221a9c005f6e47eb398fd867784cacfdcfff4e7", "gasUsed": "0xb4c8", "logs": [{ - // logs as returned by getFilterLogs, etc. + // getFilterLogs tarafından döndürülen günlükler, vb. }], - "logsBloom": "0x00...0", // 256 byte bloom filter + "logsBloom": "0x00...0", // 256 bayt bloom filtresi "status": "0x1", "to": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", "transactionHash": @@ -1331,12 +1430,16 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionReceipt","para ### eth_getUncleByBlockHashAndIndex {#eth_getunclebyblockhashandindex} -Karma ve amca dizin konumuna göre bir bloğun amcası hakkında bilgi verir. +Karma ve amca (uncle) dizin konumuna göre bir bloğun amcası hakkında bilgi verir. + + + Uç noktayı oyun alanında deneyin + **Parametreler** -1. `DATA`, 32 Bayt - Bir blokun şifresi. -2. `QUANTITY` - Amcanın endeks pozisyonu. +1. `VERİ`, 32 Bayt - Bir bloğun karması. +2. `MİKTAR` - Amcanın (uncle) dizin konumu. ```js params: [ @@ -1345,7 +1448,8 @@ params: [ ] ``` -**İadeler** Bkz. [eth_getBlockByHash](#eth_getblockbyhash) +**Döndürülenler** +Bkz. [eth_getBlockByHash](#eth_getblockbyhash) **Örnek** @@ -1356,16 +1460,20 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleByBlockHashAndIndex" Sonuç bkz. [eth_getBlockByHash](#eth_getblockbyhash) -**Not**: Bir amca, bireysel işlemler içermez. +**Not**: Bir amca (uncle), bireysel işlemler içermez. ### eth_getUncleByBlockNumberAndIndex {#eth_getunclebyblocknumberandindex} -Sayıya ve amca dizin konumuna göre bir bloğun amcası hakkında bilgi verir. +Numaraya ve amca (uncle) dizin konumuna göre bir bloğun amcası hakkında bilgi verir. + + + Uç noktayı oyun alanında deneyin + **Parametreler** -1. `QUANTITY|TAG`- tamsayı blok numarası veya `"earliest"`,`"latest""`,`"pending"`,`"safe"`, `"finalized"` dizesi, [default block parameter](/developers/docs/apis/json-rpc/#default-block) kısmına göz atabilirsiniz. -2. `QUANTITY` - amcanın endeks pozisyonu. +1. `MİKTAR|ETİKET` - bir blok numarası veya [blok parametresinde](/developers/docs/apis/json-rpc/#block-parameter) olduğu gibi `"earliest"`, `"latest"`, `"pending"`, `"safe"` ya da `"finalized"` dizesi. +2. `MİKTAR` - amcanın (uncle) dizin konumu. ```js params: [ @@ -1374,14 +1482,15 @@ params: [ ] ``` -**İadeler** Bkz. [eth_getBlockByHash](#eth_getblockbyhash) +**Döndürülenler** +Bkz. [eth_getBlockByHash](#eth_getblockbyhash) -**Not**: Bir amca, bireysel işlemler içermez. +**Not**: Bir amca (uncle), bireysel işlemler içermez. **Örnek** ```js -// Request +// İstek curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleByBlockNumberAndIndex","params":["0x29c", "0x0"],"id":1}' ``` @@ -1389,23 +1498,25 @@ Sonuç bkz. [eth_getBlockByHash](#eth_getblockbyhash) ### eth_newFilter {#eth_newfilter} -Durum değiştiğinde (günlükler) bildirimde bulunmak için filtre seçeneklerine dayalı olarak bir filtre nesnesi oluşturur. Durumun değişip değişmediğini kontrol etmek için [eth_getFilterChanges](#eth_getfilterchanges)'i arayın. +Durum değiştiğinde (günlükler) bildirimde bulunmak için filtre seçeneklerine dayalı olarak bir filtre nesnesi oluşturur. +Durumun değişip değişmediğini kontrol etmek için [eth_getFilterChanges](#eth_getfilterchanges) çağrısı yapın. -**Konu filtrelerinin belirlenmesiyle ilgili bir not:** Konular sıraya bağlıdır. [A, B] konularına sahip günlük içeren bir işlem, aşağıdaki konu filtreleriyle eşleştirilecektir: +**Konu filtrelerini belirtme hakkında bir not:** +Konular sıraya bağlıdır. [A, B] konularına sahip günlük içeren bir işlem, aşağıdaki konu filtreleriyle eşleştirilecektir: - `[]` "herhangi bir şey" -- `[A]` "A birinci konumda (ve sonraki herhangi bir şey)" -- `[null, B]` "birinci konumdaki herhangi bir şey VE ikinci konumdaki B (ve sonraki herhangi bir şey)" -- `[A, B]` "A birinci konumda VE B ikinci konumda (ve sonraki herhangi bir şey)" -- `[[A, B], [A, B]]` "(A VEYA B) birinci konumda VE (A VEYA B) ikinci konumda (ve sonraki herhangi bir şey)" +- `[A]` "birinci konumda A (ve sonrası herhangi bir şey)" +- `[null, B]` "birinci konumda herhangi bir şey VE ikinci konumda B (ve sonrası herhangi bir şey)" +- `[A, B]` "birinci konumda A VE ikinci konumda B (ve sonrası herhangi bir şey)" +- `[[A, B], [A, B]]` "birinci konumda (A VEYA B) VE ikinci konumda (A VEYA B) (ve sonrası herhangi bir şey)" - **Parametreler** -1. `Object` - Filtre seçenekleri: +1. `Nesne` - Filtre seçenekleri: -- `fromBlock`: `QUANTITY|TAG` - (isteğe bağlı, default: `"latest"`) Tamsayı blok numarası veya son önerilen blok için `"latest"`, en son güvenli blok için `"safe"`, en son sonlandırılmış blok için `"finalized"`, henüz bir blokta olmayan işlemler için `"pending"` ve `"earliest"`. -- `toBlock`: `QUANTITY|TAG` - (isteğe bağlı, default: `"latest"`) Tamsayı blok numarası veya son önerilen blok için `"latest"`, en son güvenli blok için `"safe"`, en son sonlandırılmış blok için `"finalized"`, henüz bir blokta olmayan işlemler için `"pending"` ve `"earliest"`. -- `address`: `DATA|Array`, 20 Bayt - (isteğe bağlı) Sözleşme adresi veya günlüklerin kaynaklanması gereken adreslerin listesi. -- `topics`: `Array of DATA`, - (isteğe bağlı) 32 Baytlık dizi `DATA` konu. Konular sıraya bağlıdır. Her konu, "veya" seçenekleriyle birlikte bir VERİ dizisi de olabilir. +- `fromBlock`: `MİKTAR|ETİKET` - (isteğe bağlı, varsayılan: `"latest"`) Tam sayı blok numarası veya son önerilen blok için `"latest"`, en son güvenli blok için `"safe"`, en son kesinleşmiş blok için `"finalized"` veya henüz bir blokta olmayan işlemler için `"pending"`, `"earliest"`. +- `toBlock`: `MİKTAR|ETİKET` - (isteğe bağlı, varsayılan: `"latest"`) Tam sayı blok numarası veya son önerilen blok için `"latest"`, en son güvenli blok için `"safe"`, en son kesinleşmiş blok için `"finalized"` veya henüz bir blokta olmayan işlemler için `"pending"`, `"earliest"`. +- `address`: `VERİ|Dizi`, 20 Bayt - (isteğe bağlı) Sözleşme adresi veya günlüklerin kaynaklanması gereken adreslerin listesi. +- `topics`: `VERİ Dizisi`, - (isteğe bağlı) 32 Baytlık `VERİ` konuları dizisi. Konular sıraya bağlıdır. Her konu, "veya" seçenekleriyle birlikte bir VERİ dizisi de olabilir. ```js params: [ @@ -1425,14 +1536,15 @@ params: [ ] ``` -**Dönüşler** `QUANTITY` - Bir filtre kimliğidir. +**Döndürülenler** +`MİKTAR` - Bir filtre kimliği. **Örnek** ```js -// Request +// İstek curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newFilter","params":[{"topics":["0x12341234"]}],"id":73}' -// Result +// Sonuç { "id":1, "jsonrpc": "2.0", @@ -1442,18 +1554,21 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newFilter","params":[{"topic ### eth_newBlockFilter {#eth_newblockfilter} -Yeni bir blok geldiğinde bildirimde bulunmak için düğümde bir filtre oluşturur. Durumun değişip değişmediğini kontrol etmek için [eth_getFilterChanges](#eth_getfilterchanges)'i arayın. +Yeni bir blok geldiğinde bildirimde bulunmak için düğümde bir filtre oluşturur. +Durumun değişip değişmediğini kontrol etmek için [eth_getFilterChanges](#eth_getfilterchanges) çağrısı yapın. -**Parametreler** Hiçbiri +**Parametreler** +Yok -**Dönüşler** `QUANTITY` - Bir filtre kimliğidir. +**Döndürülenler** +`MİKTAR` - Bir filtre kimliği. **Örnek** ```js -// Request +// İstek curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newBlockFilter","params":[],"id":73}' -// Result +// Sonuç { "id":1, "jsonrpc": "2.0", @@ -1463,11 +1578,14 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newBlockFilter","params":[], ### eth_newPendingTransactionFilter {#eth_newpendingtransactionfilter} -Yeni bekleyen işlemler geldiğinde bildirimde bulunmak için düğümde bir filtre oluşturur. Durumun değişip değişmediğini kontrol etmek için [eth_getFilterChanges](#eth_getfilterchanges)'i arayın. +Yeni bekleyen işlemler geldiğinde bildirimde bulunmak için düğümde bir filtre oluşturur. +Durumun değişip değişmediğini kontrol etmek için [eth_getFilterChanges](#eth_getfilterchanges) çağrısı yapın. -**Parametreler** Hiçbiri +**Parametreler** +Yok -**Dönüşler** `QUANTITY` - Bir filtre kimliğidir. +**Döndürülenler** +`MİKTAR` - Bir filtre kimliği. **Örnek** @@ -1484,11 +1602,12 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newPendingTransactionFilter" ### eth_uninstallFilter {#eth_uninstallfilter} -Verilen kimliğe sahip bir filtreyi kaldırır. Saate artık ihtiyaç duyulmadığında daima çağrılmalıdır. Ek olarak Filtreler, belirli bir süre için [eth_getFilterChanges](#eth_getfilterchanges) ile istenmediğinde zaman aşımına uğrar. +Verilen kimliğe sahip bir filtreyi kaldırır. Saate artık ihtiyaç duyulmadığında daima çağrılmalıdır. +Ayrıca Filtreler, belirli bir süre boyunca [eth_getFilterChanges](#eth_getfilterchanges) ile istenmediğinde zaman aşımına uğrar. **Parametreler** -1. `QUANTITY` - Filtre kimliğidir. +1. `MİKTAR` - Filtre kimliği. ```js params: [ @@ -1496,14 +1615,15 @@ params: [ ] ``` -**Dönüşler** `Boolean` - Filtre başarıyla kaldırıldıysa `true`, aksi takdirde `false`. +**Döndürülenler** +`Boolean` - Filtre başarıyla kaldırıldıysa `true`, aksi takdirde `false`. **Örnek** ```js -// Request +// İstek curl -X POST --data '{"jsonrpc":"2.0","method":"eth_uninstallFilter","params":["0xb"],"id":73}' -// Result +// Sonuç { "id":1, "jsonrpc": "2.0", @@ -1517,7 +1637,7 @@ Son yoklamadan bu yana oluşan günlüklerin bir dizisini döndüren bir filtre **Parametreler** -1. `QUANTITY` - filtre kimliğidir. +1. `MİKTAR` - filtre kimliği. ```js params: [ @@ -1525,26 +1645,30 @@ params: [ ] ``` -**Dönüşler** `Array` - Günlük nesneleri dizisi veya son anketten bu yana hiçbir şey değişmediyse boş bir dizi. - -- `eth_newBlockFilter` ile oluşturulan filtreler için dönüş, blok karmalarıdır (`DATA`, 32 Bayt), ör. `["0x345464563453..."]`. -- `eth_newPendingTransactionFilter` ile oluşturulan filtreler için dönüş, işlem karmalarıdır (`DATA`, 32 Bayt), ör. `["0x6345343454645..."]`. -- `eth_newFilter` günlükleriyle oluşturulan filtreler için aşağıdaki parametrelere sahip nesnelerdir: - - `removed`: `TAG` - Zincirin yeniden düzenlenmesi nedeniyle günlük kaldırıldığında `true`. Geçerli bir günlükse `false`. - - `logIndex`: `QUANTITY` - bloktaki günlük dizini konumunun tam sayısı. `null` Bekleyen kayıt defteri olduğunda. - - `transactionIndex`: `QUANTITY` - işlem dizini pozisyon günlüğünün oluşturulduğu tam sayı. `null` Bekleyen kayıt defteri olduğunda. - - `transactionHash`: `DATA`, 32 Bayt - bu günlüğün oluşturulduğu işlemlerin karması. `null` Bekleyen kayıt defteri olduğunda. - - `blockHash`: `DATA`, 32 Bayt - bu günlüğün bulunduğu blokun karması. `null` beklediğinde. `null` Bekleyen kayıt defteri olduğunda. - - `blockNumber`: `QUANTITY` - bu günlüğün bulunduğu blok numarası. `null` beklediğinde. `null` Bekleyen kayıt defteri olduğunda. - - `address`: `DATA`, 20 Bayt - bu günlüğün kaynaklandığı adres. - - `data`: `DATA` - günlüğün sıfır veya daha fazla sayıda 32 Baytlık dizine eklenmemiş bağımsız değişkenlerini içerir. - - `topics`: `Array of DATA` - 0 ila 4 arası dizi 32 Bayt `DATA` dizine alınmış günlük bağımsız değişkenleri. (_solidity_'de: İlk konu, olayın imzasının _karma değeridir_ (ör. `Deposit(address,bytes32,uint256)`), ancak olayı `anonymous` belirteci ile bildirmeniz dışında.) +**Döndürülenler** +`Dizi` - Günlük nesneleri dizisi veya son yoklamadan bu yana hiçbir şey değişmediyse boş bir dizi. + +- `eth_newBlockFilter` ile oluşturulan filtreler için dönüş, blok karmalarıdır (`VERİ`, 32 Bayt), örn., `["0x3454645634534..."]`. + +- `eth_newPendingTransactionFilter` ile oluşturulan filtreler için dönüş, işlem karmalarıdır (`VERİ`, 32 Bayt), örn., `["0x6345343454645..."]`. + +- `eth_newFilter` ile oluşturulan filtreler için günlükler, aşağıdaki parametrelere sahip nesnelerdir: + - `removed`: `ETİKET` - `true`, günlük bir zincir yeniden düzenlenmesi nedeniyle kaldırıldığında. Geçerli bir günlükse `false`. + - `logIndex`: `MİKTAR` - bloktaki günlük dizin konumunun tam sayısı. Bekleyen bir günlük olduğunda `null`. + - `transactionIndex`: `MİKTAR` - günlüğün oluşturulduğu işlemler dizin konumunun tam sayısı. Bekleyen bir günlük olduğunda `null`. + - `transactionHash`: `VERİ`, 32 Bayt - bu günlüğün oluşturulduğu işlemlerin karması. Bekleyen bir günlük olduğunda `null`. + - `blockHash`: `VERİ`, 32 Bayt - bu günlüğün bulunduğu bloğun karması. Beklemedeyken `null`. Bekleyen bir günlük olduğunda `null`. + - `blockNumber`: `MİKTAR` - bu günlüğün bulunduğu blok numarası. Beklemedeyken `null`. Bekleyen bir günlük olduğunda `null`. + - `address`: `VERİ`, 20 Bayt - bu günlüğün kaynaklandığı adres. + - `data`: `VERİ` - değişken uzunluklu, dizine alınmamış günlük verileri. (_Solidity_'de: sıfır veya daha fazla 32 Bayt'lık dizine alınmamış günlük argümanları.) + - `topics`: `VERİ Dizisi` - 0 ila 4 arası 32 Baytlık dizine alınmış günlük argümanlarının `VERİ` dizisi. (_Solidity_'de: `anonymous` belirteciyle olayı bildirdiğiniz durumlar dışında, ilk konu olayın imzasının _karmasıdır_ (örneğin, `Deposit(address,bytes32,uint256)`)). + - **Örnek** ```js -// Request +// İstek curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getFilterChanges","params":["0x16"],"id":73}' -// Result +// Sonuç { "id":1, "jsonrpc":"2.0", @@ -1569,7 +1693,7 @@ Verilen kimliğe sahip filtreyle eşleşen tüm günlüklerin bir dizisini dönd **Parametreler** -1. `QUANTITY` - Filtre kimliğidir. +1. `MİKTAR` - Filtre kimliği. ```js params: [ @@ -1577,16 +1701,17 @@ params: [ ] ``` -**Dönüşler** Bkz. [eth_getFilterChanges](#eth_getfilterchanges) +**Döndürülenler** +Bkz. [eth_getFilterChanges](#eth_getfilterchanges) **Örnek** ```js -// Request +// İstek curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getFilterLogs","params":["0x16"],"id":74}' ``` -Sonuç, bkz. [eth_getFilterChanges](#eth_getfilterchanges) +Sonuç bkz. [eth_getFilterChanges](#eth_getfilterchanges) ### eth_getLogs {#eth_getlogs} @@ -1594,13 +1719,13 @@ Belirli bir filtre nesnesiyle eşleşen tüm günlüklerin bir dizisini döndür **Parametreler** -1. `Object` - Filtre seçenekleri: +1. `Nesne` - Filtre seçenekleri: -- `fromBlock`: `QUANTITY|TAG` - (isteğe bağlı, default: `"latest"`) Tamsayı blok numarası veya son önerilen blok için `"latest"`, en son güvenli blok için `"safe"`, en son sonlandırılmış blok için `"finalized"`, henüz bir blokta olmayan işlemler için `"pending"` ve `"earliest"`. -- `toBlock`: `QUANTITY|TAG` - (isteğe bağlı, default: `"latest"`) Tamsayı blok numarası veya son önerilen blok için `"latest"`, en son güvenli blok için `"safe"`, en son sonlandırılmış blok için `"finalized"`, henüz bir blokta olmayan işlemler için `"pending"` ve `"earliest"`. -- `address`: `DATA|Array`, 20 Bayt - (isteğe bağlı) Sözleşme adresi veya günlüklerin kaynaklanması gereken adreslerin listesi. -- `topics`: `Array of DATA`, - (isteğe bağlı) 32 Baytlık dizi `DATA` konu. Konular sıraya bağlıdır. Her konu, "veya" seçenekleriyle birlikte bir VERİ dizisi de olabilir. -- `blockhash`: `DATA`, 32 Bayt - (isteğe bağlı, **gelecek**) EIP-234 eklenmesiyle, `blockHash`, 32 baytlık `blockHash` ile tek bloka döndürülen günlükleri kısıtlayan yeni bir filtre seçeneği olacaktır. `blockHash` kullanımı, `fromBlock` ile eş değerdir = `toBlock` = `blockHash` karmalı blok numarası. Filtre ölçütlerinde `blockHash` varsa, ne `fromBlock` ne de `toBlock`'a izin verilmez. +- `fromBlock`: `MİKTAR|ETİKET` - (isteğe bağlı, varsayılan: `"latest"`) Tam sayı blok numarası veya son önerilen blok için `"latest"`, en son güvenli blok için `"safe"`, en son kesinleşmiş blok için `"finalized"` veya henüz bir blokta olmayan işlemler için `"pending"`, `"earliest"`. +- `toBlock`: `MİKTAR|ETİKET` - (isteğe bağlı, varsayılan: `"latest"`) Tam sayı blok numarası veya son önerilen blok için `"latest"`, en son güvenli blok için `"safe"`, en son kesinleşmiş blok için `"finalized"` veya henüz bir blokta olmayan işlemler için `"pending"`, `"earliest"`. +- `address`: `VERİ|Dizi`, 20 Bayt - (isteğe bağlı) Sözleşme adresi veya günlüklerin kaynaklanması gereken adreslerin listesi. +- `topics`: `VERİ Dizisi`, - (isteğe bağlı) 32 Baytlık `VERİ` konuları dizisi. Konular sıraya bağlıdır. Her konu, "veya" seçenekleriyle birlikte bir VERİ dizisi de olabilir. +- `blockHash`: `VERİ`, 32 Bayt - (isteğe bağlı, **gelecek**) EIP-234'ün eklenmesiyle, `blockHash`, döndürülen günlükleri 32 baytlık karma `blockHash` ile tek bir blokla kısıtlayan yeni bir filtre seçeneği olacaktır. `blockHash` kullanmak, `fromBlock` = `toBlock` = `blockHash` karmasına sahip blok numarası ile eşdeğerdir. Filtre kriterlerinde `blockHash` mevcutsa, ne `fromBlock` ne de `toBlock`'a izin verilmez. ```js params: [ @@ -1612,24 +1737,25 @@ params: [ ] ``` -**Dönüşler** Bkz. [eth_getFilterChanges](#eth_getfilterchanges) +**Döndürülenler** +Bkz. [eth_getFilterChanges](#eth_getfilterchanges) **Örnek** ```js -// Request +// İstek curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getLogs","params":[{"topics":["0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b"]}],"id":74}' ``` -Sonuç, bkz. [eth_getFilterChanges](#eth_getfilterchanges) +Sonuç bkz. [eth_getFilterChanges](#eth_getfilterchanges) ## Kullanım Örneği {#usage-example} -### JSON_RPC kullanarak bir sözleşmeyi dağıtma {#deploying-contract} +### JSON_RPC kullanarak bir sözleşme dağıtma {#deploying-contract} -Bu bölüm, yalnızca RPC arayüzünü kullanarak bir sözleşmenin nasıl dağıtılacağının gösterimini içerir. Bu karmaşıklığın ortadan kaldırıldığı sözleşmeleri dağıtmanın alternatif yolları vardır; örneğin, [web3.js](https://web3js.readthedocs.io/) ve [web3.py](https://github.com/ethereum/web3.py) gibi RPC arayüzünün üzerine kurulmuş kitaplıkları kullanmak gibi. Bu soyutlamaların anlaşılması genellikle daha kolaydır ve hataya karşı daha korumalıdır, ancak kaputun altında neler oldup bittiğini anlamak yine de yardımcı olur. +Bu bölüm, yalnızca RPC arayüzünü kullanarak bir sözleşmenin nasıl dağıtılacağının gösterimini içerir. Bu karmaşıklığın soyutlandığı, sözleşmeleri dağıtmak için alternatif yollar vardır — örneğin, [web3.js](https://web3js.readthedocs.io/) ve [web3.py](https://github.com/ethereum/web3.py) gibi RPC arayüzünün üzerine kurulu kütüphaneleri kullanmak. Bu soyutlamaların anlaşılması genellikle daha kolaydır ve hataya karşı daha korumalıdır, ancak kaputun altında neler oldup bittiğini anlamak yine de yardımcı olur. -JSON-RPC arabirimi kullanılarak bir Ethereum düğümüne dağıtılacak olan `Multiply7` adlı basit bir akıllı sözleşmeyi aşağıda görebilirsiniz. Bu öğretici, okuyucunun zaten bir Geth düğümü çalıştırdığını varsayar. Düğümler ve istemciler hakkında daha fazla bilgiyi [burada](/developers/docs/nodes-and-clients/run-a-node) bulabilirsiniz. Geth olmayan istemciler için HTTP JSON-RPC'nin nasıl başlatılacağını görmek için lütfen bireysel [istemci](/developers/docs/nodes-and-clients/) dokümanlarına bakın. Çoğu istemci, varsayılan olarak `localhost:8545` üzerinde hizmet verir. +Aşağıdaki, JSON-RPC arayüzü kullanılarak bir Ethereum düğümüne dağıtılacak olan `Multiply7` adlı basit bir akıllı sözleşmedir. Bu öğretici, okuyucunun zaten bir Geth düğümü çalıştırdığını varsayar. Düğümler ve istemciler hakkında daha fazla bilgiye [buradan](/developers/docs/nodes-and-clients/run-a-node) ulaşabilirsiniz. Geth olmayan istemciler için HTTP JSON-RPC'nin nasıl başlatılacağını görmek için lütfen bireysel [istemci](/developers/docs/nodes-and-clients/) belgelerine bakın. Çoğu istemci, varsayılan olarak `localhost:8545` üzerinde hizmet verir. ```javascript contract Multiply7 { @@ -1649,10 +1775,10 @@ geth --http --dev console 2>>geth.log Bu, `http://localhost:8545` üzerinde HTTP RPC arayüzünü başlatır. -[curl](https://curl.se) kullanarak Coinbase adresini ve bakiyeyi alarak arayüzün çalıştığını doğrulayabiliriz. Lütfen bu örneklerdeki verilerin yerel düğümünüzde farklılık göstereceğini unutmayın. Bu komutları denemek istiyorsanız, ikinci kıvrılma isteğindeki istek paragraflarını ilkinden döndürülen sonuçla değiştirin. +Arayüzün çalıştığını, coinbase adresini (hesaplar dizisinden ilk adresi alarak) ve bakiyeyi [curl](https://curl.se) kullanarak alarak doğrulayabiliriz. Lütfen bu örneklerdeki verilerin yerel düğümünüzde farklılık göstereceğini unutmayın. Bu komutları denemek istiyorsanız, ikinci kıvrılma isteğindeki istek paragraflarını ilkinden döndürülen sonuçla değiştirin. ```bash -curl --data '{"jsonrpc":"2.0","method":"eth_coinbase", "id":1}' -H "Content-Type: application/json" localhost:8545 +curl --data '{"jsonrpc":"2.0","method":"eth_accounts","params":[], "id":1}' -H "Content-Type: application/json" localhost:8545 {"id":1,"jsonrpc":"2.0","result":["0x9b1d35635cc34752ca54713bb99d38614f63c955"]} curl --data '{"jsonrpc":"2.0","method":"eth_getBalance", "params": ["0x9b1d35635cc34752ca54713bb99d38614f63c955", "latest"], "id":2}' -H "Content-Type: application/json" localhost:8545 @@ -1666,9 +1792,9 @@ web3.fromWei("0x1639e49bba16280000", "ether") // "410" ``` -Artık özel geliştirme zincirimizde bir miktar ether olduğuna göre sözleşmeyi dağıtabiliriz. İlk adım, Multiply7 sözleşmesini EVM'ye gönderilebilecek bayt kodunu derlemektir. Solidity derleyicisi olan solc'yi kurmak için [Solidity dokümanlarını](https://docs.soliditylang.org/en/latest/installing-solidity.html) izleyin. (Örneğimizde kullanılan derleyici sürümüyle eşleşmesi için [daha eski bir `solc` sürümü kullanmak isteyebilirsiniz](https://github.com/ethereum/solidity/releases/tag/v0.4.20).) +Artık özel geliştirme zincirimizde bir miktar ether olduğuna göre sözleşmeyi dağıtabiliriz. İlk adım, Multiply7 sözleşmesini EVM'ye gönderilebilecek bayt kodunu derlemektir. Solidity derleyicisi olan solc'u kurmak için [Solidity belgelerini](https://docs.soliditylang.org/en/latest/installing-solidity.html) takip edin. (Örneğimizde kullanılan derleyici sürümüyle ([v0.4.20](https://github.com/ethereum/solidity/releases/tag/v0.4.20)) eşleşmesi için daha eski bir `solc` sürümü kullanmak isteyebilirsiniz.) -Bir sonraki adım, Multiply7 sözleşmesini EVM'ye gönderilebilecek bayt kodunu derlemektir. +Bir sonraki adım, Multiply7 sözleşmesini EVM'ye gönderilebilecek bayt koduna derlemektir. ```bash echo 'pragma solidity ^0.4.16; contract Multiply7 { event Print(uint); function multiply(uint input) public returns (uint) { Print(input * 7); return input * 7; } }' | solc --bin @@ -1678,7 +1804,7 @@ Binary: 6060604052341561000f57600080fd5b60eb8061001d6000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c6888fa1146044575b600080fd5b3415604e57600080fd5b606260048080359060200190919050506078565b6040518082815260200191505060405180910390f35b60007f24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da600783026040518082815260200191505060405180910390a16007820290509190505600a165627a7a7230582040383f19d9f65246752244189b02f56e8d0980ed44e7a56c0b200458caad20bb0029 ``` -Artık derlenmiş koda sahip olduğumuza göre, onu dağıtmanın ne kadar gaza mal olacağını belirlememiz gerekiyor. RPC arayüzünde bize bir tahmin verecek bir `eth_estimateGas` yöntemi mevcuttur. +Artık derlenmiş koda sahip olduğumuza göre, onu dağıtmanın ne kadar gaza mal olacağını belirlememiz gerekiyor. RPC arayüzünde bize bir tahmin verecek bir `eth_estimateGas` metodu mevcuttur. ```bash curl --data '{"jsonrpc":"2.0","method": "eth_estimateGas", "params": [{"from": "0x9b1d35635cc34752ca54713bb99d38614f63c955", "data": "0x6060604052341561000f57600080fd5b60eb8061001d6000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c6888fa1146044575b600080fd5b3415604e57600080fd5b606260048080359060200190919050506078565b6040518082815260200191505060405180910390f35b60007f24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da600783026040518082815260200191505060405180910390a16007820290509190505600a165627a7a7230582040383f19d9f65246752244189b02f56e8d0980ed44e7a56c0b200458caad20bb0029"}], "id": 5}' -H "Content-Type: application/json" localhost:8545 @@ -1692,7 +1818,7 @@ curl --data '{"jsonrpc":"2.0","method": "eth_sendTransaction", "params": [{"from {"id":6,"jsonrpc":"2.0","result":"0xe1f3095770633ab2b18081658bad475439f6a08c902d0915903bafff06e6febf"} ``` -İşlem, düğüm tarafından kabul edilir ve bir işlem karması döndürülür. Bu karma, işlemi takip etmek için kullanılabilir. Bir sonraki adım, sözleşmemizin dağıtıldığı adresi belirlemektir. Gerçekleştirilen her işlemi bir makbuz oluşturacaktır. Bu makbuz, işlemin hangi bloğa dahil olduğu ve ESM tarafından ne kadar gaz kullanıldığı gibi işlemle ilgili çeşitli bilgileri içerir. Bir işlem bir sözleşme oluşturuyorsa, sözleşme adresini de içerecektir. `eth_getTransactionReceipt` RPC yöntemiyle makbuzu alabiliriz. +İşlem, düğüm tarafından kabul edilir ve bir işlem karması döndürülür. Bu karma, işlemi takip etmek için kullanılabilir. Bir sonraki adım, sözleşmemizin dağıtıldığı adresi belirlemektir. Gerçekleştirilen her işlemi bir makbuz oluşturacaktır. Bu makbuz, işlemin hangi bloka dahil olduğu ve ESM tarafından ne kadar gaz kullanıldığı gibi işlemle ilgili çeşitli bilgileri içerir. Bir işlem bir sözleşme oluşturuyorsa, sözleşme adresini de içerecektir. `eth_getTransactionReceipt` RPC metoduyla makbuzu alabiliriz. ```bash curl --data '{"jsonrpc":"2.0","method": "eth_getTransactionReceipt", "params": ["0xe1f3095770633ab2b18081658bad475439f6a08c902d0915903bafff06e6febf"], "id": 7}' -H "Content-Type: application/json" localhost:8545 @@ -1703,9 +1829,9 @@ Sözleşmemiz `0x4d03d617d700cf81935d7f797f4e2ae719648262` üzerinde oluşturuld #### Akıllı sözleşmelerle etkileşim {#interacting-with-smart-contract} -Bu örnekte, sözleşmenin `multiply` yöntemine, `eth_sendTransaction` kullanarak bir işlem göndereceğiz. +Bu örnekte, `eth_sendTransaction` kullanarak sözleşmenin `multiply` metoduna bir işlem göndereceğiz. -`eth_sendTransaction`, özellikle `from`, `to` ve `data` olmak üzere birkaç bağımsız değişken gerektirir. `From` hesabımızın genel adresidir ve `to` da sözleşme adresidir. `Data` bağımsız değişkeni, hangi yöntemin hangi bağımsız değişkenlerle çağrılması gerektiğini tanımlayan bir yük içerir. Burada [ABI (uygulama ikili arayüzü)](https://docs.soliditylang.org/en/latest/abi-spec.html) devreye girer. ABI, EVM için verilerin nasıl tanımlanacağını ve kodlanacağını tanımlayan bir JSON dosyasıdır. +`eth_sendTransaction` özellikle `from`, `to` ve `data` olmak üzere birkaç argüman gerektirir. `From` hesabımızın genel adresidir ve `to` da sözleşme adresidir. `data` argümanı, hangi metodun hangi argümanlarla çağrılması gerektiğini tanımlayan bir yük içerir. İşte bu noktada [ABI (uygulama ikili arayüzü)](https://docs.soliditylang.org/en/latest/abi-spec.html) devreye giriyor. ABI, EVM için verilerin nasıl tanımlanacağını ve kodlanacağını tanımlayan bir JSON dosyasıdır. Yükün baytları, sözleşmedeki hangi yöntemin çağrılacağını tanımlar. Bu, fonksiyon adı ve argüman türleri üzerindeki Keccak karma değerinin ilk 4 baytıdır ve on altılık şekilde kodlanmıştır. Çarpma fonksiyonu, uint256 için bir takma ad olan uint'i kabul eder. Bu, bize şunu bırakır: @@ -1716,11 +1842,11 @@ web3.sha3("multiply(uint256)").substring(0, 10) Bir sonraki adım, argümanları kodlamaktır. Yalnızca bir uint256 var, diyelim ki değeri 6. ABI, uint256 türlerinin nasıl kodlanacağını belirten bir bölüme sahiptir. -`int: enc(X)`, yüksek dereceden (sol) tarafta negatif X için 0xff ve sıfır > Uzunluk 32 baytın katı olacak şekilde pozitif X için baytlardan oluşan X'in büyük endian ikinin tümleyeni kodlamasıdır. +`int: enc(X)`, X'in büyük endian ikinin tümleyeni kodlamasıdır, yüksek dereceli (sol) tarafta negatif X için 0xff ve uzunluk 32 baytın katı olacak şekilde pozitif X için sıfır baytlarla doldurulmuştur. -Bu, `0000000000000000000000000000000000000000000000000000000000000006` olarak kodlar. +Bu, `0000000000000000000000000000000000000000000000000000000000000006` olarak kodlanır. -Fonksiyon seçiciyi ve kodlanmış argümanı birleştirdiğimizde verilerimiz `0xc6888fa1000000000000000000000000000000000000000000000000000000000000000` olur. +Fonksiyon seçiciyi ve kodlanmış argümanı birleştirdiğimizde verilerimiz `0xc6888fa10000000000000000000000000000000000000000000000000000000000000006` olacaktır. Bu, artık düğüme gönderilebilir: @@ -1753,7 +1879,7 @@ Bir işlem gönderildiğinden, bir işlem karması döndürülmüştür. Makbuzu } ``` -Makbuz, bir günlük içerir. Bu günlük, işlem yürütülürken EVM tarafından oluşturulur ve makbuza dahil edilir. `multiply` işlevi, `Print` olayının 7 giriş değeriyle tetiklendiğini gösterir. `Print` olayının argümanı uint256 olduğundan, bunu ABI kurallarına göre çözebiliriz ve bu da bize beklenen ondalık sayı 42'yi bırakır. Verilerin yanı sıra, günlüğü hangi olayın oluşturduğunu belirlemek için konuların kullanılabileceğini belirtmekte fayda vardır: +Makbuz, bir günlük içerir. Bu günlük, işlem yürütülürken EVM tarafından oluşturulur ve makbuza dahil edilir. `multiply` fonksiyonu, `Print` olayının girdinin 7 katı ile tetiklendiğini gösterir. `Print` olayının argümanı bir uint256 olduğundan, bunu ABI kurallarına göre çözebiliriz ve bu da bize beklenen ondalık sayı 42'yi verir. Verilerin yanı sıra, günlüğü hangi olayın oluşturduğunu belirlemek için konuların kullanılabileceğini belirtmekte fayda vardır: ```javascript web3.sha3("Print(uint256)") @@ -1762,10 +1888,10 @@ web3.sha3("Print(uint256)") Bu, JSON-RPC'nin doğrudan kullanımını gösteren en yaygın görevlerden bazılarına kısa bir giriş niteliğindeydi. -## İlgili konular {#related-topics} +## Alakalı başlıklar {#related-topics} - [JSON-RPC spesifikasyonu](http://www.jsonrpc.org/specification) -- [ Düğümler ve İstemciler](/developers/docs/nodes-and-clients/) -- [JavaScript API'ları](/developers/docs/apis/javascript/) -- [Arka Uç API'ları](/developers/docs/apis/backend/) +- [Düğümler ve istemciler](/developers/docs/nodes-and-clients/) +- [JavaScript API'leri](/developers/docs/apis/javascript/) +- [Arka uç API'leri](/developers/docs/apis/backend/) - [Yürütme istemcileri](/developers/docs/nodes-and-clients/#execution-clients) diff --git a/public/content/translations/tr/developers/docs/blocks/index.md b/public/content/translations/tr/developers/docs/blocks/index.md index eb6ba8ab419..23e7b542f07 100644 --- a/public/content/translations/tr/developers/docs/blocks/index.md +++ b/public/content/translations/tr/developers/docs/blocks/index.md @@ -1,6 +1,6 @@ --- title: Bloklar -description: Ethereum blok zincirindeki blokların veri yapıları, neden gerekli oldukları ve nasıl oluşturuldukları hakkında bir tanıtım. +description: "Ethereum blok zincirindeki blokların veri yapıları, neden gerekli oldukları ve nasıl oluşturuldukları hakkında bir tanıtım." lang: tr --- @@ -8,23 +8,24 @@ Bloklar, zincirde yer alan bir önceki blok hakkındaki hash değerlerini barın ## Ön Koşullar {#prerequisites} -Bloklar, yeni başlayanlar için uygun bir konudur. Ancak bu sayfayı daha iyi anlamanıza yardımcı olmak için önce [Hesaplar](/developers/docs/accounts/), [İşlemler](/developers/docs/transactions/) ve [Ethereum'a giriş](/developers/docs/intro-to-ethereum/) bölümlerini okumanızı öneririz. +Bloklar, yeni başlayanlar için uygun bir konudur. Ancak bu sayfayı daha iyi anlamanıza yardımcı olması için öncelikle [Hesaplar](/developers/docs/accounts/), [İşlemler](/developers/docs/transactions/) ve [Ethereum'a giriş](/developers/docs/intro-to-ethereum/) yazılarımızı okumanızı öneririz. ## Bloklar neden gerekli? {#why-blocks} Ethereum ağındaki tüm katılımcıların senkronize durumlarını sürdürmesini ve işlemlerin kesin geçmişi üzerinde anlaşmasını sağlamak için işlemleri bloklar hâlinde topluyoruz. Bu, düzinelerce (veya yüzlerce) işlemin aynı anda yapıldığı, üzerinde anlaşmaya varıldığı ve senkronize edildiği anlamına gelir. -![Durum değişikliklerine neden olan bir bloktaki işlemi gösteren bir diyagram](./tx-block.png) _Diyagram [Ethereum EVM resmediciden](https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf) uyarlanmıştır_ +![Bir bloktaki işlemin durum değişikliklerine neden olduğunu gösteren bir diyagram](./tx-block.png) +_Diyagram [Resimli Ethereum EVM](https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf) kaynağından uyarlanmıştır_ Kod girişleri arasında belirli bir süre tanıyarak ağ katılımcıları için yeterli zamanı veriyoruz: işlem talepleri saniye başına düzinelerce oluşsa da bloklar Ethereum üzerinde on iki saniyede bir yaratılmaktadır ve oluşmaktadır. -## Blokların çalışma şekli {#how-blocks-work} +## Bloklar nasıl çalışır? {#how-blocks-work} İşlem geçmişini korumak için, bloklar titizlikle sıralanır (oluşturulan her yeni blok, önceki bloğa bir referans içerir) ve bloklar içindeki işlemler de titizlikle sıralanır. Herhangi bir zamanda olabilecek nadir durumlar dışında ağdaki tüm katılımcılar, blokların tam sayısı ve geçmişi konusunda mutabıktır ve mevcut aktif işlem taleplerini bir sonraki blokta gruplandırmak için çalışmaktadır. Bir blok, ağ üzerinden rastgele seçilmiş doğruluyacılar tarafından bir araya getirildiğinde ağın geri kalanına yayılır, bütün düğümler bu bloku kendi blok zincirlerinin sonuna ekler ve yeni bloku yaratmak için yeni bir doğrulayıcı seçilir. Bu blok birleştirme süreci ve taahtütname/mutabakat süreci şu anda Ethereum'un "hisse ispatı" protokolü tarafından özelleştiriliyor. -## Hisse ispatı protokolü {#proof-of-work-protocol} +## Hisse ispatı protokolü {#proof-of-stake-protocol} Hisse ispatının anlamı aşağıdaki gibidir: @@ -33,59 +34,59 @@ Hisse ispatının anlamı aşağıdaki gibidir: - Yeni blokun haberini alan diğer doğrulayıcılar küresel durum değişim önerisine uydukarını güvence altına almak için işlemleri tekrar yürütürler. Blokun geçerli olduğunu varsayarsak kendi veritabanlarına ekler. - Eğer bir doğrulayıcı çelişen iki blok hakkında bir haber alırsa en çok ETH hisselemiş olanı çatal seçim algoritmasını kullanarak seçer. -[Hisse ispatı hakkında daha fazla bilgi](/developers/docs/consensus-mechanisms/pos) +[Hisse ispatı hakkında daha fazlası](/developers/docs/consensus-mechanisms/pos) ## Bir blokta neler yer alır? {#block-anatomy} Bir blok içinde barındırılan çok fazla bilgi vardır. En yüksek düzeyde, bir blok aşağıdaki alanları barındırır: | Alan | Açıklama | -|:---------------- |:------------------------------------------------------ | +| :--------------- | :----------------------------------------------------- | | `yuva` | blokun ait olduğu yuva | | `proposer_index` | bloku öneren doğrulayıcının kimliği | | `parent_root` | önceki blokun karması | | `state_root` | durum nesnesinin kök karması | | `şablon` | aşağıda tanımlandığı gibi birkaç alan içeren bir nesne | -Blok `gövdesi` kendi başına birkaç alana sahiptir: +Blok `body`'si kendi içinde çeşitli alanlar içerir: | Alan | Açıklama | -|:-------------------- |:-------------------------------------------------------------------------- | +| :------------------- | :------------------------------------------------------------------------- | | `randao_reveal` | bir sonraki blok önericisini seçmek için kullanılan değer | | `eth1_data` | depozito sözleşmesi hakkında bilgi | | `graffiti` | blokları etiketlemek için kullanılan keyfi veriler | | `proposer_slashings` | kesilecek doğrulayıcıların listesi | | `attester_slashings` | kesilecek tasdik edenlerin listesi | -| `tasdikler` | mevcut blok lehine tasdik listesi | +| `tasdikler` | önceki yuvalar için yapılan tasdiklerin listesi | | `depozitolar` | depozito sözleşmesine yeni depozito listesi | | `voluntary_exits` | ağdan çıkan doğrulayıcıların listesi | | `sync_aggregate` | hafif istemcilere hizmet etmek için kullanılan doğrulayıcıların alt kümesi | | `execution_payload` | yürütüm istemcisinden geçirilen işlemler | -`Tasdik` alanı, bloktaki tüm tasdiklerin bir listesini içerir. Tasdiklerin, birkaç veri parçası içeren kendi veri türleri vardır. Her tasdik şunları içerir: +`attestations` alanı, bloktaki tüm tasdiklerin bir listesini içerir. Tasdiklerin, birkaç veri parçası içeren kendi veri türleri vardır. Her tasdik şunları içerir: -| Alan | Açıklama | -|:------------------ |:---------------------------------------------------------- | -| `aggregation_bits` | bu tasdiğe hangi doğrulayıcıların katıldığının bir listesi | -| `veri` | birden çok alt alana sahip bir barındırıcı | -| `i̇mza` | tüm onaylayan doğrulayıcıların toplu imzası | +| Alan | Açıklama | +| :----------------- | :-------------------------------------------------------------- | +| `aggregation_bits` | bu tasdiğe hangi doğrulayıcıların katıldığının bir listesi | +| `veriler` | birden çok alt alana sahip bir barındırıcı | +| `i̇mza` | bir doğrulayıcı kümesinin `data` bölümü üzerindeki toplu imzası | -`Tasdikteki` `veri` alanı şunları içerir: +`attestation` içindeki `data` alanı aşağıdakileri içerir: -| Alan | Açıklama | -|:------------------- |:-------------------------------------------- | -| `yuva` | tasdiğe bağlı yuva alanı | -| `indeks` | tasdik eden doğrulayıcılar için endeksler | -| `beacon_block_root` | bu nesneyi içeren İşaret blokunun kök düğümü | -| `kaynak` | gerekçeli son denetim noktası | -| `target` | son dönem sınır bloku | +| Alan | Açıklama | +| :------------------ | :--------------------------------------------------------- | +| `yuva` | tasdiğe bağlı yuva alanı | +| `dizin` | tasdik eden doğrulayıcılar için endeksler | +| `beacon_block_root` | zincirin başı olarak görülen İşaretçi bloğunun kök karması | +| `kaynak` | gerekçeli son denetim noktası | +| `target` | son dönem sınır bloku | -Bu işlemleri `execution_payload`'da yapmak global durumu günceller. Tüm istemciler yeni durum yeni blok `state_root` alanıyla eşleştiğinden emin olmak için işlemleri `execution_payload`'da yeniden çalıştırır. Bu, müşteriler tarafından yeni bir blokun kendi blok zincirlere eklenmesi için geçerli ve güvenli olduğunun söylenmesidir. `Yürütme yükü` birkaç farklı alandan oluşan bir nesnedir. Ayrıca çalıştırma verisiyle ilgili önemli bilgileri içinde bulunduran `execution_payload_header` bir veri yapısı var. Bu veri yapıları şu şekilde organize edilmiştir: +`execution_payload` içindeki işlemlerin yürütülmesi genel durumu günceller. Tüm istemciler, yeni durumun yeni bloktaki `state_root` alanıyla eşleştiğinden emin olmak için `execution_payload` içindeki işlemleri yeniden yürütür. Bu, müşteriler tarafından yeni bir blokun kendi blok zincirlere eklenmesi için geçerli ve güvenli olduğunun söylenmesidir. `execution_payload`'ın kendisi birkaç alana sahip bir nesnedir. Ayrıca, yürütme verileri hakkında önemli özet bilgiler içeren bir `execution_payload_header` da vardır. Bu veri yapıları şu şekilde organize edilmiştir: `execution_payload_header` aşağıdaki alanları içerir: | Alan | Açıklama | -|:------------------- |:--------------------------------------------------------------------- | +| :------------------ | :-------------------------------------------------------------------- | | `parent_hash` | üst blokun karması | | `fee_recipient` | işlem ücretlerinin ödeneceği hesap adresi | | `state_root` | bloka değişimleri uyguladıktan sonraki küresel durum için kök karması | @@ -95,17 +96,17 @@ Bu işlemleri `execution_payload`'da yapmak global durumu günceller. Tüm istem | `block_number` | mevcut blokun numarası | | `gas_limit` | bu blokta izin verilen maksimum gaz | | `gas_used` | bu blokta kullanılan net gaz miktarı | -| `zaman damgası` | blok süresi | +| `timestamp` | blok süresi | | `extra_data` | i̇steğe bağlı ham bayt olarak eklenen veri | | `base_fee_per_gas` | ana ücret değeri | | `block_hash` | Uygulama blokunun özeti | | `transactions_root` | yükteki işlemlerin kök karması | | `withdrawal_root` | yükteki para çekme işlemlerinin kök karması | -`execution_payload` ise aşağıdakileri kapsar (bunun başlık olanla aynı olduğuna dikkat edin, ancak işlemlerin kök karmaları yerine asıl işlem listesini ve para çekme bilgisini kapsıyor): +`execution_payload`'ın kendisi aşağıdakileri içerir (bunun, işlemlerin kök karması yerine gerçek işlem listesini ve para çekme bilgilerini içermesi dışında başlıkla aynı olduğuna dikkat edin): | Alan | Açıklama | -|:------------------ |:--------------------------------------------------------------------- | +| :----------------- | :-------------------------------------------------------------------- | | `parent_hash` | üst blokun karması | | `fee_recipient` | işlem ücretlerinin ödeneceği hesap adresi | | `state_root` | bloka değişimleri uyguladıktan sonraki küresel durum için kök karması | @@ -115,37 +116,37 @@ Bu işlemleri `execution_payload`'da yapmak global durumu günceller. Tüm istem | `block_number` | mevcut blokun numarası | | `gas_limit` | bu blokta izin verilen maksimum gaz | | `gas_used` | bu blokta kullanılan net gaz miktarı | -| `zaman damgası` | blok süresi | +| `timestamp` | blok süresi | | `extra_data` | i̇steğe bağlı ham bayt olarak eklenen veri | | `base_fee_per_gas` | ana ücret değeri | | `block_hash` | Uygulama blokunun özeti | -| `İşlemler` | yürütülecek işlemlerin listesi | -| `para çekimleri` | para çekme nesnelerinin listesi | +| `i̇şlemler` | yürütülecek işlemlerin listesi | +| `para çekmeler` | para çekme nesnelerinin listesi | `withdrawals` listesi aşağıdaki gibi `withdrawal` nesnelerinden oluşur: | Alan | Açıklama | -|:---------------- |:------------------------- | +| :--------------- | :------------------------ | | `adres` | para çekilen hesap adresi | | `miktar` | para çekme miktarı | -| `indeks` | para çekme endeksi değeri | +| `dizin` | para çekme endeksi değeri | | `validatorIndex` | doğrulayıcı endeks değeri | ## Blok süresi {#block-time} Blok süresi, blokların ayrılması sırasındaki süreye karşılık gelir. Ethereum'da zaman, "yuva" adı verilen 12 saniyelik birimlere bölünmüştür. Her bir yuvada blok önermek için tek bir doğrulayıcı seçilmiştir. Tüm doğrulayıcıların çevrimiçi ve tam anlamıyla işlevsel olduğunu varsayarsak her bir yuvada bir blok oluşacaktır, bu da blok zamanının 12 saniye olduğu anlamına gelir. Ancak bazen doğrulayıcılar, blok önerisine çağrıldıklarında çevrimdışı olabilir, bu da kimi zaman yuvaların boş olacağı anlamına gelir. -Bu uygulama; blok sürelerinin tahmin edilebilir olduğu ve protokolün hedef madencilik zorluğu tarafından ayarlanan iş ispatı temelli sistemlerden ayrılır. Ethereum'un [ortalama blok süresi](https://etherscan.io/chart/blocktime) yeni 12li blok süresinin istikrarına bağlı olarak bakıldığında iş ispatı ve hisse ispatı arasındajki geçişi net olarak gösteren mükemmel bir örnektir. +Bu uygulama; blok sürelerinin tahmin edilebilir olduğu ve protokolün hedef madencilik zorluğu tarafından ayarlanan iş ispatı temelli sistemlerden ayrılır. Ethereum'un [ortalama blok süresi](https://etherscan.io/chart/blocktime), yeni 12 saniyelik blok süresinin tutarlılığına dayanarak iş ispatından hisse ispatına geçişin açıkça anlaşılabileceği mükemmel bir örnektir. ## Blok boyutu {#block-size} Son olarak önemli bir not: Blokların kendileri de boyut olarak sınırlandırılmıştır. Her blokun hedef boyutu 30 milyon gazdır ama blok boyutu ağ isteklerine göre 60 milyon gaz olan blok limitine kadar (blok boyutu hedefinin 2 katı) artabilir veya azalabilir. Bloğun gaz limiti, önceki bloğun gaz limitine kıyasla 1/1024 oranında yukarı ya da aşağı yönde ayarlanabilir. Sonuç olarak, doğrulayıcılar bloğun gaz limitini mutabakat yoluyla değiştirebilir. Bloktaki işlemlerden kesilen toplam gaz miktarı, blokun gaz limitinden daha az olmalıdır. Bu, blok boyutunun keyfi olarak belirlenememesini sağladığı için önemlidir. Bloklar keyfi boyutlarda olabilseydi, daha az performans gösteren tam düğümler, alan ve hız gereksinimleri nedeniyle yavaş yavaş ağa ayak uyduramazlardı. Blok ne kadar büyük olursa onu bir sonraki yuvada zamanında işlemek için gereken işlemci gücü de o denli büyük olacaktır. Bu blok boyutlarına üst sınırlar koyarak direnen bir merkezileştirici kuvvet. -## 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!_ -## İlgili konular {#related-topics} +## Alakalı başlıklar {#related-topics} - [İşlemler](/developers/docs/transactions/) - [Gaz](/developers/docs/gas/) diff --git a/public/content/translations/tr/developers/docs/bridges/index.md b/public/content/translations/tr/developers/docs/bridges/index.md index e4bdb0fd250..4a0bd90e321 100644 --- a/public/content/translations/tr/developers/docs/bridges/index.md +++ b/public/content/translations/tr/developers/docs/bridges/index.md @@ -1,20 +1,20 @@ --- -title: Köprüler -description: Geliştiriciler için köprülemeye genel bir bakış +title: "Köprüler" +description: "Geliştiriciler için köprülemeye genel bir bakış" lang: tr --- -L1 blokzincirlerinin ve L2 [ölçeklendirme](/developers/docs/scaling/) çözümlerinin yaygınlaşması, bunun yanı sıra giderek artan sayıda merkeziyetsiz uygulamanın farklı zincirlerde kullanılabilir hale gelmesi nedeniyle zincirler arası iletişim ve varlık hareketinin ihtiyacı ağ altyapısının temel bir parçası haline gelmiştir. Bunu mümkün kılmak için farklı türde köprüler mevcuttur. +L1 blokzincirlerinin ve L2 [ölçeklendirme](/developers/docs/scaling/) çözümlerinin yaygınlaşmasının yanı sıra, zincirler arası hale gelen merkeziyetsiz uygulamaların sayısının giderek artmasıyla birlikte, zincirler arası iletişim ve varlık taşıma ihtiyacı, ağ altyapısının önemli bir parçası haline gelmiştir. Bunu mümkün kılmak için farklı türde köprüler mevcuttur. -## Köprü ihtiyacı {#need-for-bridges} +## Köprülere duyulan ihtiyaç {#need-for-bridges} Köprüler, blokzincir ağlarını birbirine bağlamaya yarar. Blokzincirler arasında bağlantı ve birlikte çalışma olanağı sağlarlar. Blokzincirler izole edilmiş ortamlarda var oldukları için blokzincirlerin diğer blokzincirlerle doğal bir şekilde ticaret yapması ve iletişim kurması mümkün değildir. Sonuç olarak, bir ekosistem içinde önemli faaliyet ve yenilikler olabilirken, diğer ekosistemlerle bağlantı ve birlikte çalışma eksikliği nedeniyle sınırlıdır. -Köprüler, izole edilmiş blokzincir ortamlarının birbirleriyle bağlantı kurmasını sağlar. Blokzincirler arasında bir ulaşım rotası oluştururlar; bu sayede jetonlar, mesajlar, keyfi veriler ve hatta [akıllı sözleşme](/developers/docs/smart-contracts/) çağrıları bir zincirden diğerine transfer edilebilir. +Köprüler, izole edilmiş blokzincir ortamlarının birbirleriyle bağlantı kurmasını sağlar. Blokzincirler arasında, jetonların, mesajların, isteğe bağlı verilerin ve hatta [akıllı sözleşme](/developers/docs/smart-contracts/) çağrılarının bir zincirden diğerine aktarılabildiği bir ulaşım rotası oluştururlar. -## Köprülerin avantajları {#benefits-of-bridges} +## Köprülerin faydaları {#benefits-of-bridges} Basitçe söylemek gerekirse, köprüler blokzincir ağlarının veri alışverişi yapmasını ve varlıkları birbirleri arasında taşımasını sağlayarak birçok kullanım durumunu mümkün kılar. @@ -30,19 +30,19 @@ Köprüler, geliştiriciler için aşağıdakileri mümkün kılar: ## Köprüler nasıl çalışır? {#how-do-bridges-work} -Çeşitli [köprü tasarım türleri](https://li.fi/knowledge-hub/blockchain-bridges-and-classification/) mevcut olsa da, varlıkların zincirler arası transferini kolaylaştırma konusunda öne çıkan üç yöntem vardır: +[Birçok köprü tasarım türü](https://li.fi/knowledge-hub/blockchain-bridges-and-classification/) olsa da, varlıkların zincirler arası transferini kolaylaştıran üç yöntem öne çıkmaktadır: -- **Kilitle ve bas: –** Kaynak zincirdeki varlıkları kilitleyip hedef zincirde yeni varlıklar basmak. -- **Yak ve Bas: –** Kaynak zincirdeki varlıkları yakıp hedef zincirde yeni varlıklar basmak. -- **Atomik takaslar: –** Kaynak zincirdeki varlıkları başka bir tarafla hedef zincirdeki varlıklarla takas etmek. +- **Kilitle ve bas –** Kaynak zincirdeki varlıkları kilitleyip hedef zincirde yeni varlıklar basmak. +- **Yak ve bas –** Kaynak zincirdeki varlıkları yakıp hedef zincirde yeni varlıklar basmak. +- **Atomik takaslar –** Kaynak zincirdeki varlıkları başka bir tarafla hedef zincirdeki varlıklarla takas etmek. ## Köprü türleri {#bridge-types} Köprüler genellikle aşağıdaki kategorilerden birine girer: -- **Doğal köprüler: –** Bu tür köprüler genellikle belirli bir blokzincirde likiditeyi önyüklemek amacıyla inşa edilir ve kullanıcıların fonları ekosisteme taşımasını kolaylaştırır. Örneğin, [Arbitrum Köprüsü](https://bridge.arbitrum.io/), kullanıcılar için Ethereum Ana Ağı'ndan Arbitrum'a köprü kurmayı kolay hale getirmek için inşa edilmiştir. Diğer köprü örnekleri arasında Polygon PoS Köprüsü, [Optimism Geçidi](https://app.optimism.io/bridge) vb. sayılabilir. -- **Doğrulayıcı veya kâhin tabanlı köprüler –** Bu tür köprüler, zincirler arası transferleri doğrulamak için harici bir doğrulayıcı kümesine veya kâhinlere dayanır. Örnekler: Multichain ve Across. -- **Genelleştirilmiş mesaj iletim köprüleri –** Bu köprüler, varlıkları, mesajları ve keyfi verileri zincirler arasında transfer edebilir. Örnekler: Axelar, LayerZero ve Nomad. +- **Yerel köprüler –** Bu köprüler genellikle belirli bir blokzincirde likiditeyi başlatmak için inşa edilir ve kullanıcıların fonları ekosisteme taşımasını kolaylaştırır. Örneğin, [Arbitrum Bridge](https://bridge.arbitrum.io/), kullanıcıların Ethereum Ana Ağı'ndan Arbitrum'a köprü kurmasını kolaylaştırmak için oluşturulmuştur. Diğer bu tür köprüler arasında Polygon PoS Bridge, [Optimism Gateway](https://app.optimism.io/bridge) vb. yer alır. +- **Doğrulayıcı veya oracle tabanlı köprüler –** Bu tür köprüler, zincirler arası transferleri doğrulamak için harici bir doğrulayıcı setine veya oracle'lara dayanır. Örnekler: Multichain ve Across. +- **Genelleştirilmiş mesaj iletim köprüleri –** Bu köprüler, varlıkları, mesajları ve isteğe bağlı verileri zincirler arasında transfer edebilir. Örnekler: Axelar, LayerZero ve Nomad. - **Likidite ağları –** Bu köprüler, ağırlıklı olarak atomik takaslar aracılığıyla bir zincirden diğerine varlık transferine odaklanır. Genellikle zincirler arası mesaj iletimini desteklemezler. Örnekler: Connext ve Hop. ## Dikkate alınması gereken ödünleşmeler {#trade-offs} @@ -51,30 +51,30 @@ Köprüler söz konusu olduğunda mükemmel çözüm diye bir şey yoktur. Bunun - **Güvenlik –** Sistemi kim doğruluyor? Harici doğrulayıcılar tarafından güvence altına alınan köprüler, genellikle blokzincirin kendi doğrulayıcıları tarafından yerel olarak veya doğal olarak güvence altına alınan köprülere göre daha az güvenlidir. - **Kolaylık –** Bir işlemin tamamlanması ne kadar sürüyor ve bir kullanıcının kaç işlemi imzalaması gerekiyor? Bir geliştirici için bir köprüyü entegre etmek ne kadar sürüyor ve süreç ne kadar karmaşık? -- **Bağlantı –** Bir köprünün bağlantı kurabileceği farklı hedef zincirler (örneğin toplamalar, yan zincirler, diğer katman 1 blokzincirleri vb.) nelerdir ve yeni bir blokzinciri entegre etmek ne kadar zordur? -- **Daha karmaşık verileri iletebilme yeteneği –** Bir köprü, mesajların ve daha karmaşık keyfi verilerin zincirler arasında transferini sağlayabilir mi, yoksa yalnızca zincirler arası varlık transferlerini mi destekler? -- **Maliyet etkinlik –** Bir köprü aracılığıyla zincirler arası varlık transfer etmenin maliyeti nedir? Genellikle köprüler için belirli rotaların gaz maliyetlerine ve likiditesine bağlı olarak sabit veya değişken ücretler talep edilir. Ayrıca, bir köprünün güvenliğini sağlamak için gereken sermayeye dayalı olarak maliyet-etkinliği de değerlendirilmesi gereken önemli bir unsurdur. +- **Bağlanabilirlik –** Bir köprünün bağlanabileceği farklı hedef zincirler (ör. toplamalar, yan zincirler, diğer katman 1 blokzincirleri vb.) nelerdir ve yeni bir blokzinciri entegre etmek ne kadar zordur? +- **Daha karmaşık verileri iletme yeteneği –** Bir köprü, mesajların ve daha karmaşık isteğe bağlı verilerin zincirler arasında transferini sağlayabilir mi, yoksa yalnızca zincirler arası varlık transferlerini mi destekler? +- **Maliyet etkinliği –** Bir köprü aracılığıyla zincirler arası varlık aktarmanın maliyeti nedir? Genellikle köprüler için belirli rotaların gaz maliyetlerine ve likiditesine bağlı olarak sabit veya değişken ücretler talep edilir. Ayrıca, bir köprünün güvenliğini sağlamak için gereken sermayeye dayalı olarak maliyet-etkinliği de değerlendirilmesi gereken önemli bir unsurdur. Yüksek düzeyde, köprüler güvenilir ve güven gerektirmez şeklinde kategorilere ayrılabilir. - **Güvenilir –** Güvenilir köprüler harici olarak doğrulanır. Zincirler arası veri aktarımı için harici bir doğrulayıcı kümesi kullanırlar (çoklu imza ile federasyonlar, çok taraflı bilgi işlem sistemleri, kâhin ağı). Sonuç olarak, geniş bağlantı olanakları sağlayabilir ve zincirler arası tamamen genelleştirilmiş mesaj iletimini mümkün kılabilirler. Aynı zamanda hız ve maliyet etkinlik konusunda da iyi performans gösterme eğilimindedirler. Bunun bedeli, kullanıcıların köprünün güvenliğine inanmak zorunda kalmasıdır. -- **Güven gerektirmez –** Bu köprüler, mesaj ve jeton transferi konusunda bağlandıkları blokzincire ve doğrulayıcılarına dayalıdır. Yeni güven varsayımları eklemedikleri için (blokzincirlere ek olarak) "güven gerektirmez" niteliktedirler. Sonuç olarak güven gerektirmez köprüler, güvenilir köprülere göre daha güvenli kabul edilir. +- **Güven gerektirmeyen –** Bu köprüler, mesaj ve jeton transferi konusunda bağlandıkları blokzincire ve doğrulayıcılarına dayalıdır. Yeni güven varsayımları eklemedikleri için (blokzincirlere ek olarak) "güven gerektirmez" niteliktedirler. Sonuç olarak güven gerektirmez köprüler, güvenilir köprülere göre daha güvenli kabul edilir. Güven gerektirmez köprüleri diğer faktörlere göre değerlendirmek için bunları genelleştirilmiş mesaj iletim köprüleri ve likidite ağları olarak ayırmamız gerekir. -- **Genelleştirilmiş mesaj iletim köprüleri –** Bu köprüler, güvenlik ve zincirler arası daha karmaşık veri transferi konularında uzmandır. Genellikle maliyet-etkinlik konusunda da iyidirler. Ancak, bu güçlükler genellikle hafif istemci köprüleri için bağlantı (örneğin IBC) ve sahtecilik kanıtları kullanan iyimser köprüler (örneğin Nomad) için hız dezavantajları maliyetiyle gelir. +- **Genelleştirilmiş mesaj iletim köprüleri –** Bu köprüler güvenlik ve zincirler arası daha karmaşık veri aktarma yeteneği ile öne çıkar. Genellikle maliyet-etkinlik konusunda da iyidirler. Ancak, bu güçlükler genellikle hafif istemci köprüleri için bağlantı (örneğin IBC) ve sahtecilik kanıtları kullanan iyimser köprüler (örneğin Nomad) için hız dezavantajları maliyetiyle gelir. - **Likidite ağları –** Bu köprüler, varlık transferi için atomik takas kullanır ve yerel olarak doğrulanan sistemlerdir (yani altındaki blokzincirin doğrulayıcılarını işlemleri doğrulamak için kullanırlar). Sonuç olarak, güvenlik ve hız konusunda uzmandırlar. Ayrıca nispeten maliyet-etkin kabul edilirler ve iyi bir bağlantı sunarlar. Bununla birlikte ana ödünleştirme, zincirler arası mesaj iletimini desteklememeleri nedeniyle daha karmaşık veri iletimini sağlayamamalarıdır. -## Köprülerin riskleri {#risk-with-bridges} +## Köprülerle ilgili riskler {#risk-with-bridges} -Köprüler, [DeFi'deki en büyük üç hack'in](https://rekt.news/leaderboard/) sorumlusu olarak kabul edilir ve hala geliştirme aşamasının erken dönemlerindedir. Herhangi bir köprü kullanmanın aşağıdaki riskleri taşıdığını unutmayın: +Köprüler, [DeFi'deki en büyük üç hack olayının](https://rekt.news/leaderboard/) sorumlusudur ve hâlâ geliştirilme aşamasının başlarındadır. Herhangi bir köprü kullanmanın aşağıdaki riskleri taşıdığını unutmayın: -- **Akıllı sözleşme riski –** Birçok köprü denetimleri başarılı bir şekilde geçmiş olsa da, varlıkların hırsızlığa açık hale gelmesi için akıllı sözleşmedeki tek bir hata yeterli olabilir (örneğin [Solana'nın Wormhole Köprüsü](https://rekt.news/wormhole-rekt/)). -- **Sistemik finansal riskler** – Birçok köprü, yeni bir zincirde orijinal varlığın kanonik sürümlerini oluşturmak için sarılmış varlıklar kullanır. Bu, sarılmış jeton sürümlerinin istismar edildiğini gördüğümüz için ekosistemi sistemik risklere maruz bırakır. +- **Akıllı sözleşme riski –** Birçok köprü denetimleri başarıyla geçmiş olsa da, varlıkların hack'lenmeye açık hale gelmesi için akıllı sözleşmedeki tek bir kusur yeterlidir (ör: [Solana'nın Wormhole Köprüsü](https://rekt.news/wormhole-rekt/)). +- **Sistemik finansal riskler –** Birçok köprü, yeni bir zincirde orijinal varlığın standart sürümlerini oluşturmak için sarılmış varlıklar kullanır. Bu, sarılmış jeton sürümlerinin istismar edildiğini gördüğümüz için ekosistemi sistemik risklere maruz bırakır. - **Karşı taraf riski –** Bazı köprüler, kullanıcıların doğrulayıcıların kullanıcı fonlarını çalmak için işbirliği yapmayacağı varsayımına güvenmeleri gereken güvenilir bir tasarım kullanır. Kullanıcıların bu üçüncü taraf aktörlere güvenmeleri gerekliliği, onları likidite havuzu boşaltma, sansür ve diğer kötü niyetli faaliyetler gibi risklere maruz bırakır. - **Açık sorunlar –** Köprülerin geliştirme aşamalarının henüz başlangıcında olduğu göz önüne alındığında, örneğin ağ sıkışıklığı dönemleri ve ağ düzeyinde saldırılar veya durum geri alımları gibi beklenmeyen olaylar sırasında karşılaşılabilecek farklı piyasa koşullarında köprülerin nasıl performans göstereceğiyle ilgili birçok cevapsız soru bulunmaktadır. Bu belirsizlik, henüz tam olarak bilinmeyen belirli riskleri taşır. -## Merkeziyetsiz uygulamalar köprüleri nasıl kullanır? {#how-can-dapps-use-bridges} +## Merkeziyetsiz uygulamalar köprüleri nasıl kullanır? Merkeziyetsiz uygulamalar köprüleri nasıl kullanabilir? {#how-can-dapps-use-bridges} Geliştiricilerin merkeziyetsiz uygulamalarını köprülerle çapraz zincire taşıma konusunda göz önünde bulundurabileceği bazı pratik uygulamalar şunlardır: @@ -82,9 +82,9 @@ Geliştiricilerin merkeziyetsiz uygulamalarını köprülerle çapraz zincire ta Geliştiriciler için köprüleri destek eklemenin birçok yolu bulunmaktadır: -1. **Kendi köprüsünü oluşturma –** Güvenli ve güvenilir bir köprü oluşturmak, özellikle daha güvene dayalı bir yaklaşım benimseyeceksek kolay değildir. Ayrıca, ölçeklenebilirlik ve birlikte çalışabilirlik çalışmalarıyla ilgili yıllar süren deneyim ve teknik uzmanlığı gerektirir. Ek olarak, bir köprüyü sürdürmek ve bunu mümkün kılmak için yeterli likidite çekmek için işin başında duracak bir ekibe ihtiyaç duyulur. +1. **Kendi köprünüzü oluşturma –** Güvenli ve güvenilir bir köprü oluşturmak, özellikle de güveni en aza indiren bir yolu seçerseniz, kolay değildir. Ayrıca, ölçeklenebilirlik ve birlikte çalışabilirlik çalışmalarıyla ilgili yıllar süren deneyim ve teknik uzmanlığı gerektirir. Ek olarak, bir köprüyü sürdürmek ve bunu mümkün kılmak için yeterli likidite çekmek için işin başında duracak bir ekibe ihtiyaç duyulur. -2. **Kullanıcılara birden fazla köprü seçeneği sunma –** Birçok [merkeziyetsiz uygulama](/developers/docs/dapps/), kullanıcıların merkeziyetsiz uygulamalarıyla etkileşimde bulunmak için kendi özgün jetonlarına sahip olmalarını gerektirir. Kullanıcıların jetonlara erişim sağlamaları için web sitelerinde farklı köprü seçenekleri sunarlar. Ancak, bu yöntem kullanıcıyı merkeziyetsiz uygulamanın arayüzünden uzaklaştırır ve diğer merkeziyetsiz uygulamalar ve köprülerle etkileşimde bulunmalarını gerekliliğini ortadan kaldırmaz. Bu, hataların artma olasılığı olan zahmetli bir kullanıcı deneyimini beraberinde getirir. +2. **Kullanıcılara birden fazla köprü seçeneği sunma –** Birçok [merkeziyetsiz uygulama](/developers/docs/dapps/), kullanıcıların onlarla etkileşim kurmak için kendi yerel token'larına sahip olmalarını gerektirir. Kullanıcıların jetonlara erişim sağlamaları için web sitelerinde farklı köprü seçenekleri sunarlar. Ancak, bu yöntem kullanıcıyı merkeziyetsiz uygulamanın arayüzünden uzaklaştırır ve diğer merkeziyetsiz uygulamalar ve köprülerle etkileşimde bulunmalarını gerekliliğini ortadan kaldırmaz. Bu, hataların artma olasılığı olan zahmetli bir kullanıcı deneyimini beraberinde getirir. 3. **Bir köprüyü entegre etme –** Bu çözüm, merkeziyetsiz uygulamanın kullanıcıları harici köprü ve merkeziyetsiz borsa arayüzlerine yönlendirmesini gerektirmez. Merkeziyetsiz uygulamaların kullanıcının alışma deneyimini geliştirmelerine olanak tanır. Ancak, bu yaklaşımın sınırlamaları bulunmaktadır: @@ -101,35 +101,38 @@ Ancak, köprü birleştiricileri de kısıtlamalara tabidir. Örneğin, daha faz Bir merkeziyetsiz uygulama, bir köprü veya birleştirici entegrasyonu yolunu seçerse, entegrasyonun ne kadar derin olması gerektiğine bağlı olarak farklı seçenekler bulunmaktadır. Örneğin, sadece kullanıcı giriş deneyimini iyileştirmek için ön uç entegrasyonu yapılıyorsa, bir merkeziyetsiz uygulama aracı entegre eder. Ancak entegrasyon, hisseleme, likidite madenciliği vb. gibi daha derin çaplı zincirler arası stratejileri keşfetmek amacını taşıyorsa, merkeziyetsiz uygulama SDK veya API'yi entegre eder. -### Bir merkeziyetsiz uygulamayı birden fazla zincire dağıtma {#deploying-a-dapp-on-multiple-chains} +### Bir merkeziyetsiz uygulamayı birden çok zincirde dağıtma {#deploying-a-dapp-on-multiple-chains} -To deploy a dapp on multiple chains, developers can use development platforms like [Alchemy](https://www.alchemy.com/), [Hardhat](https://hardhat.org/), [Moralis](https://moralis.io/), etc. Genellikle bu platformlar, merkeziyetsiz uygulamaların zincirler arası işlem yapmasını sağlayabilecek birleştirilebilir eklentilere sahiptir. Örneğin, geliştiriciler [hardhat-dağıtım eklentisi](https://github.com/wighawag/hardhat-deploy) tarafından sunulan belirleyici dağıtım vekilini kullanabilir. +Bir merkeziyetsiz uygulamayı birden çok zincire dağıtmak için geliştiriciler [Alchemy](https://www.alchemy.com/), [Hardhat](https://hardhat.org/), [Moralis](https://moralis.io/) gibi geliştirme platformlarını kullanabilirler. Genellikle bu platformlar, merkeziyetsiz uygulamaların zincirler arası işlem yapmasını sağlayabilecek birleştirilebilir eklentilere sahiptir. Örneğin, geliştiriciler [hardhat-deploy eklentisi](https://github.com/wighawag/hardhat-deploy) tarafından sunulan deterministik bir dağıtım proxy'si kullanabilirler. #### Örnekler: -- [Zincirler arası merkeziyetsiz uygulama oluşturma](https://moralis.io/how-to-build-cross-chain-dapps/) -- [Zincirler Arası NFT Pazar Yeri oluşturma](https://youtu.be/WZWCzsB1xUE) +- [Zincirler arası merkeziyetsiz uygulamalar nasıl oluşturulur](https://moralis.io/how-to-build-cross-chain-dapps/) +- [Zincirler Arası bir NFT Pazar Yeri Oluşturma](https://youtu.be/WZWCzsB1xUE) - [Moralis: Zincirler arası NFT merkeziyetsiz uygulamaları oluşturma](https://www.youtube.com/watch?v=ehv70kE1QYo) -### Zincirler arası sözleşme etkinliğini görüntüleme {#monitoring-contract-activity-across-chains} +### Zincirler arasında sözleşme etkinliğini izleme {#monitoring-contract-activity-across-chains} -Geliştiriciler, akıllı sözleşmelerin zincirler arasındaki etkinliğini izlemek için alt grafikleri ve Tenderly gibi geliştirici platformlarını kullanabilir. Bu tür platformlar aynı zamanda, [akıllı sözleşmeler tarafından yayımlanan olayları](https://docs.soliditylang.org/en/v0.8.14/contracts.html?highlight=events#events) kontrol etmek gibi zincirler arası etkinlikler için daha geniş veri izleme işlevselliği sunan araçlara sahiptir. +Geliştiriciler, akıllı sözleşmelerin zincirler arasındaki etkinliğini izlemek için alt grafikleri ve Tenderly gibi geliştirici platformlarını kullanabilir. Bu tür platformlar, [sözleşmeler tarafından yayımlanan olayları](https://docs.soliditylang.org/en/v0.8.14/contracts.html?highlight=events#events) kontrol etmek gibi zincirler arası faaliyetler için daha büyük veri izleme işlevselliği sunan araçlara da sahiptir. #### Araçlar - [The Graph](https://thegraph.com/en/) - [Tenderly](https://tenderly.co/) -## Daha fazla okuma {#further-reading} +## Daha fazla kaynak {#further-reading} - [Blokzincir Köprüleri](/bridges/) – ethereum.org -- [Blockchain Bridges: Building Networks of Cryptonetworks](https://medium.com/1kxnetwork/blockchain-bridges-5db6afac44f8) 8 Eylül 2021 – Dmitriy Berenzon -- [The Interoperability Trilemma](https://blog.connext.network/the-interoperability-trilemma-657c2cf69f17) 1 Ekim 2021 – Arjun Bhuptani -- [Clusters: How Trusted & Trust-Minimized Bridges Shape the Multi-Chain Landscape](https://blog.celestia.org/clusters/) 4 Ekim 2021 – Mustafa Al-Bassam -- [LI.FI: With Bridges, Trust is a Spectrum](https://blog.li.fi/li-fi-with-bridges-trust-is-a-spectrum-354cd5a1a6d8) 28 Nisan 2022 – Arjun Chand +- [L2Beat Köprü Riski Çerçevesi](https://l2beat.com/bridges/summary) +- [Blokzincir Köprüleri: Kripto Ağlarının Ağlarını Oluşturma](https://medium.com/1kxnetwork/blockchain-bridges-5db6afac44f8) - 8 Eyl 2021 – Dmitriy Berenzon +- [Birlikte Çalışabilirlik Üçlemesi](https://blog.connext.network/the-interoperability-trilemma-657c2cf69f17) - 1 Eki 2021 – Arjun Bhuptani +- [Kümeler: Güvenilir ve Güveni En Aza İndirilmiş Köprüler Çok Zincirli Ortamı Nasıl Şekillendiriyor](https://blog.celestia.org/clusters/) - 4 Eki 2021 – Mustafa Al-Bassam +- [LI.FI: Köprülerde Güven Bir Yelpazedir](https://blog.li.fi/li-fi-with-bridges-trust-is-a-spectrum-354cd5a1a6d8) - 28 Nis 2022 – Arjun Chand +- [Toplama Birlikte Çalışabilirlik Çözümlerinin Durumu](https://web.archive.org/web/20250428015516/https://research.2077.xyz/the-state-of-rollup-interoperability) - 20 Haz 2024 – Alex Hook +- [Güvenli Zincirler Arası Birlikte Çalışabilirlik için Paylaşılan Güvenlikten Yararlanma: Lagrange Durum Komiteleri ve Ötesi](https://web.archive.org/web/20250125035123/https://research.2077.xyz/harnessing-shared-security-for-secure-blockchain-interoperability) - 12 Haz 2024 – Emmanuel Awosika -Ayrıca, aşağıdaki [James Prestwich](https://twitter.com/_prestwich) tarafından sunulan bazı aydınlatıcı sunumlar köprüler hakkında daha derinlemesine bir anlayış geliştirmenize yardımcı olabilir: +Ayrıca, [James Prestwich](https://twitter.com/_prestwich) tarafından yapılan ve köprüler hakkında daha derin bir anlayış geliştirmenize yardımcı olabilecek bazı aydınlatıcı sunumlar aşağıda verilmiştir: - [Duvarlı Bahçeler Değil, Köprüler İnşa Etmek](https://youtu.be/ZQJWMiX4hT0) -- [Köprüleri Yıkmak](https://youtu.be/b0mC-ZqN8Oo) +- [Köprüleri Ayrıntılı İnceleme](https://youtu.be/b0mC-ZqN8Oo) - [Köprüler Neden Yanıyor?](https://youtu.be/c7cm2kd20j8) diff --git a/public/content/translations/tr/developers/docs/consensus-mechanisms/index.md b/public/content/translations/tr/developers/docs/consensus-mechanisms/index.md index 187a7b61a32..143be9efeec 100644 --- a/public/content/translations/tr/developers/docs/consensus-mechanisms/index.md +++ b/public/content/translations/tr/developers/docs/consensus-mechanisms/index.md @@ -1,6 +1,6 @@ --- -title: Mutabakat mekanizmaları -description: Dağıtılmış sistemlerde bulunan mutabakat protokolleri ve bu protokollerin Ethereum'daki rolü hakkında açıklama. +title: "Mutabakat mekanizmaları" +description: "Dağıtılmış sistemlerde bulunan mutabakat protokolleri ve bu protokollerin Ethereum'daki rolü hakkında açıklama." lang: tr --- @@ -8,7 +8,7 @@ Fikir birliği katmanı terimi çoğunlukla "hisse ispatı", "iş ispatı" veya ## Ön Koşullar {#prerequisites} -Bu sayfayı daha iyi anlamak için önce [Ethereum'a Giriş](/developers/docs/intro-to-ethereum/) metnimizi okumanızı öneririz. +Bu sayfayı daha iyi anlamak için önce [Ethereum'a giriş](/developers/docs/intro-to-ethereum/) metnimizi okumanızı öneririz. ## Mutabakat nedir? {#what-is-consensus} @@ -36,7 +36,7 @@ Bitcoin gibi Ethereum da bir zamanlar **iş ispatı (PoW)** tabanlı bir mutabak #### Blok oluşturma {#pow-block-creation} -Madenciler, işlenmiş işlemlerle dolu yeni bloklar oluşturabilmek için birbirleri ile rekabet eder. Kazanan, yeni bloku ağın geri kalanıyla paylaşır ve bir miktar yeni basılmış ETH elde eder. Bu yarışı matematiksel bulmacayı en hızlı çözen bilgisayar kazanır. Bu çözüm, bir önceki blok ile şimdiki blok arasında kriptografik bir bağlantı oluşturur. "İş ispatı" ile kastedilen iş de bu bulmacanın çözülmesidir. Kurallı zincir daha sonrasında blok kümelerini çıkarmak için yapılan iş miktarına göre çalışan bir çatal seçim kuralı ile belirlenir. +Madenciler, işlenmiş işlemlerle dolu yeni bloklar oluşturabilmek için birbirleri ile rekabet eder. Kazanan, yeni bloku ağın geri kalanıyla paylaşır ve bir miktar yeni basılmış ETH elde eder. Bu yarışı matematiksel bulmacayı en hızlı çözen bilgisayar kazanır. Bu çözüm, bir önceki blok ile şimdiki blok arasında kriptografik bir bağlantı oluşturur. "İş kanıtı" ile kastedilen iş de bu problemin çözülmesidir. Kurallı zincir daha sonrasında blok kümelerini çıkarmak için yapılan iş miktarına göre çalışan bir çatal seçim kuralı ile belirlenir. #### Güvenlik {#pow-security} @@ -56,11 +56,11 @@ Doğrulayıcılar blokları oluşturur. Her bir yuvada bir doğrulayıcı rastge Hisse ispatı sistemi kripto ekonomik olarak güvenlidir çünkü ağa saldıranın zinciri ele geçirebilmesi için çok ciddi miktarda ETH yakması gerekir. Sistem dürüst hareket eden paydaşları teşvikle ödüllendirirken kötü niyetli hareketleri cezalandırarak bundan uzaklaştırır. -[İş ispatı](/developers/docs/consensus-mechanisms/pos/) hakkında daha fazlası +[Hisse ispatı](/developers/docs/consensus-mechanisms/pos/) hakkında daha fazlası ### Görsel bir rehber {#types-of-consensus-video} -Ethereum üzerinde kullanılan farklı mutabakat mekanizması türleri hakkında daha fazlasını izleyin: +Ethereum üzerinde kullanılan farklı konsensus mekanizma türleri hakkında daha fazlasını izleyin: @@ -68,25 +68,25 @@ Ethereum üzerinde kullanılan farklı mutabakat mekanizması türleri hakkında İş ispatı ve hisse ispatı tek başlarına bir mutabakat protokolü değildir, ancak çoğunlukla daha basit olduğu için bu şekilde adlandırılırlar. Aslında bunlar Sybil direnç mekanizmaları ve blok yazarı seçicileridir; son blokun yazarının kim olduğuna karar vermenin bir yoludurlar. Bir diğer önemli bileşen, aynı konumda birden fazla blokun bulunduğu senaryolarda düğümlerin zincirin başında tek bir doğru bloku seçmesini sağlayan zincir seçimi (çatal seçimi olarak da bilinir) algoritmasıdır. -**Sybil direnci**, bir protokolün Sybil saldırısına ne kadar dayanıklı olduğunu ölçer. Bu tip bir saldırıya karşı direnç, merkeziyetsiz bir blok zincir için önemlidir ve madencilerle doğrulayıcıların ortaya konulan kaynaklar neticesinde eşit şekilde ödüllendirilmesini sağlar. İş ispatı ve hisse ispatı kullanıcıların fazla enerji tüketmesini veya yüksek teminatlar ortaya koymasını sağlayarak buna karşı koruma sağlar. Bu korumalar Sybil saldırılarına karşı ekonomik bir caydırıcıdır. +**Sybil direnci**, bir protokolün Sybil saldırısına ne kadar dayanıklı olduğunu ölçer. Bu tip bir saldırıya karşı direnç, merkeziyetsiz bir blok zincir için önemlidir ve madencilerle doğrulayıcıların ortaya konulan kaynaklar neticesinde eşit şekilde ödüllendirilmesini sağlar. İş kanıtı ve hisse kanıtı kullanıcıların fazla enerji tüketmesini veya yüksek teminatlar ortaya koymasını sağlayarak buna karşı koruma sağlar. Bu korumalar, Sybil saldırılarına karşı ekonomik olarak caydırıcıdır. -Bir **zincir seçim kuralı** hangi zincirin "doğru" zincir olduğuna karar verilmesinde kullanılır. Bitcoin şu anda "en uzun zincir" kuralını kullanmaktadır, bu da hangi blok zinciri en uzun ise düğümlerin o zinciri geçerli kabul edeceği ve içinde çalışacağı anlamına gelir. İş ispatı zincirleri kapsamında en uzun zincir, zincirin toplam birikmiş iş ispatı zorluğuna göre belirlenir. Ethereum da bir zamanlar en uzun zincir kuralını kullanıyordu, ancak Ethereum artık hisse ispatı kullandığı için zincirin "ağırlık" ölçümünü yapan yeni bir çatal seçim algoritması kullanıyor. Ağırlık, doğrulayıcıların hisselenmiş Ether bakiyeleri ile birikmiş oylarının toplamıdır. +Bir **zincir seçim kuralı**, hangi zincirin "doğru" zincir olduğuna karar vermek için kullanılır. Bitcoin şu anda "en uzun zincir" kuralını kullanmaktadır, bu da hangi blok zinciri en uzun ise düğümlerin o zinciri geçerli kabul edeceği ve içinde çalışacağı anlamına gelir. İş kanıtı zincirleri için, en uzun zincir zincirin toplam birikmiş iş kanıtı zorluğuna göre belirlenir. Ethereum da bir zamanlar en uzun zincir kuralını kullanıyordu, ancak Ethereum artık hisse ispatı kullandığı için zincirin "ağırlık" ölçümünü yapan yeni bir çatal seçim algoritması kullanıyor. Ağırlık, doğrulayıcıların hisselenmiş Ether bakiyeleri ile birikmiş oylarının toplamıdır. -Ethereum, [Gasper](/developers/docs/consensus-mechanisms/pos/gasper/) olarak bilinen ve [Casper FFG hisse ispatını](https://arxiv.org/abs/1710.09437) [GHOST çatal seçimi kuralıyla](https://arxiv.org/abs/2003.03052) birleştiren bir mutabakat mekanizması kullanıyor. +Ethereum, [Casper FFG hisse ispatını](https://arxiv.org/abs/1710.09437) [GHOST çatal seçim kuralı](https://arxiv.org/abs/2003.03052) ile birleştiren ve [Gasper](/developers/docs/consensus-mechanisms/pos/gasper/) olarak bilinen bir mutabakat mekanizması kullanır. -## Daha fazla bilgi {#further-reading} +## Daha fazla kaynak {#further-reading} -- [Blok Zinciri Mutabakat Algoritması nedir?](https://academy.binance.com/en/articles/what-is-a-blockchain-consensus-algorithm) -- [Nakamoto Mutabakatı nedir? Tam Başlangıç Rehberi](https://blockonomi.com/nakamoto-consensus/) -- [Casper nasıl çalışır?](https://medium.com/unitychain/intro-to-casper-ffg-9ed944d98b2d) -- [İş İspatı Blok Zincirlerinin Güvenliği ve Performansı Hakkında](https://eprint.iacr.org/2016/555.pdf) +- [Blokzincir Mutabakat Algoritması Nedir?](https://academy.binance.com/en/articles/what-is-a-blockchain-consensus-algorithm) +- [Nakamoto Mutabakatı nedir? Yeni Başlayanlar İçin Kapsamlı Rehber](https://blockonomi.com/nakamoto-consensus/) +- [Casper Nasıl Çalışır?](https://medium.com/unitychain/intro-to-casper-ffg-9ed944d98b2d) +- [İş İspatı Blokzincirlerinin Güvenliği ve Performansı Üzerine](https://eprint.iacr.org/2016/555.pdf) - [Bizans hatası](https://en.wikipedia.org/wiki/Byzantine_fault) -_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!_ -## İlgili konular {#related-topics} +## Alakalı başlıklar {#related-topics} - [İş ispatı](/developers/docs/consensus-mechanisms/pow/) - [Madencilik](/developers/docs/consensus-mechanisms/pow/mining/) - [Hisse ispatı](/developers/docs/consensus-mechanisms/pos/) -- [Yetki kanıtı](/developers/docs/consensus-mechanisms/poa/) +- [Otorite İspatı](/developers/docs/consensus-mechanisms/poa/) diff --git a/public/content/translations/tr/developers/docs/consensus-mechanisms/poa/index.md b/public/content/translations/tr/developers/docs/consensus-mechanisms/poa/index.md index 53d37ff1393..04c1a81816f 100644 --- a/public/content/translations/tr/developers/docs/consensus-mechanisms/poa/index.md +++ b/public/content/translations/tr/developers/docs/consensus-mechanisms/poa/index.md @@ -1,6 +1,6 @@ --- -title: Yetki İspatı (PoA) -description: Yetki ispatı mutabakat protokolü ve blokzincir ekosistemindeki rolüne dair bir açıklama. +title: "Yetki İspatı (PoA)" +description: "Yetki ispatı mutabakat protokolü ve blokzincir ekosistemindeki rolüne dair bir açıklama." lang: tr --- @@ -67,7 +67,7 @@ Bir PoA ağında, N yetkili imzalayıcı olduğunda her bir imzalayıcı K döng - [Kullanımdan kaldırılmış PoA, Aura spesifikasyonu](https://openethereum.github.io/Chain-specification) - [IBFT 2.0, başka bir PoA uygulaması](https://besu.hyperledger.org/private-networks/concepts/poa) -### Görsel olarak öğrenmeyi mi tercih ediyorsunuz? {#visual-learner} +### Görerek öğrenmeyi mi tercih ediyorsunuz? {#visual-learner} Yetki ispatının görsel açıklamasını izleyin: @@ -77,3 +77,4 @@ Yetki ispatının görsel açıklamasını izleyin: - [İş ispatı](/developers/docs/consensus-mechanisms/pow/) - [Hisse ispatı](/developers/docs/consensus-mechanisms/pos/) + diff --git a/public/content/translations/tr/developers/docs/consensus-mechanisms/pos/attack-and-defense/index.md b/public/content/translations/tr/developers/docs/consensus-mechanisms/pos/attack-and-defense/index.md index d20e2fc6a65..e2e85f78a9e 100644 --- a/public/content/translations/tr/developers/docs/consensus-mechanisms/pos/attack-and-defense/index.md +++ b/public/content/translations/tr/developers/docs/consensus-mechanisms/pos/attack-and-defense/index.md @@ -1,28 +1,28 @@ --- -title: Ethereum hisse ispatı saldırısı ve savunması -description: Ethereum hisse ispatında bilinen saldırı aracılarını ve Ethereum'un nasıl savunulduğunu öğrenin. +title: "Ethereum hisse ispatı saldırısı ve savunması" +description: "Ethereum hisse ispatında bilinen saldırı aracılarını ve Ethereum'un nasıl savunulduğunu öğrenin." lang: tr --- -Hırsızlar ve sabotajcılar sürekli Ethereum müşteri yazılımına saldırı fırsatı kollamaktadır. Bu sayfa, Ethereum fikir birliği katmanındaki bilinen saldırıları ve bu saldırıların nasıl savunulduğunu açıklar. Bu sayfadaki bilgiler [daha uzun versiyonundan](https://mirror.xyz/jmcook.eth/YqHargbVWVNRQqQpVpzrqEQ8IqwNUJDIpwRP7SS5FXs) uyumlu hale getirilmiştir. +Hırsızlar ve sabotajcılar sürekli Ethereum müşteri yazılımına saldırı fırsatı kollamaktadır. Bu sayfa, Ethereum fikir birliği katmanındaki bilinen saldırıları ve bu saldırıların nasıl savunulduğunu açıklar. Bu sayfadaki bilgiler, [daha uzun bir versiyondan](https://mirror.xyz/jmcook.eth/YqHargbVWVNRQqQpVpzrqEQ8IqwNUJDIpwRP7SS5FXs) uyarlanmıştır. -## Ön koşullar {#prerequisites} +## Ön Koşullar {#prerequisites} -[Hisse ispatı](/developers/docs/consensus-mechanisms/pos/) hakkında bazı temel bilgiler gereklidir. Ayrıca, Ethereum'un [teşvik katmanı](/developers/docs/consensus-mechanisms/pos/rewards-and-penalties) ve çatal seçim algoritması ile [LMD-GHOST](/developers/docs/consensus-mechanisms/pos/gasper) hakkında temel anlayışa sahip olmak size yardımcı olacaktır. +[Hisse ispatı](/developers/docs/consensus-mechanisms/pos/) hakkında biraz temel bilgi gereklidir. Ayrıca, Ethereum'un [teşvik katmanı](/developers/docs/consensus-mechanisms/pos/rewards-and-penalties) ve çatal seçim algoritması olan [LMD-GHOST](/developers/docs/consensus-mechanisms/pos/gasper) hakkında temel bir anlayışa sahip olmak da yardımcı olacaktır. ## Salgırganlar ne ister? {#what-do-attackers-want} -Yaygın bir yanlış anlaşılma, başarılı bir saldırganın yeni ether yaratabileceği veya keyfi hesaplardan ether çekebileceğidir. Bunların hiçbiri mümkün değildir çünkü tüm yürütmeler, ağdaki bütün yürütüm işlemcileri tarafından yürütülür. Geçerliliğin temel şartlarını karşılamak zorundadırlar (ör. yürütmelerin göndericinin özel anahtarıyla imzalanması, göndericinin yeterli bakiyeye sahip olması gibi) ya da bu işlemler geri döndürülür. Bir saldırganın gerçek anlamda hedefleyebileceği üç sonuç sınıfı mevcuttur: yeniden düzenlemeler, çift kesinlik veya kesinlik gecikmesi. +Yaygın bir yanlış anlaşılma, başarılı bir saldırganın yeni ether yaratabileceği veya keyfi hesaplardan ether çekebileceğidir. Bunların hiçbiri mümkün değildir çünkü tüm yürütmeler, ağdaki bütün yürütüm işlemcileri tarafından yürütülür. Geçerliliğin temel koşullarını (örneğin, işlemlerin göndericinin özel anahtarıyla imzalanması, göndericinin yeterli bakiyeye sahip olması vb.) karşılamaları gerekir, aksi takdirde basitçe geri alınırlar. Bir saldırganın gerçek anlamda hedefleyebileceği üç sonuç sınıfı mevcuttur: yeniden düzenlemeler, çift kesinlik veya kesinlik gecikmesi. -**"Yeniden Düzenleme"**, ana zincirdeki blokların yeniden düzenlenmesi, sırasının değiştirilmesidir. Bu eylem sırasında yeni bloklar eklenebilir, çıkarılabilir. Kötü niyetli bir yeniden düzenleme, bazı seçilmiş blokların ağa dahil edilip edilmemesini hedefler ve bu sayede kopya harcama, önden işlem, arkadan işlem gibi yöntemlerle kazanç sağlar (MEV). Yeniden düzenlemeler bazı işlemlerin ana ağa dahil edilmesini de engelleyebilir, bu bir sansür çeşididir. Yeniden düzenleme'nin en uç örneği "kesinlik bozma"dır. Bu, kesinleştirilmiş blokların silinmesi veya başka ve daha önceden kesinleştirilmiş blokla değiştirilmesi şeklinde olabilir. Bu ancak hisselenen etherin ⅓'ünün, saldırgan tarafından yok edilmesi durumunda mümkündür. Bunun olamayacağının garantisi "ekonomik kesinlik" olarak bilinir - bu konuya ilerki bölümlerde değinilecektir. +**"Yeniden düzenleme"** (reorg), blokların yeni bir düzene göre yeniden karıştırılmasıdır; bu sırada kurallı zincire bazı bloklar eklenebilir veya çıkarılabilir. Kötü niyetli bir yeniden düzenleme, bazı seçilmiş blokların ağa dahil edilip edilmemesini hedefler ve bu sayede kopya harcama, önden işlem, arkadan işlem gibi yöntemlerle kazanç sağlar (MEV). Yeniden düzenlemeler bazı işlemlerin ana ağa dahil edilmesini de engelleyebilir, bu bir sansür çeşididir. Yeniden düzenleme'nin en uç örneği "kesinlik bozma"dır. Bu, kesinleştirilmiş blokların silinmesi veya başka ve daha önceden kesinleştirilmiş blokla değiştirilmesi şeklinde olabilir. Bu ancak hisselenen etherin ⅓'ünün, saldırgan tarafından yok edilmesi durumunda mümkündür. Bunun olamayacağının garantisi "ekonomik kesinlik" olarak bilinir - bu konuya ilerki bölümlerde değinilecektir. -**Çift kesinlik**; 2 çatalın aynı anda kesinleşebileceği, zincirde kalıcı parçalanmaya yol açabilecek nadir gerçekleşen ancak oldukça tehlikeli bir durumdur. Bu, tüm hisselenmiş etherlerin %34'ünü hedefleyen bir saldırgan için teorik olarak olasıdır. Topluluk çevrimdışı koordine edilmeye ve hangi zincirin takip edileceği hangi zincirin sosyal katmanda güce ihtiyaç duyduğu konusunda anlaşmaya varmaya zorlanır. +**Çifte kesinlik**, iki çatalın aynı anda kesinleşebildiği ve zincirde kalıcı bir bölünme yarattığı, olası olmayan ancak ciddi bir durumdur. Bu, tüm hisselenmiş etherlerin %34'ünü hedefleyen bir saldırgan için teorik olarak olasıdır. Topluluk, zincir dışında koordine olmaya ve hangi zincirin takip edileceği konusunda bir anlaşmaya varmaya zorlanacaktır, bu da sosyal katmanda güç gerektirecektir. -**Kesinlik gecikmesi** saldırısı, ağın zincir kısımlarının kesinleşmesi için gereken şartlara ulaşmasını engeller. Kesinlik olmadan Ethereum üzerine inşa edilmiş finansal uygulamalara güvenmek zordur. Kesinlik gecikmesi saldırısının amacı, eğer saldırganın bazı stratejik kısa pozisyonları yoksa doğrudan kâr elde etmek yerine Ethereum'a hasar vermektir. +**Kesinlik gecikmesi** saldırısı, ağın zincir bölümlerini kesinleştirmek için gerekli koşullara ulaşmasını engeller. Kesinlik olmadan Ethereum üzerine inşa edilmiş finansal uygulamalara güvenmek zordur. Kesinlik gecikmesi saldırısının amacı, eğer saldırganın bazı stratejik kısa pozisyonları yoksa doğrudan kâr elde etmek yerine Ethereum'a hasar vermektir. Sosyal katmandaki saldırı, Ethereum'daki açık güveni zedelemek, etheri değersizleştirmek, benimsenmeyi azaltmak veya bant harici uyumu daha zor hale getirerek Ethereum topluluğunu zayıflatmak olabilir. -Kötü niyetli birinin Ethereum'a neden saldırabileceği üzerine konuştuğumuza göre, bir sonraki bölümler bu işi _nasıl_ yapabileceği üzerinedir. +Bir rakibin Ethereum'a neden saldırabileceğini belirledikten sonra, sonraki bölümlerde bunu _nasıl_ yapabilecekleri incelenmektedir. ## Saldırı Yöntemleri {#methods-of-attack} @@ -31,10 +31,13 @@ Kötü niyetli birinin Ethereum'a neden saldırabileceği üzerine konuştuğumu Her şeyden önce, Ethereum'da aktif olarak rol almayan bireyler (istemci yazılımları yürüterek) sosyal katmanı (Katman 0) hedefleyerek saldırabilir. 0. Katman Ethereum'un üzerine inşa edildiği bir temel gibidir ve tüm katmanlara yayılıp sıçrayabilecek saldırılar için ciddi potansiyel bir hedeftir. Bazı örnekleri şöyle sıralanabilir: - Bir yanlış bilgilendirme kampanyası Ethereum'un yol haritasında, geliştirici ekiplerinde, uygulamalarda ve daha birçok yerde topluluğun sahip olduğu güveni baltalayabilir. Bunun sonucunda ağı güvene almak isteyen bireylerin sayısı azalabilir ki bu da hem merkeziyetsizliğin hem de kripto-ekonomik güvenliği azaltır. + - Geliştirici topluluğunu hedef gösteren saldırılar ve/veya tehditler. Bu geliştiricilerin gönüllü istifalarına ve Ethereum ilerlemesinin yavaşlamasına sebep olabilir. - Yer alma ve benimsenmeyi teşvikten çok hızlı biçimde vazgeçireceğinden aşırı partizan düzenlemeler de Katman 0'a bir saldırı olarak algılanabilir. + - Tartışmaları gölgelemeyi, kilit kararları ertelemeyi, istenmeyen fikir oluşturmayı hedefleyen bilinebilir ancak kötü niyetli kişilerin geliştirici topluluğuna sızmaları. + - Karar vermeyi etkilemesi için Ethereum ekosisteminde kilit oyunculara rüşvet verilmesi. Bu saldırıları özellikle tehlikeli yapan şey ise çoğu vakada çok az miktarda ana para ve neyin nasıl yapılacağı bilgisinin yeterli oluşudur. Bir Katman 0 saldırısı kripto-ekonomik saldırının bir çarpanı olabilir. Örneğin, sansür veya kesinlik bozma bir şekilde kötü niyetli paydaşların çoğunluğu tarafından getçekleştirilirse, sosyal katmanı zayıflatmak, topluluğun koordine olarak bir cevap vermesini zorlaştırabilir. @@ -45,59 +48,59 @@ Sosyal ağ saldırılarına karşı bir diğer önemli güçlendirme de açık g Son olarak, Ethererum topluluğunun açık kalması ve tüm katılımcıları hoş karşılaması kritiktir. Dışlayıcı ve kapı bekçileri olan bir topluluk sosyal saldırılara karşı daha savunmasızdır çünkü "biz ve onlar" anlatılarını kurmak çok daha kolaydır. Kabilecilik ve toksik maksimalizm topluluğu yaralar ve 0. Katmanın sağladığı güvenliği yıpratır. Ağın güvenliği menfaatine olan Etherliler, görüşlerini hem sanal hem de fiziksel dünyada belirtmeli ve Ethereum'un 0. Katman güvenliğine doğrudan katkı sağlamalıdır. -### Protokole saldırma {#attacking-the-protocol} +### Protokole saldırmak {#attacking-the-protocol} Herkes Ethereum'un istemci yazılımını yürütebilir. Bir müşteriye bir doğrulayıcı eklemek için kullanıcının mevduat sözleşmesine 32 ether hisselemesi gerekir. Bir doğrulayıcı, kullanıcıya yeni bloklar önerip onları onaylayarak Ethereum ağ güvenliğinde aktif olarak yer alma imkânı tanır. Artık doğrulayıcı, blok zincirin gelecekteki içeriğini etkileyebilecek bir sese sahiptir - dürüstçe çalışıp ödüller aracılığıyla ether zulalarını büyütebilirler ya da kendi çıkarları için süreci manipüle ederek kendi hisselerini riske atabilirler. Bir saldırıyı bağlamanın bir yolu toplam hisselemenin daha büyük kısmını biriktirmek ve sonradan bunları, dürüst doğrulayıcıları saf dışı bırakmak için kullanmaktır. Saldırganın kontrol ettiği hisse yüzdesi arttıkça özellikle gelecekte keşfedeceğimiz iktisadi kilometre taşlarında oy verme kuvveti de artacaktır. Ancak çoğu saldırgan bu yolla saldırmak için yeterince ether biriktirmeyi başaramaz, bu sebeple bu yol yerine dürüst çoğunluğu belirli bir yol içine çekmek için kurnazca teknikler kullanırlar. Temelde, tüm düşük bahisli saldırılar, doğrulayıcıların iki tür yanlış davranışının ince varyasyonlarıdır: yetersiz aktivite (onaylama/öneride bulunmama veya geç bulunma) ya da aşırı aktivite (bir yuvada çok fazla kez öneride/onaylamada buluma). En basit haliyle bu eylemler, çatal seçim algoritması ve teşvik katmanı tarafından kolayca ele alınabilir, ancak sistemi bir saldırganın avantajına çevirmenin zekice yolları elbette bulunur. -### Düşük miktar ETH kullanılan saldırılar {#attacks-by-small-stakeholders} +### Az miktarda ETH kullanan saldırılar {#attacks-by-small-stakeholders} #### yeniden düzenlemeler {#reorgs} -Birçok sayfa, toplam hisselenmiş etherin yalnızca küçük bir kısmı kullanılarak yeniden düzenleme ya da kesinlik gecikmesini başarmış Ethereum karşı saldırılarını açıkladı. Bu saldırılar genellikle saldırganın diğer doğrulayıcılara dayandırdığı bazı bilgilere ve daha sonra onları bazı ayrıntılar ve/veya elverişli zamanda ortaya bırakmasına dayanır. Genellikle bazı dürüst blokları, kurallı zincirden ayırmayı amaçlarlar. [Neuder ile arkadaşları 2020'de](https://arxiv.org/pdf/2102.02247.pdf) bir saldırgan doğrulayıcının bir bloka (`B`) belirli bir yuva `n+1` için nasıl ispat yarattığını, ancak ağdaki diğer düğümlerden nasıl alıkoyduğunu bize gösterdi. Bunun yerine bir sonraki yuvaya `n+2` dek ispatlı blok ile kalırlar. Dürüst bir doğrulayıcı yuva `n+2` için bir blok (`C`) önerir. Neredeyse eş zamanlı olarak saldırgan, geri tuttuğu blok olan (`B`)'yi ve onun için tutulan beyanlarını yayınlayabilir. Ayrıca yuva `n+2`'nin oylarıyla `B`'nin zincirin başı olduğunu beyan ederek dürüst blok `C`'nin varlığını etkili bir şekilde inkar etme gücünü sağlayabilir. Dürüst blok `D` salındığı zaman çatal seçim algoritması `D`'nin `B` üzerine inşa edilmesinin `D`'nin `C` üzerine inşa edilmesinden daha ağır olduğunu görür. Saldırgan, sonrasında eski ön yeniden düzenleme 1. blokunu kullanarak kurallı zincirin `n+2` yuvasındaki `C` dürüst blokunu ortadan kaldırmayı başardı. Hisselerin [%34'üne sahip bir saldırganın](https://www.youtube.com/watch?v=6vzXwwk12ZE) bu saldırıda başarıya ulaşma ihtimali, [bu notta](https://notes.ethereum.org/plgVdz-ORe-fGjK06BZ_3A#Fork-choice-by-block-slot-pair) açıklandığı üzere çok fazladır. Teorik olarak da olsa bu saldırı daha küçük hisselemelerle denenebilir. [Neuder ve diğeri 2020 yılında](https://arxiv.org/pdf/2102.02247.pdf), bu saldırının %30 hisse ile yapıldığını [söylese de daha sonrasında saldırının %2'lik hisse ile ve](https://arxiv.org/pdf/2009.04987.pdf) diğer bölümde inceleyeceğimiz [dengeleme yöntemlerini kullanan tek bir doğrulayıcı tarafından](https://arxiv.org/abs/2110.10086#) yapılmış olduğu ortaya çıkmıştır. +Birçok sayfa, toplam hisselenmiş etherin yalnızca küçük bir kısmı kullanılarak yeniden düzenleme ya da kesinlik gecikmesini başarmış Ethereum karşı saldırılarını açıkladı. Bu saldırılar genellikle saldırganın diğer doğrulayıcılara dayandırdığı bazı bilgilere ve daha sonra onları bazı ayrıntılar ve/veya elverişli zamanda ortaya bırakmasına dayanır. Genellikle bazı dürüst blokları, kurallı zincirden ayırmayı amaçlarlar. [Neuder ve diğerleri 2020](https://arxiv.org/pdf/2102.02247.pdf), saldıran bir doğrulayıcının belirli bir `n+1` yuvası için bir blok (`B`) oluşturup onaylayabildiğini, ancak bunu ağdaki diğer düğümlere yaymaktan kaçındığını göstermiştir. Bunun yerine, bir sonraki `n+2` yuvasına kadar bu onaylanmış bloğu ellerinde tutarlar. Dürüst bir doğrulayıcı, `n+2` yuvası için bir blok (`C`) önerir. Neredeyse aynı anda saldırgan, alıkoyduğu bloğu (`B`) ve bu blok için alıkoyduğu tasdikleri yayınlayabilir ve ayrıca `n+2` yuvası için oylarını kullanarak `B`'nin zincirin başı olduğunu tasdik ederek dürüst `C` bloğunun varlığını etkili bir şekilde reddedebilir. Dürüst `D` bloğu yayınlandığında, çatal seçim algoritması, `B`'nin üzerine inşa edilen `D`'nin, `C`'nin üzerine inşa edilen `D`'den daha ağır olduğunu görür. Böylece saldırgan, 1 blokluk bir ex ante yeniden düzenleme kullanarak `n+2` yuvasındaki dürüst `C` bloğunu kurallı zincirden kaldırmayı başarmıştır. [Bu notta](https://notes.ethereum.org/plgVdz-ORe-fGjK06BZ_3A#Fork-choice-by-block-slot-pair) açıklandığı gibi, toplam kilidin [%34'üne sahip bir saldırganın](https://www.youtube.com/watch?v=6vzXwwk12ZE) bu saldırıda başarılı olma şansı çok yüksektir. Teorik olarak da olsa bu saldırı daha küçük hisselemelerle denenebilir. [Neuder ve diğerleri 2020](https://arxiv.org/pdf/2102.02247.pdf), bu saldırının %30'luk bir kilitle çalıştığını açıklamış, ancak daha sonra [toplam kilidin %2'siyle](https://arxiv.org/pdf/2009.04987.pdf) ve ardından bir sonraki bölümde inceleyeceğimiz dengeleme tekniklerini kullanan [tek bir doğrulayıcı](https://arxiv.org/abs/2110.10086#) için de uygulanabilir olduğu gösterilmiştir. -![eski ön yeniden düzenleme](reorg-schematic.png) +![ex-ante yeniden düzenleme](reorg-schematic.png) Tek blok yeniden düzenleme saldırısının kavramsal diyagramı yukarıda açıklanmıştır (şuradan alınmıştır: https://notes.ethereum.org/plgVdz-ORe-fGjK06BZ_3A#Fork-choice-by-block-slot-pair) -Daha karmaşık bir saldırı dürüst doğrulayıcı ekibini, zincirin başı hakkında farklı görüşlere sahip apayrı gruplar bölebilir. Bu, **dengeleme saldırısı** olarak bilinir. Saldırgan, blok önerme sırasını bekler ve söz konusu zaman geldiğinde iki taneyi denkleştirir ve önerir. Sonrasında dürüst doğrulayıcı ekibinin bir yarısına bir bloku, diğer yarısına diğer bloku gönderir. Denkleştirme, çatal seçim algoritması tarafından algılanır ve blok önericisi ağdan ceza ile atılır, ancak iki blok ve her bir çatala güvenen birer doğrulayıcı ekip yarımları var olmaya devam eder. Bu sırada geriye kalan kötü niyetli doğrulayıcılar kendi ispatlarını geri çeker. Sonra, aynı çatal seçim algoritmasının yürütüldüğü gibi iki çataldan birini kabullenenler seçici olarak ispatları yayınlamaya başlar, birikmiş ispat ağırlığını çatallarlardan birine verirler. Bu, saldırgan doğrulayıcıların iki çatal arasında eşit sayıda doğrulayıcı sağladıkları sürece sonsuza dek sürebilir. Herhangi bir çatal 2/3 süper çoğunluğunu yakalayamayacağından ağ kesinleştirilemez. +Daha karmaşık bir saldırı dürüst doğrulayıcı ekibini, zincirin başı hakkında farklı görüşlere sahip apayrı gruplar bölebilir. Bu, bir **dengeleme saldırısı** olarak bilinir. Saldırgan, blok önerme sırasını bekler ve söz konusu zaman geldiğinde iki taneyi denkleştirir ve önerir. Sonrasında dürüst doğrulayıcı ekibinin bir yarısına bir bloku, diğer yarısına diğer bloku gönderir. Denkleştirme, çatal seçim algoritması tarafından algılanır ve blok önericisi ağdan ceza ile atılır, ancak iki blok ve her bir çatala güvenen birer doğrulayıcı ekip yarımları var olmaya devam eder. Bu sırada geriye kalan kötü niyetli doğrulayıcılar kendi ispatlarını geri çeker. Sonra, aynı çatal seçim algoritmasının yürütüldüğü gibi iki çataldan birini kabullenenler seçici olarak ispatları yayınlamaya başlar, birikmiş ispat ağırlığını çatallarlardan birine verirler. Bu, saldırgan doğrulayıcıların iki çatal arasında eşit sayıda doğrulayıcı sağladıkları sürece sonsuza dek sürebilir. Herhangi bir çatal 2/3 süper çoğunluğunu yakalayamayacağından ağ kesinleştirilemez. **Sıçrama saldırıları** benzerdir. Oylar tekrardan saldırgan doğrulayıcılar tarafından geri çekilir. Oyları iki çatal arasında eşit bir bölünmeyle dağılım sağlamak için yayınlamak yerine, çatal A ve çatal B arasında değişen kontrol noktalarını gerekçelendirmek adına oylarını uygun anlarda kullanırlar. İki çatal arasında bu gerekçelendirmenin terse çevrilmesi, her iki zincirde de sonuçlandırılabilir olan haklı kaynak ve hedef kontrol noktalarının ikizleşmesini engeller, böylece kesinlik durdurulur. -Sıçrama saldırıları da dengeleme saldırıları da saldırganın, ağ arasında genellikle olmayan ileti zamanlaması üzerindeki ince kontrolüne bel bağlar. Yine de savunmalar protokol içine, daha yavaş olanlarına kıyasla hızlı iletilere, fazladan ağırlıklandırılımış formda inşa edilmiştir. Bu, [önerici ağırlık güçlendirmesi](https://github.com/ethereum/consensus-specs/pull/2730) olarak bilinir. Sıçrama saldırılarına karşı savunabilmek için çatal seçim algoritması güncellenerek, en son gerçekleşen haklı kontrol noktasını yalnızca her dönemin [ilk 1/3 yuvasında](https://ethresear.ch/t/prevention-of-bouncing-attack-on-ffg/6114) bir alternatif zincire geçebilecek şekilde değiştirilmiştir. Bu koşul, saldırganın daha sonra kullanmak üzere oy biriktirmesini engeller - çatal seçim algoritması öncelikli seçtiği kontrol noktasına sadık kalarak bu süre zarfında çoğu dürüst doğrulayıcı dönemin ilk 1/3'ünde seçilmiş kontrol noktasında sadık kalarak oylamış olur. +Sıçrama saldırıları da dengeleme saldırıları da saldırganın, ağ arasında genellikle olmayan ileti zamanlaması üzerindeki ince kontrolüne bel bağlar. Yine de savunmalar protokol içine, daha yavaş olanlarına kıyasla hızlı iletilere, fazladan ağırlıklandırılımış formda inşa edilmiştir. Bu, [teklifçi-ağırlığı artırma](https://github.com/ethereum/consensus-specs/pull/2730) olarak bilinir. Sıçrama saldırılarına karşı savunma yapmak için çatal seçim algoritması, en son gerekçelendirilmiş kontrol noktasının yalnızca [her dönemin ilk 1/3'lük yuvaları sırasında](https://ethresear.ch/t/prevention-of-bouncing-attack-on-ffg/6114) alternatif bir zincirinkine geçebilmesi için güncellendi. Bu koşul, saldırganın daha sonra kullanmak üzere oy biriktirmesini engeller - çatal seçim algoritması öncelikli seçtiği kontrol noktasına sadık kalarak bu süre zarfında çoğu dürüst doğrulayıcı dönemin ilk 1/3'ünde seçilmiş kontrol noktasında sadık kalarak oylamış olur. Bu önlemlerin birleşimi, dürüst bir blok önericisinin yuvanın başlangıcından hemen sonra bloklarını çok hızlı bir şekilde yayınlayabileceği, ardından malum yeni blok için çatal seçim algoritmasının farklı bir zincire geçmesini nedenselleştiren ~1/3 yuva (4 saniyede) kadarlık bir süre doğduğu senaryoya imkân tanır. Aynı son tarihin ardından, yavaş doğrulayıcılardan gelen tasdikler, daha önce gelenlere kıyasla daha düşük ağırlık sahibi olur. Bu, zincirin başını belirlemede hızlı önericileri ve doğrulayıcıları güçlü bir şekilde destekler ve dengeleme veya sıçrama saldırısının başarı ihtimalini önemli ölçüde azaltır. -Not almaya değer, o sunucu yalnız "ucuz yeniden düzenleme" karşıtı savunmasını arttırınca, başka bir deyişle bunlar küçük bir kilitle birlikte saldırgan tarafından denenmiş. Aslında, önerici artırıcının kendisi büyük hissedarlar tarafından oynanabilir. [Bu gönderinin](https://ethresear.ch/t/change-fork-choice-rule-to-mitigate-balancing-and-reorging-attacks/11127) yazarı bir saldırganın %7'lik bir kilitle oylarını nasıl stratejik bir şekilde dürüst onaylayıcıları kandırarak kendilerinin çatallanmasını oluşturmak ve dürüst bir blokun yeniden düzenlenmesi için dağıtabileceğini açıklıyor. Bu saldırı, olası olmayan ideal gecikme durumları tahmin edilerek planlanmıştır. En büyük kilit aynı zamanda daha fazla büyük risk ve daha güçlü engel anlamına geldiği için ihtimaller saldırgan için hâlâ çok uzun. +Teklifçi artışının tek başına yalnızca "ucuz yeniden düzenlemelere", yani küçük bir kilide sahip bir saldırgan tarafından denenenlere karşı koruma sağladığını belirtmekte fayda var. Aslında, önerici artırıcının kendisi büyük hissedarlar tarafından oynanabilir. [Bu gönderinin](https://ethresear.ch/t/change-fork-choice-rule-to-mitigate-balancing-and-reorging-attacks/11127) yazarları, %7'lik bir kilide sahip bir saldırganın, oylarını stratejik olarak kullanarak dürüst doğrulayıcıları kendi çatalları üzerinde inşa yapmaya kandırıp dürüst bir bloğu yeniden düzenleyerek nasıl devre dışı bırakabileceğini açıklıyor. Bu saldırı, olası olmayan ideal gecikme durumları tahmin edilerek planlanmıştır. En büyük kilit aynı zamanda daha fazla büyük risk ve daha güçlü engel anlamına geldiği için ihtimaller saldırgan için hâlâ çok uzun. -Öneri arttırıcıya rağmen [özel olarak LMD kuralını hedef alan bir dengeleme saldırısı](https://ethresear.ch/t/balancing-attack-lmd-edition/11853) da önerilmiştir. Bir saldırgan blok önerilerini ve her bir blokun yarı ağını yayarak, çatallar için yaklaşık dengede olan iki rakip zinciri ayarlar. Sonra gizlice anlaşmış doğrulayıcılar, ağın yarısı önce Çatal `A`'ya giden oyları, diğer yarısını da Çatal `B`'ye giden oyları alacak şekilde oylarını gönderirler. LMD kuralı ikinci tasdiki yok saydığı ve her doğrulayıcı için sadece ilkini tuttuğu için, ağın yarısı `A` için oyları görür ve `B` için hiç görmez, diğer yarısı ise `B` için oyları görür ve `A` için hiç görmez. Yazarlar LMD kuralını düşmana bir dengeleme saldırısı düzenlemesi için "dikkate değer seviyede güç" vermek olarak açıklarlar. +Ayrıca, teklifçi artışına rağmen uygulanabilir olduğu öne sürülen, [özellikle LMD kuralını hedef alan bir dengeleme saldırısı](https://ethresear.ch/t/balancing-attack-lmd-edition/11853) da önerildi. Bir saldırgan blok önerilerini ve her bir blokun yarı ağını yayarak, çatallar için yaklaşık dengede olan iki rakip zinciri ayarlar. Ardından, işbirliği yapan doğrulayıcılar oylarını belirsiz bir şekilde kullanır ve zamanlamayı öyle ayarlarlar ki ağın yarısı önce `A` Çatalı için oyları alırken diğer yarısı önce `B` Çatalı için oyları alır. LMD kuralı ikinci tasdiki atıp her doğrulayıcı için yalnızca ilkini tuttuğundan, ağın yarısı `A` için oyları görürken `B` için hiç oy görmez, diğer yarısı ise `B` için oyları görürken `A` için hiç oy görmez. Yazarlar LMD kuralını düşmana bir dengeleme saldırısı düzenlemesi için "dikkate değer seviyede güç" vermek olarak açıklarlar. -Bu LMD saldırı vektörü [çatal seçim algoritmasının güncellenmesi](https://github.com/ethereum/consensus-specs/pull/2845) ile kapatılmıştır yani çatal seçim tercihinden kaçamaklı doğrulayıcıları tamamen yok sayar. Kaçamaklı doğrulayıcıların gelecekteki etkisi ayrıca çatal seçim algoritması tarafından düşürülür. Bu yukarıda belirtilen dengeleme saldırısını önlerken aynı zamanda çığ saldırılarına karşı sağlamlığı da sürdürür. +Bu LMD saldırı vektörü, belirsiz oy kullanan doğrulayıcıları çatal seçimi değerlendirmesinden tamamen çıkarması için [çatal seçim algoritması güncellenerek](https://github.com/ethereum/consensus-specs/pull/2845) kapatılmıştır. Kaçamaklı doğrulayıcıların gelecekteki etkisi ayrıca çatal seçim algoritması tarafından düşürülür. Bu yukarıda belirtilen dengeleme saldırısını önlerken aynı zamanda çığ saldırılarına karşı sağlamlığı da sürdürür. -[**Çığ saldırısı**](https://ethresear.ch/t/avalanche-attack-on-proof-of-stake-ghost/11854/3) denilen diğer bir saldırı türü [Mart 2022 belgesinde](https://arxiv.org/pdf/2203.01315.pdf) açıklanmıştır. Bir çığ saldırısı düzenlemek için, saldırganın birkaç ardışık blok önericisini kontrol etmesi gerekir. Her blok öneri yuvasında, saldırgan blokunu tutar ve zincir tutulan bloklarla eşit bir alt ağaç ağırlığına gelene kadar biriktirir. Sonrasında, maksimum olarak muğlaklık oluşturmak için tutulan bloklar serbest bırakılır. Yazarlar önerici güçlendirmesinin - dengeleme ve sekme saldırılarına karşı ana defans - bazı çığ saldırılarına karşı koruma sağlamadığını belirtirler. Ancak, yazarlar saldırıyı sadece Ethereum'un çatal seçim algoritmasının yüksek derecede idealize edilmiş bir versiyonunda göstermişlerdir (LMD olmadan GHOST kullanmışlardır). +[**Çığ saldırıları**](https://ethresear.ch/t/avalanche-attack-on-proof-of-stake-ghost/11854/3) olarak adlandırılan başka bir saldırı sınıfı, [Mart 2022 tarihli bir makalede](https://arxiv.org/pdf/2203.01315.pdf) açıklanmıştır. Bir çığ saldırısı düzenlemek için, saldırganın birkaç ardışık blok önericisini kontrol etmesi gerekir. Her blok öneri yuvasında, saldırgan blokunu tutar ve zincir tutulan bloklarla eşit bir alt ağaç ağırlığına gelene kadar biriktirir. Sonrasında, maksimum olarak muğlaklık oluşturmak için tutulan bloklar serbest bırakılır. Yazarlar önerici güçlendirmesinin - dengeleme ve sekme saldırılarına karşı ana defans - bazı çığ saldırılarına karşı koruma sağlamadığını belirtirler. Ancak, yazarlar saldırıyı sadece Ethereum'un çatal seçim algoritmasının yüksek derecede idealize edilmiş bir versiyonunda göstermişlerdir (LMD olmadan GHOST kullanmışlardır). Çığ saldırısı LMD-GHOST çatal seçim algoritmasının LMD kısmı tarafından engellenir. LMG "latest-message-driven (en son yürütülen mesaj)" anlamına gelir ve bir doğrulayıcının diğer doğrulayıcılardan aldığı son mesajların bulunduğu, doğrulayıcı tarafından tutulan bir tablodur. Bu alan sadece spesifik bir doğrulayıcı için yeni bir mesaj mevcut tablodakinden daha sonraki bir yuvadan ise güncellenir. Pratikte, her bir yuva kabul edilen ilk mesajı aldığı ve eş olan ekleme mesajların görmezden gelinmesi anlamına gelir. Başka bir şekilde anlatılacak olursa, fikir birliği istemcileri muğlaklıkları saymazlar - her bir doğrulayıcıdan gelen ilk mesajı kullanırlar ve muğlaklıklar basitçe yok sayılır, çığ saldırıları önlenir. -Çatal seçim kuralına önerici güçlendirmesi tarafından sağlanan güvenliğe katkı sağlayabilecek birkaç potansiyel gelecek güncellemesi bulunmaktadır. Biri [gözlem-birleşim](https://ethresear.ch/t/view-merge-as-a-replacement-for-proposer-boost/13739)'dir, tasdikçiler bir yuvanın başlangıcından `n` saniye önce çatal seçimi görüşlerini dondururlar ve önerici sonrasında ağ üzerinde zincirin görünümünün senkronize edilmesine yardımcı olur. Diğer bir yükseltme ise, zinciri sadece tek bir yuvadan sonra kesinleştirerek mesaj zamanlamasına dayalı saldırılara karşı koruma sağlayan [tek yuva kesinliğidir](https://notes.ethereum.org/@vbuterin/single_slot_finality). +Çatal seçim kuralına önerici güçlendirmesi tarafından sağlanan güvenliğe katkı sağlayabilecek birkaç potansiyel gelecek güncellemesi bulunmaktadır. Bunlardan biri, tasdikçilerin bir yuvanın başlangıcından `n` saniye önce çatal seçimi görüşlerini dondurduğu ve ardından teklifçinin ağ genelinde zincir görünümünü senkronize etmeye yardımcı olduğu [görünüm birleştirme](https://ethresear.ch/t/view-merge-as-a-replacement-for-proposer-boost/13739) yöntemidir. Bir başka potansiyel yükseltme, zinciri sadece bir yuvadan sonra kesinleştirerek mesaj zamanlamasına dayalı saldırılara karşı koruma sağlayan [tek yuvalı kesinliktir](https://notes.ethereum.org/@vbuterin/single_slot_finality). #### Kesinlik Gecikmesi {#finality-delay} -[Düşük maliyetli tek blok yeniden düzenleme saldırısından ilk bahseden yazı](https://econcs.pku.edu.cn/wine2020/wine2020/Workshop/GTiB20_paper_8.pdf), dönem-sınırı blokunu teklif edenin salgırgan olması durumuna dayanan, Kesinlik Gecikmesinden ("canlılık hatası" olarak da bilinir) de bahseder. Bu durum kritiktir çünkü dönem sınırı bloklarını, Casper FFG zincirin belirli parçalarını kesinleştirmek için bir kontrol noktası olarak kullanır. Saldırgan basitçe, yeterli sayıda dürüst doğrulayıcı FFG oylarını, kesinleştirme hedefi olarak bir önceki dönem sınırı bloku lehine kullanana kadar blokunu bekletir. Bunun ardından beklettiği bloku teklif eder. Bloklarını doğrularlar, diğer dürüst doğrulayıcılar da kendi bloklarını doğrular ve bu durum hedefi farklı kontrol noktaları olan bir çatallanma oluşturur. Eğer zamanlama doğruysa, bu durum kesinleştirmeyi geciktirir çünkü çatallanmanın iki tarafında da, zinciri doğrulayacak 2/3 mutlak çoğunluk sağlanamaz. Kilitlediği miktar azaldıkça, saldırganın zamanlamasının daha nokta atışı olması gerekir. Çünkü saldırgan doğrudan daha az onaylamada bulur ve bu da dönem sınırı blokunu teklif eden onaylayıcı olma olasılığını düşürür. +Düşük maliyetli tek blokluk yeniden düzenleme saldırısını ilk tanımlayan [aynı makale](https://econcs.pku.edu.cn/wine2020/wine2020/Workshop/GTiB20_paper_8.pdf), saldırganın bir dönem sınırı bloğu için blok teklifçisi olmasına dayanan bir kesinlik gecikmesi (diğer adıyla "canlılık hatası") saldırısını da açıklamıştır. Bu durum kritiktir çünkü dönem sınırı bloklarını, Casper FFG zincirin belirli parçalarını kesinleştirmek için bir kontrol noktası olarak kullanır. Saldırgan basitçe, yeterli sayıda dürüst doğrulayıcı FFG oylarını, kesinleştirme hedefi olarak bir önceki dönem sınırı bloku lehine kullanana kadar blokunu bekletir. Bunun ardından beklettiği bloku teklif eder. Bloklarını doğrularlar, diğer dürüst doğrulayıcılar da kendi bloklarını doğrular ve bu durum hedefi farklı kontrol noktaları olan bir çatallanma oluşturur. Eğer zamanlama doğruysa, bu durum kesinleştirmeyi geciktirir çünkü çatallanmanın iki tarafında da, zinciri doğrulayacak 2/3 mutlak çoğunluk sağlanamaz. Kilitlediği miktar azaldıkça, saldırganın zamanlamasının daha nokta atışı olması gerekir. Çünkü saldırgan doğrudan daha az onaylamada bulur ve bu da dönem sınırı blokunu teklif eden onaylayıcı olma olasılığını düşürür. -#### Uzun mesafe saldırıları {#long-range-attacks} +#### Uzun menzilli saldırılar {#long-range-attacks} -Hisse ispatı blok zincirlerine özel olan bir saldırı sınıfı vardır, bu saldırı sınıfı başlangıç blokunun doğrulamasına katılan doğrulayıcılardan birinin, orijinal zincir yanında ayrı bir çatal zinciri yürütmesine, ileri ve fırsat görülen bir noktada dürüst onaylayıcıları da bu çatal zinciri onaylamaya geçmelerine ikna etmesine dayanır. Bu tür bir saldırı Ethereum üzerinde mümkün değildir çünkü kesinlik aygıtı, belirli aralıklarla (kontrol noktaları) tüm onaylayıcıların orijinal ağın durumu üzerinde anlaşmalarını mecbur kılar. Bu basit mekanizma, uzun menzilli saldırıları bertaraf eder çünkü Ethereum asla kesinleştirilmiş blokları yeniden düzenletmez. Ağa katılan yeni düğümler, yakın zamanlı ve güvenilir bir durum karması ("[zayıf öznellik](https://blog.ethereum.org/2014/11/25/proof-stake-learned-love-weak-subjectivity/) kontrol noktası") bularak ve bunu bir Başlangıç bloku gibi kullanarak üzerine inşa eder. Bu ağa katılan yeni düğümlerin, kendi başlarına bilgi onaylamaya başlamadan onlara bir "güven kapısı" oluşturur. +Hisse ispatı blok zincirlerine özel olan bir saldırı sınıfı vardır, bu saldırı sınıfı başlangıç blokunun doğrulamasına katılan doğrulayıcılardan birinin, orijinal zincir yanında ayrı bir çatal zinciri yürütmesine, ileri ve fırsat görülen bir noktada dürüst onaylayıcıları da bu çatal zinciri onaylamaya geçmelerine ikna etmesine dayanır. Bu tür bir saldırı Ethereum üzerinde mümkün değildir çünkü kesinlik aygıtı, belirli aralıklarla (kontrol noktaları) tüm onaylayıcıların orijinal ağın durumu üzerinde anlaşmalarını mecbur kılar. Bu basit mekanizma, uzun menzilli saldırıları bertaraf eder çünkü Ethereum asla kesinleştirilmiş blokları yeniden düzenletmez. Ağa katılan yeni düğümler, güvenilir ve yeni bir durum karması (bir "[zayıf öznellik](https://blog.ethereum.org/2014/11/25/proof-stake-learned-love-weak-subjectivity/) kontrol noktası") bularak ve bunu üzerine inşa edilecek bir sözde başlangıç bloğu olarak kullanarak bunu yaparlar. Bu ağa katılan yeni düğümlerin, kendi başlarına bilgi onaylamaya başlamadan onlara bir "güven kapısı" oluşturur. #### Hizmet Reddi {#denial-of-service} -Ethereum'un PoS mekanizması, her bir yuvada blok önericisi olması adına toplam doğrulayıcı ekibinden tek bir doğrulayıcıyı seçer. Bu, açıkça bilinen bir fonksiyon kullanılarak işlenebilir ve bir rakibin, kendi blok önerilerinin önceliği adına bir sonraki blok önericisini bilmesi mümkündür. Daha sonra saldırgan, kendi eşleriyle bilgi takasını önlemek için blok önericisini spamlayabilir. Ağın geri kalanı için bu durum, blok önericisinin çevrimdışı olduğu ve yuvanın boş gideceği şeklinde ortaya çıkar. Bu, belli başlı doğrulayıcılara karşı onların blok zincire bilgi eklemelerini engelleyen, bir çeşit sansür formu olabilir. Tekil gizli lider seçimleri (SSLE) veya tekil olmayan gizli lider seçimleri uygulamak DoS risklerini azaltır çünkü sadece blok önericisi seçildiğini bilir ve seçim önceden bilinemez. Bu henüz uygulanmadı, ancak [araştırma ve geliştirmenin](https://ethresear.ch/t/secret-non-single-leader-election/11789) aktif bir alanıdır. +Ethereum'un PoS mekanizması, her bir yuvada blok önericisi olması adına toplam doğrulayıcı ekibinden tek bir doğrulayıcıyı seçer. Bu, açıkça bilinen bir fonksiyon kullanılarak işlenebilir ve bir rakibin, kendi blok önerilerinin önceliği adına bir sonraki blok önericisini bilmesi mümkündür. Daha sonra saldırgan, kendi eşleriyle bilgi takasını önlemek için blok önericisini spamlayabilir. Ağın geri kalanı için bu durum, blok önericisinin çevrimdışı olduğu ve yuvanın boş gideceği şeklinde ortaya çıkar. Bu, belli başlı doğrulayıcılara karşı onların blok zincire bilgi eklemelerini engelleyen, bir çeşit sansür formu olabilir. Tekil gizli lider seçimleri (SSLE) veya tekil olmayan gizli lider seçimleri uygulamak DoS risklerini azaltır çünkü sadece blok önericisi seçildiğini bilir ve seçim önceden bilinemez. Bu henüz uygulanmamıştır, ancak aktif bir [araştırma ve geliştirme](https://ethresear.ch/t/secret-non-single-leader-election/11789) alanıdır. Tüm bunlar, küçük bir hisse ile Ethereum'a başarıyla saldırmanın çok zor olduğu gerçeğini gösterir. Burada açıklanan uygun saldırılar; idealleştirilmiş çatal seçim algoritması, olanaksız ağ şartları veya saldırgan aracıların halihazırda istemci yazılımına küçük yamalar ile yakın bağ kurmalarını gerektirir. Bu, tabii ki sıfırıncı gün açıklarının mevcut olması ihtimalini sıfırlamaz, ancak azınlık hisse bir saldırganın etkili olması için gereken teknik yeteneğin, fikir birliği katmanı bilgisinin ve şansın ekstrem şekilde yüksek sınırını gösterir. Bir saldırganın bakış açısından en iyi iddiaları, mümkün olduğu kadar fazla ether biriktirmek ve toplam hisselerin daha büyük bir oranıyla, güçlenerek geri dönmektir. -### Toplam hissenin >= %33'ünü kullanan saldırganlar {#attackers-with-33-stake} +### Toplam kilidin >= %33'ünü kullanan saldırganlar {#attackers-with-33-stake} Bu makalede daha önce açıklanan tüm saldırıların başarılı olması, saldırganın oy vermek için daha fazla hisselenmiş ethere sahip olduğu ve her bir yuvada, blok önermesi için daha fazla doğrulayıcının seçildiği zamanda daha olası hale gelir. Böylece kötü niyetli bir doğrulayıcı mümkün olan en fazla miktarda hisselenmiş etheri kontrol etmeyi hedefleyebilir. @@ -105,31 +108,31 @@ Hisselenmiş etherin %33'ü saldırgan için bir kıyastır çünkü bu miktarda Hareketsizlik sızıntısının amacı zincirin tekrardan kesinleşebilmesidir. Ancak saldırgan da hisselenmiş etherinin bir kısmını kaybeder. Toplam hisselenmiş etherin %33'ünü temsil eden doğrulayıcıların sürekli hareketsizliği, doğrulayıcılar cezalandırılmasa dahi oldukça pahalıdır. -Ethereum ağının senkronize olmadığını varsaydığımızda (ör. gönderilen ve alınan mesajlar arasında gecikme olması) toplam hisselerin %34'üne sahip saldırgan çift kesinliğe yol açabilir. Bu; saldırganlar blok üreticileri olarak seçildiği zaman birden fazla bloku denkleştirip daha sonra da tüm doğrulayıcılarıyla oylamalarından dolayıdır. Bu, blok zincirin çatalının var olduğu ve her birinin %34 hisselenmiş ether ile oylandığı bir durum yaratır. Her bir çatal, böyle bir durumda her iki zincirin de kesinleşebileceği (çünkü saldırgan doğrulayıcıların %34'ü + kalan %66'nın yarısı = %67), süper çoğunluk tarafından desteklenmek için kalan doğrulayıcıların yalnızca %50'sinin kendi lehine oy vermelerini gerektirir. Yarışan blokların her biri dürüst doğrulayıcıların yaklaşık %50'si tarafından alınmalıdır, bu nedenle bu saldırı, saldırganın ağ üzerindeki mesajların zamanlaması üzerinde belli bir derecede kontrol sahibi olduğu durumlarda mümkündür. Böylece dürüst doğrulayıcıların yarısını her bir zincire yönlendirebilirler. Saldırganın bu çifte kesinliği elde etmek için kendi tüm kilidini (bugünkü doğrulayıcı kümesiyle yaklaşık 10 milyon ether'in %34'ü) mutlaka yok etmesi gerekecektir. Çünkü saldırganın %34'ü kadar olan doğrulayıcıları aynı anda çifte oy kullanmış olacaktır - en yüksek oranda ceza gerektiren ihlal türüdür. Bu saldırıya karşı savunma, hisselenen toplam etherin %34'ünü yok etmenin çok büyük bir maliyeti olmasıdır. Bu saldırıdan kurtulmak için Ethereum topluluğunun "bant dışında" olarak koordine olması ve çatalın birini takip etmeye ve diğerini görmezden gelmeye karar vermesi gerekecektir. +Ethereum ağının asenkron olduğu (yani gönderilen ve alınan mesajlar arasında gecikmeler olduğu) varsayıldığında, toplam kilidin %34'ünü kontrol eden bir saldırgan çifte kesinliğe neden olabilir. Bu; saldırganlar blok üreticileri olarak seçildiği zaman birden fazla bloku denkleştirip daha sonra da tüm doğrulayıcılarıyla oylamalarından dolayıdır. Bu, blok zincirin çatalının var olduğu ve her birinin %34 hisselenmiş ether ile oylandığı bir durum yaratır. Her bir çatal, böyle bir durumda her iki zincirin de kesinleşebileceği (çünkü saldırgan doğrulayıcıların %34'ü + kalan %66'nın yarısı = %67), süper çoğunluk tarafından desteklenmek için kalan doğrulayıcıların yalnızca %50'sinin kendi lehine oy vermelerini gerektirir. Yarışan blokların her biri dürüst doğrulayıcıların yaklaşık %50'si tarafından alınmalıdır, bu nedenle bu saldırı, saldırganın ağ üzerindeki mesajların zamanlaması üzerinde belli bir derecede kontrol sahibi olduğu durumlarda mümkündür. Böylece dürüst doğrulayıcıların yarısını her bir zincire yönlendirebilirler. Saldırganın bu çifte kesinliği elde etmek için kendi tüm kilidini (bugünkü doğrulayıcı kümesiyle yaklaşık 10 milyon ether'in %34'ü) mutlaka yok etmesi gerekecektir. Çünkü saldırganın %34'ü kadar olan doğrulayıcıları aynı anda çifte oy kullanmış olacaktır - en yüksek oranda ceza gerektiren ihlal türüdür. Bu saldırıya karşı savunma, hisselenen toplam etherin %34'ünü yok etmenin çok büyük bir maliyeti olmasıdır. Bu saldırıdan kurtulmak için Ethereum topluluğunun "bant dışında" olarak koordine olması ve çatalın birini takip etmeye ve diğerini görmezden gelmeye karar vermesi gerekecektir. -### Toplam hissenin ~%50'sini kullanan saldırganlar {#attackers-with-50-stake} +### Toplam kilidin ~%50'sini kullanan saldırganlar {#attackers-with-50-stake} Hisselenen etherin %50'sinde, zararlı bir doğrulayıcı grubu teorik olarak zinciri eşit boyutlu iki çatala bölebilir ve ardından %50 hissenin tamamını dürüst doğrulayıcı kümesinin aksine oy vermek için kullanabilir, böylece iki çatalı koruyabilir ve kesinliği önleyebilir. Her iki çataldaki hareketsizlik sızıntısı, sonunda her iki zincirin de kesinleşmesine yol açacaktır. Bu noktada, tek seçenek sosyal iyileşmeye geri dönmektir. -Dürüst doğrulayıcı sayısındaki değişim, ağ gecikmesi vb. faktörler nedeniyle bir saldırgan doğrulayıcı grubunun toplam hissenin tam olarak %50'sini sürekli olarak kontrol edebilmesi çok olası değildir. Bu tür bir saldırıyı gerçekleştirmenin büyük maliyeti ile başarılı olma olasılığının düşük olması, rasyonel bir saldırgan için güçlü bir caydırıcı gibi görünmektedir, özellikle _%50'nin üzerindeki_ daha fazla güce erişmek için küçük bir ek yatırım gerektiğinde. +Dürüst doğrulayıcı sayılarındaki bir miktar dalgalanma, ağ gecikmesi vb. göz önüne alındığında, rakip bir doğrulayıcı grubunun toplam kilidin tam olarak %50'sini tutarlı bir şekilde kontrol etmesi çok olası değildir - böyle bir saldırıyı gerçekleştirmenin büyük maliyeti, düşük başarı olasılığıyla birleştiğinde, rasyonel bir saldırgan için güçlü bir caydırıcı gibi görünmektedir, özellikle de %50'den _fazlasını_ elde etmek için yapılacak küçük bir ek yatırımın çok daha fazla gücün kilidini açtığı durumlarda. -Toplam hissenin >%50'sinde, saldırgan çatal seçim algoritmasına hükmedebilir. Bu durumda, saldırgan, dürüst istemcileri kandırmaya gerek kalmadan kısa yeniden yapılandırmalar için yeterli kontrolü sağlayarak çoğunluk oyu ile onaylayabilecektir. Dürüst doğrulayıcılar aynı şeyi yapacaktır çünkü çatal seçim algoritmaları da saldırganın tercih ettiği zinciri en ağır olarak görecek ve böylece zincir kesinliğe ulaşabilecektir. Bu, saldırganın belirli işlemleri sansürlemesini, kısa vadeli yeniden düzenlemeleri gerçekleştirmesini ve blokları kendi lehlerine yeniden düzenleyerek maksimum MEV'yi çıkarmasını sağlar. Bu tür bir saldırıya karşı savunma, çoğunluk hissesinin (şu anda yaklaşık 19 milyar ABD doları) risk altına alınmasına neden olan büyük maliyettir çünkü sosyal katmanın muhtemelen dürüst bir azınlık çatalını benimseyip, saldırganın hissesinin değerini dramatik bir şekilde düşürme eğiliminde olmasıdır. +Toplam kilidin >%50'sinde saldırgan, çatal seçim algoritmasına hakim olabilir. Bu durumda, saldırgan, dürüst istemcileri kandırmaya gerek kalmadan kısa yeniden yapılandırmalar için yeterli kontrolü sağlayarak çoğunluk oyu ile onaylayabilecektir. Dürüst doğrulayıcılar aynı şeyi yapacaktır çünkü çatal seçim algoritmaları da saldırganın tercih ettiği zinciri en ağır olarak görecek ve böylece zincir kesinliğe ulaşabilecektir. Bu, saldırganın belirli işlemleri sansürlemesini, kısa vadeli yeniden düzenlemeleri gerçekleştirmesini ve blokları kendi lehlerine yeniden düzenleyerek maksimum MEV'yi çıkarmasını sağlar. Bu tür bir saldırıya karşı savunma, çoğunluk hissesinin (şu anda yaklaşık 19 milyar ABD doları) risk altına alınmasına neden olan büyük maliyettir çünkü sosyal katmanın muhtemelen dürüst bir azınlık çatalını benimseyip, saldırganın hissesinin değerini dramatik bir şekilde düşürme eğiliminde olmasıdır. -### Toplam hissenin >=%66'sını kullanan saldırganlar {#attackers-with-66-stake} +### Toplam kilidin >=%66'sını kullanan saldırganlar {#attackers-with-66-stake} -Hisselenmiş toplam eterin %66'sı veya daha fazlasına sahip olan bir saldırgan, herhangi bir dürüst doğrulayıcıyı zorlamak zorunda kalmadan tercih ettiği zinciri kesinleştirebilir. Saldırgan, tercih ettiği çatal için oy kullanabilir ve ardından kesinleştirebilir çünkü basitçe dürüst olmayan bir üstün çoğunluk ile oy kullanabilirler. Saldırgan, üstün çoğunluk hissedarı olarak harcama, geri sarma ve yeniden harcama, belirli işlemleri sansürleme ve istediği zaman zinciri yeniden düzenleme gücüyle sonuçlandırılmış blokların içeriğini her zaman kontrol edecektir. %51 yerine, %66'yı kontrol etmek için ek ether satın alarak, saldırgan etkin bir şekilde sonradan yapılan yeniden düzenleme ve yeniden bozma yeteneğini satın alıyor (yani hem geçmişi değiştirme hem de geleceği kontrol etme yeteneği). Buradaki tek gerçek savunma, hisselnmiş toplam etherin %66'sının yüksek maliyeti ve alternatif bir çatalın benimsenmesini koordine etmek için sosyal katmana geri dönme seçeneğidir. Bunu bir sonraki bölümde daha detaylı inceleyebiliriz. +Hisselenmiş toplam eterin %66'sı veya daha fazlasına sahip olan bir saldırgan, herhangi bir dürüst doğrulayıcıyı zorlamak zorunda kalmadan tercih ettiği zinciri kesinleştirebilir. Saldırgan, tercih ettiği çatal için oy kullanabilir ve ardından kesinleştirebilir çünkü basitçe dürüst olmayan bir üstün çoğunluk ile oy kullanabilirler. Saldırgan, üstün çoğunluk hissedarı olarak harcama, geri sarma ve yeniden harcama, belirli işlemleri sansürleme ve istediği zaman zinciri yeniden düzenleme gücüyle sonuçlandırılmış blokların içeriğini her zaman kontrol edecektir. Saldırgan, %51 yerine %66'yı kontrol etmek için ek ether satın alarak, etkin bir şekilde ex post yeniden düzenlemeler ve kesinlik geri çevirmeleri yapma (yani geçmişi değiştirmenin yanı sıra geleceği de kontrol etme) yeteneğini satın almaktadır. Buradaki tek gerçek savunma, hisselnmiş toplam etherin %66'sının yüksek maliyeti ve alternatif bir çatalın benimsenmesini koordine etmek için sosyal katmana geri dönme seçeneğidir. Bunu bir sonraki bölümde daha detaylı inceleyebiliriz. -## İnsanlar: Savunmanın son hattı {#people-the-last-line-of-defense} +## İnsanlar: son savunma hattı {#people-the-last-line-of-defense} Dürüst olmayan doğrulayıcılar zincirin kendi tercih ettikleri sürümünü tamamlamayı başarırlarsa, Ethereum topluluğu zor duruma düşer. Kanonik zincir, geçmişine kazınmış dürüst olmayan bir bölüm içerirken, dürüst doğrulayıcılar alternatif (dürüst) bir zinciri onayladıkları için cezalandırılabilirler. Kesinleşmiş ancak yanlış bir zincirin, bir hatadan da kaynaklanabileceğini unutmayın. Sonuç olarak, son yedek seçenek, olayı çözmesi için sosyal katmana (Katman 0) güvenmektir. -Ethereum'un PoS mutabakat mekanizmasının güçlü yönlerinden biri, topluluğun bir saldırıyla karşılaştığında kullanabileceği [çeşitli savunma stratejileri](https://youtu.be/1m12zgJ42dI?t=1712) bulunmasıdır. En düşük tepki, saldırganların doğrulayıcılarını ağdan zorla çıkararak herhangi bir ek ceza uygulamadan olabilir. Ağa tekrar katılmak isteyen saldırgan, doğrulayıcı kümesinin yavaşça büyümesini sağlayan bir etkinleştirme kuyruğuna katılmak zorunda kalacaktır. Örneğin, hisselenmiş ether miktarını ikiye katlamak için yeterli sayıda doğrulayıcı eklemek yaklaşık 200 gün sürer; bu da dürüst doğrulayıcılara, saldırganın bir sonraki %51 saldırı girişiminde bulunabilmesi için 200 gün süre kazandırır. Ancak topluluk, saldırgana daha sert cezalar verme kararı da alabilir. Önceki ödülleri iptal etmek veya hisselenen sermayelerinin bir kısmını (yüzde 100'e kadar) yakmak gibi. +Ethereum’un PoS mutabakatının güçlü yönlerinden biri, bir saldırı karşısında topluluğun kullanabileceği bir [dizi savunma stratejisi](https://youtu.be/1m12zgJ42dI?t=1712) olmasıdır. En düşük tepki, saldırganların doğrulayıcılarını ağdan zorla çıkararak herhangi bir ek ceza uygulamadan olabilir. Ağa tekrar katılmak isteyen saldırgan, doğrulayıcı kümesinin yavaşça büyümesini sağlayan bir etkinleştirme kuyruğuna katılmak zorunda kalacaktır. Örneğin, hisselenmiş ether miktarını ikiye katlamak için yeterli sayıda doğrulayıcı eklemek yaklaşık 200 gün sürer; bu da dürüst doğrulayıcılara, saldırganın bir sonraki %51 saldırı girişiminde bulunabilmesi için 200 gün süre kazandırır. Ancak topluluk, saldırgana daha sert cezalar verme kararı da alabilir. Önceki ödülleri iptal etmek veya hisselenen sermayelerinin bir kısmını (yüzde 100'e kadar) yakmak gibi. Saldırgana uygulanan ceza ne olursa olsun, topluluk aynı zamanda Ethereum istemcilerine kodlanmış olan çatal seçim algoritması tarafından tercih edilen sahte zincirin gerçekte geçersiz olduğuna ve topluluğun dürüst zincir üzerine inşa etmesi gerektiğine karar vermek zorundadır. Dürüst doğrulayıcılar; örneğin, saldırının başlamadan önce klasik zincirden ayrılan veya saldırganın doğrulayıcılarını zorla çıkaran Ethereum blok zincirinin topluluk tarafından kabul edilen bir çatalının üzerine inşa etmeye kolektif olarak karar verebilirler. Dürüst doğrulayıcılar, saldırganın zincirine (haklı olarak) tanıklık etmedikleri için kendilerine uygulanan cezalardan kaçınmak için bu zincir üzerine inşa etmeye teşvik edilirler. Borsalar, erişim sağlayıcıları ve Ethereum üzerine inşa edilmiş uygulamalar, muhtemelen dürüst zincirde bulunmayı tercih eder ve dürüst doğrulayıcıları dürüst blok zinciri takip ederler. -Ancak, bu önemli bir yönetişim zorluğu olabilir. Kuşkusuz bazı kullanıcılar ve doğrulayıcılar dürüst zincire dönüş nedeniyle zarar görebilir, saldırıdan sonra doğrulanan bloklardaki işlemler potansiyel olarak geri alınabilir, uygulama katmanını bozabilir ve bazı kullanıcılar için "kod hukuktur" inancını sarsabilir. Bu nedenle, bir geri dönüş durumu ciddi etik ve teknik zorluklar içerebilir. Borsaların ve uygulamaların büyük olasılıkla zincir dışı işlemleri, şimdi geri alınabilecek olan zincir üzerindeki işlemlere bağlı olacaktır. Bu, düzeltilmesi zor bir şekilde geri çekilmeler ve revizyonlar zincirini başlatabilir. Özellikle haksız kazançlar karıştırıldıysa, DeFi veya diğer türevlere yatırıldıysa ve dürüst kullanıcılar için ikincil etkileri varsa, bu durumu adil bir şekilde çözmek zor olabilir. Kuşkusuz bazı kullanıcılar, belki de kurumsal olanlar, ya akıllıca davranarak ya da tesadüfen, dürüst olmayan zincirden zaten fayda sağlamış olabilirler ve kazançlarını korumak için bir çatala karşı çıkabilirler. %51> saldırılara karşı topluluk tepkisinin pratikte denemesi, akılcı ve koordineli bir önlem planının hızla uygulanabilmesini sağlamak için çağrılar yapılmıştır. Vitalik tarafından ethresear.ch platformunda bazı yararlı tartışmalar ve bilgiler [burada](https://ethresear.ch/t/timeliness-detectors-and-51-attack-recovery-in-blockchains/6925), [burada](https://ethresear.ch/t/responding-to-51-attacks-in-casper-ffg/6363) ve Twitter'da [burada](https://twitter.com/skylar_eth/status/1551798684727508992?s=20&t=oHZ1xv8QZdOgAXhxZKtHEw) sunulmuştur. Koordineli bir sosyal yanıtın amacı, saldırgana yönelik cezayı hedefli ve belirli yapmak, diğer kullanıcılar üzerindeki etkileri en aza indirmektir. +Ancak, bu önemli bir yönetişim zorluğu olabilir. Kuşkusuz bazı kullanıcılar ve doğrulayıcılar dürüst zincire dönüş nedeniyle zarar görebilir, saldırıdan sonra doğrulanan bloklardaki işlemler potansiyel olarak geri alınabilir, uygulama katmanını bozabilir ve bazı kullanıcılar için "kod hukuktur" inancını sarsabilir. Bu nedenle, bir geri dönüş durumu ciddi etik ve teknik zorluklar içerebilir. Borsalar ve uygulamalar büyük olasılıkla zincir dışı eylemleri, artık geri alınabilecek olan zincir üstü işlemlere bağlamış olacak ve bu durum, adil bir şekilde çözülmesi zor olacak bir dizi geri çekme ve revizyonu başlatacaktır, özellikle de haksız kazançlar karıştırılmış, DeFi'ye veya dürüst kullanıcılar için ikincil etkileri olan diğer türevlere yatırılmışsa. Kuşkusuz bazı kullanıcılar, belki de kurumsal olanlar, ya akıllıca davranarak ya da tesadüfen, dürüst olmayan zincirden zaten fayda sağlamış olabilirler ve kazançlarını korumak için bir çatala karşı çıkabilirler. Topluluğun >%51 saldırılarına vereceği tepkinin provasının yapılması için çağrılar yapılmıştır, böylece mantıklı ve koordineli bir azaltma planı hızla uygulanabilir. Vitalik tarafından ethresear.ch'de [şurada](https://ethresear.ch/t/timeliness-detectors-and-51-attack-recovery-in-blockchains/6925) ve [şurada](https://ethresear.ch/t/responding-to-51-attacks-in-casper-ffg/6363), Twitter'da ise [şurada](https://twitter.com/skylar_eth/status/1551798684727508992?s=20&t=oHZ1xv8QZdOgAXhxZKtHEw) bu konuda bazı faydalı tartışmalar bulunmaktadır. Koordineli bir sosyal yanıtın amacı, saldırgana yönelik cezayı hedefli ve belirli yapmak, diğer kullanıcılar üzerindeki etkileri en aza indirmektir. -Yönetişim, halihazırda karmaşık bir konu. Dürüst olmayan kesinleştirme zincirine karşı bir Katman 0 acil tepkiyi yönetmek, şüphesiz Ethereum topluluğu için zorlu olabilir, ancak Ethereum'un geçmişinde [gerçekleşmiştir](/ethereum-forks/#dao-fork-summary) - [iki kez](/ethereum-forks/#tangerine-whistle)). +Yönetişim, halihazırda karmaşık bir konu. Dürüst olmayan bir kesinleştirme zincirine karşı bir Katman-0 acil durum müdahalesini yönetmek şüphesiz Ethereum topluluğu için zorlayıcı olacaktır, ancak bu durum Ethereum'un tarihinde ([yaşanmıştır](/ethereum-forks/#dao-fork-summary)) - [iki kez](/ethereum-forks/#tangerine-whistle) - olmuştur). Yine de, son çare olarak gerçek dünyada bir çözüm bulunmasının oldukça tatmin edici bir yönü vardır. Sonuç olarak, üzerimizde bulunan bu olağanüstü teknoloji yığınına rağmen, en kötü durum gerçekleşirse, gerçek insanlar çözüm bulmak için bir araya gelmek zorunda kalacaklardır. @@ -151,13 +154,13 @@ Genelde, bu potansiyel saldırı vektörlerine rağmen, başarılı bir saldır %34, %51 veya %66 saldırıları çözülmek için büyük ihtimalle bant dışı sosyal koordinasyon gerektirecektir. Bu, topluluk için zahmetli olsa da, topluluğun bant dışı karşılık verebilmesi, saldırgan için güçlü bir caydırıcıdır. Ethereum sosyal katmanı temel dayanaktır - teknik olarak başarılı bir saldırı, topluluğun dürüst bir çatal benimsemesiyle etkisiz hale getirilebilir. Saldırgan ile Ethereum topluluğu arasında bir yarış olabilir - %66 saldırısı için harcanan milyarlarca dolar, saldırganı Ethereum topluluğu tarafından yok sayılan hileli zincirde likit olmayan hisselenmiş ether ile bırakan başarılı bir sosyal koordinasyon saldırısı tarafından yok edilebilir. Bunun, saldırgan için kârlı olma ihtimali, etkin bir caydırıcı olacak kadar düşüktür. İşte bu yüzden, birbirine sıkıca bağlı değerlere sahip sosyal bir katmanı sürdürmeye yönelik yatırımlar çok önemlidir. -## Daha Fazla Okuma {#further-reading} +## Ek Okumalar {#further-reading} -- [Bu sayfanın daha detaylı bir versiyonu](https://mirror.xyz/jmcook.eth/YqHargbVWVNRQqQpVpzrqEQ8IqwNUJDIpwRP7SS5FXs) -- [Uzlaşma kesinliği üzerine, Vitalik](https://blog.ethereum.org/2016/05/09/on-settlement-finality/) -- [LMD GHOST belgesi](https://arxiv.org/abs/2003.03052) -- [Casper-FFG belgesi](https://arxiv.org/abs/1710.09437) -- [Gasper belgesi](https://arxiv.org/pdf/2003.03052.pdf) -- [Önerici ağırlık arttırma mutabakat özellikleri](https://github.com/ethereum/consensus-specs/pull/2730) -- [ethresear.ch üzerindeki sıçrama saldırıları](https://ethresear.ch/t/prevention-of-bouncing-attack-on-ffg/6114) +- [Bu sayfanın daha ayrıntılı versiyonu](https://mirror.xyz/jmcook.eth/YqHargbVWVNRQqQpVpzrqEQ8IqwNUJDIpwRP7SS5FXs) +- [Vitalik'in uzlaşma kesinliği üzerine yazısı](https://blog.ethereum.org/2016/05/09/on-settlement-finality/) +- [LMD GHOST makalesi](https://arxiv.org/abs/2003.03052) +- [Casper-FFG makalesi](https://arxiv.org/abs/1710.09437) +- [Gasper makalesi](https://arxiv.org/pdf/2003.03052.pdf) +- [Teklifçi ağırlığı artırma mutabakat özellikleri](https://github.com/ethereum/consensus-specs/pull/2730) +- [ethresear.ch'de sıçrama saldırıları](https://ethresear.ch/t/prevention-of-bouncing-attack-on-ffg/6114) - [SSLE araştırması](https://ethresear.ch/t/secret-non-single-leader-election/11789) diff --git a/public/content/translations/tr/developers/docs/consensus-mechanisms/pos/attestations/index.md b/public/content/translations/tr/developers/docs/consensus-mechanisms/pos/attestations/index.md index 07a8f34fe27..2e1fb27392e 100644 --- a/public/content/translations/tr/developers/docs/consensus-mechanisms/pos/attestations/index.md +++ b/public/content/translations/tr/developers/docs/consensus-mechanisms/pos/attestations/index.md @@ -1,6 +1,6 @@ --- title: Tasdikler -description: Hisse ispatı Ethereum'da tasdikler üzerine bir açıklama. +description: "Hisse ispatı Ethereum'da tasdikler üzerine bir açıklama." lang: tr --- @@ -8,31 +8,31 @@ Bir doğrulayıcının her dönemde bir tasdik oluşturması, imzalaması ve yay ## Tasdik nedir? {#what-is-an-attestation} -Her [dönemde](/glossary/#epoch) (6,4 dakika) bir doğrulayıcı ağa bir tasdik önerir. Bu tasdik, dönemdeki spesifik bir yuva içindir. Tasdikin amacı doğrulayıcının zincir görüşü yani spesifik olarak en son haklı görülen blok ile mevcut dönemdeki ilk blok (`source` ve `target` kontrol noktaları olarak bilinir) için oy vermektir. Bu bilgi tüm katılım sağlayan doğrulayıcılar için birleştirilir ve ağın blok zincirin mevcut durumu üzerinde mutabakata varmasını sağlar. +Her [dönemde](/glossary/#epoch) (6,4 dakika) bir doğrulayıcı ağa bir tasdik önerir. Bu tasdik, dönemdeki spesifik bir yuva içindir. Tasdikin amacı, doğrulayıcının zincir görüşü, özellikle de en son gerekçelendirilmiş blok ve mevcut dönemdeki ilk blok (`kaynak` ve `hedef` kontrol noktaları olarak bilinir) lehine oy kullanmaktır. Bu bilgi tüm katılım sağlayan doğrulayıcılar için birleştirilir ve ağın blok zincirin mevcut durumu üzerinde mutabakata varmasını sağlar. Bu tasdik şu bileşenleri içerir: -- `aggregation_bits`: komitelerindeki doğrulayıcı endeksi ile eşleşen pozisyonun bulunduğu bir doğrulayıcı bit listesi; değer (0/1) doğrulayıcının `data` imzalayıp imzalamadığını gösterir (yani aktif olup olmadıklarını ve blok önericisi ile anlaşıp anlaşmadığını) -- `data`: aşağıda tanımlandığı gibi, tasdik ile alakalı ayrıntılar -- `signature`: tekil doğrulayıcıların imzalarını toplayan bir BLS imzası +- `aggregation_bits`: konumun, komitelerindeki doğrulayıcı diziniyle eşleştiği bir doğrulayıcı bit listesi; değer (0/1), doğrulayıcının `veri`yi imzalayıp imzalamadığını gösterir (yani, aktif olup olmadıklarını ve blok önericisiyle aynı fikirde olup olmadıklarını) +- `veri`: aşağıda tanımlandığı gibi, tasdikle ilgili ayrıntılar +- `imza`: bireysel doğrulayıcıların imzalarını bir araya getiren bir BLS imzası -Tasdikleyici bir doğrulayıcı için ilk görev `data` inşasıdır. Bu `data` aşağıdaki bilgileri içerir: +Tasdik eden bir doğrulayıcının ilk görevi `veri`yi oluşturmaktır. `veri` aşağıdaki bilgileri içerir: -- `slot`: Tasdikin değindiği yuva numarası -- `index`: Verilen bir yuvadaki doğrulayıcının hangi kurula ait olduğunu belirten bir sayı -- `beacon_block_root`: Doğrulayıcının zincirin başında gördüğü blokun kök şifresi (çatal seçim algoritmasının uygulanmasının sonucu) -- `source`: Doğrulayıcıların neyi en güncel kabul edilebilir blok olarak gördüğünü belirten kesinlik oyunun bir kısmı -- `target`: Doğrulayıcıların neyi mevcut dönemin ilk bloku olarak gördüğünü belirten kesinlik oyunun bir kısmı +- `yuva`: Tasdikin atıfta bulunduğu yuva numarası +- `indeks`: Belirli bir yuvada doğrulayıcının hangi komiteye ait olduğunu tanımlayan bir sayı +- `beacon_block_root`: Doğrulayıcının zincirin başında gördüğü bloğun kök karması (çatal seçim algoritmasını uygulamanın sonucu) +- `kaynak`: Doğrulayıcıların en son gerekçelendirilmiş blok olarak neyi gördüğünü belirten kesinlik oyunun bir parçası +- `hedef`: Doğrulayıcıların mevcut dönemdeki ilk blok olarak neyi gördüğünü belirten kesinlik oyunun bir parçası -`data` inşa edildiğinde, doğrulayıcı `aggregation_bits` içinde kendi doğrulayıcı endeksine denk gelen biti 0'dan 1'e ters çevirerek katılım sağladığını gösterebilir. +`veri` oluşturulduktan sonra, doğrulayıcı katıldığını göstermek için `aggregation_bits` içinde kendi doğrulayıcı indeksine karşılık gelen biti 0'dan 1'e çevirebilir. Son olarak, doğrulayıcı tasdiki imzalar ve ağa yayınlar. ### Toplanmış tasdik {#aggregated-attestation} -Bu veriyi ağ üzerinde her bir doğrulayıcı için dolaştırmanın önemli bir ek masrafı vardır. Sonuç olarak, tekil doğrulayıcılardan gelen tasdikler daha geniş olarak yayınlanmadan önce alt ağlar içerisinde toplanır. Bu, imzaların birlikte toplanmalarını içerir; bu sayede, yayınlanan bir tasdik, mutabakat `data`'sını ve tüm doğrulayıcıların `data` ile mutabakatta olduğu tüm imzaları birleştiren tek bir imzadan oluşur. Bu `aggregation_bits` kullanılarak kontrol edilebilir çünkü bu kendi komitesindeki (kimliği `data` içinde bulunur) her bir doğrulayıcının endeksini sağlar, bu da tekil imzaları sorgulamak için kullanılabilir. +Bu veriyi ağ üzerinde her bir doğrulayıcı için dolaştırmanın önemli bir ek masrafı vardır. Sonuç olarak, tekil doğrulayıcılardan gelen tasdikler daha geniş olarak yayınlanmadan önce alt ağlar içerisinde toplanır. Bu, imzaların bir araya getirilmesini içerir, böylece yayınlanan bir tasdik, mutabakat `verisi`ni ve bu `veri` ile aynı fikirde olan tüm doğrulayıcıların imzalarının birleştirilmesiyle oluşturulan tek bir imzayı içerir. Bu, `aggregation_bits` kullanılarak kontrol edilebilir çünkü bu, (kimliği `veri`de sağlanan) komitelerindeki her doğrulayıcının indeksini sağlar ve bu da bireysel imzaları sorgulamak için kullanılabilir. -Her dönemde her bir alt ağdaki 16 doğrulayıcı, `toplayıcı` olarak seçilir. Toplayıcılar dedikodu ağından duydukları ve kendi `verilerine` eşdeğer olan tüm tasdikleri toplar. Her uyumlu tasdikin göndericisi `aggregation_bits` içerisinde kaydedilir. Toplayıcılar sonrasında topladıkları tasdikleri daha geniş bir ağa yayımlar. +Her dönemde, her bir alt ağdaki 16 doğrulayıcı `toplayıcı` olarak seçilir. Toplayıcılar, dedikodu ağı üzerinden duydukları ve kendilerininkiyle eşdeğer `veri`ye sahip olan tüm tasdikleri toplar. Eşleşen her tasdikin göndericisi `aggregation_bits`e kaydedilir. Toplayıcılar sonrasında topladıkları tasdikleri daha geniş bir ağa yayımlar. Bir doğrulayıcı blok önericisi olmak için seçildiğinde yeni bloktaki en son yuvaya kadar alt ağlardaki tasdik toplamlarını paketler. @@ -60,33 +60,33 @@ En iyi senaryo, üç etiketin de doğru olduğu senaryodur; bu durumda da doğru Etiket tasdikleme oranı, belirlenmiş etiketi tasdikleyen tüm doğrulayıcıların toplam bakiyesinin toplam aktif bakiyeyle karşılaştırılmasıyla elde edilir. -### Ana ödül {#base-reward} +### Temel ödül {#base-reward} Ana ödül tasdik veren doğrulayıcıların ve onların etkili hisselenmiş ether bakiyelerine göre hesaplanır: -`base reward = validator effective balance x 2^6 / SQRT(Effective balance of all active validators)` +`temel ödül = doğrulayıcı etkin bakiyesi x 2^6 / KAREKÖK(Tüm aktif doğrulayıcıların etkin bakiyesi)` #### Dahil etme gecikmesi {#inclusion-delay} -Doğrulayıcıların zincirin başı üzerine oylama yaptığı zamanda (`block n`), `block n+1` henüz önerilmemişti. Sonuç olarak tasdikler doğal olarak **bir blok sonra** dahil edilmektedir yani zincirin başı olan `block n` üzerinde oylayan tüm tasdikler `block n+1` içinde dahil edilmiştir ve **dahil etme gecikmesi** 1'dir. Eğer dahil etme gecikmesi iki yuvaya katlanırsa, tasdik ödülü yarılanır çünkü tasdik ödülünü hesaplamak için ana ödül dahil etme gecikmesinin tersi ile çarpılır. +Doğrulayıcılar zincirin başı (`blok n`) için oy kullandığı sırada, `blok n+1` henüz önerilmemişti. Bu nedenle, tasdikler doğal olarak **bir blok sonra** dahil edilir, bu yüzden zincirin başı olarak `blok n`'ye oy veren tüm tasdikler `blok n+1`'e dahil edilir ve **dahil etme gecikmesi** 1 olur. Eğer dahil etme gecikmesi iki yuvaya katlanırsa, tasdik ödülü yarılanır çünkü tasdik ödülünü hesaplamak için ana ödül dahil etme gecikmesinin tersi ile çarpılır. ### Tasdik senaryoları {#attestation-scenarios} -#### Kayıp Oylayan Doğrulayıcı {#missing-voting-validator} +#### Eksik Oy Kullanan Doğrulayıcı {#missing-voting-validator} Doğrulayıcıların tasdiklerini bildirmeleri için maksimum 1 dönemleri vardır. Eğer dönem 0'da tasdik kaçırıldıysa, dönem 1'de dahil etme gecikmesi ile bildirebilirler. -#### Kayıp Toplayıcı {#missing-aggregator} +#### Eksik Toplayıcı {#missing-aggregator} -Dönem başına toplam 16 Toplayıcı bulunmaktadır. Ek olarak, rastgele doğrulayıcılar **256 dönem için 2 alt ağa** abone olurlar ve toplayıcıların kayıp olduğu bir duruma karşı yedek olarak davranırlar. +Dönem başına toplam 16 Toplayıcı bulunmaktadır. Ayrıca, rastgele doğrulayıcılar **256 dönem boyunca iki alt ağa** abone olur ve toplayıcıların eksik olması durumunda yedek olarak görev yapar. -#### Kayıp blok önericisi {#missing-block-proposer} +#### Eksik blok önericisi {#missing-block-proposer} -Bazı durumlarda şanslı bir toplayıcının aynı zamanda blok önericisi olabileceğini unutmayın. Eğer tasdik blok önericisi kaybolduğu için dahil edilmeseydi, sıradaki blok önericisi toplanmış tasdiki alıp sıradaki bloka dahil edebilirdi. Ancak, **dahil etme gecikmesi** bir artardı. +Bazı durumlarda şanslı bir toplayıcının aynı zamanda blok önericisi olabileceğini unutmayın. Eğer tasdik blok önericisi kaybolduğu için dahil edilmeseydi, sıradaki blok önericisi toplanmış tasdiki alıp sıradaki bloka dahil edebilirdi. Ancak, **dahil etme gecikmesi** bir artacaktır. -## Daha fazla bilgi {#further-reading} +## Daha fazla kaynak {#further-reading} -- [Vitalik'in açıklamalı mutabakat özelliklerindeki tasdikler](https://github.com/ethereum/annotated-spec/blob/master/phase0/beacon-chain.md#attestationdata) -- [Eth2book.info içindeki tasdikler](https://eth2book.info/capella/part3/containers/dependencies/#attestationdata) +- [Vitalik'in açıklamalı mutabakat spesifikasyonundaki Tasdikler](https://github.com/ethereum/annotated-spec/blob/master/phase0/beacon-chain.md#attestationdata) +- [eth2book.info'daki Tasdikler](https://eth2book.info/capella/part3/containers/dependencies/#attestationdata) _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/consensus-mechanisms/pos/block-proposal/index.md b/public/content/translations/tr/developers/docs/consensus-mechanisms/pos/block-proposal/index.md index abdff030f9e..1f90ee52a3b 100644 --- a/public/content/translations/tr/developers/docs/consensus-mechanisms/pos/block-proposal/index.md +++ b/public/content/translations/tr/developers/docs/consensus-mechanisms/pos/block-proposal/index.md @@ -1,14 +1,14 @@ --- -title: Blok önerisi -description: Ethereum hisse ispatında blokların nasıl önerildiği üzerine açıklama. +title: "Blok önerisi" +description: "Ethereum hisse ispatında blokların nasıl önerildiği üzerine açıklama." lang: tr --- Bloklar blok zincirin temel birimleridir. Bloklar; düğümler arasında geçilmiş, üzerinde anlaşmaya varılmış ve her düğümün veritabanına eklenmiş ayrık bilgi birimleridir. Bu sayfa nasıl üretildiklerini açıklar. -## Ön koşullar {#prerequisites} +## Ön Koşullar {#prerequisites} -Blok önerisi hisse ispatı protokolünün bir parçasıdır. Bu sayfayı anlamaya yardımcı olması için [hisse ispatı](/developers/docs/consensus-mechanisms/pos/) ile [blok mimarisi](/developers/docs/blocks/) hakkındakileri okumanızı tavsiye ederiz. +Blok önerisi hisse ispatı protokolünün bir parçasıdır. Bu sayfayı anlamanıza yardımcı olması için [hisse ispatı](/developers/docs/consensus-mechanisms/pos/) ve [blok mimarisi](/developers/docs/blocks/) hakkında bilgi edinmenizi öneririz. ## Blokları kim üretir? {#who-produces-blocks} @@ -18,11 +18,11 @@ Doğrulayıcı hesapları blok önerisinde bulunur. Doğrulayıcı hesapları, y Her bir yuvada blok önermek için tek bir doğrulayıcı yapay olarak rastgele seçilir. Bir blok zincirde gerçek rastgelelik diye bir şey yoktur çünkü eğer her bir düğüm gerçekten ratgele numaralar üretirse, bir mutabakata varılamaz. Bunun yerine amaç; doğrulayıcı seçim sürecini öngörülemeyen hale getirmektir. Ethereum'da rastgelelik, blok önericinin bir karmasını, her blokta güncelleyerek bir tohumla karıştıran "RANDAO" adlı algoritmanın kullanılmasıyla sağlanır. Bu değer, toplam doğrulayıcı kümesinden belirli bir doğrulayıcıyı seçmek için kullanılır. Belirli türdeki tohum manipülasyonlarına karşı korunma için, doğrulayıcı seçimi iki dönem önce sabitlenir. -Doğrulayıcıların her yuva için RANDAO'ya katkı sağlamasına rağmen, global RANDAO değeri her dönem yalnız bir kere güncellenir. RANDAO değeri yuva numarası ile karıştırılarak, bir sonraki blok önericinin endeksi hesaplanır ve her yuvada benzersiz bir değer elde edilmiş olur. Bir bireysel doğrulayıcının seçilme olasılığı sadece `1/N` (burada `N`, toplam etkin doğrulayıcılar anlamına gelir) şeklinde değildir. Bunun yerine her bir doğrulayıcının ETH bakiyesine göre ağırlıklandırılır. Maksimum etkili bakiye 32 ETH'dir (bu, `balance < 32 ETH` durumunun `balance == 32 ETH` durumundan daha düşük bir ağırlığa yol açtığı, ancak `balance > 32 ETH` durumunun `balance == 32 ETH` durumundan daha yüksek bir ağırlığa yol açmadığı anlamına gelir). +Doğrulayıcıların her yuva için RANDAO'ya katkı sağlamasına rağmen, global RANDAO değeri her dönem yalnız bir kere güncellenir. RANDAO değeri yuva numarası ile karıştırılarak, bir sonraki blok önericinin endeksi hesaplanır ve her yuvada benzersiz bir değer elde edilmiş olur. Tek bir doğrulayıcının seçilme olasılığı sadece `1/N` (burada `N` = toplam aktif doğrulayıcılar) değildir. Bunun yerine her bir doğrulayıcının ETH bakiyesine göre ağırlıklandırılır. Maksimum etkili bakiye 32 ETH'dir (bu, `balance < 32 ETH` durumunun `balance == 32 ETH` durumundan daha düşük bir ağırlığa yol açtığı, ancak `balance > 32 ETH` durumunun `balance == 32 ETH` durumundan daha yüksek bir ağırlığa yol açmadığı anlamına gelir). Her yuva için sadece bir blok önerici seçilir. Normal koşullar altında, tek bir blok üreticisi kendi özel yuvasında tek bir blok üretir ve yayınlar. Genellikle "çifte söz" olarak bilinen aynı yuvada iki blok oluşturmak, cezalandırılabilir bir suçtur. -## Blok nasıl oluşturulur? {#how-is-a-block-created} +## Blok nasıl oluşturulur? Bir blok nasıl oluşturulur? {#how-is-a-block-created} Blok önericinin, yerel olarak çalıştırılan kendi çatal seçim algoritmasına göre en son başın üstünde inşa edilen bir imzalanmış işaret blokunu yayınlaması beklenir. Çatal seçim algoritması, kuyruğa alınmış olan herhangi bir tasdiki önceki yuvalarda uygular, daha sonra geçmişinde birikmiş olan en yüksek ağırlığa sahip tasdiklere sahip bloku bulur. Bu blok, önerici tarafından oluşturulmuş yeni blokun bir üstüdür. @@ -42,28 +42,28 @@ class BeaconBlockBody(Container): execution_payload: ExecutionPayload ``` -`randao_reveal` alanın blok önericisinin mevcut dönem numarasını imzalayarak oluşturduğu doğrulanabilir rastgele bir değeri alır. `eth1_data`, yatırım Merkle ağacının kökü ve yeni yatırımların doğrulanmasını sağlayacak olan toplam yatırım sayısı dahil blok önericinin mevduat sözleşmesi üzerine bir oyudur. `graffiti` bloka bir mesaj eklemek için kullanılabilecek isteğe bağlı bir alandır. `proposer_slashings` ve `attester_slashings` alanları önericinin zincir görüşüne göre bazı doğrulayıcıların cezalandırılabilir suçlar işlediğiyle ilgili kanıtlar içeren alanlardır. `deposits` blok önericinin haberdar olduğu yeni doğrulayıcı yatırımlarının bir listesidir ve `voluntary_exits` blok önericinin fikir birliği katmanı dedikodu ağı üzerinde duyduğu çıkış yapmak isteyen doğrulayıcıların listesidir. `sync_aggregate` hangi doğrulayıcıların önceden bir senkronizasyon kuruluna (hafif istemci verisi sunan bir doğrulayıcı alt grubu) atandığını ve veri imzasına katıldığını gösteren bir vektördür. +`randao_reveal` alanı, blok önericisinin mevcut dönem numarasını imzalayarak oluşturduğu doğrulanabilir rastgele bir değeri alır. `eth1_data`, yatırım Merkle ağacının kökü ve yeni yatırımların doğrulanmasını sağlayacak olan toplam yatırım sayısı dahil, blok önericinin mevduat sözleşmesi görüşü için bir oydur. `graffiti`, bloka bir mesaj eklemek için kullanılabilecek isteğe bağlı bir alandır. `proposer_slashings` ve `attester_slashings` alanları, önericinin zincir görüşüne göre belirli doğrulayıcıların cezalandırılabilir suçlar işlediğine dair kanıtlar içeren alanlardır. `deposits`, blok önericisinin haberdar olduğu yeni doğrulayıcı yatırımlarının bir listesidir ve `voluntary_exits`, blok önericisinin mutabakat katmanı dedikodu ağı üzerinde duyduğu, çıkış yapmak isteyen doğrulayıcıların listesidir. `sync_aggregate`, hangi doğrulayıcıların önceden bir senkronizasyon kuruluna (hafif istemci verisi sunan bir doğrulayıcı alt grubu) atandığını ve veri imzalamaya katıldığını gösteren bir vektördür. -`execution_payload` işlemler hakkında bilgilerin yürütüm ve fikir birliği istemcileri arasında aktarılmasını sağlar. `execution_payload` bir işaret bloku içinde yuvalanan bir yürütme verisi blokudur. `execution_payload` içindeki alanlar Ethereum sarı kağıdında belirtilen blok yapısını yansıtırlar, ancak hiçbir ommer yoktur ve `prev_randao` `difficulty` yerine bulunmaktadır. Yürütüm istemcisinin kendi dedikodu ağında hakkında duyduğu yerel bir işlem havuzuna erişimi vardır. Bu işlemler durum sonrası olarak bilinen bir güncel durum ağacı oluşturmak için yerel olarak yürütülürler. İşlemler `transactions` isimli bir liste olarak `execution_payload` içine dahil edilir ve durum sonrası `state-root` alanında verilir. +`execution_payload`, işlemler hakkındaki bilgilerin yürütüm ve mutabakat istemcileri arasında aktarılmasını sağlar. `execution_payload`, bir işaret blokunun içinde yuvalanan bir yürütüm verisi blokudur. `execution_payload` içindeki alanlar, Ethereum sarı kağıdında belirtilen blok yapısını yansıtır, ancak ommer yoktur ve `difficulty` yerine `prev_randao` bulunur. Yürütüm istemcisinin kendi dedikodu ağında hakkında duyduğu yerel bir işlem havuzuna erişimi vardır. Bu işlemler durum sonrası olarak bilinen bir güncel durum ağacı oluşturmak için yerel olarak yürütülürler. İşlemler, `transactions` adlı bir liste olarak `execution_payload`'a dahil edilir ve işlem sonrası durum `state-root` alanında verilir. Tüm bu veriler bir işaret blokunda toplanır, imzalanır ve bloku kendi eşlerine yayacak olan blok önericinin eşlerine yayınlanır. -[Blokların anatomisi](/developers/docs/blocks) hakkında daha fazlasını okuyun. +[Blokların anatomisi hakkında daha fazla bilgi edinin](/developers/docs/blocks). ## Bloka ne olur? {#what-happens-to-blocks} -Blok önericinin yerel veritabanına eklenen blok, fikir birliği katmanı yayın ağı üzerinden düğüm eşlerine iletilir. Bir doğrulayıcı bir blok aldığı zaman, içindeki verileri doğrular. Blokun içerdiği verilerin doğru bir üst bloku olup olmadığını, doğru yuvaya karşılık gelip gelmediğini, öneren endeksin beklenen olup olmadığını, RANDAO açığının geçerli olup olmadığını ve önericinin cezalandırılmamış olup olmadığını kontrol eder. `execution_payload` ayrıştırılır ve doğrulayıcının yürütüm istemcisi, önerilen durumun değişip değişmediğini kontrol etmek amacıyla listedeki işlemleri tekrardan yürütür. Blok, tüm kontrollerden geçtiği takdirde, her doğrulayıcı bloku kendi kaonik zincirine ekler. Bir sonraki yuvada, süreç tekrardan başlar. +Blok önericinin yerel veritabanına eklenen blok, fikir birliği katmanı yayın ağı üzerinden düğüm eşlerine iletilir. Bir doğrulayıcı bir blok aldığı zaman, içindeki verileri doğrular. Blokun içerdiği verilerin doğru bir üst bloku olup olmadığını, doğru yuvaya karşılık gelip gelmediğini, öneren endeksin beklenen olup olmadığını, RANDAO açığının geçerli olup olmadığını ve önericinin cezalandırılmamış olup olmadığını kontrol eder. `execution_payload` ayrıştırılır ve doğrulayıcının yürütüm istemcisi, önerilen durum değişikliğini kontrol etmek amacıyla listedeki işlemleri yeniden yürütür. Blok, tüm kontrollerden geçtiği takdirde, her doğrulayıcı bloku kendi kaonik zincirine ekler. Bir sonraki yuvada, süreç tekrardan başlar. ## Blok ödülleri {#block-rewards} -Blok önerici çalışmaları için ödeme alır. Aktif doğrulayıcı sayısı ve etkin bakiyelerinin bir fonksiyonu olarak hesaplanan `base_reward` vardır. Blok önerici sonrasında bloka dahil edilen her geçerli tasdik için `base_reward` ödülünün bir kısmını alır; bloka tasdik sağlayan doğrulayıcı sayısı arttıkça blok önericinin ödülü de artar. Aynı zamanda, cezalandırılan her bir doğrulayıcı için `1/512 * geçerli bakiyeye` eşit olarak bölünmesi gereken doğrulayıcıları raporlamak için de bir ödül vardır. +Blok önerici çalışmaları için ödeme alır. Aktif doğrulayıcıların sayısına ve etkin bakiyelerine bağlı olarak hesaplanan bir `base_reward` bulunur. Blok önericisi, bloka dahil edilen her geçerli tasdik için `base_reward` ödülünün bir kısmını alır; bloka ne kadar çok doğrulayıcı tasdik sağlarsa blok önericisinin ödülü de o kadar artar. Ayrıca, cezalandırılması gereken doğrulayıcıları raporlamanın da bir ödülü vardır ve bu ödül, cezalandırılan her doğrulayıcı için `etkin bakiyenin 1/512'sine` eşittir. -[Ödül ve cezalar hakkında daha fazlası](/developers/docs/consensus-mechanisms/pos/rewards-and-penalties) +[Ödüller ve cezalar hakkında daha fazla bilgi](/developers/docs/consensus-mechanisms/pos/rewards-and-penalties) -## Daha fazla bilgi {#further-reading} +## Daha fazla kaynak {#further-reading} -- [Blok'lara giriş](/developers/docs/blocks/) -- [Hisse ispatı'na giriş](/developers/docs/consensus-mechanisms/pos/) -- [Ethereum mutabakat özellikleri](https://github.com/ethereum/consensus-specs) -- [Gasper'a giriş](/developers/docs/consensus-mechanisms/pos/) +- [Bloklara giriş](/developers/docs/blocks/) +- [Hisse ispatına giriş](/developers/docs/consensus-mechanisms/pos/) +- [Ethereum mutabakat spesifikasyonları](https://github.com/ethereum/consensus-specs) +- [Gasper'a Giriş](/developers/docs/consensus-mechanisms/pos/gasper/) - [Ethereum'u Yükseltme](https://eth2book.info/) diff --git a/public/content/translations/tr/developers/docs/consensus-mechanisms/pos/faqs/index.md b/public/content/translations/tr/developers/docs/consensus-mechanisms/pos/faqs/index.md index b81c5d2175f..48d070b9d7e 100644 --- a/public/content/translations/tr/developers/docs/consensus-mechanisms/pos/faqs/index.md +++ b/public/content/translations/tr/developers/docs/consensus-mechanisms/pos/faqs/index.md @@ -1,6 +1,6 @@ --- -title: Sıkça Sorulan Sorular -description: Ethereum'da hisse ispatı üzerine sıkça sorulan sorular. +title: "Sıkça Sorulan Sorular" +description: "Ethereum'da hisse ispatı üzerine sıkça sorulan sorular." lang: tr --- @@ -18,7 +18,7 @@ Hisse ispatı, doğrulayıcılar olarak bilinen düğümlerin, açıkça bir kri İş ispatı, madencilik sürecinde elektrik tüketildiği için çok daha fazla enerji tüketimine neden olur. Öte yandan, hisse ispatı ise sadece çok az bir enerji miktarı gerektirir - Ethereum doğrulayıcıları, hatta Raspberry Pi gibi düşük güçlü cihazlarda bile çalışabilir. Ethereum'un hisse ispatı mekanizması, iş ispatına göre daha güvenli olarak düşünülmektedir çünkü saldırmak için gerekli maliyet daha yüksektir ve saldırganın karşılaşacağı sonuçlar daha ciddidir. -İş ispatı ile hisse ispatı arasındaki farklılıklar tartışmalı bir konudur. [Vitalik Buterin'in blogu](https://vitalik.eth.limo/general/2017/12/31/pos_faq.html#what-are-the-benefits-of-proof-of-stake-as-opposed-to-proof-of-work) ve Justin Drake ile Lyn Alden arasındaki tartışma, argümanların iyi bir özetini sunmaktadır. +İş ispatı ile hisse ispatı arasındaki farklılıklar tartışmalı bir konudur. [Vitalik Buterin'in blogu](https://vitalik.eth.limo/general/2017/12/31/pos_faq.html#what-are-the-benefits-of-proof-of-stake-as-opposed-to-proof-of-work) ve Justin Drake ile Lyn Alden arasındaki tartışma, argümanların iyi bir özetini sunuyor. @@ -26,31 +26,31 @@ Hisse ispatı, doğrulayıcılar olarak bilinen düğümlerin, açıkça bir kri Evet. Hisse ispatı ağındaki düğümler çok az bir enerji kullanır. Üçüncü taraf bir çalışma, tüm Ethereum hisse ispatı ağının yılda yaklaşık 0,0026 TWh enerji tükettiğini sonuçlandırdı - yalnızca ABD'deki oyun sektöründen yaklaşık 13.000 kat daha az. -[Ethereum'un enerji tüketimi hakkında dahası](/energy-consumption/). +[Ethereum'un enerji tüketimi hakkında daha fazla bilgi](/energy-consumption/). ## Hisse ispatı güvenli mi? {#is-pos-secure} Ethereum'un hisse ispatı oldukça güvenlidir. Bu mekanizma, kullanıma geçmeden önce sekiz yıl boyunca titizlikle araştırıldı, geliştirildi ve test edildi. Güvenlik garantileri iş ispatı blok zincirlerinden farklıdır. Hisse ispatında, kötü niyetli doğrulayıcılar aktif olarak cezalandırılabilir ("slashed") ve doğrulayıcı kümesinden çıkarılabilir, bu da önemli miktarda ETH'ye mal olabilir. İş ispatı altında, bir saldırgan yeterli karma gücüne sahip oldukça saldırılarını tekrarlayabilir. Aynı ölçekte saldırıları iş ispatındaki Ethereum'a karşı düzenlemek de hisse ispatındaki gibi daha maliyetlidir. Zincirin canlılığını etkilemek için, ağdaki toplam hisselenmiş etherin en az %33'ü gereklidir (çok sofistike saldırılar ve başarı olasılığı son derece düşük durumlar hariç). Gelecekteki blok içeriğini kontrol etmek için en az %51 toplam hisselenmiş ETH gereklidir ve geçmişi yeniden yazmak için hisselenen toplam token'ın %66'sından fazlasına ihtiyaç vardır. Ethereum protokolü, %33 veya %51 saldırı senaryolarında bu varlıkları yok ederken, %66 saldırı senaryosunda ise sosyal mutabakat yoluyla bu varlıkları yok edebilir. -- [Ethereum'un hisse ispatının saldırganlardan koruma hakkında daha fazlası](/developers/docs/consensus-mechanisms/pos/attack-and-defense) -- [Hisse ispatı tasarımı hakkında daha fazlası](https://medium.com/@VitalikButerin/a-proof-of-stake-design-philosophy-506585978d51) +- [Ethereum hisse ispatını saldırganlardan koruma hakkında daha fazla bilgi](/developers/docs/consensus-mechanisms/pos/attack-and-defense) +- [Hisse ispatı tasarımı hakkında daha fazla bilgi](https://medium.com/@VitalikButerin/a-proof-of-stake-design-philosophy-506585978d51) ## Hisse ispatı Ethereum'u daha ucuz hale getirir mi? {#does-pos-make-ethereum-cheaper} Hayır. Bir işlem göndermenin maliyeti (gaz ücreti), daha fazla ağ talebiyle artan dinamik bir ücret piyasası tarafından belirlenir. Mutabakat mekanizması bunu doğrudan etkilemez. -[Gaz ](/developers/docs/gas)hakkında daha fazlası. +[Gaz hakkında daha fazla bilgi](/developers/docs/gas). ## Düğümler, istemciler ve doğrulayıcılar nedir? {#what-are-nodes-clients-and-validators} Düğümler, Ethereum ağına bağlı bilgisayarlardır. İstemciler, bilgisayarı bir düğüm haline getirirken çalıştırdıkları yazılımdır. İki tür istemci vardır: yürütüm istemcileri ve fikir birliği istemcileri. Hem yürütüm istemcileri hem de fikir birliği istemcileri bir düğüm oluşturmak için gereklidir. Bir doğrulayıcı, bir fikir birliği istemcisine isteğe bağlı olarak eklenen ve düğümün hisse ispatı uzlaşısına katılmasını sağlayan bir eklentidir. Bu, seçildiklerinde bloklar oluşturup teklif etmeyi ve ağda duydukları blokları onaylamayı içerir. Bir doğrulayıcı çalıştırmak için düğüm işletmecisinin 32 ETH'yi mevduat sözleşmesine yatırması gerekmektedir. -- [Düğümler ve istemciler hakkında daha fazlası](/developers/docs/nodes-and-clients) -- [Stake etme hakkında daha fazla bilgi](/staking) +- [Düğümler ve istemciler hakkında daha fazla bilgi](/developers/docs/nodes-and-clients) +- [Hisseleme hakkında daha fazla bilgi](/staking) ## Hisse ispatı yeni bir fikir midir? {#is-pos-new} -Hayır. Bir kullanıcı, BitcoinTalk [forumunda 2011 yılında Bitcoin'e bir yükseltme olarak hisse ispatının](https://bitcointalk.org/index.php?topic=27787.0) temel fikrini önerdi. Bu, Ethereum Ana Ağı'na yerleştirmeye hazır olmasından 11 yıl önceydi. Bazı diğer zincirler hisse ispatını Ethereum'dan önce yerleştirdi ancak Ethereum'un özgül mekanizmasını (Gasper olarak bilinen) yerleştiremedi. +Hayır. BitcoinTalk'ta bir kullanıcı, 2011'de Bitcoin'e bir yükseltme olarak [hisse ispatının temel fikrini önerdi](https://bitcointalk.org/index.php?topic=27787.0). Bu, Ethereum Ana Ağı'na yerleştirmeye hazır olmasından 11 yıl önceydi. Bazı diğer zincirler hisse ispatını Ethereum'dan önce yerleştirdi ancak Ethereum'un özgül mekanizmasını (Gasper olarak bilinen) yerleştiremedi. ## Ethereum'un hisse ispatıyla ilgili özel olan nedir? {#why-is-ethereum-pos-special} @@ -60,13 +60,13 @@ Casper'a ek olarak, Ethereum'un hisse ispatı LMD-GHOST adlı bir çatal seçim Casper ve LMD-GHOST'un kombinasyonuna Gasper denir. -[Gasper hakkında daha fazlası](/developers/docs/consensus-mechanisms/pos/gasper/) +[Gasper hakkında daha fazla bilgi](/developers/docs/consensus-mechanisms/pos/gasper/) ## Cezalandırma nedir? {#what-is-slashing} Cezalandırma, bir doğrulayıcının bazı kilitli token'larının yok edilmesi ve doğrulayıcının ağdan çıkarılması işlemine verilen terimdir. Cezalandırma işlemi sonucu kaybedilen ETH miktarı, uzaklaştırılan doğrulayıcı sayısıyla ölçeklenir - bu, iş birliği yapan doğrulayıcıların bireylere kıyasla daha ağır şekilde cezalandırılmasına neden olur. -[Cezalandırma hakkında daha fazlası](/developers/docs/consensus-mechanisms/pos/rewards-and-penalties#slashing) +[Kesinti hakkında daha fazla bilgi](/developers/docs/consensus-mechanisms/pos/rewards-and-penalties#slashing) ## Neden doğrulayıcılar 32 ETH'ye ihtiyaç duyar? {#why-32-eth} @@ -76,32 +76,32 @@ Doğrulayıcılar eğer kötü davranırlarsa kaybedecek bir şeyleri olsun diye Her yuva için tek bir doğrulayıcı, her blok önerisini rastgele seçmek üzere RANDAO adlı bir algoritma kullanarak seçilir. Bu algoritma, blok önerisinde bulunan bir karma ile her blokta güncellenen bir tohumun karıştırılmasıyla çalışır. Bu değer, toplam doğrulayıcı kümesinden belirli bir doğrulayıcıyı seçmek için kullanılır. Doğrulayıcı seçimi, iki dönem öncesinden belirlenir. -[Doğrulayıcı seçimi hakkında daha fazlası](/developers/docs/consensus-mechanisms/pos/block-proposal) +[Doğrulayıcı seçimi hakkında daha fazla bilgi](/developers/docs/consensus-mechanisms/pos/block-proposal) ## Kilit öğütme nedir? {#what-is-stake-grinding} Kilit öğütme, saldırganın kendi doğrulayıcılarını lehine seçici algoritmayı yönlendirmeye çalıştığı bir hisse ispatı ağ saldırısı türüdür. RanDAO'ya yönelik yapılan kilit öğütme saldırıları için hisselenen toplam ETH'nin yaklaşık yarısı gereklidir. -[Kilit öğütme hakkında daha fazlası](https://eth2book.info/altair/part2/building_blocks/randomness/#randao-biasability) +[Hisse öğütme hakkında daha fazla bilgi](https://eth2book.info/altair/part2/building_blocks/randomness/#randao-biasability) ## Sosyal cezalandırma nedir? {#what-is-social-slashing} Sosyal cezalandırma, topluluğun bir saldırıya yanıt olarak blok zincirin bir çatalını yönetme yeteneğidir. Bu, topluluğun, bir saldırının dürüst olmayan bir zinciri kesinleştirmesinin ardından kurtulmasını sağlar. Sosyal cezalandırma, sansür saldırılarına karşı da kullanılabilir. -- [Sosyal cezalandırma hakkında daha fazlası](https://ercwl.medium.com/the-case-for-social-slashing-59277ff4d9c7) -- [Vitalik Buterin'in sosyal cezalandırma hakkındaki görüşleri](https://vitalik.eth.limo/general/2017/12/31/pos_faq.html#what-is-proof-of-stake) +- [Sosyal kesinti hakkında daha fazla bilgi](https://ercwl.medium.com/the-case-for-social-slashing-59277ff4d9c7) +- [Vitalik Buterin'in sosyal kesinti üzerine yazısı](https://vitalik.eth.limo/general/2017/12/31/pos_faq.html#what-is-proof-of-stake) ## Cezalandırılacak mıyım? {#will-i-get-slashed} Bir doğrulayıcı olarak, kasıtlı olarak kötü niyetli davranışlarda bulunmadıkça cezalandırılmak oldukça zordur. Cezalandırma, doğrulayıcıların aynı yuva için birden fazla blok önerdiği veya tasdiklemeleriyle çeliştiği çok belirli senaryolarda uygulanır - bunların kazara meydana gelme olasılığı çok düşüktür. -[Cezalandırma koşulları hakkında daha fazlası](https://eth2book.info/altair/part2/incentives/slashing) +[Kesinti koşulları hakkında daha fazla bilgi](https://eth2book.info/altair/part2/incentives/slashing) ## Riske atmama sorunu nedir? {#what-is-nothing-at-stake-problem} Riske atmama sorunu, bazı hisse ispatı mekanizmalarında yalnızca ödüllerin ve cezaların olmadığı bir kavramsal sorundur. Eğer hiçbir şey riske atılmamışsa, faydacı bir doğrulayıcı, ödüllerini artırdığı için herhangi bir blok zincir çatalına veya hatta birden çok çatala tanıklık etmekten eşit derecede memnun olur. Ethereum, tek bir kanonik zinciri sağlamak için kesinlik koşullarını ve cezalandırmayı kullanarak bunu aşar. -[Riske atmama hakkında daha fazlası](https://vitalik.eth.limo/general/2017/12/31/pos_faq.html#what-is-the-nothing-at-stake-problem-and-how-can-it-be-fixed) +[Ortada hisse olmama sorunu hakkında daha fazla bilgi](https://vitalik.eth.limo/general/2017/12/31/pos_faq.html#what-is-the-nothing-at-stake-problem-and-how-can-it-be-fixed) ## Çatal seçim algoritması nedir? {#what-is-a-fork-choice-algorithm} @@ -109,37 +109,37 @@ Bir çatal seçim algoritması hangi zincirin gerçekçi zincir olacağına kara Ethereum'un çatal seçim algoritmasına LMD-GHOST denir. Bu; en çok tasdik ağırlığına sahip yani en fazla hisselenmiş ETH'nin oy verdiği çatalı seçer. -[LMD-GHOST hakkında daha fazlası](/developers/docs/consensus-mechanisms/pos/gasper/#fork-choice) +[LMD-GHOST hakkında daha fazla bilgi](/developers/docs/consensus-mechanisms/pos/gasper/#fork-choice) ## Hisse ispatı içinde kesinlik ne demektir? {#what-is-finality} Hisse ispatı içinde kesinlik; belirli bir blokun gerçekçi zincirin sürekli bir parçası olduğunu garanti altına alır ve eğer saldırganın toplam hisselenmiş etherin %33'ünü yaktığı bir mutabakat hatası olmazsa geri çevrilemez. Bu, ''ihtimali kesinlik'' de denen kripto-ekonomik kesinlik, iş ispatı blok zincirleriyle alakalıdır. İhtimali kesinlikte, bloklar için açıkça kesinleşmiş/kesinleşmemiş durumlar yoktur - blok yaşlandıkça, blokun zincirden kaldırılma olasılığı giderek azalır ve kullanıcılar kendileri için bir blokun ne zaman yeterince "güvenli" olduğuna karar verir. Kripto-ekonomik kesinlik ile birlikte kontrol noktası blok çiftleri, hisselenmiş etherin %66'sı tarafından oylanmak zorundadır. Eğer bu şart sağlanırsa bu kontrol noktaları arasındaki bloklar açık bir şekilde ''kesinleştirilir''. -[Kesinlik hakkında daha fazlası](/developers/docs/consensus-mechanisms/pos/#finality) +[Kesinlik hakkında daha fazla bilgi](/developers/docs/consensus-mechanisms/pos/#finality) ## ''Zayıf öznellik'' nedir? {#what-is-weak-subjectivity} Zayıf öznellik; blok zincirin mevcut durumunu doğrulamak için sosyal bilginin kullanıldığı, hisse ispatı ağlarının bir özelliğidir. Yeni düğümlere veya uzun bir çevrimdışı sürenin ardından ağa tekrar katılan düğümlere, düğümün doğru zincirde olup olmadığını hemen görebilecekleri şu anlık durum verilebilir. Bu durumlar "zayıf öznellik kontrol noktaları" olarak bilinir ve bunlar, diğer düğüm operatörlerinden dışta veya blok gezginlerinden ya da çeşitli genel uç noktalardan elde edilebilir. -[Zayıf öznellik hakkında daha fazlası](/developers/docs/consensus-mechanisms/pos/weak-subjectivity) +[Zayıf öznellik hakkında daha fazla bilgi](/developers/docs/consensus-mechanisms/pos/weak-subjectivity) ## Hisse ispatı sansüre dirençli midir? {#is-pos-censorship-resistant} Sansür direncini kanıtlamak şu anda zordur. Ancak iş ispatının aksine hisse ispatı, sansür uygulayan doğrulayıcıların iptallerinin koordine edilme seçeneğini sunar. Protokole; blok inşacıları blok önericilerden ayıracak ve inşacıların her bir blokta dahil etmesi gereken yürütme listesini işletecek olan gelecek değişiklikler vardır. Bu öneri, önerici-inşacı ayrımı olarak bilinir ve doğrulayıcıların yürütmelere sansür uygulmasını engellemeye yardım eder. -[Önerici-inşacı ayrımı hakkında daha fazlası](https://notes.ethereum.org/@fradamt/H1TsYRfJc#Original-basic-scheme) +[Önerici-inşacı ayrımı hakkında daha fazla bilgi](https://notes.ethereum.org/@fradamt/H1TsYRfJc#Original-basic-scheme) ## Ethereum hisse ispatı sistemi %51 saldırılabilir mi? {#pos-51-attack} Evet. Hisse ispatları, tıpkı iş ispatlarının olduğu gibi %51 saldırılarına karşı hassastır. Saldırganın ağın karma gücünün %51'ini gerektirmesinden ziyade saldırgan, toplam hisselenmiş ETH'lerin %51'ine ihtiyaç duyar. Toplam hisselemenin %51'ini biriktiren bir saldırgan çatal seçim algoritmasının kontrolünü ele alır. Bu, saldırganın belirli işlemleri sansürlemesine, kısaca yeniden düzenlemeler yapmasına ve blokları kendi lehine yeniden sıralayarak MEV (Maksimum Çıkarılabilir Değer) çıkarmasına imkân tanır. -[Hisse ispatına saldırılar hakkında daha fazlası](/developers/docs/consensus-mechanisms/pos/attack-and-defense) +[Hisse ispatına yönelik saldırılar hakkında daha fazla bilgi](/developers/docs/consensus-mechanisms/pos/attack-and-defense) ## Sosyal koordinasyon nedir, buna neden ihtiyaç duyulur? {#what-is-social-coordination} Sosyal koordinasyon, dürüst blokların kesinleşmiş olanları düzeltmek amacıyla bir saldırıdan kurtulunması ve Ethereum için son savunma hattı olarak kullanılır. Bu durumda, Ethereum topluluğu "dışta" koordine olup dürüst bir azınlık çatalını kullanmayı kabul etmek zorunda kalır ve bu süreçte saldırganın doğrulayıcılarını cezalandırır. Bu, uygulamaların ve borsaların dürüst çatalı tanımasını gerektirir. -[Sosyal koordinasyon hakkında daha fazlası](/developers/docs/consensus-mechanisms/pos/attack-and-defense#people-the-last-line-of-defense) +[Sosyal koordinasyon hakkında daha fazla bilgi edinin](/developers/docs/consensus-mechanisms/pos/attack-and-defense#people-the-last-line-of-defense) ## Hisse ispatında daha zengin olabilir miyim? {#do-rich-get-richer} @@ -147,9 +147,9 @@ Birinin hisselemesi gereken ETH miktarı ne kadar yüksekse, o kadar fazla doğr ## Hisse ispatı iş ispatından daha merkezi midir? {#is-pos-decentralized} -Hayır, iş ispatı, madencilik maliyetleri arttıkça bireyleri, ardından küçük şirketleri dışlayarak merkezileşmeye doğru eğilim gösterir. Hisse ispatının mevcut sorunu, likit hisseleme türevlerinin (LSD'ler) etkisidir. Bunlar, gerçek ETH'nin çıkartılmadan herkesin ikincil piyasalarda takas edebileceği bir sağlayıcı tarafından hisselenen ETH'yi temsil eden token'lardır. LSD'ler, kullanıcıların 32 ETH'den az bir miktarla hisselemesine olanak tanır, ancak aynı zamanda birkaç büyük organizasyonun çoğunluğu hisseleme miktarını kontrol etme riski yaratır. Bu nedenle, Ethereum için [solo hisseleme](/staking/solo) en iyi seçenektir. +Hayır, iş ispatı, madencilik maliyetleri arttıkça bireyleri, ardından küçük şirketleri dışlayarak merkezileşmeye doğru eğilim gösterir. Hisse ispatının mevcut sorunu, likit hisseleme türevlerinin (LSD'ler) etkisidir. Bunlar, gerçek ETH'nin çıkartılmadan herkesin ikincil piyasalarda takas edebileceği bir sağlayıcı tarafından hisselenen ETH'yi temsil eden token'lardır. LSD'ler, kullanıcıların 32 ETH'den az bir miktarla hisselemesine olanak tanır, ancak aynı zamanda birkaç büyük organizasyonun çoğunluğu hisseleme miktarını kontrol etme riski yaratır. Bu yüzden [solo hisseleme](/staking/solo), Ethereum için en iyi seçenektir. -[LSD'lerde hisse merkezileşmesi konusunda daha fazlası](https://notes.ethereum.org/@djrtwo/risks-of-lsd) +[LSD'lerde hisse merkezileşmesi hakkında daha fazla bilgi](https://notes.ethereum.org/@djrtwo/risks-of-lsd) ## Neden sadece ETH hisseleyebilirim? {#why-can-i-only-stake-eth} @@ -163,10 +163,10 @@ Hayır, birkaç tane hisse ispatı blok zinciri bulunmaktadır. Hiçbiri Ethereu Birleşim, Ethereum'un iş ispatı tabanlı mutabakat mekanizmasını kapattığı ve hisse ispatı tabanlı mutabakat mekanizmasını devreye aldığı an olarak adlandırılır. Birleşim, 15 Eylül 2022'de gerçekleşti. -[Birleştirme hakkında ek bilgi](/roadmap/merge) +[Birleşim hakkında daha fazla bilgi](/roadmap/merge) ## Cansızlık ve güvenlilik nedir? {#what-are-liveness-and-safety} -Cansızlık ve güvenlik, bir blok zincir için temel güvenlik endişeleridir. Cansızlık, bir zincirin kesinleştirilebilir olma durumunu ifade eder. Zincir kesinleştirmeyi durdurursa veya kullanıcılar buna kolayca erişemezse, bunlar cansızlık hataları olarak kabul edilir. Erişim maliyetinin aşırı derecede yüksek olması da bir cansızlık hatası olarak değerlendirilebilir. Güvenlik, zincire saldırıların ne kadar zor olduğunu ifade eder - yani çelişen kontrol noktalarını kesinleştirmektir. +Cansızlık ve güvenlik, bir blok zincir için temel güvenlik endişeleridir. Cansızlık, bir zincirin kesinleştirilebilir olma durumunu ifade eder. Zincir kesinleştirmeyi durdurursa veya kullanıcılar buna kolayca erişemezse, bunlar cansızlık hataları olarak kabul edilir. Erişim maliyetinin aşırı derecede yüksek olması da bir cansızlık hatası olarak değerlendirilebilir. Güvenlik, zincire saldırmanın ne kadar zor olduğunu ifade eder - yani, çelişen kontrol noktalarını kesinleştirmek. -[Casper kağıdı hakkında daha fazlası](https://arxiv.org/pdf/1710.09437.pdf) +[Casper raporunda daha fazlasını okuyun](https://arxiv.org/pdf/1710.09437.pdf) diff --git a/public/content/translations/tr/developers/docs/consensus-mechanisms/pos/gasper/index.md b/public/content/translations/tr/developers/docs/consensus-mechanisms/pos/gasper/index.md index 53cee064bfc..3f2f4fa3e15 100644 --- a/public/content/translations/tr/developers/docs/consensus-mechanisms/pos/gasper/index.md +++ b/public/content/translations/tr/developers/docs/consensus-mechanisms/pos/gasper/index.md @@ -1,18 +1,18 @@ --- title: Gasper -description: Gasper hisse kanıtı sisteminin bir açıklaması. +description: "Gasper hisse kanıtı sisteminin bir açıklaması." lang: tr --- Gasper, Casper the Friendly Finality Gadget'ın (Casper-FFG) ve LMD-GHOST çatal seçim algoritmasının bir birleşimidir. Bu bileşenler birlikte, hisse kanıtı Ethereum'u güvence altına alan konsensus mekanizmasını oluşturur. Casper, ağa yeni girenlerin kurallı zinciri senkronize ettiklerinden emin olabilmeleri için belirli blokları "sonlandırılmış" hale getiren mekanizmadır. Çatal seçim algoritması, blok zincirinde çatallar oluştuğunda düğümlerin doğru olanı kolayca seçebilmesini sağlamak için birikmiş oyları kullanır. -**Not** Casper-FFG'nin orijinal tanımının Gasper'a dahil edilmek üzere biraz güncellendiğini unutmayın. Bu sayfada, güncellenmiş versiyonu göz önünde bulunduruyoruz. +**Not:** Casper-FFG'nin orijinal tanımının Gasper'a dahil edilmek üzere biraz güncellendiğini unutmayın. Bu sayfada, güncellenmiş versiyonu göz önünde bulunduruyoruz. ## Ön koşullar -Bu materyalin anlaşılması adına [hisse kanıtı sistemi](/developers/docs/consensus-mechanisms/pos/) üzerine olan giriş sayfasının okunması gereklidir. +Bu materyali anlamak için [hisse ispatı](/developers/docs/consensus-mechanisms/pos/) hakkındaki giriş sayfasını okumak gerekir. -## Gasper'in rolü {#role-of-gasper} +## Gasper'ın rolü {#role-of-gasper} Gasper, düğümlerin, blok önermede veya onaylamada tembel veya dürüst olmamaları durumunda yok edilebilecek bir güvenlik depozitosu olarak ether sağladığı bir hisse kanıtı blok zincirinin tepesinde oturuyor. Gasper, doğrulayıcıların nasıl ödüllendirileceğini ve cezalandırılacağını belirleyen, hangi blokların kabul edilip reddedileceğine ve blok zincirinin hangi çatalının üzerine inşa edileceğine karar veren mekanizmadır. @@ -23,16 +23,16 @@ Nihailik, belirli blokların bir özelliğidir, yani kritik bir konsensus başar 1. Stake edilen toplam etherin üçte ikisi, o bloğun kanonik zincire dahil edilmesi lehinde oy vermiş olmalıdır. Bu koşul bloğu ''meşru'' konuma yükseltir. Meşru blokların geri çevrilmesi çok olası olmamakla beraber belirli koşullar altında mümkündür. 2. Başka bir blok hali hazırda meşru olan bir bloğun üzerinde meşrulaştırıldığında, o blok nihailik kazanmıştır. Bir bloğu sonlandırmak, bloğu kurallı zincire dahil etme taahhüdüdür. Bir saldırgan milyonlarca etheri (milyarlarca $USD) yok etmedikçe geri alınamaz. -Bu blok yükseltmeleri her yuvada gerçekleşmez. Bunun yerine, yalnızca dönem-sınır blokları gerekçelendirilebilir ve sonlandırılabilir. Bu bloklar, ''kontrol noktası'' olarak bilinir. Sürüm yükseltilirken, kontrol noktaları çifter şekilde değerlendirir. ''Üstün çoğunluk bağlantısı'' iki başarılı kontrol noktası arasında (yani oy hakkına sahip stakelenmiş ether toplamının üçte ikisi tarafından kontrol noktası B'nin, kontrol noktası A'nın geçerli soyundan geldiğinin kabul edildiği) daha güncel olmayan kontrol noktasının nihayileştirilmesi ve güncel olan bloğun meşrulaştırılması adına bulunmak zorundadır. +Bu blok yükseltmeleri her yuvada gerçekleşmez. Bunun yerine, yalnızca dönem-sınır blokları gerekçelendirilebilir ve sonlandırılabilir. Bu bloklar, ''kontrol noktası'' olarak bilinir. Sürüm yükseltilirken, kontrol noktaları çifter şekilde değerlendirir. Daha eski kontrol noktasını sonlandırılmışa ve daha yeni bloğu gerekçelendirilmişe yükseltmek için, iki ardışık kontrol noktası arasında bir "nitelikli çoğunluk bağlantısı" bulunmalıdır (yani, toplam stake edilmiş ether'in üçte ikisinin, B kontrol noktasının A kontrol noktasının doğru alt öğesi olduğu yönünde oy vermesi). Kesinlik, bir bloğun kurallı olduğuna dair üçte ikilik bir anlaşma gerektirdiğinden, bir saldırgan aşağıdakiler olmadan alternatif bir nihai zincir oluşturamaz: 1. Stake edilen toplam etherin üçte ikisine sahip olmak veya onu manipüle etmek. 2. Stake edilmiş ether toplamının üçte ikisinin yok edilmesi. -İlk koşul, bir zinciri sonlandırmak için stake edilen etherin üçte ikisinin gerekli olması nedeniyle ortaya çıkar. İkinci koşul ortaya çıkar, çünkü toplam hissenin üçte ikisi her iki çatal lehine oy vermişse, üçte biri her ikisine de oy vermiş olmalıdır. Çift oylama, azami ölçüde cezalandırılacak ve toplam bahsin üçte biri yok edilecek olan bir kesinti koşuludur. Mayıs 2022 itibariyle, bunun için bir saldırganın yaklaşık 10 milyar $ değerinde ether yakması gerekiyor. Gasper'da blokları doğrulayan ve sonlandıran algoritma, [Casper Dostu Kesinlik Aygıtının (Casper-FFG)](https://arxiv.org/pdf/1710.09437.pdf) biraz değiştirilmiş bir şeklidir. +İlk koşul, bir zinciri sonlandırmak için stake edilen etherin üçte ikisinin gerekli olması nedeniyle ortaya çıkar. İkinci koşul ortaya çıkar, çünkü toplam hissenin üçte ikisi her iki çatal lehine oy vermişse, üçte biri her ikisine de oy vermiş olmalıdır. Çift oylama, azami ölçüde cezalandırılacak ve toplam bahsin üçte biri yok edilecek olan bir kesinti koşuludur. Mayıs 2022 itibariyle, bunun için bir saldırganın yaklaşık 10 milyar $ değerinde ether yakması gerekiyor. Gasper'da blokları gerekçelendiren ve sonlandıran algoritma, [Casper Dostu Kesinlik Aygıtı (Casper-FFG)](https://arxiv.org/pdf/1710.09437.pdf)'nin biraz değiştirilmiş bir şeklidir. -### Teşvikler ve Cezalar {#incentives-and-slashing} +### Teşvikler ve Slashing {#incentives-and-slashing} Doğrulayıcılar, blokları dürüstçe önerdikleri ve doğruladıkları için ödüllendirilir. Ether ödüllendirilir ve paylarına eklenir. Öte yandan, mevcut olmayan ve çağrıldıklarında harekete geçmeyen doğrulayıcılar bu ödülleri kaçırır ve bazen mevcut hisselerinin küçük bir kısmını kaybeder. Bununla birlikte, çevrimdışı olmanın cezaları küçüktür ve çoğu durumda, ödüllerin kaçırılmasının fırsat maliyetleri kadardır. Bununla birlikte, bazı doğrulayıcı eylemlerin yanlışlıkla yapılması çok zordur ve aynı yuva için birden çok blok önermek, aynı yuva için birden çok bloğa onay vermek veya önceki kontrol noktası oylarıyla çelişmek gibi bazı kötü niyetleri ifade eder. Bunlar, daha sert bir şekilde cezalandırılan "kesilebilir" davranışlardır—doğrulayıcının hissesinin bir kısmının yok edilmesi ve doğrulayıcının doğrulayıcı ağından çıkarılmasıyla sonuçlanır. Bu işlem 36 gün sürer. 1. Günde, 1 ETH'ye kadar bir başlangıç cezası vardır. Ardından, kesilen doğrulayıcının etheri çıkış periyodu boyunca yavaşça boşalır, ancak 18. Günde, aynı anda daha fazla doğrulayıcı kesildiğinde daha büyük olan bir "korelasyon cezası" alırlar. Maksimum ceza, tüm hisse miktarıdır. Bu ödüller ve cezalar, dürüst doğrulayıcıları teşvik etmek ve ağ üzerindeki saldırıları caydırmak için tasarlanmıştır. @@ -42,11 +42,11 @@ Gasper, güvenliğin yanı sıra "makul bir canlılık" da sağlar. Bu, toplam s ### Çatal seçimi {#fork-choice} -Casper-FFG'nin orijinal tanımı, şu kuralı uygulayan bir çatal seçim algoritması içeriyordu: `en yüksek yüksekliğe sahip haklı kontrol noktasını içeren zinciri takip edin` burada yükseklik, genesis bloğundan en büyük mesafe olarak tanımlanır. Gasper'da, orijinal çatal seçim kuralı, LMD-GHOST adı verilen daha karmaşık bir algoritma lehine kullanımdan kaldırılmıştır. Normal koşullar altında, bir çatal seçim kuralının gereksiz olduğunu anlamak önemlidir - her yuva için tek bir blok öneren vardır ve dürüst doğrulayıcılar bunu onaylar. Yalnızca büyük ağ eşzamansızlığı durumlarında veya dürüst olmayan bir blok teklifçisi, bir çatal seçim algoritmasının gerekli olduğunu yanlış ifade ettiğinde olur. Ancak, bu durumlar ortaya çıktığında, çatal seçim algoritması doğru zinciri koruyan kritik bir savunmadır. +Casper-FFG'nin orijinal tanımı, şu kuralı dayatan bir çatal seçim algoritması içeriyordu: `en yüksek yüksekliğe sahip gerekçelendirilmiş kontrol noktasını içeren zinciri takip et` burada yükseklik, başlangıç bloğundan en büyük mesafe olarak tanımlanır. Gasper'da, orijinal çatal seçim kuralı, LMD-GHOST adı verilen daha karmaşık bir algoritma lehine kullanımdan kaldırılmıştır. Normal koşullar altında, bir çatal seçim kuralının gereksiz olduğunu anlamak önemlidir - her yuva için tek bir blok öneren vardır ve dürüst doğrulayıcılar bunu onaylar. Yalnızca büyük ağ eşzamansızlığı durumlarında veya dürüst olmayan bir blok teklifçisi, bir çatal seçim algoritmasının gerekli olduğunu yanlış ifade ettiğinde olur. Ancak, bu durumlar ortaya çıktığında, çatal seçim algoritması doğru zinciri koruyan kritik bir savunmadır. LMD-GHOST, "en son mesaj odaklı açgözlü en ağır gözlemlenen alt ağaç" anlamına gelir. Bu, kurallı (açgözlü en ağır alt ağaç) olarak birikmiş en büyük tasdik ağırlığına sahip çatalı seçen ve bir doğrulayıcıdan birden fazla mesaj alınırsa, yalnızca en yenisinin dikkate alındığı (en son-mesaj odaklı) bir algoritmayı tanımlamanın jargon ağırlıklı bir yoludur. Kurallı zincirine en ağır bloğu eklemeden önce, her doğrulayıcı bu kuralı kullanarak her bloğu değerlendirir. -## Daha Fazla Okuma {#further-reading} +## Ek Okumalar {#further-reading} -- [Gasper: Ghost ile Casper'in birleşimi](https://arxiv.org/pdf/2003.03052.pdf) -- [Arkadaş Canlısı Kesinlik Aracı Casper](https://arxiv.org/pdf/1710.09437.pdf) +- [Gasper: GHOST ve Casper'ı Birleştirme](https://arxiv.org/pdf/2003.03052.pdf) +- [Casper Dostu Kesinlik Aygıtı](https://arxiv.org/pdf/1710.09437.pdf) diff --git a/public/content/translations/tr/developers/docs/consensus-mechanisms/pos/index.md b/public/content/translations/tr/developers/docs/consensus-mechanisms/pos/index.md index ea9528ffab6..37831904f70 100644 --- a/public/content/translations/tr/developers/docs/consensus-mechanisms/pos/index.md +++ b/public/content/translations/tr/developers/docs/consensus-mechanisms/pos/index.md @@ -1,14 +1,14 @@ --- -title: Hisse ispatı (PoS) -description: Hisse ispatı mutabakatı protokolünün ve Ethereum'daki rolünün açıklaması. +title: "Hisse ispatı (PoS)" +description: "Hisse ispatı mutabakatı protokolünün ve Ethereum'daki rolünün açıklaması." lang: tr --- -Hisse ispatı (PoS) Ethereum'un [mutabakat mekanizmasının](/developers/docs/consensus-mechanisms/) temelini oluşturur. Ethereum, önceki [iş ispatı](/developers/docs/consensus-mechanisms/pow) mimarisine kıyasla daha güvenli, daha az enerji harcadığı ve yeni ölçeklendirme çözümleri uygulanmasına daha müsait olduğu için 2022'de hisse ispatı mekanizmasını devreye soktu. +Hisse ispatı (PoS), Ethereum'un [mutabakat mekanizmasının](/developers/docs/consensus-mechanisms/) temelini oluşturur. Ethereum, önceki [iş ispatı](/developers/docs/consensus-mechanisms/pow) mimarisine kıyasla daha güvenli, daha az enerji yoğun ve yeni ölçeklendirme çözümlerini uygulamak için daha iyi olması nedeniyle 2022'de hisse ispatı mekanizmasını devreye soktu. -## Ön koşullar {#prerequisites} +## Ön Koşullar {#prerequisites} -Bu sayfayı daha iyi anlayabilmeniz için öncelikle [karar mekanizmaları](/developers/docs/consensus-mechanisms/)nı okumanızı öneririz. +Bu sayfayı daha iyi anlamak için öncelikle [mutabakat mekanizmaları](/developers/docs/consensus-mechanisms/) hakkında bilgi edinmenizi öneririz. ## Hisse ispatı (PoS) nedir? {#what-is-pos} @@ -20,38 +20,38 @@ Doğrulayıcı olarak katılım gösterebilmek için bir kullanıcının depozit İş ispatında blokların zamanlaması madencilik zorluğuna göre belirlenirken, hisse ispatındatempo sabittir. Hisse ispatı Ethereum'daki süre, yuvalara (12 saniye) ve dönemlere (32 yuva) bölünmüştür. Her yuvada bir blok teklifçisi olmak üzere rastgele bir doğrulayıcı seçilir. Bu doğrulayıcı, yeni bir blok oluşturmaktan ve bunu ağdaki diğer düğümlere göndermekten sorumludur. Ayrıca her yuvada, oyları önerilen blokun geçerliliğini belirlemek için kullanılan bir doğrulayıcı kurulu rastgele seçilir. Doğrulayıcı kurulumunu çeşitli kurullara ayırmak ağ yükünü yönetilebilir kılmak için önemlidir. Kurullar, doğrulayıcı kümesini her aktif doğrulayıcı her aktif dönemde onaylayacak, ancak her yuvada onaylamayacak şekilde böler. -## Ethereum PoS'ta bir İşlem Nasıl Yürütülür {#transaction-execution-ethereum-pos} +## Bir İşlem Ethereum PoS'ta Nasıl Yürütülür {#transaction-execution-ethereum-pos} Aşağıda Ethereum hisse ispatında bir işlemin ne şekilde yürütüldüğüne dair uçtan uca bir açıklamaya yer verilmiştir. -1. Bir kullanıcı, özel anahtarı ile bir [işlem](/developers/docs/transactions/) oluşturur ve bunu imzalar. Bu, genellikle bir cüzdan veya [ether.js](https://docs.ethers.io/v5/), [web3.js](https://docs.web3js.org/), [web3py](https://web3py.readthedocs.io/en/v5/) vb. bir kütüphane tarafından ele alınır, ancak arka planda kullanıcı Ethereum [JSON-RPC API](/developers/docs/apis/json-rpc/)'sını kullanarak bir düğüme istekte bulunur. Kullanıcı, yapacağı işlemin bloka dahil edilmesini teşvik etmek için doğrulayıcıya bahşiş olarak ödemeye hazır olduğu gaz miktarını belirler. [Ana ücret](/developers/docs/gas/#base-fee) yakılırken doğrulayıcıya [bahşiş](/developers/docs/gas/#priority-fee) ödenir. +1. Bir kullanıcı, özel anahtarıyla bir [işlem](/developers/docs/transactions/) oluşturur ve imzalar. Bu genellikle bir cüzdan veya [ethers.js](https://docs.ethers.org/v6/), [web3js](https://docs.web3js.org/), [web3py](https://web3py.readthedocs.io/en/v5/) gibi bir kütüphane tarafından gerçekleştirilir ancak arka planda kullanıcı, Ethereum [JSON-RPC API'sini](/developers/docs/apis/json-rpc/) kullanarak bir düğüme istekte bulunur. Kullanıcı, yapacağı işlemin bloka dahil edilmesini teşvik etmek için doğrulayıcıya bahşiş olarak ödemeye hazır olduğu gaz miktarını belirler. [İpuçları](/developers/docs/gas/#priority-fee), doğrulayıcıya ödenirken [taban ücret](/developers/docs/gas/#base-fee) yakılır. 2. İşlem, geçerliliğini doğrulayan bir Ethereum [yürütüm istemcisine](/developers/docs/nodes-and-clients/#execution-client) gönderilir. Bu da gönderenin hem işlemi gerçekleştirmek için yeterli ETH'ye sahip olduğundan hem de doğru anahtarla işlemi imzaladığından emin olma anlamına gelir. -3. İşlem geçerli ise yürütüm istemcisi bunu yerel bellek havuzuna (bekleyen işlemler listesi) ekler ve ayrıca yürütüm katmanı dedikodu ağı üzerinden diğer düğümlere de yayımlar. Diğer düğümler de işlemi duydukları zaman işlemi kendi yerel bellek havuzlarına eklerler. İleri düzey kullanıcılar, işlemlerini yayınlamak istemeyebilir ve bunun yerine [Flashboats Auction](https://docs.flashbots.net/flashbots-auction/overview) gibi özel blok oluşturucularına yönelebilir. Bu maksimum kâr ([MEV](/developers/docs/mev/#mev-extraction)) ile işlemleri yaklaşan bloklar için organize etmeyi sağlar. -4. Ağdaki doğrulayıcı düğümlerinden biri, daha önce RANDAO kullanılarak rastgele seçilmiş olan mevcut yuva için blok önericisidir. Bu düğüm Ethereum blok zincirine eklenecek bir sonraki bloku oluşturmak, yayımlamak ve de global durumunu güncellemekten sorumludur. Bir düğüm 3 bölümden oluşur: yürütüm istemcisi, fikir birliği istemcisi ve doğrulayıcı istemcisi. Yürütüm istemcisi, işlemleri yerel bellek havuzundan bir "yürütme yüküne" paketler ve bir durum değişikliği oluşturabilmek için bunları yerel olarak yürütür. Bu bilgi, yürütme yükünün ağın başlangıcındaki blok dizisi üzerinde anlaşmasını sağlayan; ödüller, cezalar, tasdikler, kesintiler vb. hakkında da bilgiler içeren bir çeşit "işaret blokunun" parçası olarak paketlendiği fikir birliği istemcisine iletilir. Yürütüm ve fikir birliği istemcisi arasındaki iletişimle ilgili daha fazla ayrıntı için buraya bakabilirsiniz [ Yürütüm ve Fikir Birliği İstemcilerini Bağlama](/developers/docs/networking-layer/#connecting-clients). -5. Diğer düğümler yeni işaret blokunu fikir birliği katmanındaki dedikodu ağından alırlar. Onlar da işlemlerin tekrardan yerel olarak yürütülüp sunulan durum değişikliğinden emin olunduğu yürütüm istemcisine aktarırlar. Doğrulayıcı istemcisi daha sonra blokun geçerli olduğunu ve zincir açısından mantıksal bir sonraki blok olduğunu onaylar (yani [çatal seçim kuralında](/developers/docs/consensus-mechanisms/pos/#fork-choice) bahsedildiği gibi en fazla onay ağırlığına sahip zincir üzerine kurulur). Blok, kendini onaylayan her düğümdeki yerel veritabanına eklenir. +3. İşlem geçerli ise yürütüm istemcisi bunu yerel bellek havuzuna (bekleyen işlemler listesi) ekler ve ayrıca yürütüm katmanı dedikodu ağı üzerinden diğer düğümlere de yayımlar. Diğer düğümler de işlemi duydukları zaman işlemi kendi yerel bellek havuzlarına eklerler. İleri düzey kullanıcılar, işlemlerini yayınlamaktan kaçınabilir ve bunun yerine [Flashbots Auction](https://docs.flashbots.net/flashbots-auction/overview) gibi özel blok oluşturucularına iletebilir. Bu, maksimum kâr ([MEV](/developers/docs/mev/#mev-extraction)) için gelecek bloklardaki işlemleri organize etmelerine olanak tanır. +4. Ağdaki doğrulayıcı düğümlerinden biri, daha önce RANDAO kullanılarak rastgele seçilmiş olan mevcut yuva için blok önericisidir. Bu düğüm Ethereum blok zincirine eklenecek bir sonraki bloku oluşturmak, yayımlamak ve de global durumunu güncellemekten sorumludur. Bir düğüm 3 bölümden oluşur: yürütüm istemcisi, fikir birliği istemcisi ve doğrulayıcı istemcisi. Yürütüm istemcisi, işlemleri yerel bellek havuzundan bir "yürütme yüküne" paketler ve bir durum değişikliği oluşturabilmek için bunları yerel olarak yürütür. Bu bilgi, yürütme yükünün ağın başlangıcındaki blok dizisi üzerinde anlaşmasını sağlayan; ödüller, cezalar, tasdikler, kesintiler vb. hakkında da bilgiler içeren bir çeşit "işaret blokunun" parçası olarak paketlendiği fikir birliği istemcisine iletilir. Yürütüm ve mutabakat istemcileri arasındaki iletişim, [Mutabakat ve Yürütüm İstemcilerini Bağlama](/developers/docs/networking-layer/#connecting-clients) bölümünde daha ayrıntılı olarak açıklanmaktadır. +5. Diğer düğümler yeni işaret blokunu fikir birliği katmanındaki dedikodu ağından alırlar. Onlar da işlemlerin tekrardan yerel olarak yürütülüp sunulan durum değişikliğinden emin olunduğu yürütüm istemcisine aktarırlar. Doğrulayıcı istemcisi daha sonra bloğun geçerli olduğunu ve zincir görünümünde mantıksal olarak bir sonraki blok olduğunu tasdik eder (yani [çatal seçim kurallarında](/developers/docs/consensus-mechanisms/pos/#fork-choice) tanımlandığı gibi en büyük tasdik ağırlığına sahip zincir üzerine kurulur). Blok, kendini onaylayan her düğümdeki yerel veritabanına eklenir. 6. Bir işlem eğer "süper çoğunluğun denkliğini" alarak iki kontrol noktası arasında zincirin bir parçası olduysa "kesinleşmiş" olarak görülebilir. Kontrol noktaları, her dönemin başlangıcında meydana gelir ve aktif doğrulayıcıların sadece bir alt kümesinin her yuvada doğrulama yaptığını; ancak tüm aktif doğrulayıcıların dönemler boyunca doğrulama yaptığını hesaba katmak için var olurlar. Yani sadece bitişik iki dönem arasında eğer "süper çoğunluk denkliği" varsa gösterilebilir (bu da ağdaki ETH paydaşlarının %66'sının iki kontrol noktası konusunda uzlaşması demektir). Kesinlik konusunda daha fazla ayrıntıya aşağıda ulaşılabilir. ## Kesinlik {#finality} -Bir işlem ciddi miktarda Ether yakmadan değişmeyen bir blokun parçası olduğunda o işlemin dağıtılmış ağlarda "kesinliği" vardır. Hisse ispatı Ethereum'da bu, "kontrol noktası" blokları kullanılarak yönetilir. Her dönemdeki ilk blok, bir kontrol noktasıdır. Doğrulayıcılar, geçerli olduğunu düşündüğü kontrol noktası çiftlerine oy verir. Bir çift kontrol noktası, toplam hisselenen ETH'nin en az üçte ikisini temsil eden oyları çekerse, kontrol noktaları yükseltilir. İkisinden (hedef) daha yeni olanı "doğrulanmış" hale gelir. Önceki dönemde "hedef" olduğu için, ikisinden daha erken olanı zaten doğrulanmıştır. Şimdi "kesinleşmiş" olarak yükseltildi. +Bir işlem ciddi miktarda Ether yakmadan değişmeyen bir blokun parçası olduğunda o işlemin dağıtılmış ağlarda "kesinliği" vardır. Hisse ispatı Ethereum'da bu, "kontrol noktası" blokları kullanılarak yönetilir. Her dönemdeki ilk blok, bir kontrol noktasıdır. Doğrulayıcılar, geçerli olduğunu düşündüğü kontrol noktası çiftlerine oy verir. Bir çift kontrol noktası, toplam hisselenen ETH'nin en az üçte ikisini temsil eden oyları çekerse, kontrol noktaları yükseltilir. İkisinden (hedef) daha yeni olanı "doğrulanmış" hale gelir. Önceki dönemde "hedef" olduğu için, ikisinden daha erken olanı zaten doğrulanmıştır. Şimdi "kesinleşmiş" olarak yükseltildi. Kontrol noktalarını yükseltme süreci **[Casper the Friendly Finality Gadget (Casper-FFG)](https://arxiv.org/pdf/1710.09437)** tarafından yürütülür. Casper-FFG, mutabakat için bir blok kesinlik aracıdır. Bir blok kesinleştirildikten sonra, paydaşların çoğunluğu kesintiye uğramadan geri alınamaz veya değiştirilemez, bu da onu ekonomik olarak olanaksız kılar. -Bir saldırgan kesinleşmiş bir bloku geri almak için toplam hisselenen ether arzının en az üçte birini kaybetmeyi göze alır. Bunun tam nedeni [Ethereum Foundation blog gönderisinde](https://blog.ethereum.org/2016/05/09/on-settlement-finality/) açıklanmıştır. Kesinlik üçte iki çoğunluk gerektirdiğinden, bir saldırgan toplam payın üçte biriyle oy vererek ağın kesinliğe ulaşmasını engelleyebilir. Buna karşı korunmak için bir mekanizma vardır: [hareketsizlik sızıntısı](https://eth2book.info/bellatrix/part2/incentives/inactivity). Bu, zincir dörtten fazla dönemde kesinleşmediğinde etkinleşir. Hareketsizlik sızıntısı, çoğunluğa karşı oy veren doğrulayıcılardan hisselenen ETH'yi geri kalan çoğunluğa aktarır ve üçte ikilik çoğunluğun yeniden kazanılmasına ve zincirin kesinleşmesine olanak verir. +Bir saldırgan kesinleşmiş bir bloku geri almak için toplam hisselenen ether arzının en az üçte birini kaybetmeyi göze alır. Bunun tam nedeni bu [Ethereum Foundation blog gönderisinde](https://blog.ethereum.org/2016/05/09/on-settlement-finality/) açıklanmaktadır. Kesinlik üçte iki çoğunluk gerektirdiğinden, bir saldırgan toplam payın üçte biriyle oy vererek ağın kesinliğe ulaşmasını engelleyebilir. Buna karşı savunma sağlayacak bir mekanizma vardır: [hareketsizlik sızıntısı](https://eth2book.info/bellatrix/part2/incentives/inactivity). Bu, zincir dörtten fazla dönemde kesinleşmediğinde etkinleşir. Hareketsizlik sızıntısı, çoğunluğa karşı oy veren doğrulayıcılardan hisselenen ETH'yi geri kalan çoğunluğa aktarır ve üçte ikilik çoğunluğun yeniden kazanılmasına ve zincirin kesinleşmesine olanak verir. ## Kripto-ekonomik güvenlik {#crypto-economic-security} Doğrulayıcı çalıştırmak bir taahhüttür. Doğrulayıcının, blok doğrulama ve teklife katılmak için yeterli donanıma ve bağlantıya sahip olması beklenir. Karşılığında, doğrulayıcıya ETH ile ödeme yapılır (hisselenen bakiyeleri artar). Öte yandan, doğrulayıcı olarak katılmak, kullanıcıların kişisel kazanç veya sabotaj için ağa saldırması için yeni yollar açar. Bunu önlemek için, doğrulayıcılar, çağrıldıklarında katılmazlarsa ETH ödüllerini kaçırırlar ve dürüst davranmazlarsa mevcut payları yok edilebilir. Temelde iki davranış dürüst olmayan olarak kabul edilebilir: Tek bir yuvada birden fazla blok önermek (belirsizlik) ve çelişkili tasdikler göndermek. -Ceza olarak kesilen Ether miktarı, aynı anda kaç doğrulayıcıya ceza verildiği ile de bağlıdır. Bu, ["korelasyon cezası"](https://eth2book.info/bellatrix/part2/incentives/slashing#the-correlation-penalty) olarak bilinir ve küçük olabilir (ceza verilen tek bir doğrulayıcı için ~%1 hisse) veya doğrulayıcının hissesinin %100'ünün yok olmasına neden olabilir (kitlesel ceza olayı). 1. Günde acil bir ceza (1 ETH'ye kadar), 18. Günde korelasyon cezası ve son olarak 36. Günde ağdan çıkarma ile başlayan bir zorunlu çıkış döneminin yarısında uygulanır. Ağda bulundukları, ancak oy vermedikleri için her gün küçük tasdik cezaları alırlar. Bütün bunlar, koordineli bir saldırının saldırgan için çok maliyetli olacağı anlamına gelir. +Ceza olarak kesilen Ether miktarı, aynı anda kaç doğrulayıcıya ceza verildiği ile de bağlıdır. Bu, ["korelasyon cezası"](https://eth2book.info/bellatrix/part2/incentives/slashing#the-correlation-penalty) olarak bilinir ve küçük olabilir (tek başına kesintiye uğrayan bir doğrulayıcı için yaklaşık %1 hisse) ya da doğrulayıcının hissesinin %100'ünün yok edilmesiyle sonuçlanabilir (toplu kesinti olayı). 1. Günde acil bir ceza (1 ETH'ye kadar), 18. Günde korelasyon cezası ve son olarak 36. Günde ağdan çıkarma ile başlayan bir zorunlu çıkış döneminin yarısında uygulanır. Ağda bulundukları, ancak oy vermedikleri için her gün küçük tasdik cezaları alırlar. Bütün bunlar, koordineli bir saldırının saldırgan için çok maliyetli olacağı anlamına gelir. ## Çatal seçimi {#fork-choice} -Ağ, optimum ve dürüst bir şekilde çalıştığında, zincirin başında yalnızca bir yeni blok vardır ve tüm doğrulayıcılar bunu tasdik eder. Bununla birlikte, ağ gecikmesi veya bir blok öneren kişinin yanlış anlaması nedeniyle doğrulayıcıların zincirin başı hakkında farklı görüşlere sahip olması mümkündür. Bu nedenle, fikir birliği istemcileri, hangisini tercih edeceklerine karar vermek için bir algoritmaya ihtiyaç duyar. Hisse ispatı Ethereum'da kullanılan algoritmaya [LMD-GHOST](https://arxiv.org/pdf/2003.03052.pdf) denir ve bu algoritmaya sahip, en ağır tasdik yığınına sahip olan çatalı tanımlayarak çalışır. +Ağ, optimum ve dürüst bir şekilde çalıştığında, zincirin başında yalnızca bir yeni blok vardır ve tüm doğrulayıcılar bunu tasdik eder. Bununla birlikte, ağ gecikmesi veya bir blok öneren kişinin yanlış anlaması nedeniyle doğrulayıcıların zincirin başı hakkında farklı görüşlere sahip olması mümkündür. Bu nedenle, fikir birliği istemcileri, hangisini tercih edeceklerine karar vermek için bir algoritmaya ihtiyaç duyar. Hisse ispatı Ethereum'da kullanılan algoritmaya [LMD-GHOST](https://arxiv.org/pdf/2003.03052.pdf) denir ve geçmişinde en yüksek ağırlıkta tasdik bulunan çatalı belirleyerek çalışır. ## Hisse ispatı ve güvenlik {#pos-and-security} -İş ispatında olduğu gibi, hisse ispatında da [%51 saldırısı](https://www.investopedia.com/terms/1/51-attack.asp) tehdidi hâlâ mevcuttur, ancak saldırganlar için daha da risklidir. Saldırganın hisselenmiş ETH'nin %51'ine ihtiyacı vardır. Daha sonra, tercih ettikleri çatalın en fazla birikmiş onaylara sahip olduğundan emin olmak için kendi onaylarını kullanabilirler. Birikmiş onayların "ağırlığı", fikir birliği istemcilerinin doğru zinciri belirlemek için kullandıkları şeydir, bu nedenle bu saldırgan çatallarını kurallı hale getirebilir. Bununla birlikte, hisse ispatının iş ispatı üzerindeki gücü, topluluğun bir karşı saldırı başlatma esnekliğine sahip olmasıdır. Örneğin, dürüst doğrulayıcılar azınlık zincirini geliştirmeye devam etmeye ve saldırganın çatalını görmezden gelirken uygulamaları, borsaları ve havuzları da aynısını yapmaya teşvik edebilir. Ayrıca, saldırganı ağdan zorla çıkarmaya ve hisselenmiş ETH'sini yok etmeye karar verebilirler. Bunlar, %51 saldırısına karşı güçlü ekonomik savunmalardır. +[%51 saldırısı](https://www.investopedia.com/terms/1/51-attack.asp) tehdidi, iş ispatında olduğu gibi hisse ispatında da mevcuttur ancak saldırganlar için daha da risklidir. Saldırganın hisselenmiş ETH'nin %51'ine ihtiyacı vardır. Daha sonra, tercih ettikleri çatalın en fazla birikmiş onaylara sahip olduğundan emin olmak için kendi onaylarını kullanabilirler. Birikmiş onayların "ağırlığı", fikir birliği istemcilerinin doğru zinciri belirlemek için kullandıkları şeydir, bu nedenle bu saldırgan çatallarını kurallı hale getirebilir. Bununla birlikte, hisse ispatının iş ispatı üzerindeki gücü, topluluğun bir karşı saldırı başlatma esnekliğine sahip olmasıdır. Örneğin, dürüst doğrulayıcılar azınlık zincirini geliştirmeye devam etmeye ve saldırganın çatalını görmezden gelirken uygulamaları, borsaları ve havuzları da aynısını yapmaya teşvik edebilir. Ayrıca, saldırganı ağdan zorla çıkarmaya ve hisselenmiş ETH'sini yok etmeye karar verebilirler. Bunlar, %51 saldırısına karşı güçlü ekonomik savunmalardır. %51 saldırılarının yanı sıra, kötü niyetli kişiler de farklı tipteki kötü niyetli faaliyetleri deneyebilir. Örneğin: @@ -62,16 +62,16 @@ Ağ, optimum ve dürüst bir şekilde çalıştığında, zincirin başında yal Genel olarak, Ethereum'da uygulandığı için hisse ispatının, iş ispatından ekonomik olarak daha güvenli olduğu kanıtlanmıştır. -## Artıları ve eksileri {#pros-and-cons} +## Artı ve eksiler {#pros-and-cons} -| Artıları | Eksileri | -| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -| Staking, bireylerin ağın güvenliğini sağlamaya katılmasını kolaylaştırır ve merkeziyetsizliği teşvik eder. doğrulayıcı düğümü, normal bir dizüstü bilgisayarda çalıştırılabilir. Staking havuzları, kullanıcıların 32 ETH'ye sahip olmadan stake yapmalarına olanak tanır. | Hisse ispatı, iş ispatına kıyasla daha genç ve savaşta daha az test edildi | -| Stake etme daha merkeziyetsizdir. Ölçek ekonomileri, PoW madenciliği için geçerli olduğu şekilde uygulanmaz. | Hisse kanıtı, iş kanıtından daha karmaşıktır | -| Hisse ispatı, iş ispatından daha fazla kripto-ekonomik güvenlik sunar | Kullanıcıların Ethereum'un hisse ispatı sistemine katılabilmek için 3 adet yazılım çalıştırması gerekir. | -| Ağ katılımcılarını teşvik etmek için daha az yeni Ether verilmesi gerekiyor | | +| Artıları | Eksileri | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ | +| Staking, bireylerin ağın güvenliğini sağlamaya katılmasını kolaylaştırır ve merkeziyetsizliği teşvik eder. doğrulayıcı düğümü, normal bir dizüstü bilgisayarda çalıştırılabilir. Staking havuzları, kullanıcıların 32 ETH'ye sahip olmadan stake yapmalarına olanak tanır. | Hisse ispatı, iş ispatına kıyasla daha genç ve savaşta daha az test edildi | +| Stake etme daha merkeziyetsizdir. Ölçek ekonomileri, PoW madenciliği için geçerli olduğu şekilde uygulanmaz. | Hisse kanıtı, iş kanıtından daha karmaşıktır | +| Hisse ispatı, iş ispatından daha fazla kripto-ekonomik güvenlik sunar | Kullanıcıların Ethereum'un hisse ispatı sistemine katılabilmek için 3 adet yazılım çalıştırması gerekir. | +| Ağ katılımcılarını teşvik etmek için daha az yeni Ether verilmesi gerekiyor | | -### İş ispatı ile karşılatırıldığında {#comparison-to-proof-of-work} +### İş ispatı ile karşılaştırma {#comparison-to-proof-of-work} Ethereum başlangıçta iş ispatı kullanmış ancak 2022 Eylül'de hisse ispatına geçiş yapmıştır. PoS, PoW'un aksine birkaç avantaj sunar. Örneğin: @@ -82,18 +82,18 @@ Ethereum başlangıçta iş ispatı kullanmış ancak 2022 Eylül'de hisse ispat - uygunsuz davranış için ekonomik cezalar, örneğin bir saldırgan için iş ispatına kıyasla %51 tarzı saldırıları daha da maliyetli hale getirir - %51 saldırısı kripto-ekonomik savunmaların üstesinden gelmek için, topluluk dürüst bir zincirin sosyal iyileşmesine başvurabilir. -## Daha fazla bilgi {#further-reading} +## Daha fazla kaynak {#further-reading} - [Hisse İspatı SSS](https://vitalik.eth.limo/general/2017/12/31/pos_faq.html) _Vitalik Buterin_ -- [Hisse İspatı Nedir?](https://consensys.net/blog/blockchain-explained/what-is-proof-of-stake/) _ ConsenSys_ -- [Hisse İspatı Nedir ve Neden Önemlidir?](https://bitcoinmagazine.com/culture/what-proof-of-stake-is-and-why-it-matters-1377531463) _Vitalik Buterin_ -- [Neden Hisse İspatı? (Kasım 2020)](https://vitalik.eth.limo/general/2020/11/06/pos2020.html) _Vitalik Buterin_ +- [Hisse İspatı Nedir](https://consensys.net/blog/blockchain-explained/what-is-proof-of-stake/) _ConsenSys_ +- [Hisse İspatı Nedir ve Neden Önemlidir](https://bitcoinmagazine.com/culture/what-proof-of-stake-is-and-why-it-matters-1377531463) _Vitalik Buterin_ +- [Neden Hisse İspatı (Kasım 2020)](https://vitalik.eth.limo/general/2020/11/06/pos2020.html) _Vitalik Buterin_ - [Hisse İspatı: Zayıf Öznelliği Sevmeyi Nasıl Öğrendim](https://blog.ethereum.org/2014/11/25/proof-stake-learned-love-weak-subjectivity/) _Vitalik Buterin_ -- [Ethereum hisse ispatının saldırı ve savunması](https://mirror.xyz/jmcook.eth/YqHargbVWVNRQqQpVpzrqEQ8IqwNUJDIpwRP7SS5FXs) +- [Hisse ispatı Ethereum saldırı ve savunması](https://mirror.xyz/jmcook.eth/YqHargbVWVNRQqQpVpzrqEQ8IqwNUJDIpwRP7SS5FXs) - [Bir Hisse İspatı Tasarım Felsefesi](https://medium.com/@VitalikButerin/a-proof-of-stake-design-philosophy-506585978d51) _Vitalik Buterin_ -- [Video: Vitalik Buterin hisse ispatını Lex Fridman'a açıklıyor](https://www.youtube.com/watch?v=3yrqBG-7EVE) +- [Video: Vitalik Buterin, Lex Fridman'a hisse ispatını açıklıyor](https://www.youtube.com/watch?v=3yrqBG-7EVE) -## İlgili konular {#related-topics} +## Alakalı başlıklar {#related-topics} - [İş ispatı](/developers/docs/consensus-mechanisms/pow/) -- [Yetki kanıtı](/developers/docs/consensus-mechanisms/poa/) +- [Otorite İspatı](/developers/docs/consensus-mechanisms/poa/) diff --git a/public/content/translations/tr/developers/docs/consensus-mechanisms/pos/keys/index.md b/public/content/translations/tr/developers/docs/consensus-mechanisms/pos/keys/index.md index a1f0db9534c..cd17bee983e 100644 --- a/public/content/translations/tr/developers/docs/consensus-mechanisms/pos/keys/index.md +++ b/public/content/translations/tr/developers/docs/consensus-mechanisms/pos/keys/index.md @@ -1,20 +1,20 @@ --- -title: Ethereum hisse ispatındaki anahtarlar -description: Ethereum'un hisse ispatı mutabakat mekanizmasında kullanılan anahtarların açıklaması +title: "Ethereum hisse ispatındaki anahtarlar" +description: "Ethereum'un hisse ispatı mutabakat mekanizmasında kullanılan anahtarların açıklaması" lang: tr --- Ethereum, kullanıcı varlıklarını açık-özel anahtar kriptografisi kullanarak güvence altına alır. Açık anahtar, bir Ethereum adresinin temelini oluşturmak için kullanılır; yani genel olarak herkese açıktır ve eşsiz bir tanımlayıcı olarak kullanılır. Özel (veya "gizli") anahtara yalnızca hesap sahibi tarafından erişilebilmelidir. Özel anahtar, işlemleri ve verileri "imzalamak" için kullanılır, böylece kriptografi, özel anahtar sahibinin belirli bir bir eylemi onayladığını kanıtlayabilir. -Ethereum'un anahtarları [eliptik eğri kriptografisi](https://en.wikipedia.org/wiki/Elliptic-curve_cryptography) kullanılarak oluşturulur. +Ethereum'un anahtarları, [eliptik eğri kriptografisi](https://en.wikipedia.org/wiki/Elliptic-curve_cryptography) kullanılarak oluşturulur. -Ancak Ethereum, [iş ispatından](/developers/docs/consensus-mechanisms/pow) [hisse ispatına](/developers/docs/consensus-mechanisms/pos) geçiş yaptığında Ethereum'a yeni bir tür anahtar eklenmiştir. Orijinal anahtarlar hâlâ tamamen önceki gibi çalışıyor, hesapları güvence altına alan eliptik eğri tabanlı anahtarlar üzerinde herhangi bir değişiklik yapılmadı. Ancak kullanıcıların, ETH hisseleyerek ve doğrulayıcıları çalıştırarak hisse ispatına katılmak için yeni bir anahtar türüne ihtiyacı vardı. Bu ihtiyaç, çok sayıda doğrulayıcı arasında geçen birçok mesaj dolayısıyla ortaya çıkan ölçeklenebilirlik zorluklarından kaynaklandı. Ağın mutabakata varması için gereken mesaj miktarını azaltmak için kolayca toplanabilecek bir kriptografik yöntem gerekiyordu. +Ancak, Ethereum [iş ispatından](/developers/docs/consensus-mechanisms/pow) [hisse ispatına](/developers/docs/consensus-mechanisms/pos) geçtiğinde Ethereum'a yeni bir anahtar türü eklendi. Orijinal anahtarlar hâlâ tamamen önceki gibi çalışıyor, hesapları güvence altına alan eliptik eğri tabanlı anahtarlar üzerinde herhangi bir değişiklik yapılmadı. Ancak kullanıcıların, ETH hisseleyerek ve doğrulayıcıları çalıştırarak hisse ispatına katılmak için yeni bir anahtar türüne ihtiyacı vardı. Bu ihtiyaç, çok sayıda doğrulayıcı arasında geçen birçok mesaj dolayısıyla ortaya çıkan ölçeklenebilirlik zorluklarından kaynaklandı. Ağın mutabakata varması için gereken mesaj miktarını azaltmak için kolayca toplanabilecek bir kriptografik yöntem gerekiyordu. -Bu yeni anahtar tipi [**Boneh-Lynn-Shacham (BLS)** imza şemasını](https://wikipedia.org/wiki/BLS_digital_signature) kullanır. BLS, imzaların çok verimli bir şekilde toplanmasına imkân tanırken, aynı zamanda topplanmış bireysel doğrulayıcı anahtarlarının tersine mühendislik ile çözülmesine izin verir ve doğrulayıcılar arasındaki işlemleri yönetmek için idealdir. +Bu yeni anahtar türü, [**Boneh-Lynn-Shacham (BLS)** imza şemasını](https://wikipedia.org/wiki/BLS_digital_signature) kullanır. BLS, imzaların çok verimli bir şekilde toplanmasına imkân tanırken, aynı zamanda topplanmış bireysel doğrulayıcı anahtarlarının tersine mühendislik ile çözülmesine izin verir ve doğrulayıcılar arasındaki işlemleri yönetmek için idealdir. -## Doğrulayıcı anahtarlarının iki türü {#two-types-of-keys} +## İki tür doğrulayıcı anahtarı {#two-types-of-keys} -Hisse ispatına geçiş yapmadan önce, Ethereum kullanıcılarının fonlarına erişmek için sadece tek bir eliptik eğri tabanlı özel anahtarı vardı. Hisse ispatının tanıtılmasıyla birlikte, solo paydaş olmak isteyen kullanıcılar aynı zamanda bir **doğrulayıcı anahtarı** ve bir **para çekme anahtarı** gerekli oldu. +Hisse ispatına geçiş yapmadan önce, Ethereum kullanıcılarının fonlarına erişmek için sadece tek bir eliptik eğri tabanlı özel anahtarı vardı. Hisse ispatının kullanıma sunulmasıyla birlikte, tek başına stake eden olmak isteyen kullanıcıların bir **doğrulayıcı anahtarına** ve bir **çekim anahtarına** da sahip olmaları gerekti. ### Doğrulayıcı anahtarı {#validator-key} @@ -23,9 +23,9 @@ Doğrulayıcı imza anahtarı iki öğeden oluşur: - Doğrulayıcı **özel** anahtarı - Doğrulayıcı **açık** anahtarı -Doğrulayıcı özel anahtarın amacı, blok önerileri ve tasdikler gibi zincir üzerindeki işlemlere imza atmaktır. Bu yüzden, bu anahtarlar sıcak cüzdanda tutulmalıdır. +Doğrulayıcı özel anahtarının amacı, blok teklifleri ve onayları gibi zincir üstü işlemleri imzalamaktır. Bu yüzden, bu anahtarlar sıcak cüzdanda tutulmalıdır. -Bu esneklik, doğrulayıcı imza anahtarlarını bir cihazdan diğerine çok hızlı bir şekilde taşımanın avantajına sahiptir. Ancak, eğer kaybolmuş veya çalınmışlarsa, bir hırsız birkaç şekilde **kötü niyetli olarak hareket edebilir**: +Bu esneklik, doğrulayıcı imza anahtarlarını bir cihazdan diğerine çok hızlı bir şekilde taşıma avantajına sahiptir; ancak, kaybolur veya çalınırsa, bir hırsız birkaç şekilde **kötü amaçlı eylemlerde bulunabilir**: - Doğrulayıcıyı cezalandırmak için: - Önerici olmak ve aynı yuva için iki farklı işaret bloku imzalamak @@ -33,13 +33,15 @@ Bu esneklik, doğrulayıcı imza anahtarlarını bir cihazdan diğerine çok hı - Doğrulayıcı olmak ve hedefleri aynı olan iki farklı tasdiki imzalamak - Gönüllü bir çıkışı zorlamak, doğrulayıcının kilitlemesini durdurur ve para çekme anahtarının sahibine doğrulayıcının ETH bakiyesine erişim verir -**Doğrulayıcı açık anahtarı** bir kullanıcı hisseleme mevduat sözleşmesine ETH yatırdığında işlem verisine dahil olarak bulunur. Bu _yatırma verisi_ olarak bilinir ve Ethereum'un doğrulayıcıyı tanımlamasına izin verir. +Bir kullanıcı, stake etme para yatırma sözleşmesine ETH yatırdığında **doğrulayıcı açık anahtarı** işlem verilerine dahil edilir. Bu, _para yatırma verileri_ olarak bilinir ve Ethereum'un doğrulayıcıyı tanımlamasını sağlar. -### Para çekme kimlik bilgileri {#withdrawal-credentials} +### Çekim kimlik bilgileri {#withdrawal-credentials} -Her doğrulayıcı _para çekme kimlikleri_ olarak bilinen özelliğe sahiptir. Bu 32-bayt alan ya BLS para çekme kimliklerini temsil eden `0x00` ile başlar ya da yürütme adresine işaret eden kimlikleri temsil eden `0x01` ile başlar. +Her doğrulayıcının _para çekme kimlik bilgileri_ olarak bilinen bir özelliği vardır. Bu 32 baytlık alanın ilk baytı hesap türünü tanımlar: `0x00`, orijinal BLS (Shapella öncesi, çekilemez) kimlik bilgilerini; `0x01`, bir yürütme adresini gösteren eski kimlik bilgilerini; ve `0x02`, modern birleşik kimlik bilgisi türünü temsil eder. -`0x00` BLS anahtarları olan doğrulayıcılar fazla bakiye ödemelerini aktive etmek ve hisselemelerini tam olarak çekebilmek için bu kimlikleri güncellemek zorundadır. Bu, başlangıç anahtar üretiminde yatırılan verileri yürütme adresiyle destekleyerek yapılabilir _VEYA_ `BLSToExecutionChange` mesajını imzalamak ve yayınlamak için daha sonra bir para çekme anahtarı kullanılarak yapılabilir. +`0x00` BLS anahtarlarına sahip doğrulayıcılar, fazla bakiye ödemelerini veya stake edilen varlıkların tam çekimini etkinleştirmek için bu kimlik bilgilerini bir yürütme adresini gösterecek şekilde güncellemelidir. Bu, ilk anahtar oluşturma sırasında para yatırma verilerinde bir yürütme adresi sağlayarak _VEYA_ daha sonra para çekme anahtarını kullanarak bir `BLSToExecutionChange` mesajını imzalayıp yayınlayarak yapılabilir. + +[Doğrulayıcı para çekme kimlik bilgileri hakkında daha fazlası](/developers/docs/consensus-mechanisms/pos/withdrawal-credentials/) ### Para çekme anahtarı {#withdrawal-key} @@ -50,17 +52,19 @@ Doğrulayıcı anahtarları gibi, para çekme anahtarları da iki kısımdan olu - Para çekme **özel** anahtarı - Para çekme **açık** anahtarı -Para çekme kimliklerini `0x01` türüne güncellemeden önce anahtarları kaybetmek doğrulayıcı bakiyenize erişimi kaybetmeniz anlamına gelir. Doğrulayıcı hâlâ doğrulayıcının özel anahtarının gerektiği tasdik ve blok imzalama gibi eylemleri gerçekleştirebilir ancak para çekme anahtarları kaybedildiyse sıfıra yakın bir teşvik bulunmaktadır. +Para çekme kimlik bilgilerini `0x01` türüne güncellemeden önce bu anahtarı kaybetmek, doğrulayıcı bakiyesine erişimi kaybetmek anlamına gelir. Doğrulayıcı hâlâ doğrulayıcının özel anahtarının gerektiği tasdik ve blok imzalama gibi eylemleri gerçekleştirebilir ancak para çekme anahtarları kaybedildiyse sıfıra yakın bir teşvik bulunmaktadır. Doğrulayıcı anahtarlarınızı Ethereum hesabınızdan ayırmak birçok doğrulayıcının tek bir kullanıcı tarafından yürütülmesi imkânı sunar. -![doğrulayıcı anahtarı şeması](validator-key-schematic.png) +![doğrulayıcı anahtar şeması](validator-key-schematic.png) + +**Not**: Stake etme görevlerinden çıkmak ve bir doğrulayıcının bakiyesini çekmek, şu anda doğrulayıcı anahtarıyla bir [gönüllü çıkış mesajı (VEM)](https://mirror.xyz/ladislaus.eth/wmoBbUBes2Wp1_6DvP6slPabkyujSU7MZOFOC3QpErs&1) imzalamayı gerektirir. Ancak [EIP-7002](https://eips.ethereum.org/EIPS/eip-7002), gelecekte bir kullanıcının para çekme anahtarıyla çıkış mesajlarını imzalayarak bir doğrulayıcının çıkışını tetiklemesine ve bakiyesini çekmesine olanak tanıyacak bir tekliftir. Bu, ETH'yi [hizmet olarak stake etme sağlayıcılarına](/staking/saas/#what-is-staking-as-a-service) devreden stake edenlerin fonlarının kontrolünü ellerinde tutmalarını sağlayarak güven varsayımlarını azaltacaktır. -## Güvenlik kelimelerinden anahtarlar türetmek {#deriving-keys-from-seed} +## Güvenlik kelimelerinden anahtar türetme {#deriving-keys-from-seed} Eğer hisselenen tüm 32 ETH, tamamen yeni 2 set bağımsız anahtarları gerektirseydi, anahtar yönetimi özellikle birden fazla doğrulayıcı çalıştıran kullanıcılar için çok çabuk kullanılması zor bir hale gelirdi. Bunun yerine, birçok doğrulayıcı anahtarı tek bir genel paroladan türetilir ve bu tek parola birçok doğrulayıcı anahtarına erişime izin verir. -[Anımsatıcılar](https://en.bitcoinwiki.org/wiki/Mnemonic_phrase) ve yollar kullanıcıların cüzdanlarına [eriştiklerinde](https://ethereum.stackexchange.com/questions/19055/what-is-the-difference-between-m-44-60-0-0-and-m-44-60-0) genelde karşılaştıkları önde gelen özelliklerdir. Anımsatıcı bir özel anahtar için başlangıç tohumu olarak işlev gören bir kelime dizisidir. Ek veriyle birleştirildiğinde anımsatıcı, "ana anahtar" olarak bilinen bir karma üretir. Bu bir ağacın kökü gibi düşünülebilir. Bu kökten gelen dallar hiyerarşik bir yol kullanılarak türetilebilir yani bu alt düğümler kendi üst düğümlerinin karmalarının birleşmesinden ve ağaçtaki dizinlerinden var olabilir. Anımsatıcı tabanlı anahtar üretimine dair [BIP-32](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki) and [BIP-19](https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki) standartları hakkındakileri okuyun. +[Anımsatıcılar](https://en.bitcoinwiki.org/wiki/Mnemonic_phrase) ve yollar, kullanıcıların [cüzdanlarına erişirken](https://ethereum.stackexchange.com/questions/19055/what-is-the-difference-between-m-44-60-0-0-and-m-44-60-0) sıkça karşılaştıkları önemli özelliklerdir. Anımsatıcı bir özel anahtar için başlangıç tohumu olarak işlev gören bir kelime dizisidir. Ek veriyle birleştirildiğinde anımsatıcı, "ana anahtar" olarak bilinen bir karma üretir. Bu bir ağacın kökü gibi düşünülebilir. Bu kökten gelen dallar hiyerarşik bir yol kullanılarak türetilebilir yani bu alt düğümler kendi üst düğümlerinin karmalarının birleşmesinden ve ağaçtaki dizinlerinden var olabilir. Anımsatıcı tabanlı anahtar üretimi için [BIP-32](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki) ve [BIP-19](https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki) standartları hakkında bilgi edinin. Bu yollar ilerleyen yapıda, donanım cüzdanlarıyla etkileşime geçmiş kullanıcılara tanıdık gelebilir: @@ -71,10 +75,10 @@ m/44'/60'/0'/0` Aşağıda belirtildiği gibi bu yoldaki iptaller özel anahtarın ayrı kısımlarıdır: ``` -master_key / purpose / coin_type / account / change / address_index +ana_anahtar / amaç / coin_türü / hesap / değişim / adres_dizini ``` -Bu mantık kullanıcıların olabildiği kadar doğrulayıcıyı tek bir **anımsatıcı ifadesine** bağlamasının önünü açar çünkü ağaç kökü ortaktır ve farklılaşma dallarda olabilir. Kullanıcı anımsatıcı ifadesinden **herhangi bir sayıda anahtar** türetebilir. +Bu mantık, ağaç kökü ortak olabildiği ve farklılaşma dallarda gerçekleşebildiği için kullanıcıların mümkün olduğu kadar çok doğrulayıcıyı tek bir **anımsatıcı ifadeye** bağlamasını sağlar. Kullanıcı, anımsatıcı ifadeden **istediği sayıda anahtar türetebilir**. ``` [m / 0] @@ -86,11 +90,13 @@ Bu mantık kullanıcıların olabildiği kadar doğrulayıcıyı tek bir **anım [m / 2] ``` -Her bir bölümün `/` yani `m/2` tarafından ayrılması, ana anahatar ve takip bölümü 2 anlamındadır. Bu şemanın altındaki tek anımsatıcı ifade her biri iki doğrulayıcıyla ilişkilendirilmiş üç para çekme anahtarını saklardı. +Her dal bir `/` ile ayrılır, dolayısıyla `m/2` ana anahtarla başlayıp 2. dalı takip etmek anlamına gelir. Bu şemanın altındaki tek anımsatıcı ifade her biri iki doğrulayıcıyla ilişkilendirilmiş üç para çekme anahtarını saklardı. -![doğrulayıcı anahtarı mantığı](multiple-keys.png) +![doğrulayıcı anahtar mantığı](multiple-keys.png) -## Daha fazla bilgi {#further-reading} +## Daha fazla kaynak {#further-reading} -- [Ethereum Foundation blog gönderisi, Carl Beekhuizen](https://blog.ethereum.org/2020/05/21/keys/) +- [Carl Beekhuizen'den Ethereum Foundation blog gönderisi](https://blog.ethereum.org/2020/05/21/keys/) - [EIP-2333 BLS12-381 anahtar üretimi](https://eips.ethereum.org/EIPS/eip-2333) +- [EIP-7002: Yürütme Katmanı Tarafından Tetiklenen Çıkışlar](https://web.archive.org/web/20250125035123/https://research.2077.xyz/eip-7002-unpacking-improvements-to-staking-ux-post-merge) +- [Büyük ölçekte anahtar yönetimi](https://docs.ethstaker.cc/ethstaker-knowledge-base/scaled-node-operators/key-management-at-scale) diff --git a/public/content/translations/tr/developers/docs/consensus-mechanisms/pos/pos-vs-pow/index.md b/public/content/translations/tr/developers/docs/consensus-mechanisms/pos/pos-vs-pow/index.md index 505dd04ba91..c1895cc0d17 100644 --- a/public/content/translations/tr/developers/docs/consensus-mechanisms/pos/pos-vs-pow/index.md +++ b/public/content/translations/tr/developers/docs/consensus-mechanisms/pos/pos-vs-pow/index.md @@ -1,6 +1,6 @@ --- -title: Hisse ispatı ile iş ispatının karşılaştırılması -description: Mutabakat mekanizmasına dayalı olarak Ethereum'un iş ispatı ile hisse ispatını karşılaştırma +title: "Hisse ispatı ile iş ispatının karşılaştırılması" +description: "Mutabakat mekanizmasına dayalı olarak Ethereum'un iş ispatı ile hisse ispatını karşılaştırma" lang: tr --- @@ -14,17 +14,17 @@ Ethereum araştırmacıları hisse ispatını, iş ispatından daha güvenli gö ### Saldırı maliyeti {#cost-to-attack} -Hisse ispatında doğrulayıcılar, en az 32 ETH'yi bir akıllı sözleşmeye emanet (kilitleme) etmelidir. Ethereum kötü niyetle davranan doğrulayıcıları cezalandırmak için hisselenen etherleri yok edebilir. Mutabakata varmak için toplam hisselenen etherin en az %66'sı, belirli bir blok kümesinin lehine oy vermelidir. Hisseleri >=%66 ile oylanan bloklar, tekrar düzenlenmeyecek veya ortadan kaldırılamayacak anlamına gelen ''kesinleşmiş'' hale dönüşür. +Hisse ispatında doğrulayıcılar, en az 32 ETH'yi bir akıllı sözleşmeye emanet (kilitleme) etmelidir. Ethereum kötü niyetle davranan doğrulayıcıları cezalandırmak için hisselenen etherleri yok edebilir. Mutabakata varmak için toplam hisselenen etherin en az %66'sı, belirli bir blok kümesinin lehine oy vermelidir. Hissenin >=%66'sı tarafından oylanan bloklar "kesinleşmiş" hale gelir, bu da kaldırılamayacakları veya yeniden düzenlenemeyecekleri anlamına gelir. Ağa saldırmak; zincirin kesinleşmesini engellemek veya gerçek zincirdeki belirli blok organizasyonlarının bir şekilde saldırgana katkı sağladığının güvence altına alınması anlamına gelir. Bu; saldırganın ya yeteri miktarda ether biriktirip bunu doğrudan oylaması ya da dürüst doğrulayıcıları belirli yönde oy kullanmaları konusunda kandırmaları ile dürüst mutakabat yolunu ayrıştırmasını gerektirir. Dürüst doğrulayıcıları kandıran karmaşık, düşük ihtimalli saldırılar bir yana, Ethereum'a saldırmanın maliyeti bir saldırganın mutabakatı kendi isteğine göre etkilemesi için biriktirmesi gereken hissenin maliyetidir. -Saldırının en düşük masrafı toplam hissenin >%33'üdür. Toplam hissenin >%33'üne sahip saldırgan yalnızca çevrimdışı olarak kesinlik gecikmesine sebep olabilir. Bu; ''hareketsizlik sızıntısı'' olarak da bilinen, çevrimiçi çoğunluğun hissenin %66'sına erişene ve zinciri yeniden kesinleştirene kadar hisseyi sızdıran bir mekanizmanın varlığından ötürü ağ için görece küçük bir sorundur. Blok üreticisi olmaları ve tüm doğrulayıcılarıyla çifter oy vermeleri istendiğinde toplam hissenin %33'ünden biraz fazlasına sahip olan bir saldırganın, bir yerine iki blok yaratarak çift kesinliğe sebep olması teorik olarak mümkündür. Her çatal, her bir bloku birinci olarak görmek için kalan dürüst doğrulayıcıların yalnızca %50'sine ihtiyaç duyar, bu sebeple eğer mesajları zamanında göndermeyi başarırlarsa her iki çatalı da kesinleştirmeyi başarabilirler. Bunun başarılı olma şansı daha azdır ancak eğer saldırgan çift kesinliğe sebep olmayı başarırsa saldırgan doğrulayıcıların diğer çatala bölünmesi gerekeceğinden Ethereum topluluğu hangi çatalı takip edeceğine karar vermek zorunda kalacaktır. +En düşük saldırı maliyeti, toplam hissenin >%33'üdür. Toplam hissenin >%33'üne sahip bir saldırgan, sadece çevrimdışı kalarak kesinlik gecikmesine neden olabilir. Bu; ''hareketsizlik sızıntısı'' olarak da bilinen, çevrimiçi çoğunluğun hissenin %66'sına erişene ve zinciri yeniden kesinleştirene kadar hisseyi sızdıran bir mekanizmanın varlığından ötürü ağ için görece küçük bir sorundur. Blok üreticisi olmaları ve tüm doğrulayıcılarıyla çifter oy vermeleri istendiğinde toplam hissenin %33'ünden biraz fazlasına sahip olan bir saldırganın, bir yerine iki blok yaratarak çift kesinliğe sebep olması teorik olarak mümkündür. Her çatal, her bir bloku birinci olarak görmek için kalan dürüst doğrulayıcıların yalnızca %50'sine ihtiyaç duyar, bu sebeple eğer mesajları zamanında göndermeyi başarırlarsa her iki çatalı da kesinleştirmeyi başarabilirler. Bunun başarılı olma şansı daha azdır ancak eğer saldırgan çift kesinliğe sebep olmayı başarırsa saldırgan doğrulayıcıların diğer çatala bölünmesi gerekeceğinden Ethereum topluluğu hangi çatalı takip edeceğine karar vermek zorunda kalacaktır. -Toplam hissenin >%33'ü ile Ethereum ağında daha ufak (kesinlik gecikmesi) ya da daha büyük (çift kesinlik) etkilere sahip olma şansı vardır. Ağda hisselenmiş 14.000.000'dan fazla ETH ve ETH başına 1000$ değeri ile bu saldırılara girişmenin asgari maliyeti `1000 x 14.000.000 x 0,33 = $4.620.000.000`'dır. Saldırgan bu parayı, cezalandırılma ve ağın dışına konulma ile kaybedebilir. Yeniden saldırmak için tüm hissenin >%33'ünü (yeniden) biriktirmeli ve bunu yakmalıdır (yeniden). Ağa her saldırı girişimi >$4.6 milyardan fazlasına mal olacaktır (ETH başına 1000$ ve hisselenmiş 14.000.000 ETH için). Saldırgan da bunlar cezalandırıldığında ağın dışına konulur ve tekrar katılım için aktivasyon sırasına girmek zorundadır. Bunun anlamı; tekrarlı saldırının yalnızca saldırganın toplam kilidin >%33'ünü biriktirme hızıyla değil ağdaki tüm doğrulayıcıları tekrardan ağa dahil etme zamanıyla sınırlandırılmıştır. Saldırgan her saldırdığında daha fakirleşir ve topluluğun geri kalanı, tedarik şoku sayesinde daha zenginleşir. +Toplam hissenin >%33'ü ile bir saldırganın, Ethereum ağında küçük (kesinlik gecikmesi) veya daha şiddetli (çifte kesinlik) bir etkiye sahip olma şansı vardır. Ağda 14.000.000'dan fazla ETH hisselenmişken ve ETH başına temsili fiyat 1.000$ iken, bu saldırıları gerçekleştirmenin asgari maliyeti `1000 x 14.000.000 x 0.33 = $4,620,000,000`'dır. Saldırgan bu parayı, cezalandırılma ve ağın dışına konulma ile kaybedebilir. Tekrar saldırmak için, (yeniden) hissenin >%33'ünü biriktirmeleri ve (yeniden) yakmaları gerekir. Ağa yönelik her saldırı girişimi (ETH başına 1000$ ve hisselenmiş 14M ETH için) >4,6 milyar dolara mal olacaktır. Saldırgan da bunlar cezalandırıldığında ağın dışına konulur ve tekrar katılım için aktivasyon sırasına girmek zorundadır. Bu, tekrarlanan bir saldırının oranının yalnızca saldırganın toplam hissenin >%33'ünü biriktirme oranıyla değil, aynı zamanda tüm doğrulayıcılarını ağa dahil etmesinin ne kadar sürdüğüyle de sınırlı olduğu anlamına gelir. Saldırgan her saldırdığında daha fakirleşir ve topluluğun geri kalanı, tedarik şoku sayesinde daha zenginleşir. Diğer saldırılar, %51 saldırısı veya toplam hissenin %66'sı ile kesinlik geri çevirmesi gibi, çok miktarda daha fazla ETH gerektirir ve saldırgan için çok daha masraflıdır. -İş ispatı ile karşılaştırıldığında. İş ispatlı Ethereum'a saldırı başlatmanın maliyeti ağın toplam karma oranının >%50'sine sürekli sahip olmanın maliyeti kadar tutar. Bu durum, sürekli olarak iş ispatı çözümlerini hesaplamak için diğer madencileri geride bırakacak yeterli hesaplama gücüne sahip donanımın ve işletme maliyetlerinin toplamı anlamına geliyor. Ethereum'da genellikle ASIC'ler yerine GPU'lar kullanılarak madencilik yapıldı, bu da maliyeti düşük tuttu (ancak Ethereum iş ispatı üzerinde devam etseydi, ASIC madenciliği daha popüler hale gelebilirdi). Bir saldırganın iş ispatı temelli bir Ethereum ağına saldırmak için çok miktarda donanım satın alması ve işletmesi için elektrik ödemesi gerekebilir, ancak toplam maliyet, bir saldırı başlatmak için yeterli miktarda ETH biriktirmek için gereken maliyetten daha düşük olacaktır. İş ispatı, hisse ispatına dayalı bir ağda %51 saldırısı [ gerçekleştirmek, yaklaşık 20 kat daha az maliyetlidir](https://youtu.be/1m12zgJ42dI?t=1562). Eğer saldırı tespit edilirse ve zincirdeki değişiklikleri kaldırmak için sert bir çatallanma gerçekleşirse, saldırgan aynı donanımı tekrar tekrar kullanarak yeni çatalı da hedef alabilir. +İş ispatı ile karşılaştırıldığında. İş ispatı Ethereum'a bir saldırı başlatmanın maliyeti, toplam ağ hash oranının >%50'sine sürekli olarak sahip olmanın maliyetiydi. Bu durum, sürekli olarak iş ispatı çözümlerini hesaplamak için diğer madencileri geride bırakacak yeterli hesaplama gücüne sahip donanımın ve işletme maliyetlerinin toplamı anlamına geliyor. Ethereum'da genellikle ASIC'ler yerine GPU'lar kullanılarak madencilik yapıldı, bu da maliyeti düşük tuttu (ancak Ethereum iş ispatı üzerinde devam etseydi, ASIC madenciliği daha popüler hale gelebilirdi). Bir saldırganın iş ispatı temelli bir Ethereum ağına saldırmak için çok miktarda donanım satın alması ve işletmesi için elektrik ödemesi gerekebilir, ancak toplam maliyet, bir saldırı başlatmak için yeterli miktarda ETH biriktirmek için gereken maliyetten daha düşük olacaktır. Bir %51 saldırısı, iş ispatında hisse ispatına göre ~[20 kat daha az](https://youtu.be/1m12zgJ42dI?t=1562) maliyetlidir. Eğer saldırı tespit edilirse ve zincirdeki değişiklikleri kaldırmak için sert bir çatallanma gerçekleşirse, saldırgan aynı donanımı tekrar tekrar kullanarak yeni çatalı da hedef alabilir. ### Karmaşıklık {#complexity} @@ -36,7 +36,7 @@ Hisse ispatı mutabakat mantığını güvenli şekilde geliştirmek ve denemek Hisse ispatının, iş ispatından daha karmaşık olması daha fazla potasiyel saldırı vektörünün olacağı anlamına gelir. İstemcileri bağlayan eşler arası bir ağ yerine her biri ayrı bir protokolü işleyen iki tane ağ vardır. Her bir yuvada blok önerecek özel doğrulayıcının önceden seçilmişliğine sahip olmak fazla miktarda ağ trafiğinin bu özel doğrulayıcıyı çevrimdışı yakaladığında devireceği hizmet reddi potansiyelini yaratır. -Saldırganların, bloklarını veya tasdiklerini dikkatli bir şekilde zamanlamaları da mümkündür; böylece dürüst ağın belirli bir yüzdesi tarafından alınırlar ve bu kişilerin belirli şekillerde oy vermelerine etki ederler. Son olarak, saldırgan hisselemek için yeterli ETH biriktirebilir ve mutabakat mekanizmasını domine edebilir. Her bir saldırı [ vektörünün ilişkilendirilmiş savunmaları bulunsa da](/developers/docs/consensus-mechanisms/pos/attack-and-defense), iş ispatı altında savunma amacıyla var olmazlar. +Saldırganların, bloklarını veya tasdiklerini dikkatli bir şekilde zamanlamaları da mümkündür; böylece dürüst ağın belirli bir yüzdesi tarafından alınırlar ve bu kişilerin belirli şekillerde oy vermelerine etki ederler. Son olarak, saldırgan hisselemek için yeterli ETH biriktirebilir ve mutabakat mekanizmasını domine edebilir. Bu [saldırı vektörlerinin her birinin ilişkili savunmaları olsa da](/developers/docs/consensus-mechanisms/pos/attack-and-defense), iş ispatı altında savunulmak için mevcut değillerdir. ## Merkeziyetsizlik {#decentralization} @@ -52,18 +52,18 @@ Hisse ispatı blok zinciri güvence altına almanın karbon açısından ucuz yo [Ethereum'un enerji tüketimi hakkında daha fazlası](/energy-consumption) -## Basım {#issuance} +## İhraç {#issuance} Hisse ispatı Ethereum, iş isparı Ethereum'dan çok daha az coin basımı yaparak güvenliğini karşılayabilir çünkü doğrulayıcıların yüksek elektrik ücretleri ödemesi gerekmez. Sonuç olarak, yüksek miktarda ETH yakıldığında ETH enflasyonunu azaltabilir veya hatta deflasyona neden olabilir. Düşük enflasyon seviyeleri Ethereum'un güvenliğinin iş ispatındakinden daha ucuz olduğu anlamına gelir. -## Görsel olarak öğrenmeyi mi tercih ediyorsunuz? {#visual-learner} +## Görerek öğrenmeyi mi tercih ediyorsunuz? {#visual-learner} Justin Drake'in hisse ispatının iş ispatına göre avantajlarını açıklamasını izleyin: -## Daha fazla bilgi {#further-reading} +## Daha fazla kaynak {#further-reading} - [Vitalik'in hisse ispatı tasarım felsefesi](https://medium.com/@VitalikButerin/a-proof-of-stake-design-philosophy-506585978d51) - [Vitalik'in hisse ispatı SSS'leri](https://vitalik.eth.limo/general/2017/12/31/pos_faq.html#what-is-proof-of-stake) -- [Hisse ispatı ve iş ispatının "basitçe açıklanmış" videosu](https://www.youtube.com/watch?v=M3EFi_POhps) +- [PoS ve PoW hakkında "Basitçe Açıklanmış" videosu](https://www.youtube.com/watch?v=M3EFi_POhps) diff --git a/public/content/translations/tr/developers/docs/consensus-mechanisms/pos/rewards-and-penalties/index.md b/public/content/translations/tr/developers/docs/consensus-mechanisms/pos/rewards-and-penalties/index.md index dc63dfce7aa..651ead67d41 100644 --- a/public/content/translations/tr/developers/docs/consensus-mechanisms/pos/rewards-and-penalties/index.md +++ b/public/content/translations/tr/developers/docs/consensus-mechanisms/pos/rewards-and-penalties/index.md @@ -1,6 +1,6 @@ --- -title: Hisse ispatı ödülleri ve cezaları -description: Hisse ispatı Ethereum'da protokol içi teşvikler hakkında bilgi edinin. +title: "Hisse ispatı ödülleri ve cezaları" +description: "Hisse ispatı Ethereum'da protokol içi teşvikler hakkında bilgi edinin." lang: tr --- @@ -18,51 +18,51 @@ Daha fazla ayrıntı için okumaya devam edin... ### Ödüller {#rewards} -Doğrulayıcılar diğer doğrulayıcıların çoğunluğu ile uyumlu oylar verdiklerinde, bloklar önerdiklerinde ve senkronizasyon kurullarına katıldıklarında ödüller alırlar. Her bir dönemdeki ödüllerin değeri `base_reward` ile hesaplanır. Bu diğer ödüllerin hesaplandığı ana birimdir. `base_reward` bir dönem altındaki ideal şartlar altında bir doğrulayıcı tarafından alınan ortalama ödülü temsil etmektedir. Bu, doğrulayıcının geçerli bakiyesi ve toplam doğrulayıcı sayısından yola çıkılarak şu şekilde hesaplanır: +Doğrulayıcılar diğer doğrulayıcıların çoğunluğu ile uyumlu oylar verdiklerinde, bloklar önerdiklerinde ve senkronizasyon kurullarına katıldıklarında ödüller alırlar. Her dönemdeki ödüllerin değeri bir `base_reward`'dan hesaplanır. Bu diğer ödüllerin hesaplandığı ana birimdir. `base_reward`, bir doğrulayıcının dönem başına optimal koşullar altında aldığı ortalama ödülü temsil eder. Bu, doğrulayıcının geçerli bakiyesi ve toplam doğrulayıcı sayısından yola çıkılarak şu şekilde hesaplanır: ``` base_reward = effective_balance * (base_reward_factor / (base_rewards_per_epoch * sqrt(sum(active_balance)))) ``` -Burada `base_reward_factor` 64, `base_rewards_per_epoch` 4 ve `sum(active balance)` diğer tüm doğrulayıcılar tarafından hisselenmiş toplam ether miktarıdır. +Burada `base_reward_factor` 64, `base_rewards_per_epoch` 4'tür ve `sum(active balance)` tüm aktif doğrulayıcılar genelindeki toplam stake edilmiş ether'dir. -Bu ana ödülün doğrulayıcının geçerli bakiyesi ile doğru orantılı ve ağdaki doğrulayıcı sayısı ile ters orantılı olduğu anlamına gelir. Daha fazla doğrulayıcı olduğunda, genel olarak çıkarılan miktar artar (`sqrt(N)` olarak), ancak başına düşen her bir doğrulayıcı için `base_reward` daha küçük olur (`1/sqrt(N)` olarak). Bu faktörler bir hisseleme düğümünün APR'sini etkiler. Bunun mantıklı bir açıklamasını [Vitalik'in notlarında](https://notes.ethereum.org/@vbuterin/rkhCgQteN?type=view#Base-rewards) okuyabilirsiniz. +Bu ana ödülün doğrulayıcının geçerli bakiyesi ile doğru orantılı ve ağdaki doğrulayıcı sayısı ile ters orantılı olduğu anlamına gelir. Doğrulayıcı sayısı ne kadar fazlaysa, genel ihraç o kadar artar (`sqrt(N)` olarak) ancak doğrulayıcı başına düşen `base_reward` o kadar azalır (`1/sqrt(N)` olarak). Bu faktörler bir hisseleme düğümünün APR'sini etkiler. Bunun gerekçesini [Vitalik'in notlarında](https://notes.ethereum.org/@vbuterin/rkhCgQteN?type=view#Base-rewards) okuyun. Sonrasında toplam ödül her bir bileşenin toplam ödüle ne kadar eklediğini belirten bir ağırlığa sahip olduğu beş bileşenin toplamı olarak hesaplanır. Bileşenler şunlardır: ``` -1. source vote: the validator has made a timely vote for the correct source checkpoint -2. target vote: the validator has made a timely vote for the correct target checkpoint -3. head vote: the validator has made a timely vote for the correct head block -4. sync committee reward: the validator has participated in a sync committee -5. proposer reward: the validator has proposed a block in the correct slot +1. kaynak oyu: doğrulayıcı, doğru kaynak kontrol noktası için zamanında oy vermiştir +2. hedef oyu: doğrulayıcı, doğru hedef kontrol noktası için zamanında oy vermiştir +3. baş oyu: doğrulayıcı, doğru baş blok için zamanında oy vermiştir +4. senkronizasyon kurulu ödülü: doğrulayıcı bir senkronizasyon kuruluna katılmıştır +5. öneren ödülü: doğrulayıcı doğru yuvada bir blok önermiştir ``` Her bileşenin ağırlığı şunlardır: ``` -TIMELY_SOURCE_WEIGHT uint64(14) -TIMELY_TARGET_WEIGHT uint64(26) -TIMELY_HEAD_WEIGHT uint64(14) -SYNC_REWARD_WEIGHT uint64(2) -PROPOSER_WEIGHT uint64(8) +TIMELY_SOURCE_WEIGHT uint64(14) +TIMELY_TARGET_WEIGHT uint64(26) +TIMELY_HEAD_WEIGHT uint64(14) +SYNC_REWARD_WEIGHT uint64(2) +PROPOSER_WEIGHT uint64(8) ``` -Bu bileşenin toplamı 64'tür. Toplam uygulanabilir ağırlıklarının toplamının 64'e bölümü olarak hesaplanır. Zamanında kaynak, hedef ve baş oyları vermiş olan, bir blok önermiş olan ve bir senkronizasyon kuruluna katılmış olan bir doğrulayıcı `64/64 * base_reward == base_reward` alabilir. Ancak, bir doğrulayıcı normal olarak bir blok önericisi değildir, yani alabilecekleri maksimum ödül `64-8 /64 * base_reward == 7/8 * base_reward` olacaktır. Ne blok önericisi ne de bir senkronizasyon kurulunda olmayan doğrulayıcılar `64-8-2 / 64 * base_reward == 6.75/8 * base_reward` alabilir. +Bu bileşenin toplamı 64'tür. Toplam uygulanabilir ağırlıklarının toplamının 64'e bölümü olarak hesaplanır. Zamanında kaynak, hedef ve baş oyları veren, bir blok öneren ve bir senkronizasyon kuruluna katılan bir doğrulayıcı `64/64 * base_reward == base_reward` alabilir. Ancak bir doğrulayıcı genellikle blok önericisi değildir, bu nedenle alabileceği maksimum ödül `64-8 /64 * base_reward == 7/8 * base_reward` olur. Ne blok önericisi ne de bir senkronizasyon kurulunda olan doğrulayıcılar `64-8-2 / 64 * base_reward == 6.75/8 * base_reward` alabilir. -Hızlı tasdikleri teşvik etmek için ek bir ödül eklenmiştir. Bu `inclusion_delay_reward` olmaktadır. Bu, `base_reward` ile çarpılan `1/delay` şeklinde hesaplanan bir değere sahiptir, burada `delay`, blok önerisinin ve tasdiklemenin ayrıldığı yuva sayısını ifade eder. Örnek olarak, tasdik eğer ki blok önerisinin bir yuvası içinde verilirse tasdikleyici `base_reward * 1/1 == base_reward` alır. Tasdik bir sonraki yuvada gelirse, tasdikleyen `base_reward*1/2` alır ve böyle devam eder. +Hızlı tasdikleri teşvik etmek için ek bir ödül eklenmiştir. Bu, `inclusion_delay_reward`'dır. Bunun değeri, `base_reward`'ın `1/delay` ile çarpımına eşittir; burada `delay`, blok önerisi ile tasdikleme arasındaki yuva sayısıdır. Örneğin, eğer tasdikleme blok önerisinden sonraki bir yuva içinde gönderilirse, tasdikleyici `base_reward * 1/1 == base_reward` alır. Tasdikleme bir sonraki yuvada gelirse, tasdikleyen `base_reward * 1/2` alır ve bu şekilde devam eder. -Blok önericileri bloka dahil edilen ** her geçerli tasdik** için `8 / 64 * base_reward` almaktadır, yani ödülün gerçek değeri tasdik eden doğrulayıcıların sayısına göre ölçeklenir. Blok önericileri ayrıca önerdikleri blokta diğer doğrulayıcılar tarafından kötü davranışların kanıtını ekleyerek de ödüllerini artırabilirler. Bu ödüller doğrulayıcı dürüstlüğünü destekleyen "havuçlar"dır. Kesimi dahil eden bir blok önericisi `slashed_validators_effective_balance/512` ile ödüllendirilecektir. +Blok önericileri, bloğa dahil edilen **her geçerli tasdikleme** için `8 / 64 * base_reward` alırlar, bu nedenle ödülün gerçek değeri, tasdikleyen doğrulayıcıların sayısına göre ölçeklenir. Blok önericileri ayrıca önerdikleri blokta diğer doğrulayıcılar tarafından kötü davranışların kanıtını ekleyerek de ödüllerini artırabilirler. Bu ödüller doğrulayıcı dürüstlüğünü destekleyen "havuçlar"dır. Kesinti içeren bir blok önericisi, `slashed_validators_effective_balance / 512` ile ödüllendirilir. ### Cezalar {#penalties} Şimdiye kadar mükemmel davranışlar sergileyen doğrulayıcıları düşündük ama zamanında baş, kaynak veya hedef oyları vermeyen veya bunu aşırı yavaş şekilde yapan doğrulayıcılara ne olacak? -Hedef ve kaynak oylamalarını kaçırmanın cezası tasdik edicinin onları verseydi kazanacağı ödüllere eşittir. Bu ödülün bakiyelerine eklenmesi yerine, eşit bir miktarın bakiyelerinden silindiği anlamına gelir. Baş oylamasını kaçırma için bir ceza yoktur (yani baş oylamaları sadece ödüllendilir, asla cezalandırılmaz). `inclusion_delay` ile ilgili herhangi bir ceza yoktur - ödül sadece doğrulayıcının bakiyesine eklenmeyecektir. Ayrıca blok önermekte başarısız olunması için de bir ceza yoktur. +Hedef ve kaynak oylamalarını kaçırmanın cezası tasdik edicinin onları verseydi kazanacağı ödüllere eşittir. Bu ödülün bakiyelerine eklenmesi yerine, eşit bir miktarın bakiyelerinden silindiği anlamına gelir. Baş oylamasını kaçırmanın bir cezası yoktur (yani baş oyları sadece ödüllendirilir, asla cezalandırılmaz). `inclusion_delay` ile ilişkili bir ceza yoktur; ödül yalnızca doğrulayıcının bakiyesine eklenmez. Ayrıca blok önermekte başarısız olunması için de bir ceza yoktur. -[Mutabakat özelliklerinde](https://github.com/ethereum/consensus-specs/blob/dev/specs/altair/beacon-chain.md) ödüller ve cezalar hakkında daha fazlasını okuyun. Ödüller ve cezalar Bellatrix yükseltmesinde değiştirilmiştir - Danny Ryan ve Vitalik'in bunu [Peep an EIP videosunda](https://www.youtube.com/watch?v=iaAEGs1DMgQ) tartışmasını izleyin. +Ödüller ve cezalar hakkında [mutabakat spesifikasyonlarında](https://github.com/ethereum/consensus-specs/blob/dev/specs/altair/beacon-chain.md) daha fazlasını okuyun. Ödüller ve cezalar Bellatrix yükseltmesinde ayarlandı - Danny Ryan ve Vitalik'in bunu tartıştığı [Peep an EIP videosunu](https://www.youtube.com/watch?v=iaAEGs1DMgQ) izleyin. -## Ceza {#slashing} +## Kesinti {#slashing} Ceza bir doğrulayıcının ağdan zorla çıkarılmasına ve buna bağlantılı olarak hisselenmiş etherlerinin kaybına sebep olan daha sert bir eylemdir. Bir doğrulayıcının kesilebileceği, hepsinin ya aldatıcı öneri ya da blok tasdikine dayandığı üç yol vardır: @@ -70,7 +70,7 @@ Ceza bir doğrulayıcının ağdan zorla çıkarılmasına ve buna bağlantılı - Bir başkasını "saran" bir bloku tasdik etmek (etkili bir şekilde geçmişi değiştirir) - Aynı blok için iki adayı tasdik edip "çifte oy kullanarak" -Eğer bu hareketler tespit edilirse, doğrulayıcı kesilir. Bu hisselenmiş etherlerinin 1/32'sinin (maksimum 1 ethere kadar) anında yakılması ve sonrasında 36 günlük kaldırma sürecinin başlaması anlamına gelir. Bu kaldırma sürecinde doğrulayıcının hissesi zamanla akıp dereceli olarak akıp gider. Orta noktada (18. Gün) kesim etkinliğinden 36 gün öncesine kadarki dönemde cezalandırılan tüm doğrulayıcıların toplam hisselenmiş ether miktarı ile ölçeklenen bir büyüklüğü olan ek bir ceza uygulanır. Bu kesilen doğrulayıcı sayısı arttıkça, cezanın büyüklüğünün artması anlamına gelir. Maksimum ceza tüm cezalandırılan doğrulayıcıların toplam etkili bakiyesidir (yani eğer çok fazla cezalandırılan doğrulayıcı olur ise tüm hisselerini kaybedebilirler). Diğer bir yandan, tekil, izole bir ceza etkinliği doğrulayıcının hissesinin sadece küçük bir kısmını yakar. Cezalandırılan doğrulayıcı sayısı ile ölçeklendirilen bu orta nokta cezasına "korelasyon cezası" denir. +Eğer bu hareketler tespit edilirse, doğrulayıcı kesilir. Bu, 32 ETH'lik bir doğrulayıcı için 0,0078125'in (aktif bakiye ile doğrusal olarak ölçeklenir) hemen yakıldığı ve ardından 36 günlük bir uzaklaştırma döneminin başladığı anlamına gelir. Bu kaldırma sürecinde doğrulayıcının hissesi zamanla akıp dereceli olarak akıp gider. Orta noktada (18. Gün) kesim etkinliğinden 36 gün öncesine kadarki dönemde cezalandırılan tüm doğrulayıcıların toplam hisselenmiş ether miktarı ile ölçeklenen bir büyüklüğü olan ek bir ceza uygulanır. Bu kesilen doğrulayıcı sayısı arttıkça, cezanın büyüklüğünün artması anlamına gelir. Maksimum kesinti, kesintiye uğrayan tüm doğrulayıcıların tam efektif bakiyesidir (yani, çok sayıda doğrulayıcı kesintiye uğrarsa tüm kilitlerini kaybedebilirler). Diğer bir yandan, tekil, izole bir ceza etkinliği doğrulayıcının hissesinin sadece küçük bir kısmını yakar. Cezalandırılan doğrulayıcı sayısı ile ölçeklendirilen bu orta nokta cezasına "korelasyon cezası" denir. ## Hareketsizlik sızıntısı {#inactivity-leak} @@ -78,12 +78,13 @@ Eğer fikir birliği katmanı kesinleşmeden dört dönemden uzun süre giderse, Mutabakat mekanizmasının ödül, ceza ve ceza mekanizması tekil doğrulayıcıları doğru davranmaya yönlendirir. Ancak, bu tasarım seçimlerinden doğrulayıcıların birden çok istemci arasında eşit biçimde dağılımını güçlü bir şekilde teşvik eden ve tekil istemci baskınlığından güçlü bir şekilde caydırmaya çalışan bir sistem ortaya çıkmıştır. -## Daha fazla okuma {#further-reading} +## Daha fazla kaynak {#further-reading} -- [Ethereum'u Yükseltmek: Teşvik katmanı](https://eth2book.info/altair/part2/incentives) -- [Ethereum'un hibrit Casper protokolünde teşvikler](https://arxiv.org/pdf/1903.04205.pdf) -- [Açıklamalı özellikler, Vitalik](https://github.com/ethereum/annotated-spec/blob/master/phase0/beacon-chain.md#rewards-and-penalties-1) -- [Eth2 Cezadan Kaçınma Tüyoları](https://medium.com/prysmatic-labs/eth2-slashing-prevention-tips-f6faa5025f50) +- [Ethereum'u Yükseltme: Teşvik katmanı](https://eth2book.info/altair/part2/incentives) +- [Ethereum'un hibrit Casper protokolündeki teşvikler](https://arxiv.org/pdf/1903.04205.pdf) +- [Vitalik'in açıklamalı spesifikasyonu](https://github.com/ethereum/annotated-spec/blob/master/phase0/beacon-chain.md#rewards-and-penalties-1) +- [Eth2 Kesinti Önleme İpuçları](https://medium.com/prysmatic-labs/eth2-slashing-prevention-tips-f6faa5025f50) +- [EIP-7251 kapsamındaki kesinti cezalarının analizi](https://ethresear.ch/t/slashing-penalty-analysis-eip-7251/16509) _Kaynaklar_ diff --git a/public/content/translations/tr/developers/docs/consensus-mechanisms/pos/weak-subjectivity/index.md b/public/content/translations/tr/developers/docs/consensus-mechanisms/pos/weak-subjectivity/index.md index fe09e4590d2..d3e214b2962 100644 --- a/public/content/translations/tr/developers/docs/consensus-mechanisms/pos/weak-subjectivity/index.md +++ b/public/content/translations/tr/developers/docs/consensus-mechanisms/pos/weak-subjectivity/index.md @@ -1,22 +1,22 @@ --- -title: Zayıf öznellik -description: Zayıf öznelliğin ve PoS Ethereum'daki rolünün açıklaması. +title: "Zayıf öznellik" +description: "Zayıf öznelliğin ve PoS Ethereum'daki rolünün açıklaması." lang: tr --- Blok zincirlerinde öznellik, mevcut durum üzerinde anlaşmak için sosyal bilgilere güvenmeyi ifade eder. Ağ üzerindeki diğer eşlerden toplanan bilgilere göre seçilen, birden fazla geçerli çatal olabilir. Bunun tersi, tüm düğümlerin kodlanmış kurallarını uygulayarak zorunlu olarak üzerinde anlaşmaya varacağı tek bir olası geçerli zincirin olduğu zincirlere atıfta bulunan nesnelliktir. Zayıf öznellik olarak bilinen üçüncü bir durum da vardır. Bu, bazı ilk bilgi tohumları sosyal olarak alındıktan sonra nesnel olarak ilerleyebilen bir zinciri ifade eder. -## Ön koşullar {#prerequisites} +## Ön Koşullar {#prerequisites} -Bu sayfayı anlamak için önce [hisse kanıtı](/developers/docs/consensus-mechanisms/pos/) temellerini anlamak gerekir. +Bu sayfayı anlamak için öncelikle [hisse ispatı](/developers/docs/consensus-mechanisms/pos/) mekanizmasının temellerini anlamanız gerekir. ## Zayıf öznellik hangi sorunları çözer? {#problems-ws-solves} Hisse kanıtı, blok zincirlerinin özünde öznellik vardır, çünkü çoklu çatallardan doğru zinciri seçmek, geçmiş oyları sayarak yapılır. Bu, blok zincirini, zincire çok erken katılan düğümlerin, kendi avantajları için çok daha sonra serbest bırakacakları, alternatif bir çatal tuttuğu uzun menzilli saldırılar da dahil olmak üzere çeşitli saldırı vektörlerine maruz bırakır. Alternatif olarak, onaylayıcıların %33'ü hisselerini geri çeker ancak blokları onaylamaya ve üretmeye devam ederse, kurallı zincirle çelişen alternatif bir çatal oluşturabilirler. Uzun süredir çevrimdışı olan yeni düğümler veya düğümler, saldıran bu doğrulayıcıların paralarını geri çektiğinin farkında olmayabilir, bu nedenle saldırganlar onları yanlış bir zinciri takip etmeleri için kandırabilir. Ethereum, mekanizmanın öznel yönlerini azaltan kısıtlamalar getirerek bu saldırı vektörlerini çözebilir - ve dolayısıyla varsayımlara güvenir - minimuma indirir. -## Zayıf öznellik kontrol noktası {#ws-checkpoints} +## Zayıf öznellik kontrol noktaları {#ws-checkpoints} -Zayıf öznellik, "zayıf öznellik kontrol noktaları" kullanılarak hisse kanıtı Ethereum'da uygulanır. Bunlar, ağdaki tüm düğümlerin kanonik zincire ait olduğu konusunda hemfikir olduğu durum kökleridir. Blok zincirindeki oluşum konumunda oturmamaları dışında, oluşum bloklarına aynı "evrensel gerçek" amacına hizmet ederler. Çatal seçim algoritması, bu kontrol noktasında tanımlanan blok zinciri durumunun doğru olduğuna ve bu noktadan itibaren zinciri bağımsız ve nesnel olarak doğruladığına güvenir. Zayıf öznellik kontrol noktalarından önce bulunan bloklar değiştirilemediğinden, kontrol noktaları "geri dönüş limitleri" olarak hareket eder. Bu, uzun menzilli çatalları mekanizma tasarımının bir parçası olarak ve geçersiz tanımlayarak uzun menzilli saldırıları zayıflatır. Zayıf öznellik kontrol noktalarının, doğrulayıcının çekilme süresinden daha küçük bir mesafeyle ayrılmasını sağlamak, zinciri çatallayan bir doğrulayıcının, hisselerini geri çekmeden önce en azından bir miktar eşik miktarının kesilmesini ve yeni girenlerin, hissesi geri çekilen doğrulayıcılar tarafından yanlış çatallara kandırılamamasını sağlar. +Zayıf öznellik, "zayıf öznellik kontrol noktaları" kullanılarak hisse kanıtı Ethereum'da uygulanır. Bunlar, ağdaki tüm düğümlerin kanonik zincire ait olduğu konusunda hemfikir olduğu durum kökleridir. Blokzincirdeki başlangıç konumunda yer almamaları dışında, başlangıç bloklarıyla aynı "evrensel gerçek" amacına hizmet ederler. Çatal seçim algoritması, bu kontrol noktasında tanımlanan blok zinciri durumunun doğru olduğuna ve bu noktadan itibaren zinciri bağımsız ve nesnel olarak doğruladığına güvenir. Zayıf öznellik kontrol noktalarından önce bulunan bloklar değiştirilemediğinden, kontrol noktaları "geri dönüş limitleri" olarak hareket eder. Bu, uzun menzilli çatalları mekanizma tasarımının bir parçası olarak ve geçersiz tanımlayarak uzun menzilli saldırıları zayıflatır. Zayıf öznellik kontrol noktalarının, doğrulayıcının çekilme süresinden daha küçük bir mesafeyle ayrılmasını sağlamak, zinciri çatallayan bir doğrulayıcının, hisselerini geri çekmeden önce en azından bir miktar eşik miktarının kesilmesini ve yeni girenlerin, hissesi geri çekilen doğrulayıcılar tarafından yanlış çatallara kandırılamamasını sağlar. ## Zayıf öznellik kontrol noktaları ve kesinleşmiş bloklar arasındaki fark {#difference-between-ws-and-finalized-blocks} @@ -30,10 +30,10 @@ Zayıf bir öznellik kontrol noktası, istemci yazılımının bir parçası ola Son olarak, diğer düğümlerden kontrol noktaları talep edilebilir; belki de tam bir düğüm çalıştıran başka bir Ethereum kullanıcısı, doğrulayıcıların daha sonra bir blok gezgininden gelen verilere karşı doğrulayabileceği bir kontrol noktası sağlayabilir. Genel olarak, zayıf bir öznellik kontrol noktası sağlayıcısına güvenmek, istemci geliştiricilere güvenmek kadar sorunlu olarak kabul edilebilir. Bütünsel güven gerekliliği azdır. Bu hususların yalnızca, doğrulayıcıların çoğunluğunun blok zincirinin alternatif bir çatalını üretmek için bir araya gelmesi gibi pek olası olmayan bir olayda önemli hale geldiğini belirtmek önemlidir. Başka herhangi bir koşulda, seçim yapabileceğiniz yalnızca bir Ethereum zinciri vardır. -## Daha Fazla Okuma {#further-reading} +## Ek Okumalar {#further-reading} - [Eth2'de zayıf öznellik](https://notes.ethereum.org/@adiasg/weak-subjectvity-eth2) - [Vitalik: Zayıf öznelliği sevmeyi nasıl öğrendim](https://blog.ethereum.org/2014/11/25/proof-stake-learned-love-weak-subjectivity/) -- [Zayıf öznellik (Teku dökümanları)](https://docs.teku.consensys.net/en/latest/Concepts/Weak-Subjectivity/) -- [Aşama 0 Zayıf öznellik rehberi](https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/weak-subjectivity.md) +- [Zayıf öznellik (Teku belgeleri)](https://docs.teku.consensys.io/concepts/weak-subjectivity) +- [Aşama-0 Zayıf öznellik kılavuzu](https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/weak-subjectivity.md) - [Ethereum 2.0'da zayıf öznellik analizi](https://github.com/runtimeverification/beacon-chain-verification/blob/master/weak-subjectivity/weak-subjectivity-analysis.pdf) diff --git a/public/content/translations/tr/developers/docs/consensus-mechanisms/pos/withdrawal-credentials/index.md b/public/content/translations/tr/developers/docs/consensus-mechanisms/pos/withdrawal-credentials/index.md new file mode 100644 index 00000000000..294257ca332 --- /dev/null +++ b/public/content/translations/tr/developers/docs/consensus-mechanisms/pos/withdrawal-credentials/index.md @@ -0,0 +1,64 @@ +--- +title: "Para çekme kimlik bilgileri" +description: "Doğrulayıcı çekim kimlik bilgisi türlerinin (0x00, 0x01, 0x02) ve bunların Ethereum paydaşları için sonuçlarının bir açıklaması." +lang: tr +--- + +Her doğrulayıcının, hisselenmiş ETH'lerinin ve ödüllerinin nasıl ve nereye çekilebileceğini belirleyen bir **çekim kimlik bilgisi** vardır. Kimlik bilgisi türü ilk bayt ile belirtilir: `0x00`, `0x01` veya `0x02`. Bu türleri anlamak, hisselerini yöneten doğrulayıcılar için önemlidir. + +## 0x00: Shapella öncesi kimlik bilgileri {#0x00-credentials} + +`0x00` türü, Shapella yükseltmesinden (Nisan 2023) önceki orijinal çekim kimlik bilgisi biçimidir. Bu kimlik bilgisi türüne sahip doğrulayıcıların ayarlanmış bir yürütme katmanı çekim adresi yoktur, bu da fonlarının mutabakat katmanında kilitli kaldığı anlamına gelir. Hâlâ `0x00` kimlik bilgileriniz varsa, herhangi bir çekim işlemi yapabilmek için `0x01` veya `0x02` sürümüne yükseltmeniz gerekir. + +## 0x01: Eski çekim kimlik bilgileri {#0x01-credentials} + +`0x01` türü, Shapella yükseltmesiyle tanıtıldı ve bir yürütme katmanı çekim adresi ayarlamak isteyen doğrulayıcılar için standart hâline geldi. `0x01` kimlik bilgileriyle: + +- 32 ETH üzerindeki herhangi bir bakiye, çekim adresinize **otomatik olarak aktarılır** +- Tam çıkışlar standart çıkış kuyruğundan geçer +- 32 ETH üzerindeki ödüller katlanarak birikemez; periyodik olarak dışarı aktarılırlar + +**Bazı doğrulayıcılar neden hâlâ 0x01 kullanıyor:** Daha basit ve alışıldık. Birçok doğrulayıcı Shapella'dan sonra para yatırdı ve zaten bu türe sahip. Fazla bakiyenin otomatik olarak çekilmesini isteyenler için de gayet iyi çalışıyor. + +**Neden tavsiye edilmiyor:** `0x01` ile 32 ETH üzerindeki ödülleri katlayarak biriktirme yeteneğini kaybedersiniz. Her bir fazlalık otomatik olarak çekilir, bu da doğrulayıcınızın kazanma potansiyelini sınırlar ve çekilen fonların ayrı olarak yönetilmesini gerektirir. + +## 0x02: Birikimli çekim kimlik bilgileri {#0x02-credentials} + +`0x02` türü, Pectra yükseltmesiyle tanıtıldı ve günümüzde doğrulayıcılar için **önerilen seçimdir**. `0x02` kimlik bilgilerine sahip doğrulayıcılar bazen "birikimli doğrulayıcılar" olarak adlandırılır. + +`0x02` kimlik bilgileriyle: + +- 32 ETH'nin üzerindeki ödüller, maksimum 2048 ETH'lik etkin bakiyeye ulaşana kadar 1 ETH'lik artışlarla **katlanarak birikir** +- Kısmi çekimler manuel olarak talep edilmelidir (otomatik aktarımlar yalnızca 2048 ETH eşiğinin üzerinde gerçekleşir) +- Doğrulayıcılar, birden fazla 32 ETH'lik doğrulayıcıyı tek bir daha yüksek bakiyeli doğrulayıcıda birleştirebilir +- Tam çıkışlar hâlâ standart çıkış kuyruğu aracılığıyla desteklenmektedir + +Hem kısmi para çekme hem de birleştirme işlemleri [Launchpad Doğrulayıcı Eylemleri](https://launchpad.ethereum.org/en/validator-actions) aracılığıyla gerçekleştirilebilir. + +**Doğrulayıcılar neden 0x02'yi tercih etmeli:** Biriktirme yoluyla daha iyi sermaye verimliliği, para çekme işlemlerinin ne zaman gerçekleşeceği üzerinde daha fazla kontrol ve doğrulayıcı birleştirmeyi destekler. Zamanla ödül biriktiren tek başına stake edenler için bu, etkin bakiyelerinin ve dolayısıyla ödüllerinin manuel müdahale olmadan 32 ETH'nin üzerine çıkabileceği anlamına gelir. + +**Önemli:** `0x01`'den `0x02`'ye dönüştürdükten sonra geri alamazsınız. + +Tip 2 kimlik bilgilerine dönüştürme ve MaxEB özelliği hakkında ayrıntılı bir kılavuz için [MaxEB açıklama sayfasına](/roadmap/pectra/maxeb/) bakın. + +## Hangisini seçmeliyim? {#what-should-i-pick} + +- **Yeni doğrulayıcılar:** `0x02`'yi seçin. Daha iyi biriktirme ve esneklik sunan modern standart budur. +- **Mevcut 0x01 doğrulayıcıları:** Ödüllerin 32 ETH'nin üzerinde birikmesini istiyorsanız veya doğrulayıcıları birleştirmeyi planlıyorsanız `0x02`'ye dönüştürmeyi düşünün. +- **Mevcut 0x00 doğrulayıcıları:** Hemen yükseltin; kimlik bilgilerinizi güncellemeden para çekemezsiniz. Önce `0x01`'e, ardından `0x02`'ye dönüştürmelisiniz. + +## Çekim kimlik bilgilerini yönetme araçları {#withdrawal-credential-tools} + +Çeşitli araçlar, kimlik bilgisi türleri arasında seçim yapmayı veya dönüştürmeyi destekler: + +- **[Ethereum Staking Launchpad](https://launchpad.ethereum.org/en/validator-actions)** - Kimlik bilgisi dönüştürmeleri ve birleştirmeleri de dâhil olmak üzere para yatırma ve doğrulayıcı yönetimi için resmî araç +- **[Pectra Staking Manager](https://pectrastaking.com)** - Dönüşümler ve birleştirme için wallet-connect destekli web kullanıcı arayüzü +- **[Pectra Validator Ops CLI Tool](https://github.com/Luganodes/Pectra-Batch-Contract)** - Toplu dönüşümler için komut satırı aracı +- **[Ethereal](https://github.com/wealdtech/ethereal)** - Doğrulayıcı yönetimi de dâhil olmak üzere Ethereum işlemleri için CLI aracı + +Birleştirme araçlarının tam listesi ve ayrıntılı dönüştürme talimatları için bkz. [MaxEB birleştirme araçları](/roadmap/pectra/maxeb/#consolidation-tooling). + +## Daha fazla kaynak {#further-reading} + +- [Hisse ispatı Ethereum'daki Anahtarlar](/developers/docs/consensus-mechanisms/pos/keys/) - Doğrulayıcı anahtarları ve bunların para çekme kimlik bilgileriyle nasıl ilişkili olduğu hakkında bilgi edinin +- [MaxEB](/roadmap/pectra/maxeb/) - Pectra yükseltmesi ve maksimum etkin bakiye özelliği hakkında ayrıntılı kılavuz diff --git a/public/content/translations/tr/developers/docs/consensus-mechanisms/pow/index.md b/public/content/translations/tr/developers/docs/consensus-mechanisms/pow/index.md index 65af633f1eb..aee3345dcf2 100644 --- a/public/content/translations/tr/developers/docs/consensus-mechanisms/pow/index.md +++ b/public/content/translations/tr/developers/docs/consensus-mechanisms/pow/index.md @@ -1,27 +1,27 @@ --- -title: İş ispatı (PoW) -description: İş ispatı mutabakat protokolünün ve Ethereum'daki rolünün bir açıklaması. +title: "İş ispatı (PoW)" +description: "İş ispatı mutabakat protokolünün ve Ethereum'daki rolünün bir açıklaması." lang: tr --- -Ethereum ağı, **[İş İspatı (PoW)](/developers/docs/consensus-mechanisms/pow)** kullanan bir uzlaşma mekanizmasıyla başladı. Bu durum, Ethereum ağının düğümler sisteminin Ethereum blok zincirine kaydedilen bütün bilgilerin ortak durumda anlaşmasına olanak tanıdı ve belirli ekonomik saldırı türlerini önledi. Ancak, Ethereum 2022'de iş ispatı mekanizmasını devre dışı bırakarak sonlandırdı ve bunun yerine [hisse ispatını](/developers/docs/consensus-mechanisms/pos) kullanmaya başladı. +Ethereum ağı, **[İş İspatı (PoW)](/developers/docs/consensus-mechanisms/pow)** içeren bir mutabakat mekanizması kullanarak başladı. Bu durum, Ethereum ağının düğümler sisteminin Ethereum blok zincirine kaydedilen bütün bilgilerin ortak durumda anlaşmasına olanak tanıdı ve belirli ekonomik saldırı türlerini önledi. Ancak Ethereum, 2022'de iş ispatını devre dışı bıraktı ve bunun yerine [hisse ispatını](/developers/docs/consensus-mechanisms/pos) kullanmaya başladı. - İş ispatı artık kullanımdan kaldırılmıştır. Ethereum artık mutabakat mekanizmasının bir parçası olan iş ispatını kullanmamaktadır. Bunun yerine hisse ispatı kullanılmaktadır. [Hisse ispatı](/developers/docs/consensus-mechanisms/pos/) ve [hisseleme](/staking/) hakkında daha fazla bilgi edinin. + İş ispatı artık kullanımdan kaldırılmıştır. Ethereum artık mutabakat mekanizmasının bir parçası olan iş ispatını kullanmamaktadır. Bunun yerine hisse ispatı kullanılmaktadır. [Hisse ispatı](/developers/docs/consensus-mechanisms/pos/) ve [hisseleme](/staking/) hakkında daha fazlasını okuyun. ## Ön Koşullar {#prerequisites} -Bu sayfayı daha iyi anlamak için, önce [işlemleri](/developers/docs/transactions/), [blokları](/developers/docs/blocks/) ve [mutabakat mekanizmalarını](/developers/docs/consensus-mechanisms/) okumanızı öneririz. +Bu sayfayı daha iyi anlamak için öncelikle [işlemler](/developers/docs/transactions/), [bloklar](/developers/docs/blocks/) ve [mutabakat mekanizmaları](/developers/docs/consensus-mechanisms/) hakkındaki kaynakları okumanızı tavsiye ediyoruz. ## İş ispatı (PoW) nedir? {#what-is-pow} -İş ispatı kullanan Nakamoto mutabakatı, merkeziyetsiz Ethereum ağının hesap bakiyeleri ve işlem sırası gibi şeyler üzerinde mutabakata varmasını (tüm düğünlerin aynı fikirde olmasını) sağlayan mekanizmadır. Bu kullanıcıların paralarını "iki kere harcamalarını" önlemiş ve Ethereum zincirine saldırı ve manipulasyonların muazzam derecede zor olmasını sağlamıştır. Bu güvenlik özellikleri artık bunun yerine [Gasper](/developers/docs/consensus-mechanisms/pos/gasper/) olarak bilinen mutabakat mekanizmasını kullanan hisse ispatı tarafından sağlanmaktadır. +İş ispatını kullanan Nakamoto mutabakatı, bir zamanlar merkeziyetsiz Ethereum ağının hesap bakiyeleri ve işlem sırası gibi konularda mutabakata varmasına (yani tüm düğümlerin hemfikir olmasına) olanak tanıyan mekanizmaydı. Bu kullanıcıların paralarını "iki kere harcamalarını" önlemiş ve Ethereum zincirine saldırı ve manipulasyonların muazzam derecede zor olmasını sağlamıştır. Bu güvenlik özellikleri artık, [Gasper](/developers/docs/consensus-mechanisms/pos/gasper/) olarak bilinen mutabakat mekanizmasını kullanan hisse ispatından gelmektedir. ## İş ispatı ve madencilik {#pow-and-mining} @@ -31,7 +31,7 @@ Iş ispatı, madencilerin iş ispatı blok zincirlerinde yaptıkları işin zorl ## Ethereum'un iş ispatı nasıl çalıştı? {#how-it-works} -Ethereum işlemleri bloklar halinde işlenir. Artık kullanımda olmayan Ethereum iş ispatındaki her bir blok, şunları içeriyordu: +Ethereum işlemleri bloklar hâlinde işlenir. Artık kullanımda olmayan Ethereum iş ispatındaki her bir blok, şunları içeriyordu: - blok zorluğu – örneğin: 3.324.092.183.262.715 - mixHash – örneğin: `0x44bca881b07a6a09f83b130798072441705d9a665c5ac8bdf2f39a3cdf3bee29` @@ -61,29 +61,29 @@ Kötü niyetli bir madencinin, kötü niyetli ve geçerli bloklar çıkarabilmes İş ispatı ayrıca sisteme yeni para birimi çıkartmaktan ve madencileri işi yapmaya teşvik etmekten de sorumluydu. -[Constantinople yükseltmesinden](/ethereum-forks/#constantinople) bu yana başarılı bir blok oluşturan madencilere, iki yeni basılmış Ether ve işlem ücretlerinin bir kısmı verilirdi. Ommer blokları da 1,75 Ether'i telafi etti. Ommer blokları, bir madenci tarafından pratik olarak yaklaşık aynı zamanda başka bir madencinin kurallı bloku oluşturmasıyla oluşturulan geçerli bloklardı ve bu blok en sonunda hangi zincirin üzerine ilkinin inşa edildiğine göre belirlendi. Ommer blokları genellikle ağ gecikmesi sebebiyle gerçekleşirdi. +[Constantinople yükseltmesinden](/ethereum-forks/#constantinople) bu yana, başarılı bir şekilde blok oluşturan madenciler, yeni basılmış iki ETH ve işlem ücretlerinin bir kısmıyla ödüllendiriliyordu. Ommer blokları da 1,75 Ether'i telafi etti. Ommer blokları, bir madenci tarafından pratik olarak yaklaşık aynı zamanda başka bir madencinin kurallı bloku oluşturmasıyla oluşturulan geçerli bloklardı ve bu blok en sonunda hangi zincirin üzerine ilkinin inşa edildiğine göre belirlendi. Ommer blokları genellikle ağ gecikmesi sebebiyle gerçekleşirdi. ## Kesinlik {#finality} Bir işlem, değişemeyen bir blokun parçası olduğunda Ethereum üzerinde bir "kesinliği" vardır. -Madenciler merkeziyetsiz bir şekilde çalıştıkları için, aynı anda iki geçerli blok çıkarılabiliyordu. Bu geçici bir çatal oluşturur. Zamanla, sıradaki bloklar kazılıp eklendikten sonra bu zincirlerden biri daha uzun hale gelmiş ve kabul edilen zincir haline gelmiştir. +Madenciler merkeziyetsiz bir şekilde çalıştıkları için, aynı anda iki geçerli blok çıkarılabiliyordu. Bu, geçici bir çatal oluşturur. Zamanla, sıradaki bloklar kazılıp eklendikten sonra bu zincirlerden biri daha uzun hale gelmiş ve kabul edilen zincir haline gelmiştir. -İşleri daha da karmaşıklaştıran şekilde, geçici çatalda reddedilen işlemler kabul edilen zincire dahil edilmemiş olabilir. Bu, tersine dönebileceği anlamına gelir. Dolayısıyla kesinlik, geri dönüşü olmayan bir işlemi düşünmeden önce beklemeniz gereken süreyi ifade eder. Önceki iş ispatı Ethereum'u altında; spesifik `N` bloku üzerine ne kadar fazla blok madenciliği yapılırsa `N`'deki yürütmelerin güvenilirliği o denli artar ve geri çevrilmezlerdi. Şimdi hisse ispatıyla kesinlik, olasılıktan ziyade blokun bir niteliği halinde kesindir. +İşleri daha da karmaşıklaştıran şekilde, geçici çatalda reddedilen işlemler kabul edilen zincire dahil edilmemiş olabilir. Bu, tersine dönebileceği anlamına gelir. Dolayısıyla kesinlik, bir işlemin tersine dönemeyeceğine kanaat getirmeden önce beklemeniz gereken süreyi ifade eder. Önceki iş ispatı Ethereum'unda, belirli bir `N` bloğunun üzerine ne kadar çok blok çıkarılırsa, `N` içindeki işlemlerin başarılı olduğuna ve geri alınmayacağına dair güven o kadar yüksek olurdu. Şimdi hisse ispatıyla kesinlik, olasılıktan ziyade blokun bir niteliği halinde kesindir. ## İş ispatı enerji kullanımı {#energy} -İş ispatıyla ilgili büyük bir eleştiri, iş ispatının ağı güvende tutması için gereken enerji miktarı hakkındadır. Güvenlik ve merkeziyetsizliği sürdürmek için is ispatındaki Ethereum, büyük miktarda eneji tüketti. Hisse ispatına geçmeden kısa süre önce Ethereum madencileri toplu olarak yaklaşık 70 TWh/yıl kadar enerji (18 Temmuz 2022'de [digiconomist](https://digiconomist.net/)'e göre Çek Cumhuriyeti ile neredeyse aynı) harcardı. +İş ispatıyla ilgili büyük bir eleştiri, iş ispatının ağı güvende tutması için gereken enerji miktarı hakkındadır. Güvenlik ve merkeziyetsizliği sürdürmek için is ispatındaki Ethereum, büyük miktarda eneji tüketti. Hisse ispatına geçmeden kısa bir süre önce, Ethereum madencileri toplu olarak yaklaşık 70 TWh/yıl tüketiyordu (18 Temmuz 2022'de [digiconomist](https://digiconomist.net/) verilerine göre bu, Çek Cumhuriyeti'nin tüketimiyle neredeyse aynıdır). -## Artıları ve eksileri {#pros-and-cons} +## Artı ve eksiler {#pros-and-cons} -| Artıları | Eksileri | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Emek ispatı tarafsızdır. Başlamak için ETH'ye ihtiyacınız yoktur ve blok ödülleri 0 ETH'den artı bakiyeye geçmenize izin verir. [Hisse ispatı](/developers/docs/consensus-mechanisms/pos/) ile başlamak için ETH'ye ihtiyacınız var. | İş ispatı çok fazla enerji kullandığı için çevreye zararlıdır. | -| İş ispatı, Bitcoin ve Ethereum'u uzun yıllar boyunca güvenli ve merkeziyetsiz hâlde tutan denenmiş ve test edilmiş bir mutabakat mekanizmasıdır. | Madencilik yapmak istiyorsanız, ihtiyacınız olan özel ekipman o kadar özeldir ki büyük bir yatırım yapmanız gerekmektedir. | -| Hisse ispatı ile karşılaştırıldığında, uygulanması nispeten kolaydır. | Artan bilgi işlem ihtiyacı nedeniyle, madencilik havuzları potansiyel olarak madencilik sektörüne hükmedebilir ve bu da merkezileşme ve güvenlik risklerine yol açabilir. | +| Artıları | Eksileri | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Emek ispatı tarafsızdır. Başlamak için ETH'ye ihtiyacınız yoktur ve blok ödülleri 0 ETH'den artı bakiyeye geçmenize izin verir. [Hisse ispatı](/developers/docs/consensus-mechanisms/pos/) ile başlamak için ETH'ye ihtiyacınız vardır. | İş ispatı çok fazla enerji kullandığı için çevreye zararlıdır. | +| İş ispatı, Bitcoin ve Ethereum'u uzun yıllar boyunca güvenli ve merkeziyetsiz hâlde tutan denenmiş ve test edilmiş bir mutabakat mekanizmasıdır. | Madencilik yapmak istiyorsanız, ihtiyacınız olan özel ekipman o kadar özeldir ki büyük bir yatırım yapmanız gerekmektedir. | +| Hisse ispatı ile karşılaştırıldığında, uygulanması nispeten kolaydır. | Artan bilgi işlem ihtiyacı nedeniyle, madencilik havuzları potansiyel olarak madencilik sektörüne hükmedebilir ve bu da merkezileşme ve güvenlik risklerine yol açabilir. | -## Hisse ispatı ile karşılaştırıldığında {#compared-to-pos} +## Hisse ispatı ile karşılaştırma {#compared-to-pos} Yüksek düzeyde, hisse ispatı ile iş ispatı birbiriyle aynı nihai hedefe sahiptir: merkeziyetsiz ağın, güvenli bir şekilde mutabakata varmasına yardımcı olmak. Ancak süreç ve personel açısından bazı farklılıkları vardır: @@ -92,13 +92,13 @@ Yüksek düzeyde, hisse ispatı ile iş ispatı birbiriyle aynı nihai hedefe sa - Doğrulayıcılar blok oluşturmak için rekabet etmezler, bunun yerine bir algoritma tarafından rastgele seçilirler. - Kesinlik daha açıktır: Belirli kontrol noktalarında, 2/3 doğrulayıcı bloğun durumu üzerinde anlaşmaya varırsa, blok "kesin" olarak kabul edilir. Doğrulayıcılar, tüm stake ettiklerini buna yatırmak zorunda oldukları için zincirde gizlice anlaşmaya çalışırlarsa tüm stake ettiklerini kaybederler. -[Hisse ispatı hakkında daha fazla bilgi](/developers/docs/consensus-mechanisms/pos/) +[Hisse ispatı hakkında daha fazlası](/developers/docs/consensus-mechanisms/pos/) -## Görsel olarak öğrenmeyi mi tercih ediyorsunuz? {#visual-learner} +## Görerek öğrenmeyi mi tercih ediyorsunuz? {#visual-learner} -## Daha fazla bilgi {#further-reading} +## Ek Okumalar {#further-reading} - [Çoğunluk saldırısı](https://en.bitcoin.it/wiki/Majority_attack) - [Uzlaşma kesinliği hakkında](https://blog.ethereum.org/2016/05/09/on-settlement-finality/) @@ -107,8 +107,8 @@ Yüksek düzeyde, hisse ispatı ile iş ispatı birbiriyle aynı nihai hedefe sa - [İş ispatı protokollerinin teknik bir açıklaması](https://youtu.be/9V1bipPkCTU) -## İlgili konular {#related-topics} +## İlgili Konular {#related-topics} - [Madencilik](/developers/docs/consensus-mechanisms/pow/mining/) - [Hisse ispatı](/developers/docs/consensus-mechanisms/pos/) -- [Yetki kanıtı](/developers/docs/consensus-mechanisms/poa/) +- [Otorite İspatı](/developers/docs/consensus-mechanisms/poa/) diff --git a/public/content/translations/tr/developers/docs/consensus-mechanisms/pow/mining/index.md b/public/content/translations/tr/developers/docs/consensus-mechanisms/pow/mining/index.md index 54392dd51aa..9c7c616fcad 100644 --- a/public/content/translations/tr/developers/docs/consensus-mechanisms/pow/mining/index.md +++ b/public/content/translations/tr/developers/docs/consensus-mechanisms/pow/mining/index.md @@ -1,6 +1,6 @@ --- title: Madencilik -description: Ethereum'da madenciliğin nasıl çalıştığına dair bir açıklama. +description: "Ethereum'da madenciliğin nasıl çalıştığına dair bir açıklama." lang: tr --- @@ -15,7 +15,7 @@ lang: tr ## Ön Koşullar {#prerequisites} -Bu sayfayı daha iyi anlamak için, önce [işlemleri](/developers/docs/transactions/), [blokları](/developers/docs/blocks/) ve [iş ispatını](/developers/docs/consensus-mechanisms/pow/) okumanızı öneririz. +Bu sayfayı daha iyi anlamak için öncelikle [işlemler](/developers/docs/transactions/), [bloklar](/developers/docs/blocks/) ve [iş ispatı](/developers/docs/consensus-mechanisms/pow/) hakkında bilgi edinmenizi öneririz. ## Ethereum madenciliği nedir? {#what-is-ethereum-mining} @@ -31,41 +31,41 @@ Madencilik herhangi bir iş ispatına dayalı blok zincir modelinin can damarıd Ethereum gibi merkeziyetsiz sistemlerde, herkesin işlemlerin sırası konusunda anlaşmasını sağlamalıyız. Madenciler, ağı saldırılardan korumanın bir yolu olarak hizmet veren bloklar üretmek için hesaplama açısından zor bulmacaları çözerek bunun gerçekleşmesine yardımcı oldular. -[İş kanıtı hakkında daha fazlası](/developers/docs/consensus-mechanisms/pow/) +[İş ispatı hakkında daha fazlası](/developers/docs/consensus-mechanisms/pow/) Daha önceleri herhangi bir kişi bilgisayarını kullanarak Ethereum ağında madencilik yapabiliyordu. Ancak herkes kârlı şekilde Ether (ETH) madenciliği yapamazdı. Birçok durumda madencilerin bu konuya özelleşmiş bilgisayar donanımları almaları ve ucuz enerji kaynaklarına erişimlerinin olması gerekiyordu. Ortalama bir bilgisayarın madencilikle ilgili maliyetleri karşılamaya yetecek kadar blok ödülü kazanması pek olası değildi. -### Madenciliğin maliyeti {#cost-of-mining} +### Madencilik maliyeti {#cost-of-mining} - Bir madencilik teçhizatı inşa etmek ve yürütmek için gerekli donanımların potansiyel maliyeti - Madencilik teçhizatına güç vermenin elektriksel maliyeti - Bir havuzda madencilik yapıyorsanız, madencilik havuzları genelde havuz tarafından üretilen her blok için sabit bir yüzdelik ödeme alırlar - Madencilik teçhizatını desteklemek için gereken ekipmanların potansiyel maliyeti (havalandırma, enerji takibi, elektrik tesisatı vb.) -Madencilik kârlılığını daha yakından incelemek için [Etherscan](https://etherscan.io/ether-mining-calculator) tarafından sağlanan gibi bir madencilik hesaplayıcısı kullanın. +Madencilik kârlılığını daha ayrıntılı incelemek için [Etherscan](https://etherscan.io/ether-mining-calculator) tarafından sağlanan gibi bir madencilik hesaplayıcısı kullanın. -## Ethereum işlemleri için nasıl madencilik yapıldı? {#how-ethereum-transactions-were-mined} +## Ethereum işlemleri nasıl kazılırdı {#how-ethereum-transactions-were-mined} -Aşağıda Ethereum iş ispatında işlemler için nasıl madencilik yapıldığına dair bir genel bakış verilmektedir. Ethereum hisse ispatı için bu sürecin benzer bir açıklamasına [buradan](/developers/docs/consensus-mechanisms/pos/#transaction-execution-ethereum-pos) ulaşılabilir. +Aşağıda Ethereum iş ispatında işlemler için nasıl madencilik yapıldığına dair bir genel bakış verilmektedir. Bu sürecin Ethereum hisse ispatı için benzer bir açıklaması [burada](/developers/docs/consensus-mechanisms/pos/#transaction-execution-ethereum-pos) bulunabilir. 1. Bir kullanıcı, bir [hesabın](/developers/docs/accounts/) özel anahtarı ile bir [işlem](/developers/docs/transactions/) talebi yazar ve imzalar. -2. Kullanıcı, işlem talebini bir [düğüm](/developers/docs/nodes-and-clients/)den tüm Ethereum ağına yayınlar. +2. Kullanıcı, işlem talebini bir [düğümden](/developers/docs/nodes-and-clients/) tüm Ethereum ağına yayınlar. 3. Ethereum ağındaki her düğüm, yeni işlem talebini duyduktan sonra talebi, duydukları ve henüz bir blokta blok zincirine taahhüt edilmemiş tüm işlem isteklerinin bir listesi olan yerel bellek havuzuna ekler. -4. Bir noktada, bir madencilik düğümü birkaç düzine veya birkaç yüz işlem talebini potansiyel bir [bloğa](/developers/docs/blocks/) toplar; bu şekilde blok gaz limitinin altında kalınarak kazanılan [işlem ücretleri](/developers/docs/gas/) en yüksek seviyeye çıkartılır. Madencilik düğümü daha sonra: - 1. Her işlem talebinin geçerliliğini doğrular (yani, hiç kimsenin imza oluşturmadığı bir hesaptan ether aktarmaya çalışmaması, talebin hatalı biçimlendirilmemesi vb.) ve sonra talebin kodunu yürüterek Ethereum Sanal Makinesi'nin (EVM) yerel kopyasının durumunu değiştirirler. Madenci, bu tür her bir işlem talebinin işlem ücretini kendi hesabına aktarır. +4. Bir noktada, bir madencilik düğümü, blok gaz limitinin altında kalırken kazandıkları [işlem ücretlerini](/developers/docs/gas/) en üst düzeye çıkaracak şekilde birkaç düzine veya yüz işlem talebini potansiyel bir [blokta](/developers/docs/blocks/) toplar. Madencilik düğümü daha sonra: + 1. Her işlem talebinin geçerliliğini doğrular (yani, hiç kimsenin imza oluşturmadığı bir hesaptan ether aktarmaya çalışmaması, talebin hatalı biçimlendirilmemesi vb.) ve sonra talebin kodunu yürüterek Ethereum Sanal Makinesi'nin (EVM) yerel kopyasının durumunu değiştirir. Madenci, bu tür her bir işlem talebinin işlem ücretini kendi hesabına aktarır. 2. Bloktaki tüm işlem talepleri doğrulandıktan ve yerel EVM kopyasında yürütüldükten sonra, potansiyel blok için iş ispatı "meşruiyet sertifikası" üretme sürecine başlar. 5. Sonunda bir madenci, belirli işlem talebimizi içeren bir blok için sertifika üretmeyi tamamlar. Madenci daha sonra, talep edilen yeni EVM durumunun sertifikasını ve sağlama toplamını içeren tamamlanmış bloğu yayınlar. 6. Diğer düğümler yeni bloğu duyar. Sertifikayı doğrularlar, bloktaki tüm işlemleri kendileri yürütürler (başlangıçta kullanıcımız tarafından yayınlanan işlem dahil) ve tüm işlemlerin yürütülmesinden sonra yeni EVM durumlarının sağlama toplamının, madenci bloğu tarafından talep edilen durumun sağlama toplamı ile eşleştiğini doğrularlar. Ancak o zaman bu düğümler bu bloğu blok zincirlerinin kuyruğuna ekler ve yeni EVM durumunu kurallı durum olarak kabul eder. 7. Her düğüm, yeni bloktaki tüm işlemleri, yerine getirilmemiş işlem taleplerinin yerel bellek havuzlarından kaldırır. 8. Ağa katılan yeni düğümler, ilgilendiğimiz işlemi içeren blok da dahil olmak üzere tüm blokları sırayla indirir. Yerel bir EVM kopyasını başlatırlar (boş durumlu bir EVM olarak başlar) ve ardından yol boyunca her blokta durum sağlama toplamlarını doğrulayarak yerel EVM kopyalarının üzerindeki her bloktaki her işlemi yürütme sürecinden geçerler. -Her işlem bir kez madencilik sürecinden geçer (yeni bir bloka dahil edilir ve ilk kez yayılır) ancak kurallı Ethereum Sanal Makinesi durumunu geliştirme sürecinde her katılımcı tarafından yürütülür ve doğrulanır. Bu, blok zincirin temel deyimlerinden birini vurgular: **Güvenme, doğrula**. +Her işlem bir kez madencilik sürecinden geçer (yeni bir bloka dahil edilir ve ilk kez yayılır) ancak kurallı Ethereum Sanal Makinesi durumunu geliştirme sürecinde her katılımcı tarafından yürütülür ve doğrulanır. Bu, blokzincirin temel mantralarından birini vurgular: **Güvenme, doğrula**. ## Ommer (amca) blokları {#ommer-blocks} İş ispatında blok madenciliği olasılıksaldır, bu da bazen ağ gecikmesi nedeniyle aynı anda iki geçerli blokun ağda yayımlandığı anlamına gelir. Bu durumda protokol, önerilen dahil edilmemiş geçerli bloku kısmen ödüllendirerek madencilere karşı adaleti sağlarken en uzun (yani en "geçerli") zinciri belirlemek zorundaydı. Bu, daha fazla gecikmeyle karşı karşıya kalabilecek daha küçük madencilerin yine de [ommer](/glossary/#ommer) blok ödülleri aracılığıyla getiri sağlayabildikleri için ağın daha fazla merkezsizleştirilmesini teşvik etti. -"Ommer" terimi, bir ebeveyn bloğunun kardeşi için tercih edilen, cinsiyetten bağımsız bir terimdir ancak buna bazen "amca" da denir. Her yuva için bir teklif verici seçildiği için **Ethereum'un hisse ispatına geçişinden beri ommer bloklarına madencilik yapılmamaktadır**. Bu değişimi kazılmış ommer bloklarının [tarihsel tablosunda](https://ycharts.com/indicators/ethereum_uncle_rate) görebilirsiniz. +"Ommer" terimi, bir ebeveyn bloğunun kardeşi için tercih edilen, cinsiyetten bağımsız bir terimdir ancak buna bazen "amca" da denir. **Ethereum'un hisse ispatına geçişinden bu yana, her yuvada yalnızca bir teklif sahibi seçildiği için ommer blokları artık kazılmamaktadır**. Bu değişikliği, kazılmış ommer bloklarının [tarihsel grafiğine](https://ycharts.com/indicators/ethereum_uncle_rate) bakarak görebilirsiniz. ## Görsel bir demo {#a-visual-demo} @@ -75,12 +75,12 @@ Austin'in madenciliği ve iş ispatı blok zincirini, size açıklamasını izle ## Madencilik algoritması {#mining-algorithm} -Ethereum Ana Ağı şimdiye kadar yalnızca bir madencilik algoritması kullandı - ["Ethash"](/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/ethash/). Ethash, ["Dagger-Hashimoto"](/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/dagger-hashimoto/) olarak bilinen orijinal bir Ar-Ge algoritmasının halefiydi. +Ethereum Ana Ağı şimdiye kadar yalnızca bir madencilik algoritması kullandı - ['Ethash'](/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/ethash/). Ethash, ['Dagger-Hashimoto'](/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/dagger-hashimoto/) olarak bilinen orijinal bir Ar-Ge algoritmasının devamıydı. -[Madencilik algoritmaları ile ilgili daha fazla bilgi](/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/). +[Madencilik algoritmaları hakkında daha fazlası](/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/). -## İlgili Konular {#related-topics} +## Alakalı başlıklar {#related-topics} - [Gaz](/developers/docs/gas/) - [EVM](/developers/docs/evm/) -- [İş İspatı](/developers/docs/consensus-mechanisms/pow/) +- [İş ispatı](/developers/docs/consensus-mechanisms/pow/) diff --git a/public/content/translations/tr/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/dagger-hashimoto/index.md b/public/content/translations/tr/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/dagger-hashimoto/index.md index 412d47a0071..f43e1d585bb 100644 --- a/public/content/translations/tr/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/dagger-hashimoto/index.md +++ b/public/content/translations/tr/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/dagger-hashimoto/index.md @@ -1,35 +1,35 @@ --- title: Dagger-Hashimoto -description: Dagger-Hashimoto algoritmasına detaylı bir bakış. +description: "Dagger-Hashimoto algoritmasına detaylı bir bakış." lang: tr --- -Dagger-Hashimoto, Ethereum'un madencilik algoritması için orijinal araştırma uygulaması ve şartnamesiydi. Dagger-Hashimoto'nun yerini [Ethash](#ethash) aldı. 15 Eylül 2022'de gerçekleşen [Birleşim](/roadmap/merge/)'den sonra madencilik tamamen durdurulmuştur. O zamandan beri Ethereum [hisse ispatı](/developers/docs/consensus-mechanisms/pos) mekanizmasını kullanmaktadır. Bu sayfa sadece bilgilendirme içindir - burdaki bilgi Birleşim sonrası Ethereum için geçerli değildir. +Dagger-Hashimoto, Ethereum'un madencilik algoritması için orijinal araştırma uygulaması ve şartnamesiydi. Dagger-Hashimoto'nun yerini [Ethash](#ethash) almıştır. 15 Eylül 2022'deki [Birleşim](/roadmap/merge/) ile madencilik tamamen durduruldu. O zamandan beri Ethereum, bunun yerine bir [hisse ispatı](/developers/docs/consensus-mechanisms/pos) mekanizması kullanılarak güvence altına alınmıştır. Bu sayfa sadece bilgilendirme içindir - burdaki bilgi Birleşim sonrası Ethereum için geçerli değildir. -## Ön koşullar {#prerequisites} +## Ön Koşullar {#prerequisites} -Bu sayfayı daha iyi anlamak için önce [iş kanıtı mutabakatı](/developers/docs/consensus-mechanisms/pow), [madencilik](/developers/docs/consensus-mechanisms/pow/mining) ve [>madencilik algoritmaları](/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms) hakkında okumanızı öneririz. +Bu sayfayı daha iyi anlamak için önce [iş ispatı mutabakatı](/developers/docs/consensus-mechanisms/pow), [madencilik](/developers/docs/consensus-mechanisms/pow/mining) ve [madencilik algoritmaları](/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms) hakkında bilgi edinmenizi öneririz. ## Dagger-Hashimoto {#dagger-hashimoto} Dagger-Hashimoto iki hedefi gerçekleştirmeyi amaçlar: -1. **ASIC direnci**: Algoritma için özel donanım oluşturmanın faydası mümkün olduğunca küçük olmalıdır -2. **Hafif istemci doğrulanabilirliği**: Bir blok, hafif bir istemci tarafından verimli bir şekilde doğrulanabilir olmalıdır. +1. **ASIC direnci**: algoritma için özel donanım oluşturmanın faydası mümkün olduğunca az olmalıdır +2. **Hafif istemci doğrulanabilirliği**: bir blok, hafif bir istemci tarafından verimli bir şekilde doğrulanabilir olmalıdır. Ek bir değişiklikle, istenirse, ancak ek karmaşıklık pahasına üçüncü bir hedefin nasıl yerine getirileceğini de belirtiyoruz: -**Tam zincir depolama**: madencilik, tam blok zinciri durumunun depolanmasını gerektirmelidir (Ethereum durum üçlüsünün düzensiz yapısı nedeniyle, özellikle sık kullanılan bazı sözleşmelerde bir miktar budamanın mümkün olacağını tahmin ediyoruz, ancak bunu en asgari seviyeye indirmek istiyoruz). +**Tam zincir depolama**: madencilik, tüm blokzincir durumunun depolanmasını gerektirmelidir (Ethereum durum ağacının düzensiz yapısı nedeniyle, özellikle sık kullanılan bazı sözleşmelerde bir miktar budamanın mümkün olacağını tahmin ediyoruz, ancak bunu en aza indirmek istiyoruz). -## DAG Jenerasyonu {#dag-generation} +## DAG Üretimi {#dag-generation} -Algoritmanın kodu aşağıdaki Python'da tanımlanacaktır. İlk olarak belirlitilen kesinliklerin belirli olmayan tam sayılarını dizelere sıralamak için `encode_int` ile başlarız. Tersi de aşağıda verilmiştir: +Algoritmanın kodu aşağıdaki Python'da tanımlanacaktır. İlk olarak, belirtilen hassasiyetteki işaretsiz tam sayıları dizelere sıralamak için `encode_int` veriyoruz. Tersi de aşağıda verilmiştir: ```python NUM_BITS = 512 def encode_int(x): - "Encode an integer x as a string of 64 characters using a big-endian scheme" + "Bir tamsayı x'i büyük endian şeması kullanarak 64 karakterlik bir dize olarak kodlayın" o = '' for _ in range(NUM_BITS / 8): o = chr(x % 256) + o @@ -37,7 +37,7 @@ def encode_int(x): return o def decode_int(s): - "Unencode an integer x from a string using a big-endian scheme" + "Büyük endian şeması kullanarak bir dizeden bir x tamsayısının kodunu çözün" x = 0 for c in s: x *= 256 @@ -45,7 +45,7 @@ def decode_int(s): return x ``` -Daha sonra, `sha3`'ün bir tamsayı alan ve bir tamsayı veren bir işlev olduğunu ve `dbl_sha3`'ün bir double-sha3 işlevi olduğunu varsayacağız; bu referans kodunu bir uygulamaya dönüştürüyorsanız: +Ardından, `sha3`'ün bir tam sayı alıp bir tam sayı çıktısı veren bir işlev ve `dbl_sha3`'ün bir çift sha3 işlevi olduğunu varsayıyoruz; bu referans kodu bir uygulamaya dönüştürüyorsanız, şunu kullanın: ```python from pyethereum import utils @@ -82,9 +82,9 @@ parametreler = { } ``` -Bu durumda `P`, `log₂(P)`'nin 512'den biraz daha küçük olacağı şekilde seçilen bir asaldır ve bu, sayılarımızı temsil etmek için kullandığımız 512 bite karşılık gelir. DAG'nin yalnızca ikinci yarısının gerçekten depolanması gerektiğini unutmayın, bu nedenle RAM gereksinimi 1 GB'den başlar ve yılda 441 MB büyür. +Bu durumda `P`, `log₂(P)`'nin 512'den biraz daha küçük olacak şekilde seçilmiş bir asal sayıdır, bu da sayılarımızı temsil etmek için kullandığımız 512 bite karşılık gelir. DAG'nin yalnızca ikinci yarısının gerçekten depolanması gerektiğini unutmayın, bu nedenle RAM gereksinimi 1 GB'den başlar ve yılda 441 MB büyür. -### Dagger grafiği inşa etmek {#dagger-graph-building} +### Dagger grafiği oluşturma {#dagger-graph-building} Dagger grafiği oluşturma ilkesi şu şekilde tanımlanır: @@ -101,7 +101,7 @@ def produce_dag(params, seed, length): return o ``` -Esasen, bir grafikten tek bir düğüm, `sha3(tohum)` olarak başlar ve oradan, rastgele önceki düğümlere dayalı olarak diğer düğümlere sırayla eklemeye başlar. Yeni bir düğüm oluşturulduğunda, `i`'den küçük bazı indeksleri (yukarıdaki `x % i` kullanılarak) rastgele seçmek için çekirdeğin modüler bir gücü hesaplanır ve bu indekslerdeki düğümler, `x` için yeni bir değer oluşturmak üzere bir hesaplamada kullanılır, bu daha sonra küçük bir çalışma kanıtı işlevine (XOR'a dayalı olarak) beslenir ve sonuçta `i` dizininde grafiğin değerini oluşturur. Bu özel tasarımın arkasındaki mantık, DAG'nin sıralı erişimini zorlamak; DAG'ın erişilecek bir sonraki değeri, mevcut değer bilinene kadar belirlenemez. Son olarak, modüler üs alma sonucu daha da özetler. +Esasen, bir grafiği tek bir düğüm olan `sha3(seed)` olarak başlatır ve oradan rastgele önceki düğümlere dayalı olarak diğer düğümleri sırayla eklemeye başlar. Yeni bir düğüm oluşturulduğunda, `i`'den küçük bazı dizinleri rastgele seçmek için tohumun modüler bir gücü hesaplanır (yukarıdaki `x % i` kullanılarak) ve bu dizinlerdeki düğümlerin değerleri, `x` için yeni bir değer oluşturmak üzere bir hesaplamada kullanılır, bu da nihai olarak `i` dizinindeki grafiğin değerini oluşturmak için küçük bir iş ispatı fonksiyonuna (XOR tabanlı) beslenir. Bu özel tasarımın arkasındaki mantık, DAG'nin sıralı erişimini zorlamak; DAG'ın erişilecek bir sonraki değeri, mevcut değer bilinene kadar belirlenemez. Son olarak, modüler üs alma sonucu daha da özetler. Bu algoritma, sayı teorisinden elde edilen çeşitli sonuçlara dayanır. Bir tartışma için ek bölümü aşağıda görebilirsiniz. @@ -131,11 +131,11 @@ def quick_calc(params, seed, p): return quick_calc_cached(p) ``` -Esasen, tüm DAG için değerleri hesaplama döngüsünü ortadan kaldıran ve önceki düğüm aramasını özyinelemeli bir çağrı veya bir önbellek aramasıyla değiştiren, yukarıdaki algoritmanın basitçe yeniden yazılmasıdır. `k=1` için önbelleğin gereksiz olduğunu unutmayın, ancak daha fazla optimizasyon aslında DAG'nin ilk birkaç bin değerini önceden hesaplar ve bunu, hesaplamalar için statik bir önbellek olarak tutar; bunun bir kod uygulaması için eke bakın. +Esasen, tüm DAG için değerleri hesaplama döngüsünü ortadan kaldıran ve önceki düğüm aramasını özyinelemeli bir çağrı veya bir önbellek aramasıyla değiştiren, yukarıdaki algoritmanın basitçe yeniden yazılmasıdır. `k=1` için önbelleğin gereksiz olduğunu, ancak daha ileri bir optimizasyonun aslında DAG'nin ilk birkaç bin değerini önceden hesapladığını ve bunu hesaplamalar için statik bir önbellek olarak tuttuğunu unutmayın; bunun bir kod uygulaması için eke bakın. -## DAG'ların duble destekçisi {#double-buffer} +## DAG'lerin çift arabelleği {#double-buffer} -Bir tam istemcide 2 DAG'ın [_ çifte buffer_](https://wikipedia.org/wiki/Multiple_buffering)' yukarıda kullanılan formül ile üretilir. Burada düşünce, DAG'lar her blok sayısı `döngü zamanı` tarafından yukarıdaki parametrelere göre üretilir. Üretilen en son DAG'ı kullanan istemci yerine, öncekini kullanır. Bunun yararı, madencilerin tüm verileri aniden yeniden hesaplaması gereken bir adımın dahil edilmesine gerek kalmadan, DAG'lerin zaman içinde değiştirilmesine izin vermesidir. Aksi takdirde, düzenli aralıklarla zincir işlemede ani bir geçici yavaşlama ve merkezileşmeyi önemli ölçüde artırma potansiyeli vardır. Bu nedenle, tüm veriler yeniden hesaplanmadan önceki birkaç dakika içinde %51 saldırı riski vardır. +Tam bir istemcide, yukarıdaki formülle üretilen 2 DAG'den oluşan bir [_çift arabellek_](https://wikipedia.org/wiki/Multiple_buffering) kullanılır. Buradaki fikir, DAG'lerin yukarıdaki parametrelere göre her `epochtime` blok sayısında üretilmesidir. Üretilen en son DAG'ı kullanan istemci yerine, öncekini kullanır. Bunun yararı, madencilerin tüm verileri aniden yeniden hesaplaması gereken bir adımın dahil edilmesine gerek kalmadan, DAG'lerin zaman içinde değiştirilmesine izin vermesidir. Aksi takdirde, düzenli aralıklarla zincir işlemede ani bir geçici yavaşlama ve merkezileşmeyi önemli ölçüde artırma potansiyeli vardır. Bu nedenle, tüm veriler yeniden hesaplanmadan önceki birkaç dakika içinde %51 saldırı riski vardır. Bir blok için çalışmayı hesaplamak için kullanılan DAG setini oluşturmak için kullanılan algoritma aşağıdaki gibidir: @@ -254,54 +254,50 @@ Ayrıca, Dagger-Hashimoto'nun blok başlığına ek gereksinimler getirdiğini u - İki katmanlı doğrulamanın çalışması için, bir blok başlığı hem nonce hem de orta değer pre-sha3'e sahip olmalıdır - Bir yerde, bir blok başlığı mevcut tohum setinin sha3'ünü depolamalıdır -## Daha fazla okuma {#further-reading} +## Daha fazla kaynak {#further-reading} -_Size yardımcı olan bir topluluk kaynağı biliyor musunuz? Bu sayfayı düzenleyin ve onu ekleyin!_ +_Size yardımcı olan bir topluluk kaynağı mı biliyorsunuz? Bu sayfayı düzenleyin ve onu ekleyin!_ ## Ek {#appendix} -Yukarıda belirtildiği gibi, DAG üretimi için kullanılan RNG, sayı teorisinden elde edilen bazı sonuçlara dayanır. İlk olarak, `picker` değişkeninin temeli olan Lehmer RNG'nin geniş bir periyoda sahip olduğuna dair güvence veriyoruz. İkinci olarak, `P-1`'in başlamak için `x ∈ [2,P-2]`'i sağladığını ya da `pow(x,3,P)`'un `x`'i `1`'e adreslemeyeceğini gösteriyoruz. Son olarak, `pow(x,3,P)` öğesinin bir karma işlevi olarak ele alındığında düşük bir çarpışma oranına sahip olduğunu gösteriyoruz. +Yukarıda belirtildiği gibi, DAG üretimi için kullanılan RNG, sayı teorisinden elde edilen bazı sonuçlara dayanır. İlk olarak, `picker` değişkeninin temeli olan Lehmer RNG'nin geniş bir periyoda sahip olduğuna dair güvence veriyoruz. İkinci olarak, başlangıç için `x ∈ [2,P-2]` sağlandığında `pow(x,3,P)`'nin `x`'i `1`'e veya `P-1`'e eşlemeyeceğini gösteriyoruz. Son olarak, `pow(x,3,P)`'nin bir karma işlevi olarak ele alındığında düşük bir çarpışma oranına sahip olduğunu gösteriyoruz. -### Lehmer rastgele sayı üreticisi {#lehmer-random-number} +### Lehmer rastgele sayı üreteci {#lehmer-random-number} `produce_dag` işlevinin tarafsız rastgele sayılar üretmesi gerekmese de, potansiyel bir tehdit, `seed**i % P`'nin yalnızca bir avuç değer almasıdır. Bu, modeli tanımayanlara kıyasla madencilere bir avantaj sağlayabilir. -Bundan kaçınmak için sayı teorisinden bir sonuca başvurulur. Bir [_güvenli asal_](https://en.wikipedia.org/wiki/Safe_prime) olan `P`, `(P-1)/2`'nin asal olduğu yerde asal olarak kabul edilir. Bir `x` üyenin [çarpımsal grup](https://en.wikipedia.org/wiki/Multiplicative_group_of_integers_modulo_n) _sıralaması_ `ℤ/nℤ`, minimum `m` olarak tanımlanır, öyle ki
xᵐ mod P ≡ 1
-Bu tanımlar göz önüne alındığında, elimizde: +Bundan kaçınmak için sayı teorisinden bir sonuca başvurulur. [_Güvenli Asal_](https://en.wikipedia.org/wiki/Safe_prime), `(P-1)/2` de asal olacak şekilde bir `P` asalı olarak tanımlanır. [Çarpımsal grup](https://en.wikipedia.org/wiki/Multiplicative_group_of_integers_modulo_n) `ℤ/nℤ`'nin bir `x` üyesinin _mertebesi_,
xᵐ mod P ≡ 1
olacak şekildeki minimum `m` olarak tanımlanır. +Bu tanımlar göz önüne alındığında, elimizde şunlar vardır: -> Gözlem 1. `x`, güvenli bir asal `P` için `ℤ/Pℤ` çarpımsal grubunun bir üyesi olsun. `x mod P ≠ 1 mod P` ve `x mod P ≠ P-1 mod P` ise, `x`'in sırası ya `P-1` ya da `(P-1)/2`'dir. +> Gözlem 1. `x`, güvenli bir `P` asalı için `ℤ/Pℤ` çarpımsal grubunun bir üyesi olsun. Eğer `x mod P ≠ 1 mod P` ve `x mod P ≠ P-1 mod P` ise, `x`'in mertebesi ya `P-1` ya da `(P-1)/2`'dir. -_Kanıt_. `P` güvenli bir asal olduğundan, \[Lagrange Teoremi\]\[lagrange\] ile `x` sırası ya `1`, `2`, `(P-1)/2` veya `P-1` olur. +_Kanıt_. `P` güvenli bir asal olduğundan, [Lagrange Teoremi][lagrange] gereğince `x`'in mertebesinin `1`, `2`, `(P-1)/2` veya `P-1` olduğunu söyleyebiliriz. -`x`'in sırası `1` olamaz, çünkü Fermat'ın Küçük Teoremi'ne göre: +`x`'in mertebesi `1` olamaz, çünkü Fermat'nın Küçük Teoremi'ne göre elimizde şu vardır:
xP-1 mod P ≡ 1
-Bu nedenle `x`, benzersiz olan `ℤ/nℤ`'nin çarpımsal kimliği olmalıdır. `x ≠ 1` olduğunu varsaydığımız için bu mümkün değildir. +Dolayısıyla `x`, benzersiz olan `ℤ/nℤ`'nin bir çarpımsal birimi olmalıdır. Varsayım gereği `x ≠ 1` olduğunu varsaydığımız için bu mümkün değildir. -`x` dizisi, `x = P-1` olmadıkça `2` olamaz, çünkü bu, `P`'nin asal olması gerektiği kuralını ihlal eder. +`x`'in mertebesi `x = P-1` olmadıkça `2` olamaz, çünkü bu `P`'nin asal olmasını ihlal eder. -Yukarıdaki önermeden, `(picker * init) % P` yinelemesinin en az `(P-1)/2` döngü uzunluğuna sahip olacağını görebiliriz. Bunun nedeni, `P`'yi ikinin daha yüksek kuvvetine yaklaşık olarak eşit olan güvenli bir asal sayı olarak seçmemiz ve `init`'in `[2,2**256+1]` aralığında olmasıdır. `P`'nin büyüklüğü göz önüne alındığında, modüler üstelleştirmeden asla bir döngü beklememeliyiz. +Yukarıdaki önermeden, `(picker * init) % P` yinelemesinin en az `(P-1)/2` döngü uzunluğuna sahip olacağını görebiliriz. Bunun nedeni, `P`'yi ikinin daha yüksek bir kuvvetine yaklaşık olarak eşit olan güvenli bir asal olarak seçmemiz ve `init`'in `[2,2**256+1]` aralığında olmasıdır. `P`'nin büyüklüğü göz önüne alındığında, modüler üs almadan asla bir döngü beklememeliyiz. -DAG'daki ilk hücreyi (`init` etiketli değişken) atadığımızda, ` iş kanıtı (sha3 (tohum) + 2, 3, P)` olarak hesaplarız. İlk bakışta bu, sonucun ne `1` ne de `P-1` olduğunu garanti etmez. Ancak, `P-1` güvenli bir asal olduğundan, Gözlem 1'in bir sonucu olan aşağıdaki ek güvenceye sahibiz: +DAG'deki ilk hücreyi (etiketi `init` olan değişken) atarken, `pow(sha3(seed) + 2, 3, P)` hesaplarız. İlk bakışta bu, sonucun ne `1` ne de `P-1` olduğunu garanti etmez. Ancak, `P-1` güvenli bir asal olduğundan, Gözlem 1'in bir sonucu olan aşağıdaki ek güvenceye sahibiz: -> Gözlem 2. `x`, güvenli bir asal `P` için `ℤ/Pℤ` çarpımsal grubunun bir üyesi olsun ve `w` bir doğal sayı olsun. `x mod P ≠ 1 mod P` ve `x mod P ≠ P-1 mod P` ve ayrıca `w mod P ≠ P-1 mod P` ve `w mod P ≠ 0 mod P` ise, ardından `xʷ mod P ≠ 1 mod P` ve `xʷ mod P ≠ P-1 mod P` +> Gözlem 2. `x`, güvenli bir `P` asalı için `ℤ/Pℤ` çarpımsal grubunun bir üyesi ve `w` bir doğal sayı olsun. Eğer `x mod P ≠ 1 mod P` ve `x mod P ≠ P-1 mod P` ise, ayrıca `w mod P ≠ P-1 mod P` ve `w mod P ≠ 0 mod P` ise, o zaman `xʷ mod P ≠ 1 mod P` ve `xʷ mod P ≠ P-1 mod P` olur. -### Karma işlevi olarak modüler üstel alma {#modular-exponentiation} +### Karma işlevi olarak modüler üs alma {#modular-exponentiation} Belirli `P` ve `w` değerleri için, `pow(x, w, P)` işlevinin birçok çakışması olabilir. Örneğin, `pow(x,9,19)` yalnızca `{1,18}` değerlerini alır. -`P` asal sayı olarak kabul edildiğinde, modüler üs alma karma fonksiyonu için uygun `w` aşağıdaki sonucu kullanarak seçilebilir: +`P` asal olduğundan, modüler üs alma karma işlevi için uygun bir `w`, aşağıdaki sonuç kullanılarak seçilebilir: -> Gözlem 3. `P` asal olsun; `w` ve `P-1`, ancak ve ancak tüm `a` ve `b`, `ℤ/Pℤ` içinde ise nispeten asaldır: -> ->
-> `aʷ mod P ≡ bʷ mod P` if and only if `a mod P ≡ b mod P` ->
+> Gözlem 3. `P` bir asal sayı olsun; `w` ve `P-1`'in aralarında asal olması için gerek ve yeter koşul, `ℤ/Pℤ`'deki tüm `a` ve `b` için şudur:
`aʷ mod P ≡ bʷ mod P` olması için gerek ve yeter koşul `a mod P ≡ b mod P` olmasıdır
-Bu nedenle, `P`'nin asal olduğu ve `w`'un `P-1`'e görece asal olduğu göz önüne alındığında, şu `|{pow(x, w, P) : x ∈ ℤ}| = P`, hash fonksiyonunun mümkün olan minimum çarpışma oranına sahip olduğunu ima eder. +Dolayısıyla, `P` asal ve `w`, `P-1` ile aralarında asal olduğunda, `|{pow(x, w, P) : x ∈ ℤ}| = P` olur, bu da karma işlevinin mümkün olan en düşük çarpışma oranına sahip olduğu anlamına gelir. -`P`'nin seçtiğimiz gibi güvenli bir asal olması özel durumunda, o zaman `P-1`'in sadece 1, 2, `(P-1)/2` ve `P-1` faktörleri vardır. `P`'den beri > 7'de, 3'ün `P-1`'e göre asal olduğunu biliyoruz, dolayısıyla `w=3` yukarıdaki önermeyi karşılıyor. +`P`'nin seçtiğimiz gibi güvenli bir asal olduğu özel durumda, `P-1` yalnızca 1, 2, `(P-1)/2` ve `P-1` çarpanlarına sahiptir. `P` > 7 olduğundan, 3'ün `P-1` ile aralarında asal olduğunu biliyoruz, dolayısıyla `w=3` yukarıdaki önermeyi sağlar. ## Daha verimli önbellek tabanlı değerlendirme algoritması {#cache-based-evaluation} diff --git a/public/content/translations/tr/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/ethash/index.md b/public/content/translations/tr/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/ethash/index.md index 2c999fb7f40..30fad054b1e 100644 --- a/public/content/translations/tr/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/ethash/index.md +++ b/public/content/translations/tr/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/ethash/index.md @@ -1,6 +1,6 @@ --- title: Ethash -description: Ethash algoritmasına ayrıntılı bir bakış. +description: "Ethash algoritmasına ayrıntılı bir bakış." lang: tr --- @@ -8,12 +8,12 @@ lang: tr - Ethash, Ethereum'un iş ispatı madencilik algoritmasıydı. İş ispatı tamamen durdurulmuş ve Ethereum, [hisse ispatı](/developers/docs/consensus-mechanisms/pos/) ile güvence altına alınmıştır. [Birleşim](/roadmap/merge/), [hisse ispatı](/developers/docs/consensus-mechanisms/pos/)ve [hisseleme](/staking/) hakkında daha fazla bilgi edinin. Bu sayfa sadece tarihsel ilgi içindir! + Ethash, Ethereum'un iş ispatı madencilik algoritmasıydı. İş ispatı artık **tamamen devre dışı bırakıldı** ve Ethereum artık bunun yerine [hisse ispatı](/developers/docs/consensus-mechanisms/pos/) kullanılarak güvence altına alınıyor. [Birleşim](/roadmap/merge/), [hisse ispatı](/developers/docs/consensus-mechanisms/pos/) ve [hisseleme](/staking/) hakkında daha fazlasını okuyun. Bu sayfa sadece tarihsel ilgi içindir!
-Ethash, [Dagger-Hashimoto](/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/dagger-hashimoto) algoritmasının değiştirilmiş bir versiyonudur. Ethash iş ispatı[bellek zor](https://wikipedia.org/wiki/Memory-hard_function) bir işlemdir, bunun algoritmayı ASIC dirençli hale getirdiği düşünülür. Sonunda Ethash ASICleri geliştirildi fakat GPU madenciliği iş ispatı durdurulana kadar hâlâ geçerli bir seçenekti. Ethash, Ethereum olmayan iş ispatı ağlarında hâlâ diğer paraların madenciliğini yapmak için kullanılmaktadır. +Ethash, [Dagger-Hashimoto](/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/dagger-hashimoto) algoritmasının değiştirilmiş bir versiyonudur. Ethash iş ispatı [bellek ağırlıklıdır](https://wikipedia.org/wiki/Memory-hard_function), bunun algoritmayı ASIC'e dayanıklı yaptığı düşünülüyordu. Sonunda Ethash ASICleri geliştirildi fakat GPU madenciliği iş ispatı durdurulana kadar hâlâ geçerli bir seçenekti. Ethash, Ethereum olmayan iş ispatı ağlarında hâlâ diğer paraların madenciliğini yapmak için kullanılmaktadır. ## Ethash nasıl çalışır? {#how-does-ethash-work} @@ -21,35 +21,35 @@ Bellek sertliği, nonce ve blok başlığına bağlı olarak sabit bir kaynağı Algoritmanın izlediği genel rota aşağıdaki gibidir: -1. O noktaya kadar blok başlıklarını tarayarak bulunan, her blok için hesaplanabilen bir **tohum** vardır. -2. Çekirdekten, **16 MB sözderastgele önbellek** hesaplanabilir. Hafif istemciler önbelleği depolar. -3. Önbellekten, veri kümesindeki her öğenin önbellekten yalnızca az sayıda öğeye bağlı olduğu özelliğiyle, **1 GB'lık bir veri kümesi** oluşturabiliriz. Tam istemciler ve madenciler veri kümesini depolar. Veri kümesi, zamanla doğrusal olarak büyür. +1. O noktaya kadar blok başlıklarının taranmasıyla her blok için hesaplanabilen bir **tohum** mevcuttur. +2. Tohumdan **16 MB'lık bir sözde rastgele önbellek** hesaplanabilir. Hafif istemciler önbelleği depolar. +3. Önbellekten, her bir öğenin önbellekteki az sayıda öğeye bağlı olduğu **1 GB'lık bir veri kümesi** oluşturabiliriz. Tam istemciler ve madenciler veri kümesini depolar. Veri kümesi, zamanla doğrusal olarak büyür. 4. Madencilik, veri setinin rastgele dilimlerini alıp bunları bir araya getirmeyi içerir. Doğrulama, ihtiyacınız olan veri kümesinin belirli parçalarını yeniden oluşturmak için önbelleği kullanarak düşük bellekle yapılabilir, böylece yalnızca önbelleği saklamanız gerekir. Büyük veri kümesi her 30000 blokta bir güncellenir, bu nedenle bir madencinin çabasının büyük çoğunluğu veri kümesini okumak olacak, değişiklik yapmak değil. -## Tanımlamalar {#definitions} +## Tanımlar {#definitions} Aşağıdaki tanımları kullanıyoruz: ``` -WORD_BYTES = 4 # bytes in word -DATASET_BYTES_INIT = 2**30 # bytes in dataset at genesis -DATASET_BYTES_GROWTH = 2**23 # dataset growth per epoch -CACHE_BYTES_INIT = 2**24 # bytes in cache at genesis -CACHE_BYTES_GROWTH = 2**17 # cache growth per epoch -CACHE_MULTIPLIER=1024 # Size of the DAG relative to the cache -EPOCH_LENGTH = 30000 # blocks per epoch -MIX_BYTES = 128 # width of mix -HASH_BYTES = 64 # hash length in bytes -DATASET_PARENTS = 256 # number of parents of each dataset element -CACHE_ROUNDS = 3 # number of rounds in cache production -ACCESSES = 64 # number of accesses in hashimoto loop +WORD_BYTES = 4 # kelimedeki bayt sayısı +DATASET_BYTES_INIT = 2**30 # başlangıçtaki veri kümesindeki bayt sayısı +DATASET_BYTES_GROWTH = 2**23 # dönem başına veri kümesi büyümesi +CACHE_BYTES_INIT = 2**24 # başlangıçtaki önbellekteki bayt sayısı +CACHE_BYTES_GROWTH = 2**17 # dönem başına önbellek büyümesi +CACHE_MULTIPLIER=1024 # DAG'nin önbelleğe göre boyutu +EPOCH_LENGTH = 30000 # dönem başına blok sayısı +MIX_BYTES = 128 # karışımın genişliği +HASH_BYTES = 64 # bayt cinsinden karma uzunluğu +DATASET_PARENTS = 256 # her veri kümesi öğesinin ebeveyn sayısı +CACHE_ROUNDS = 3 # önbellek üretimindeki tur sayısı +ACCESSES = 64 # hashimoto döngüsündeki erişim sayısı ``` ### 'SHA3' kullanımı {#sha3} -Ethereum'un gelişimi, SHA3 standardının geliştirilmesiyle çakıştı ve standartlar süreci, sonlandırılmış karma algoritmanın dolgusunda geç bir değişiklik yaptı, böylece Ethereum'un "sha3_256" ve "sha3_512" karmaları standart sha3 karmaları değil, diğer bağlamlarda "Keccak-256" ve "Keccak-512" olarak genellikle atıfta bulunulan bir değişkendir. Tartışmaya ör. [buradan](https://eips.ethereum.org/EIPS/eip-1803), [buradan](http://ethereum.stackexchange.com/questions/550/which-cryptographic-hash-function-does-ethereum-use) ve [buradan bakabilirsiniz](http://bitcoin.stackexchange.com/questions/42055/what-is-the-approach-to-calculate-an-ethereum-address-from-a-256-bit-private-key/42057#42057). +Ethereum'un gelişimi, SHA3 standardının geliştirilmesiyle çakıştı ve standartlar süreci, sonlandırılmış karma algoritmanın dolgusunda geç bir değişiklik yaptı, böylece Ethereum'un "sha3_256" ve "sha3_512" karmaları standart sha3 karmaları değil, diğer bağlamlarda "Keccak-256" ve "Keccak-512" olarak genellikle atıfta bulunulan bir değişkendir. Tartışma için bkz. ör. [burada](https://eips.ethereum.org/EIPS/eip-1803), [burada](http://ethereum.stackexchange.com/questions/550/which-cryptographic-hash-function-does-ethereum-use) veya [burada](http://bitcoin.stackexchange.com/questions/42055/what-is-the-approach-to-calculate-an-ethereum-address-from-a-256-bit-private-key/42057#42057). Lütfen aşağıdaki algoritmanın açıklamasında "sha3" karmalarına atıfta bulunulduğunu unutmayın. @@ -75,7 +75,7 @@ def get_full_size(block_number): Veri kümesi ve önbellek boyutu değerleri tabloları ekte verilmiştir. -## Önbellek üretimi {#cache-generation} +## Önbellek oluşturma {#cache-generation} Şimdi, bir önbellek üretme fonksiyonunu belirtiyoruz: @@ -83,12 +83,12 @@ Veri kümesi ve önbellek boyutu değerleri tabloları ekte verilmiştir. def mkcache(cache_size, seed): n = cache_size // HASH_BYTES - # Sequentially produce the initial dataset + # Başlangıç veri kümesini sıralı olarak üret o = [sha3_512(seed)] for i in range(1, n): o.append(sha3_512(o[-1])) - # Use a low-round version of randmemohash + # Randmemohash'in düşük turlu bir sürümünü kullan for _ in range(CACHE_ROUNDS): for i in range(n): v = o[i][0] % n @@ -97,11 +97,11 @@ def mkcache(cache_size, seed): return o ``` -Önbellek üretim süreci, önce 32 MB belleğin sırayla doldurulmasını, ardından Sergio Demian Lerner'in [_Strict Memory Hard Hashing Functions_'tan (2014)](http://www.hashcash.org/papers/memohash.pdf) _RandMemoHash_ algoritmasının iki geçişini gerçekleştirmeyi içerir. Çıktı, 524288 64 baytlık bir değer kümesidir. +Önbellek üretim süreci, önce 32 MB belleğin sıralı olarak doldurulmasını ve ardından Sergio Demian Lerner'in [_Strict Memory Hard Hashing Functions_ (2014)](http://www.hashcash.org/papers/memohash.pdf) çalışmasındaki _RandMemoHash_ algoritmasının iki geçişte çalıştırılmasını içerir. Çıktı, 524288 64 baytlık bir değer kümesidir. -## Veri toplama fonksiyonu {#date-aggregation-function} +## Veri birleştirme işlevi {#date-aggregation-function} -Bazı durumlarda XOR için, ilişkisel olmayan bir ikame olarak, [FNV karması](https://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function)ndan esinlenen bir algoritma kullanıyoruz. Asal değeri sırayla bir bayt (sekizli) ile çarpan FNV-1 spesifikasyonunun aksine, asal değeri tam 32 bit girişle çarptığımızı unutmayın. +Bazı durumlarda, XOR'un birleşmeli olmayan bir alternatifi olarak [FNV karmasından](https://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function) esinlenen bir algoritma kullanırız. Asal değeri sırayla bir bayt (sekizli) ile çarpan FNV-1 spesifikasyonunun aksine, asal değeri tam 32 bit girişle çarptığımızı unutmayın. ```python FNV_PRIME = 0x01000193 @@ -120,11 +120,11 @@ Tam 1 GB veri kümesindeki her 64 baytlık öğe aşağıdaki gibi hesaplanır: def calc_dataset_item(cache, i): n = len(cache) r = HASH_BYTES // WORD_BYTES - # initialize the mix + # karışımı başlat mix = copy.copy(cache[i % n]) mix[0] ^= i mix = sha3_512(mix) - # fnv it with a lot of random cache nodes based on i + # i'ye dayalı olarak birçok rastgele önbellek düğümüyle fnv'le for j in range(DATASET_PARENTS): cache_index = fnv(i ^ j, mix[j % r]) mix = map(fnv, mix, cache[cache_index % n]) @@ -140,27 +140,27 @@ def calc_dataset(full_size, cache): ## Ana döngü {#main-loop} -Şimdi, belirli bir başlık ve nonce için nihai değerimizi üretmek için tüm veri kümesinden verileri topladığımız ana "hashimoto" benzeri döngüyü belirtiyoruz. Aşağıdaki kodda, `başlık`, kesilmiş bir _ _ blok başlığı, yani **mixHash** ve **nonce** alanlarını hariç tutan bir başlığının RLP temsilinin SHA3-256 _karmasını_ temsil eder. `nonce`, büyük endian düzende 64 bitlik işaretsiz bir tamsayının sekiz baytıdır. Yani `nonce[::-1]` bu değerin sekiz baytlık küçük endian temsilidir: +Şimdi, belirli bir başlık ve nonce için nihai değerimizi üretmek için tüm veri kümesinden verileri topladığımız ana "hashimoto" benzeri döngüyü belirtiyoruz. Aşağıdaki kodda `header`, **mixHash** ve **nonce** alanları hariç bir başlığın, yani _kısaltılmış_ bir blok başlığının RLP gösteriminin SHA3-256 _karmasını_ temsil eder. `nonce`, büyük endian düzenindeki 64 bitlik işaretsiz bir tam sayının sekiz baytıdır. Yani `nonce[::-1]` bu değerin sekiz baytlık küçük endian gösterimidir: ```python def hashimoto(header, nonce, full_size, dataset_lookup): n = full_size / HASH_BYTES w = MIX_BYTES // WORD_BYTES mixhashes = MIX_BYTES / HASH_BYTES - # combine header+nonce into a 64 byte seed + # header+nonce'ı 64 baytlık bir tohumda birleştir s = sha3_512(header + nonce[::-1]) - # start the mix with replicated s + # karışımı çoğaltılmış s ile başlat mix = [] for _ in range(MIX_BYTES / HASH_BYTES): mix.extend(s) - # mix in random dataset nodes + # rastgele veri kümesi düğümlerini karıştır for i in range(ACCESSES): p = fnv(i ^ s[0], mix[i % w]) % (n // mixhashes) * mixhashes newdata = [] for j in range(MIX_BYTES / HASH_BYTES): newdata.extend(dataset_lookup(p + j)) mix = map(fnv, mix, newdata) - # compress mix + # karışımı sıkıştır cmix = [] for i in range(0, len(mix), 4): cmix.append(fnv(fnv(fnv(mix[i], mix[i+1]), mix[i+2]), mix[i+3])) @@ -176,9 +176,9 @@ def hashimoto_full(full_size, dataset, header, nonce): return hashimoto(header, nonce, full_size, lambda x: dataset[x]) ``` -Esasen, 128 bayt genişliğinde bir "karışım" sürdürüyoruz ve art arda tam veri kümesinden 128 bayt getiriyoruz ve onu karışımla birleştirmek için `fnv` işlevini kullanıyoruz. 128 bayt sıralı erişim kullanılır, böylece algoritmanın her turu, her zaman RAM'den tam bir sayfa alır ve ASIC'lerin teorik olarak kaçınabileceği çeviriye bakılan arabellek kayıplarını en aza indirir. +Esasen, 128 bayt genişliğinde bir "mix" tutarız ve tam veri kümesinden tekrar tekrar sıralı olarak 128 bayt alırız ve `fnv` işlevini kullanarak mix ile birleştiririz. 128 bayt sıralı erişim kullanılır, böylece algoritmanın her turu, her zaman RAM'den tam bir sayfa alır ve ASIC'lerin teorik olarak kaçınabileceği çeviriye bakılan arabellek kayıplarını en aza indirir. -Bu algoritmanın çıktısı istenen hedefin altındaysa nonce geçerlidir. Sondaki fazladan `sha3_256` uygulamasının, en azından küçük bir miktar işin yapıldığını kanıtlamak için sağlanabilecek bir ara nonce'nin var olmasını sağladığına dikkat edin; bu hızlı dış iş kanıtı doğrulaması, DDoS karşıtı amaçlar için kullanılabilir. Ayrıca sonucun tarafsız, 256 bitlik bir sayı olduğuna dair istatistiksel güvence sağlamaya da hizmet eder. +Bu algoritmanın çıktısı istenen hedefin altındaysa nonce geçerlidir. Sondaki fazladan `sha3_256` uygulamasının, en azından az miktarda iş yapıldığını kanıtlamak için sağlanabilecek bir ara nonce'nin var olmasını sağladığını unutmayın; bu hızlı dış PoW doğrulaması, DDoS karşıtı amaçlar için kullanılabilir. Ayrıca sonucun tarafsız, 256 bitlik bir sayı olduğuna dair istatistiksel güvence sağlamaya da hizmet eder. ## Madencilik {#mining} @@ -186,7 +186,7 @@ Madencilik algoritması şu şekilde tanımlanır: ```python def mine(full_size, dataset, header, difficulty): - # zero-pad target to compare with hash on the same digit + # hedefi, aynı basamakta karma ile karşılaştırmak için sıfırla doldurun target = zpad(encode_int(2**256 // difficulty), 64)[::-1] from random import randint nonce = randint(0, 2**64) @@ -209,9 +209,9 @@ Belirli bir bloğun üzerinde madencilik yapmak için kullanılacak tohum karmas Sorunsuz madencilik ve doğrulama için, gelecekteki tohum karmalarını ve veri kümelerini ayrı bir iş parçacığında önceden hesaplamanızı öneririz. -## Daha fazla okuma {#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!_ ## Ek {#appendix} @@ -220,7 +220,7 @@ Yukarıdaki python spesifikasyonunu kod olarak çalıştırmakla ilgileniyorsan ```python import sha3, copy -# Assumes little endian bit ordering (same as Intel architectures) +# Küçük endian bit sıralamasını varsayar (Intel mimarileriyle aynı) def decode_int(s): return int(s[::-1].encode('hex'), 16) if s else 0 @@ -248,7 +248,7 @@ def serialize_cache(ds): serialize_dataset = serialize_cache -# sha3 hash function, outputs 64 bytes +# sha3 karma işlevi, 64 bayt çıktı verir def sha3_512(x): return hash_words(lambda v: sha3.sha3_512(v).digest(), 64, x) @@ -265,7 +265,7 @@ def isprime(x): return True ``` -### Veri boyutları {#data-sizes} +### Veri Boyutları {#data-sizes} Aşağıdaki arama tabloları, yaklaşık 2048 veri ve önbellek boyutlu dönemleri sunar. @@ -881,139 +881,139 @@ cache_sizes = [ 177209152, 177340096, 177470528, 177600704, 177731648, 177864256, 177994816, 178126528, 178257472, 178387648, 178518464, 178650176, 178781888, 178912064, 179044288, 179174848, 179305024, 179436736, -179568448, 179698496, 179830208, 179960512, 180092608, 180223808, -180354752, 180485696, 180617152, 180748096, 180877504, 181009984, -181139264, 181272512, 181402688, 181532608, 181663168, 181795136, -181926592, 182057536, 182190016, 182320192, 182451904, 182582336, -182713792, 182843072, 182976064, 183107264, 183237056, 183368384, -183494848, 183631424, 183762752, 183893824, 184024768, 184154816, -184286656, 184417984, 184548928, 184680128, 184810816, 184941248, -185072704, 185203904, 185335616, 185465408, 185596352, 185727296, -185859904, 185989696, 186121664, 186252992, 186383552, 186514112, -186645952, 186777152, 186907328, 187037504, 187170112, 187301824, -187429184, 187562048, 187693504, 187825472, 187957184, 188087104, -188218304, 188349376, 188481344, 188609728, 188743616, 188874304, -189005248, 189136448, 189265088, 189396544, 189528128, 189660992, -189791936, 189923264, 190054208, 190182848, 190315072, 190447424, -190577984, 190709312, 190840768, 190971328, 191102656, 191233472, -191364032, 191495872, 191626816, 191758016, 191888192, 192020288, -192148928, 192282176, 192413504, 192542528, 192674752, 192805952, -192937792, 193068608, 193198912, 193330496, 193462208, 193592384, -193723456, 193854272, 193985984, 194116672, 194247232, 194379712, -194508352, 194641856, 194772544, 194900672, 195035072, 195166016, -195296704, 195428032, 195558592, 195690304, 195818176, 195952576, -196083392, 196214336, 196345792, 196476736, 196607552, 196739008, -196869952, 197000768, 197130688, 197262784, 197394368, 197523904, -197656384, 197787584, 197916608, 198049472, 198180544, 198310208, -198442432, 198573632, 198705088, 198834368, 198967232, 199097792, -199228352, 199360192, 199491392, 199621696, 199751744, 199883968, -200014016, 200146624, 200276672, 200408128, 200540096, 200671168, -200801984, 200933312, 201062464, 201194944, 201326144, 201457472, -201588544, 201719744, 201850816, 201981632, 202111552, 202244032, -202374464, 202505152, 202636352, 202767808, 202898368, 203030336, -203159872, 203292608, 203423296, 203553472, 203685824, 203816896, -203947712, 204078272, 204208192, 204341056, 204472256, 204603328, -204733888, 204864448, 204996544, 205125568, 205258304, 205388864, -205517632, 205650112, 205782208, 205913536, 206044736, 206176192, -206307008, 206434496, 206569024, 206700224, 206831168, 206961856, -207093056, 207223616, 207355328, 207486784, 207616832, 207749056, -207879104, 208010048, 208141888, 208273216, 208404032, 208534336, -208666048, 208796864, 208927424, 209059264, 209189824, 209321792, -209451584, 209582656, 209715136, 209845568, 209976896, 210106432, -210239296, 210370112, 210501568, 210630976, 210763712, 210894272, -211024832, 211156672, 211287616, 211418176, 211549376, 211679296, -211812032, 211942592, 212074432, 212204864, 212334016, 212467648, -212597824, 212727616, 212860352, 212991424, 213120832, 213253952, -213385024, 213515584, 213645632, 213777728, 213909184, 214040128, -214170688, 214302656, 214433728, 214564544, 214695232, 214826048, -214956992, 215089088, 215219776, 215350592, 215482304, 215613248, -215743552, 215874752, 216005312, 216137024, 216267328, 216399296, -216530752, 216661696, 216790592, 216923968, 217054528, 217183168, -217316672, 217448128, 217579072, 217709504, 217838912, 217972672, -218102848, 218233024, 218364736, 218496832, 218627776, 218759104, -218888896, 219021248, 219151936, 219281728, 219413056, 219545024, -219675968, 219807296, 219938624, 220069312, 220200128, 220331456, -220461632, 220592704, 220725184, 220855744, 220987072, 221117888, -221249216, 221378368, 221510336, 221642048, 221772736, 221904832, -222031808, 222166976, 222297536, 222428992, 222559936, 222690368, -222820672, 222953152, 223083968, 223213376, 223345984, 223476928, -223608512, 223738688, 223869376, 224001472, 224132672, 224262848, -224394944, 224524864, 224657344, 224788288, 224919488, 225050432, -225181504, 225312704, 225443776, 225574592, 225704768, 225834176, -225966784, 226097216, 226229824, 226360384, 226491712, 226623424, -226754368, 226885312, 227015104, 227147456, 227278528, 227409472, -227539904, 227669696, 227802944, 227932352, 228065216, 228196288, -228326464, 228457792, 228588736, 228720064, 228850112, 228981056, -229113152, 229243328, 229375936, 229505344, 229636928, 229769152, -229894976, 230030272, 230162368, 230292416, 230424512, 230553152, -230684864, 230816704, 230948416, 231079616, 231210944, 231342016, -231472448, 231603776, 231733952, 231866176, 231996736, 232127296, -232259392, 232388672, 232521664, 232652608, 232782272, 232914496, -233043904, 233175616, 233306816, 233438528, 233569984, 233699776, -233830592, 233962688, 234092224, 234221888, 234353984, 234485312, -234618304, 234749888, 234880832, 235011776, 235142464, 235274048, -235403456, 235535936, 235667392, 235797568, 235928768, 236057152, -236190272, 236322752, 236453312, 236583616, 236715712, 236846528, -236976448, 237108544, 237239104, 237371072, 237501632, 237630784, -237764416, 237895232, 238026688, 238157632, 238286912, 238419392, -238548032, 238681024, 238812608, 238941632, 239075008, 239206336, -239335232, 239466944, 239599168, 239730496, 239861312, 239992384, -240122816, 240254656, 240385856, 240516928, 240647872, 240779072, -240909632, 241040704, 241171904, 241302848, 241433408, 241565248, -241696192, 241825984, 241958848, 242088256, 242220224, 242352064, -242481856, 242611648, 242744896, 242876224, 243005632, 243138496, -243268672, 243400384, 243531712, 243662656, 243793856, 243924544, -244054592, 244187072, 244316608, 244448704, 244580032, 244710976, -244841536, 244972864, 245104448, 245233984, 245365312, 245497792, -245628736, 245759936, 245889856, 246021056, 246152512, 246284224, -246415168, 246545344, 246675904, 246808384, 246939584, 247070144, -247199552, 247331648, 247463872, 247593536, 247726016, 247857088, -247987648, 248116928, 248249536, 248380736, 248512064, 248643008, -248773312, 248901056, 249036608, 249167552, 249298624, 249429184, -249560512, 249692096, 249822784, 249954112, 250085312, 250215488, -250345792, 250478528, 250608704, 250739264, 250870976, 251002816, -251133632, 251263552, 251395136, 251523904, 251657792, 251789248, -251919424, 252051392, 252182464, 252313408, 252444224, 252575552, -252706624, 252836032, 252968512, 253099712, 253227584, 253361728, -253493056, 253623488, 253754432, 253885504, 254017216, 254148032, -254279488, 254410432, 254541376, 254672576, 254803264, 254933824, -255065792, 255196736, 255326528, 255458752, 255589952, 255721408, -255851072, 255983296, 256114624, 256244416, 256374208, 256507712, -256636096, 256768832, 256900544, 257031616, 257162176, 257294272, -257424448, 257555776, 257686976, 257818432, 257949632, 258079552, -258211136, 258342464, 258473408, 258603712, 258734656, 258867008, -258996544, 259127744, 259260224, 259391296, 259522112, 259651904, -259784384, 259915328, 260045888, 260175424, 260308544, 260438336, -260570944, 260700992, 260832448, 260963776, 261092672, 261226304, -261356864, 261487936, 261619648, 261750592, 261879872, 262011968, -262143424, 262274752, 262404416, 262537024, 262667968, 262799296, -262928704, 263061184, 263191744, 263322944, 263454656, 263585216, -263716672, 263847872, 263978944, 264108608, 264241088, 264371648, -264501184, 264632768, 264764096, 264895936, 265024576, 265158464, -265287488, 265418432, 265550528, 265681216, 265813312, 265943488, -266075968, 266206144, 266337728, 266468032, 266600384, 266731072, -266862272, 266993344, 267124288, 267255616, 267386432, 267516992, -267648704, 267777728, 267910592, 268040512, 268172096, 268302784, -268435264, 268566208, 268696256, 268828096, 268959296, 269090368, -269221312, 269352256, 269482688, 269614784, 269745856, 269876416, -270007616, 270139328, 270270272, 270401216, 270531904, 270663616, -270791744, 270924736, 271056832, 271186112, 271317184, 271449536, -271580992, 271711936, 271843136, 271973056, 272105408, 272236352, -272367296, 272498368, 272629568, 272759488, 272891456, 273022784, -273153856, 273284672, 273415616, 273547072, 273677632, 273808448, -273937088, 274071488, 274200896, 274332992, 274463296, 274595392, -274726208, 274857536, 274988992, 275118656, 275250496, 275382208, -275513024, 275643968, 275775296, 275906368, 276037184, 276167872, -276297664, 276429376, 276560576, 276692672, 276822976, 276955072, -277085632, 277216832, 277347008, 277478848, 277609664, 277740992, -277868608, 278002624, 278134336, 278265536, 278395328, 278526784, -278657728, 278789824, 278921152, 279052096, 279182912, 279313088, -279443776, 279576256, 279706048, 279838528, 279969728, 280099648, -280230976, 280361408, 280493632, 280622528, 280755392, 280887104, -281018176, 281147968, 281278912, 281411392, 281542592, 281673152, -281803712, 281935552, 282066496, 282197312, 282329024, 282458816, -282590272, 282720832, 282853184, 282983744, 283115072, 283246144, -283377344, 283508416, 283639744, 283770304, 283901504, 284032576, -284163136, 284294848, 284426176, 284556992, 284687296, 284819264, -284950208, 285081536] +179568448, 179698496, 179830208, 180092608, 180223808, 180354752, +180485696, 180617152, 180748096, 180877504, 181009984, 181139264, +181272512, 181402688, 181532608, 181663168, 181795136, 181926592, +182057536, 182190016, 182320192, 182451904, 182582336, 182713792, +182843072, 182976064, 183107264, 183237056, 183368384, 183494848, +183631424, 183762752, 183893824, 184024768, 184154816, 184286656, +184417984, 184548928, 184680128, 184810816, 184941248, 185072704, +185203904, 185335616, 185465408, 185596352, 185727296, 185859904, +185989696, 186121664, 186252992, 186383552, 186514112, 186645952, +186777152, 186907328, 187037504, 187170112, 187301824, 187429184, +187562048, 187693504, 187825472, 187957184, 188087104, 188218304, +188349376, 188481344, 188609728, 188743616, 188874304, 189005248, +189136448, 189265088, 189396544, 189528128, 189660992, 189791936, +189923264, 190054208, 190182848, 190315072, 190447424, 190577984, +190709312, 190840768, 190971328, 191102656, 191233472, 191364032, +191495872, 191626816, 191758016, 191888192, 192020288, 192148928, +192282176, 192413504, 192542528, 192674752, 192805952, 192937792, +193068608, 193198912, 193330496, 193462208, 193592384, 193723456, +193854272, 193985984, 194116672, 194247232, 194379712, 194508352, +194641856, 194772544, 194900672, 195035072, 195166016, 195296704, +195428032, 195558592, 195690304, 195818176, 195952576, 196083392, +196214336, 196345792, 196476736, 196607552, 196739008, 196869952, +196999616, 197130688, 197262784, 197394368, 197523904, 197656384, +197787584, 197916608, 198049472, 198180544, 198310208, 198442432, +198573632, 198705088, 198834368, 198967232, 199097792, 199228352, +199360192, 199491392, 199621696, 199751744, 199883968, 200014016, +200146624, 200276672, 200408128, 200540096, 200671168, 200801984, +200933312, 201062464, 201194944, 201326144, 201457472, 201588544, +201719744, 201850816, 201981632, 202111552, 202244032, 202374464, +202505152, 202636352, 202767808, 202898368, 203030336, 203159872, +203292608, 203423296, 203553472, 203685824, 203816896, 203947712, +204078272, 204208192, 204341056, 204472256, 204603328, 204733888, +204864448, 204996544, 205125568, 205258304, 205388864, 205517632, +205650112, 205782208, 205913536, 206044736, 206176192, 206307008, +206434496, 206569024, 206700224, 206831168, 206961856, 207093056, +207223616, 207355328, 207486784, 207616832, 207749056, 207879104, +208010048, 208141888, 208273216, 208404032, 208534336, 208666048, +208796864, 208927424, 209059264, 209189824, 209321792, 209451584, +209582656, 209715136, 209845568, 209976896, 210106432, 210239296, +210370112, 210501568, 210630976, 210763712, 210894272, 211024832, +211156672, 211287616, 211418176, 211549376, 211679296, 211812032, +211942592, 212074432, 212204864, 212334016, 212467648, 212597824, +212727616, 212860352, 212991424, 213120832, 213253952, 213385024, +213515584, 213645632, 213777728, 213909184, 214040128, 214170688, +214302656, 214433728, 214564544, 214695232, 214826048, 214956992, +215089088, 215219776, 215350592, 215482304, 215613248, 215743552, +215874752, 216005312, 216137024, 216267328, 216399296, 216530752, +216661696, 216790592, 216923968, 217054528, 217183168, 217316672, +217448128, 217579072, 217709504, 217838912, 217972672, 218102848, +218233024, 218364736, 218496832, 218627776, 218759104, 218888896, +219021248, 219151936, 219281728, 219413056, 219545024, 219675968, +219807296, 219938624, 220069312, 220200128, 220331456, 220461632, +220592704, 220725184, 220855744, 220987072, 221117888, 221249216, +221378368, 221510336, 221642048, 221772736, 221904832, 222031808, +222166976, 222297536, 222428992, 222559936, 222690368, 222820672, +222953152, 223083968, 223213376, 223345984, 223476928, 223608512, +223738688, 223869376, 224001472, 224132672, 224262848, 224394944, +224524864, 224657344, 224788288, 224919488, 225050432, 225181504, +225312704, 225443776, 225574592, 225704768, 225834176, 225966784, +226097216, 226229824, 226360384, 226491712, 226623424, 226754368, +226885312, 227015104, 227147456, 227278528, 227409472, 227539904, +227669696, 227802944, 227932352, 228065216, 228196288, 228326464, +228457792, 228588736, 228720064, 228850112, 228981056, 229113152, +229243328, 229375936, 229505344, 229636928, 229769152, 229894976, +230030272, 230162368, 230292416, 230424512, 230553152, 230684864, +230816704, 230948416, 231079616, 231210944, 231342016, 231472448, +231603776, 231733952, 231866176, 231996736, 232127296, 232259392, +232388672, 232521664, 232652608, 232782272, 232914496, 233043904, +233175616, 233306816, 233438528, 233569984, 233699776, 233830592, +233962688, 234092224, 234221888, 234353984, 234485312, 234618304, +234749888, 234880832, 235011776, 235142464, 235274048, 235403456, +235535936, 235667392, 235797568, 235928768, 236057152, 236190272, +236322752, 236453312, 236583616, 236715712, 236846528, 236976448, +237108544, 237239104, 237371072, 237501632, 237630784, 237764416, +237895232, 238026688, 238157632, 238286912, 238419392, 238548032, +238681024, 238812608, 238941632, 239075008, 239206336, 239335232, +239466944, 239599168, 239730496, 239861312, 239992384, 240122816, +240254656, 240385856, 240516928, 240647872, 240779072, 240909632, +241040704, 241171904, 241302848, 241433408, 241565248, 241696192, +241825984, 241958848, 242088256, 242220224, 242352064, 242481856, +242611648, 242744896, 242876224, 243005632, 243138496, 243268672, +243400384, 243531712, 243662656, 243793856, 243924544, 244054592, +244187072, 244316608, 244448704, 244580032, 244710976, 244841536, +244972864, 245104448, 245233984, 245365312, 245497792, 245628736, +245759936, 245889856, 246021056, 246152512, 246284224, 246415168, +246545344, 246675904, 246808384, 246939584, 247070144, 247199552, +247331648, 247463872, 247593536, 247726016, 247857088, 247987648, +248116928, 248249536, 248380736, 248512064, 248643008, 248773312, +248901056, 249036608, 249167552, 249298624, 249429184, 249560512, +249692096, 249822784, 249954112, 250085312, 250215488, 250345792, +250478528, 250608704, 250739264, 250870976, 251002816, 251133632, +251263552, 251395136, 251523904, 251657792, 251789248, 251919424, +252051392, 252182464, 252313408, 252444224, 252575552, 252706624, +252836032, 252968512, 253099712, 253227584, 253361728, 253493056, +253623488, 253754432, 253885504, 254017216, 254148032, 254279488, +254410432, 254541376, 254672576, 254803264, 254933824, 255065792, +255196736, 255326528, 255458752, 255589952, 255721408, 255851072, +255983296, 256114624, 256244416, 256374208, 256507712, 256636096, +256768832, 256900544, 257031616, 257162176, 257294272, 257424448, +257555776, 257686976, 257818432, 257949632, 258079552, 258211136, +258342464, 258473408, 258603712, 258734656, 258867008, 258996544, +259127744, 259260224, 259391296, 259522112, 259651904, 259784384, +259915328, 260045888, 260175424, 260308544, 260438336, 260570944, +260700992, 260832448, 260963776, 261092672, 261226304, 261356864, +261487936, 261619648, 261750592, 261879872, 262011968, 262143424, +262274752, 262404416, 262537024, 262667968, 262799296, 262928704, +263061184, 263191744, 263322944, 263454656, 263585216, 263716672, +263847872, 263978944, 264108608, 264241088, 264371648, 264501184, +264632768, 264764096, 264895936, 265024576, 265158464, 265287488, +265418432, 265550528, 265681216, 265813312, 265943488, 266075968, +266206144, 266337728, 266468032, 266600384, 266731072, 266862272, +266993344, 267124288, 267255616, 267386432, 267516992, 267648704, +267777728, 267910592, 268040512, 268172096, 268302784, 268435264, +268566208, 268696256, 268828096, 268959296, 269090368, 269221312, +269352256, 269482688, 269614784, 269745856, 269876416, 270007616, +270139328, 270270272, 270401216, 270531904, 270663616, 270791744, +270924736, 271056832, 271186112, 271317184, 271449536, 271580992, +271711936, 271843136, 271973056, 272105408, 272236352, 272367296, +272498368, 272629568, 272759488, 272891456, 273022784, 273153856, +273284672, 273415616, 273547072, 273677632, 273808448, 273937088, +274071488, 274200896, 274332992, 274463296, 274595392, 274726208, +274857536, 274988992, 275118656, 275250496, 275382208, 275513024, +275643968, 275775296, 275906368, 276037184, 276167872, 276297664, +276429376, 276560576, 276692672, 276822976, 276955072, 277085632, +277216832, 277347008, 277478848, 277609664, 277740992, 277868608, +278002624, 278134336, 278265536, 278395328, 278526784, 278657728, +278789824, 278921152, 279052096, 279182912, 279313088, 279443776, +279576256, 279706048, 279838528, 279969728, 280099648, 280230976, +280361408, 280493632, 280622528, 280755392, 280887104, 281018176, +281147968, 281278912, 281411392, 281542592, 281673152, 281803712, +281935552, 282066496, 282197312, 282329024, 282458816, 282590272, +282720832, 282853184, 282983744, 283115072, 283246144, 283377344, +283508416, 283639744, 283770304, 283901504, 284032576, 284163136, +284294848, 284426176, 284556992, 284687296, 284819264, 284950208, +285081536] ``` diff --git a/public/content/translations/tr/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/index.md b/public/content/translations/tr/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/index.md index c1ab0cfa149..e61256d32f6 100644 --- a/public/content/translations/tr/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/index.md +++ b/public/content/translations/tr/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/index.md @@ -1,6 +1,6 @@ --- -title: Madencilik algoritmaları -description: Ethereum madenciliği için kullanılan algoritmalara ayrıntılı bir bakış. +title: "Madencilik algoritmaları" +description: "Ethereum madenciliği için kullanılan algoritmalara ayrıntılı bir bakış." lang: tr --- @@ -8,35 +8,35 @@ lang: tr -İş ispatı artık Ethereum'un mutabakat mekanizmasının bir parçası değil, yani madencilik kapatıldı. Bunun yerine Ethereum, ETH hisseleyen doğrulayıcılar tarafından güvence altına alınır. ETH'nizi stake etmeye bugün başlayabilirsiniz. Birleşim, hisse ispatı ve hisseleme hakkında daha fazla bilgi edinin. Bu sayfa sadece tarihsel ilgi içindir. +İş ispatı artık Ethereum'un mutabakat mekanizmasının bir parçası değil, yani madencilik kapatıldı. Bunun yerine Ethereum, ETH hisseleyen doğrulayıcılar tarafından güvence altına alınır. ETH'nizi hisselemeye bugün başlayabilirsiniz. Birleşim, hisse ispatı ve hisseleme hakkında daha fazla bilgi edinin. Bu sayfa sadece tarihsel ilgi içindir. Ethereum madencilik dönemi Ethereum 1.0 için bir iş ispatı algoritması olan Ethash'i kullanmıştır. Algoritmanın temel tasarımı, bir madencinin kaba kuvvet hesaplaması kullanarak belirli bir nonce değeri bulmasıdır. Bu bulunan değer sayesinde, oluşturulan karma değeri belli bir zorluk seviyesinin altında kalacaktır. Böylece madenci, bu nonce değeriyle iş ispatını oluşturarak yeni bir blok ekler. Bu zorluk seviyesi dinamik olarak ayarlanabilir, böylece blok üretiminin düzenli bir aralıkta gerçekleşmesine olanak tanınır. -## Ön koşullar {#prerequisites} +## Ön Koşullar {#prerequisites} -Bu sayfayı daha iyi anlamak için, önce [iş kanıtı konsensus](/developers/docs/consensus-mechanisms/pow)u ve [madencilik](/developers/docs/consensus-mechanisms/pow/mining) konularını okumanızı öneririz. +Bu sayfayı daha iyi anlamak için, öncelikle [iş ispatı mutabakatı](/developers/docs/consensus-mechanisms/pow) ve [madencilik](/developers/docs/consensus-mechanisms/pow/mining) hakkında bilgi edinmenizi öneririz. ## Dagger Hashimoto {#dagger-hashimoto} Dagger Hashimoto, Ethash'ın yerini aldığı Ethereum madenciliği için öncü bir araştırma algoritmasıydı. İki farklı algoritmanın birleşimiydi: Dagger ve Hashimoto. Sadece bir araştırma uygulaması olarak kaldı ve Ethereum Ana Ağı başlatıldığında, Ethereum 1.0 için iş ispatı algoritması yani Ethash çalıştırıldığında geçerliliği kalmadı. -[Dagger](http://www.hashcash.org/papers/dagger.html), rastgele dilimleri bir araya getirilen bir [Yönlendirilmiş Döngüsel Grafik](https://en.wikipedia.org/wiki/Directed_acyclic_graph) oluşturulmasını içerir. Temel ilke, her nonce'nin büyük bir toplam veri ağacının yalnızca küçük bir bölümünü gerektirmesidir. Her bir nonce için alt ağacı yeniden hesaplamak, madencilik için yasaklayıcıdır - bu nedenle ağacı depolama ihtiyacı vardır - ancak tek bir nonce'nin doğrulama değeri için tamamdır. Dagger, Scrypt gibi bellek açısından zor olan ancak bellek sertliği gerçekten güvenli seviyelere yükseldiğinde doğrulanması zor olan mevcut algoritmalara bir alternatif olacak şekilde tasarlanmıştır. Bununla birlikte, Dagger paylaşılan bellek donanım hızlandırmasına karşı savunmasızdı ve diğer araştırma yollarının lehine düştü. +[Dagger](http://www.hashcash.org/papers/dagger.html), rastgele dilimlerinin birlikte hash'lendiği bir [Yönlendirilmiş Asiklik Grafik](https://en.wikipedia.org/wiki/Directed_acyclic_graph) oluşturulmasını içerir. Temel ilke, her nonce'nin büyük bir toplam veri ağacının yalnızca küçük bir bölümünü gerektirmesidir. Her bir nonce için alt ağacı yeniden hesaplamak, madencilik için yasaklayıcıdır - bu nedenle ağacı depolama ihtiyacı vardır - ancak tek bir nonce'nin doğrulama değeri için tamamdır. Dagger, Scrypt gibi bellek açısından zor olan ancak bellek sertliği gerçekten güvenli seviyelere yükseldiğinde doğrulanması zor olan mevcut algoritmalara bir alternatif olacak şekilde tasarlanmıştır. Bununla birlikte, Dagger paylaşılan bellek donanım hızlandırmasına karşı savunmasızdı ve diğer araştırma yollarının lehine düştü. [Hashimoto](http://diyhpl.us/%7Ebryan/papers2/bitcoin/meh/hashimoto.pdf), G/Ç'ye bağlı olarak ASIC direnci ekleyen bir algoritmadır (yani bellek okumaları, madencilik sürecinde sınırlayıcı faktördür). Teori, RAM'in hesaplamadan daha erişilebilir olmasıdır; milyarlarca dolarlık araştırma, RAM'i, genellikle neredeyse rastgele erişim kalıplarını (dolayısıyla "rastgele erişim belleği") içeren farklı kullanım durumları için optimize etmeyi zaten araştırdı. Sonuç olarak, mevcut RAM'in algoritmayı değerlendirmek için optimale orta derecede yakın olması muhtemeldir. Hashimoto, blok zincirini bir veri kaynağı olarak kullanır ve aynı anda yukarıdaki (1) ve (3)'ü sağlar. Dagger-Hashimoto, Dagger ve Hashimoto algoritmalarının değiştirilmiş versiyonlarını kullandı. Dagger Hashimoto ve Hashimoto arasındaki fark, veri kaynağı olarak blok zinciri kullanmak yerine Dagger Hashimoto'nun her N blokta blok verisine dayalı olarak güncellenen özel olarak oluşturulmuş bir veri seti kullanmasıdır. Veri kümesi, hafif istemci doğrulama algoritması için her nonce'ye özgü bir alt kümenin verimli bir şekilde hesaplanmasına olanak tanıyan Dagger algoritması kullanılarak oluşturulur. Dagger Hashimoto ve Dagger arasındaki fark, orijinal Dagger'dan farklı olarak, bloğu sorgulamak için kullanılan veri kümesinin yarı kalıcı olması ve yalnızca ara sıra (örneğin haftada bir) güncellenmesidir. Bu, veri kümesi oluşturma çabasının sıfıra yakın olduğu anlamına gelir, bu nedenle Sergio Lerner'in paylaşılan bellek hızlandırmalarıyla ilgili argümanları ihmal edilebilir hale gelir. -[Dagger-Hashimoto](/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/dagger-hashimoto) hakkında daha fazla bilgi. +[Dagger-Hashimoto](/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/dagger-hashimoto) hakkında daha fazlası. ## Ethash {#ethash} Ethash, güncelde kullanımdan kalkmış bir iş ispatı mimarisinin altında gerçek Ethereum Ana Ağı'nda kullanılan madencilik algoritmasıydı. Ethash, algoritma önemli ölçüde güncellendikten sonra Dagger-Hashimoto'nun belirli bir versiyonuna verilen yeni bir isimdi, ancak yine de selefinin temel ilkelerini devraldı. Ethereum Ana Ağı sadece Ethash'ı kullandı - Dagger Hashimoto, Ethereum ana ağında madenciliğin başlamasından önce geçerliliğini yitirmiş madencilik algoritmasının bir Ar-Ge sürümüydü. -[Ethash hakkında daha fazla bilgi](/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/ethash). +[Ethash hakkında daha fazlası](/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/ethash). -## Daha fazla okuma {#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/dapps/index.md b/public/content/translations/tr/developers/docs/dapps/index.md index 5c37bbbe90f..8b62e042ed6 100644 --- a/public/content/translations/tr/developers/docs/dapps/index.md +++ b/public/content/translations/tr/developers/docs/dapps/index.md @@ -1,96 +1,96 @@ --- -title: Dapp'lere giriş +title: "Merkeziyetsiz uygulamalara teknik giriş" description: lang: tr --- -Bir merkeziyetsiz uygulama (dapp), bir [akıllı sözleşme](/developers/docs/smart-contracts/) ile bir ön uç kullanıcı arayüzünü birleştiren merkeziyetsiz bir ağ üzerine kurulmuş bir uygulamadır. Ethereum'da akıllı sözleşmeler açık API'ler gibi erişilebilir ve şeffaftır: Bu yüzden merkeziyetsiz uygulamanız, başka birinin yazdığı bir akıllı sözleşmeyi bile içerebilir. +Merkeziyetsiz bir uygulama (dapp), [akıllı sözleşme](/developers/docs/smart-contracts/) ile ön uç kullanıcı arayüzünü birleştiren merkeziyetsiz bir ağ üzerinde oluşturulmuş bir uygulamadır. Ethereum'da akıllı sözleşmeler açık API'ler gibi erişilebilir ve şeffaftır: Bu yüzden merkeziyetsiz uygulamanız, başka birinin yazdığı bir akıllı sözleşmeyi bile içerebilir. -## Ön koşullar {#prerequisites} +## Ön Koşullar {#prerequisites} -Dapp'ler hakkında bilgi edinmeden önce, [blok zinciri temellerini](/developers/docs/intro-to-ethereum/) gözden geçirmeli ve Ethereum ağı ve ağın nasıl merkeziyetsizleştirildiği hakkında bilgi edinmelisiniz. +Merkeziyetsiz uygulamalar hakkında bilgi edinmeden önce [blokzincir temellerini](/developers/docs/intro-to-ethereum/) ele almalı, Ethereum ağı ve nasıl merkeziyetsiz olduğu hakkında okuma yapmalısınız. -## Dapp'in tanımı {#definition-of-a-dapp} +## Merkeziyetsiz uygulamanın tanımı {#definition-of-a-dapp} Bir dapp'in arka uç kodu, merkeziyetsiz bir eşler arası ağ üzerinde çalışır. Bunu, arka uç kodunun merkezi sunucularda çalıştığı bir uygulamanın tersi olarak düşünebilirsiniz. -Bir dapp, arka ucuna çağrı yapabilen herhangi bir dilde yazılmış (tıpkı bir uygulama gibi) ön uç koduna ve kullanıcı arayüzlerine sahip olabilir. Ayrıca, ön ucu [IPFS](https://ipfs.io/) gibi merkeziyetsiz saklama alanlarında barındırılabilir. +Bir dapp, arka ucuna çağrı yapabilen herhangi bir dilde yazılmış (tıpkı bir uygulama gibi) ön uç koduna ve kullanıcı arayüzlerine sahip olabilir. Ayrıca, ön yüzü [IPFS](https://ipfs.io/) gibi merkeziyetsiz depolama alanlarında barındırılabilir. -- **Merkeziyetsiz** - hiçbir kişi veya grubun kontrole sahip olmadığı; açık, ortak ve merkeziyetsiz bir platform olan Ethereum üzerinde çalışırlar -- **Deterministik** - dapp'ler, yürütüldükleri ortamdan bağımsız olarak aynı fonksiyonu yerine getirirler -- **Turing-tam** - gereken kaynaklar sağlandığında herhangi bir eylemi gerçekleştirebilirler -- **İzole** - Ethereum Sanal Makinesi olarak bilinen sanal bir ortamda yürütülürler, böylece akıllı sözleşmede bir hata olursa, blok zinciri ağının normal işleyişi engellemez +- **Merkeziyetsiz** - merkeziyetsiz uygulamalar, tek bir kişinin veya grubun kontrol sahibi olmadığı açık, halka açık, merkeziyetsiz bir platform olan Ethereum'da çalışır +- **Deterministik** - merkeziyetsiz uygulamalar, yürütüldükleri ortamdan bağımsız olarak aynı işlevi yerine getirir +- **Turing tam** - merkeziyetsiz uygulamalar, gerekli kaynaklar sağlandığında herhangi bir eylemi gerçekleştirebilir +- **İzole** - merkeziyetsiz uygulamalar, Ethereum Sanal Makinesi olarak bilinen sanal bir ortamda yürütülür; böylece akıllı sözleşmede bir hata olması durumunda blokzincir ağının normal işleyişini engellemez ### Akıllı sözleşmeler hakkında {#on-smart-contracts} -Dapp'leri kullanıma sokmak için, en iyi şekilde bir dapp'in arka ucu olarak tanımlayabileceğimiz akıllı sözleşmeleri kullanıma sokmamız gerekir. Ayrıntılı bir genel bakış için [akıllı sözleşmeler](/developers/docs/smart-contracts/) hakkındaki bölümümüzü ziyaret edin. +Dapp'leri kullanıma sokmak için, en iyi şekilde bir dapp'in arka ucu olarak tanımlayabileceğimiz akıllı sözleşmeleri kullanıma sokmamız gerekir. Ayrıntılı bir genel bakış için [akıllı sözleşmeler](/developers/docs/smart-contracts/) hakkındaki bölümümüze bakın. Akıllı sözleşme, Ethereum blok zincirinde yaşayan ve tam olarak programlandığı gibi çalışan bir koddur. Akıllı sözleşmeler ağa dağıtıldıktan sonra bunları değiştiremezsiniz. Dapp'ler, bir kişi veya şirket tarafından değil, sözleşmeye yazılan mantık tarafından kontrol edildikleri için merkeziyetsiz hâle getirilebilir. Bu aynı zamanda, sözleşmelerinizi çok dikkatli bir şekilde tasarlamanız ve iyice test etmeniz gerektiği anlamına gelir. -## Dapp deliştirmenin faydaları {#benefits-of-dapp-development} +## Merkeziyetsiz uygulama geliştirmenin avantajları {#benefits-of-dapp-development} -- **Sıfır kesinti** – Akıllı sözleşme dağıtıldıktan ve blok zincirine ulaştıktan sonra ağ bir bütün olarak sözleşme ile etkileşmek isteyen istemcilere her zaman hizmet edebilecektir. Bu nedenle kötü niyetli aktörler, bireysel dapp'lere yönelik hizmet reddi saldırıları başlatamaz. -- **Gizlilik** – Bir dapp dağıtmak veya onunla etkileşime girmek için gerçek hayattaki kimliğinizi sağlamanız gerekmez. -- **Sansüre direnç** – Ağdaki hiçbir varlık, kullanıcıların işlem göndermesini, Dapp'leri dağıtmasını veya blok zincirinden veri okumasını engelleyemez. -- **Tam veri bütünlüğü** – Blok zincirinde depolanan veriler, kriptografik temeller sayesinde değişmez ve tartışılmazdır. Kötü niyetli aktörler, hâlihazırda kamuya açıklanmış olan işlemleri veya diğer verileri taklit edemezler. -- **Güven gerektirmeyen hesaplama/doğrulanabilir davranış** – Akıllı sözleşmeler, analiz edilebilirler ve merkezi bir otoriteye güvenmeye gerek kalmadan öngörülebilir şekillerde yürütülmeleri garanti edilir. Bu geleneksel modeller için geçerli değildir: Örneğin, çevrimiçi bankacılık sistemlerini kullandığımızda, finansal kurumların finansal verilerimizi kötüye kullanmayacağına, kayıtları kurcalamayacağına veya saldırıya uğramayacağına güvenmemiz gerekir. +- **Sıfır kesinti** – Akıllı sözleşme blokzincire dağıtıldıktan sonra, ağ bir bütün olarak sözleşmeyle etkileşim kurmak isteyen istemcilere her zaman hizmet verebilecektir. Bu nedenle kötü niyetli aktörler, bireysel dapp'lere yönelik hizmet reddi saldırıları başlatamaz. +- **Gizlilik** – Bir merkeziyetsiz uygulamayı dağıtmak veya onunla etkileşim kurmak için gerçek dünya kimliğinizi sağlamanız gerekmez. +- **Sansüre karşı direnç** – Ağdaki hiçbir tek varlık, kullanıcıların işlem göndermesini, merkeziyetsiz uygulamaları dağıtmasını veya blokzincirden veri okumasını engelleyemez. +- **Tam veri bütünlüğü** – Kriptografik temeller sayesinde blokzincirde saklanan veriler değiştirilemez ve tartışılamaz. Kötü niyetli aktörler, hâlihazırda kamuya açıklanmış olan işlemleri veya diğer verileri taklit edemezler. +- **Güven gerektirmeyen hesaplama/doğrulanabilir davranış** – Akıllı sözleşmeler analiz edilebilir ve merkezi bir otoriteye güvenme ihtiyacı olmaksızın, öngörülebilir şekillerde yürütülmesi garanti edilir. Bu geleneksel modeller için geçerli değildir: Örneğin, çevrimiçi bankacılık sistemlerini kullandığımızda, finansal kurumların finansal verilerimizi kötüye kullanmayacağına, kayıtları kurcalamayacağına veya saldırıya uğramayacağına güvenmemiz gerekir. -## Dapp geliştirmenin zorlukları {#drawbacks-of-dapp-development} +## Merkeziyetsiz uygulama geliştirmenin dezavantajları {#drawbacks-of-dapp-development} -- **Bakım** – Blok zincirinde yayınlanan kod ve verilerin değiştirilmesi daha zor olduğu için dapp'lerin bakımı daha zor olabilir. Geliştiricilerin, eski bir sürümde hatalar veya güvenlik riskleri tanımlansa bile dağıtıldıktan sonra dapp'lerinde (veya bir dapp tarafından depolanan temel verilerde) güncellemeler yapmaları zordur. -- **Performans ek yükü** – Büyük bir performans ek yükü mevcuttur ve ölçeklendirme aşırı zordur. Ethereum'un arzu ettiği güvenlik, bütünlük, şeffaflık ve güvenilirlik seviyesini elde etmek için her düğüm, her işlemi çalıştırır ve depolar. Buna ek olarak, hisse ispatı mutabakatı da zaman alır. -- **Ağ tıkanıklığı** – Bir dapp çok fazla bilgisayar kaynağı kullanıyorsa, tüm ağ tıkanır. Şu anda ağ, saniyede yalnızca yaklaşık 10-15 işlem gerçekleştirebilir; işlemler bundan daha hızlı gönderiliyorsa onaylanmamış işlemler havuzu hızla şişebilir. -- **Kullanıcı deneyimi** – Ortalama bir kullanıcı blok zinciriyle gerçekten güvenli bir etkileşime girmek için gerekli bir araç kümesini kurmayı aşırı zor bulabileceği için kullanıcı dostu deneyimler geliştirmek çok daha zor olabilir. -- **Merkezileşme** – Ethereum'un temel katmanı üzerinde inşa edilmiş kullanıcı dostu ve geliştirici dostu çözümler merkezileşmiş servislere benzeyecek şekilde sonuçlanabilir. Örnek olarak, bu tip servisler anahtarlar veya diğer hassas bilgileri sunucu tarafında depolayabilir, merkezi bir sunucu kullanarak bir ön uç sunabilir veya önemli bir iş mantığını blok zincirine yazmadan önce merkezi bir sunucuda çalıştırabilir. Merkezileşme, blok zincirinin geleneksel modele göre avantajlarının çoğunu (tamamını da olabilir) ortadan kaldırır. +- **Bakım** – Blokzincirde yayınlanan kod ve verilerin değiştirilmesi daha zor olduğundan, merkeziyetsiz uygulamaların bakımı daha zor olabilir. Geliştiricilerin, eski bir sürümde hatalar veya güvenlik riskleri tanımlansa bile dağıtıldıktan sonra dapp'lerinde (veya bir dapp tarafından depolanan temel verilerde) güncellemeler yapmaları zordur. +- **Performans ek yükü** – Çok büyük bir performans ek yükü vardır ve ölçeklendirme gerçekten zordur. Ethereum'un arzu ettiği güvenlik, bütünlük, şeffaflık ve güvenilirlik seviyesini elde etmek için her düğüm, her işlemi çalıştırır ve depolar. Buna ek olarak, hisse ispatı mutabakatı da zaman alır. +- **Ağ sıkışıklığı** – Bir merkeziyetsiz uygulama çok fazla hesaplama kaynağı kullandığında, tüm ağda tıkanıklık yaşanır. Şu anda ağ, saniyede yalnızca yaklaşık 10-15 işlem gerçekleştirebilir; işlemler bundan daha hızlı gönderiliyorsa onaylanmamış işlemler havuzu hızla şişebilir. +- **Kullanıcı deneyimi** – Ortalama bir son kullanıcı blokzincir ile gerçekten güvenli bir şekilde etkileşim kurmak için gerekli olan bir araç yığınını kurmayı çok zor bulabileceğinden, kullanıcı dostu deneyimler tasarlamak daha zor olabilir. +- **Merkezileşme** – Ethereum'un temel katmanı üzerine inşa edilen kullanıcı dostu ve geliştirici dostu çözümler, yine de merkezi hizmetler gibi görünebilir. Örnek olarak, bu tip servisler anahtarlar veya diğer hassas bilgileri sunucu tarafında depolayabilir, merkezi bir sunucu kullanarak bir ön uç sunabilir veya önemli bir iş mantığını blok zincirine yazmadan önce merkezi bir sunucuda çalıştırabilir. Merkezileşme, blok zincirinin geleneksel modele göre avantajlarının çoğunu (tamamını da olabilir) ortadan kaldırır. -## Görsel olarak öğrenmeyi mi tercih ediyorsunuz? {#visual-learner} +## Görerek öğrenmeyi mi tercih ediyorsunuz? {#visual-learner} -## Dapp oluşturmak için araçlar {#dapp-tools} +## Merkeziyetsiz uygulamalar oluşturmak için araçlar {#dapp-tools} -**Scaffold-ETH _- Akıllı sözleşmenize adapte olan bir ön uç kullanarak Solidity ile hızlıca deney yapın._** +**Scaffold-ETH _- Akıllı sözleşmenize uyum sağlayan bir ön yüz kullanarak Solidity ile hızla denemeler yapın._** - [GitHub](https://github.com/scaffold-eth/scaffold-eth-2) -- [Örnek dapp](https://punkwallet.io/) +- [Örnek merkeziyetsiz uygulama](https://punkwallet.io/) -**Create Eth App _- Tek komutla Ethereum destekli uygulamalar oluşturun._** +**Create Eth App _- Tek bir komutla Ethereum destekli uygulamalar oluşturun._** - [GitHub](https://github.com/paulrberg/create-eth-app) -**One Click Dapp _- Bir [ABI](/glossary/#abi) ile dapp ön uçları oluşturmak için kullanılan ücretsiz ve açık kaynaklı bir araç._** +**One Click Dapp _- Bir [ABI](/glossary/#abi)'den merkeziyetsiz uygulama ön yüzleri oluşturmak için ücretsiz ve açık kaynaklı yazılım aracı._** - [oneclickdapp.com](https://oneclickdapp.com) - [GitHub](https://github.com/oneclickdapp/oneclickdapp-v1) -**Etherflow _- Ethereum geliştiricilerinin tarayıcı üzerinden düğümlerini test etmeleri ve RPC çağrılarını bileştirmeleri ve ayıklamaları için ücretsiz ve açık kaynaklı bir araç._** +**Etherflow _- Ethereum geliştiricilerinin düğümlerini test etmeleri ve tarayıcıdan RPC çağrıları oluşturup hata ayıklaması yapmaları için bir FOSS aracı._** - [etherflow.quiknode.io](https://etherflow.quiknode.io/) - [GitHub](https://github.com/abunsen/etherflow) -**thirdweb _- Web3 geliştirme için her dilde SDK'lar, akıllı sözleşmeler, araçlar ve altyapı._** +**thirdweb _- Web3 geliştirmesi için her dilde SDK'ler, akıllı sözleşmeler, araçlar ve altyapı._** -- [Ana Sayfa](https://thirdweb.com/) -- [Dokümanlar](https://portal.thirdweb.com/) +- [Ana sayfa](https://thirdweb.com/) +- [Dokümantasyon](https://portal.thirdweb.com/) - [GitHub](https://github.com/thirdweb-dev/) -**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 _- Akıllı sözleşmeleri dağıtmak, kredi kartı ve zincirler arası ödemeleri etkinleştirmek ve NFT'leri oluşturmak, dağıtmak, satmak, depolamak ve düzenlemek için API'leri kullanmak üzere kurumsal düzeyde bir web3 geliştirme platformu._** - [crossmint.com](https://www.crossmint.com) -- [Dokümanlar](https://docs.crossmint.com) +- [Dokümantasyon](https://docs.crossmint.com) - [Discord](https://discord.com/invite/crossmint) -## Daha fazla bilgi {#further-reading} +## Daha fazla kaynak {#further-reading} -- [Dapps'i keşfedin](/apps) +- [Merkeziyetsiz uygulamaları keşfedin](/apps) - [Bir Web 3.0 uygulamasının mimarisi](https://www.preethikasireddy.com/post/the-architecture-of-a-web-3-0-application) - _Preethi Kasireddy_ -- [Merkeziyetsiz uygulamalar hakkında 2021 rehberi](https://limechain.tech/blog/what-are-dapps-the-2021-guide/) - _LimeChain_ +- [Merkeziyetsiz uygulamalar için 2021 rehberi](https://limechain.tech/blog/what-are-dapps-the-2021-guide/) - _LimeChain_ - [Merkeziyetsiz Uygulamalar Nedir?](https://www.gemini.com/cryptopedia/decentralized-applications-defi-dapps) - _Gemini_ - [Popüler merkeziyetsiz uygulamalar](https://www.alchemy.com/dapps) - _Alchemy_ -_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} +## İlgili Konular {#related-topics} - [Ethereum yığınına giriş](/developers/docs/ethereum-stack/) -- [Geliştirici çerçeveleri](/developers/docs/frameworks/) +- [Geliştirme çerçeveleri](/developers/docs/frameworks/) diff --git a/public/content/translations/tr/developers/docs/data-and-analytics/block-explorers/index.md b/public/content/translations/tr/developers/docs/data-and-analytics/block-explorers/index.md index 296f75fcf9c..3617bf4beea 100644 --- a/public/content/translations/tr/developers/docs/data-and-analytics/block-explorers/index.md +++ b/public/content/translations/tr/developers/docs/data-and-analytics/block-explorers/index.md @@ -1,6 +1,6 @@ --- -title: Blok arayıcıları -description: İşlemler, hesaplar, sözleşmeler ve daha fazlası hakkında bilgi sorgulayabileceğiniz blok zinciri verileri dünyasına açılan portalınız olan blok arayıcılarına giriş. +title: "Blok arayıcıları" +description: "İşlemler, hesaplar, sözleşmeler ve daha fazlası hakkında bilgi sorgulayabileceğiniz blok zinciri verileri dünyasına açılan portalınız olan blok arayıcılarına giriş." lang: tr sidebarDepth: 3 --- @@ -13,19 +13,18 @@ Bir blok arayıcısının size verdiği verileri anlamlandırabilmeniz için Eth ## Hizmetler {#services} -- [Etherscan](https://etherscan.io/) -_Ayrıca Çince, Korece, Rusça ve Japonca dillerinde de mevcut_ +- [Etherscan](https://etherscan.io/) -_Ayrıca Çince, Korece, Rusça ve Japonca dillerinde de mevcuttur_ - [3xpl](https://3xpl.com/ethereum) - [Beaconcha.in](https://beaconcha.in/) -- [Blockchair](https://blockchair.com/ethereum) -_Ayrıca İspanyolca, Fransızca, İtalyanca, Danca, Portekizce, Rusça, Çince ve Farsça olarak da mevcut_ +- [Blockchair](https://blockchair.com/ethereum) -_Ayrıca İspanyolca, Fransızca, İtalyanca, Hollandaca, Portekizce, Rusça, Çince ve Farsça dillerinde de mevcuttur_ - [Blockscout](https://eth.blockscout.com/) - [Chainlens](https://www.chainlens.com/) - [DexGuru Blok Arayıcısı](https://ethereum.dex.guru/) - [Etherchain](https://www.etherchain.org/) -- [Ethernow](https://www.ethernow.xyz/) -- [Ethplorer](https://ethplorer.io/) -_Ayrıca Çince, İspanyolca, Fransızca, Türkçe, Rusça, Korece ve Vietnamca dillerinde de mevcut_ +- [Ethplorer](https://ethplorer.io/) -_Ayrıca Çince, İspanyolca, Fransızca, Türkçe, Rusça, Korece ve Vietnamca dillerinde de mevcuttur_ - [EthVM](https://www.ethvm.com/) -- [Oklink](https://www.oklink.com/eth) -- [Rantom](https://rantom.app/) +- [OKLink](https://www.oklink.com/eth) +- [Ethseer](https://ethseer.io) ## Açık kaynaklı araçlar {#open-source-tools} @@ -38,7 +37,7 @@ Ethereum, tasarımı itibariyle şeffaf olduğu için yapılan her işlem doğru İşte bir blok arayıcısından alabileceğiniz veri türlerinin bir özeti. -### Yürütme verisi {#execution-data} +### Yürütme verileri {#execution-data} Her 12 saniyede bir Ethereum'a yeni bloklar eklenir (eğer ki bir blok önericisi kendi turunu kaçırmazsa), yani blok arayıcılarına eklenen neredeyse sabit bir veri akışı vardır. Bloklar, yararlı bulabileceğiniz birçok önemli veri içerir: @@ -94,7 +93,7 @@ Blok arayıcıları, insanların işlemlerinin ilerlemesini takip etmeleri için - Gaz limiti - Bu işlemin tüketebileceği maksimum gaz birimi sayısı - Kullanılan gaz - İşlemin tükettiği gerçek gaz birimi miktarı - Gaz fiyatı - Gaz birimi başına belirlenen fiyat -- Tek seferlik sayı - `başlangıç` adresinin işlem numarası (bu değerin 0'dan başladığını, bu nedenle `100` olan bir tek seferlik sayı değerinin aslında bu hesap tarafından gönderilen 101. işlem olduğunu unutmayın +- Nonce - `from` adresi için işlem numarasıdır (bunun 0'dan başladığını, bu nedenle `100`'lük bir nonce'nin aslında bu hesap tarafından gönderilen 101. işlem olacağını unutmayın) - Giriş verisi – İşlemin gerektirdiği herhangi bir ek bilgi ### Hesaplar {#accounts} @@ -120,7 +119,7 @@ Akıllı sözleşme hesapları, bir kullanıcı hesabının sahip olacağı tüm - Sözleşme oluşturma kodu - Akıllı sözleşmenin derlenmiş bayt kodu - Solidity veya Vyper vb. ile yazılmış bir akıllı sözleşmeyi derlerken oluşturulur. - Sözleşme olayları - Akıllı sözleşmede çağırılan metotların bir geçmişi - temelde sözleşmenin nasıl ve ne sıklıkla kullanıldığını görmek için bir yol -### Token'lar {#tokens} +### Jetonlar {#tokens} Token'lar bir tür sözleşmedir, bu nedenle akıllı sözleşmelere benzer verilere sahip olurlar. Ancak değerli oldukları ve alınıp satılabildikleri için ek veri noktalarına sahiptirler: @@ -235,23 +234,20 @@ Fikir birliği katmanı üst düzey verileri şunları içerir: - Hisselenmiş ETH - Ağda hisselenmiş ETH miktarı - Ortalama bakiye - Doğrulayıcıların ortalama ETH bakiyesi -## Blok arayıcıları {#block-explorers} +## Blok Arayıcıları {#block-explorers} -- [Etherscan](https://etherscan.io/) - Ethereum Ana Ağı ve Sepolia Test Ağı'ndan veri çekmek için kullanabileceğiniz bir blok arayıcısı -- [3xpl](https://3xpl.com/ethereum) - veri kümelerini indirmeye izin veren reklamsız, açık kaynaklı bir Ethereum arayıcısı -- [Beaconcha.in](https://beaconcha.in/) - Ethereum Ana Ağı ve Sepolia Test Ağı için açık kaynaklı bir blok arayıcısı +- [Etherscan](https://etherscan.io/) - Ethereum Ana Ağı ve test ağından veri çekmek için kullanabileceğiniz bir blok arayıcısı +- [3xpl](https://3xpl.com/ethereum) - veri kümelerini indirmeye izin veren, reklamsız, açık kaynaklı bir Ethereum arayıcısı +- [Beaconcha.in](https://beaconcha.in/) - Ethereum Ana Ağı ve test ağı için açık kaynaklı bir blok arayıcısı - [Blockchair](https://blockchair.com/ethereum) - en özel Ethereum arayıcısı. Ayrıca (bellek havuzu) verileri sıralamak ve filtrelemek için kullanılır - [Etherchain](https://www.etherchain.org/) - Ethereum Ana Ağı için bir blok arayıcısı -- [Ethplorer](https://ethplorer.io/) - Ethereum Ana Ağı ve Sepolia test ağı için token'lar üzerine odaklı bir blok arayıcısı -- [Rantom](https://rantom.app/) - Detaylı anlayış için kullanıcı dostu açık kaynaklı bir DeFi & NFT işlem görüntüleyicisi -- [Ethernow](https://www.ethernow.xyz/) - Ethereum ana ağı ön zincir katmanını görmenizi sağlayan gerçek zamanlı bir işlem kâşifi -- [Otterscan](https://otterscan.io/) - Ethereum için açık kaynaklı alternatif bir blok arayıcısı +- [Ethplorer](https://ethplorer.io/) - Ethereum Ana Ağı ve Kovan test ağı için jetonlara odaklanan bir blok arayıcısı -## 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!_ -## İlgili konular {#related-topics} +## Alakalı başlıklar {#related-topics} - [İşlemler](/developers/docs/transactions/) - [Hesaplar](/developers/docs/accounts/) diff --git a/public/content/translations/tr/developers/docs/data-and-analytics/index.md b/public/content/translations/tr/developers/docs/data-and-analytics/index.md index ab235c7fb68..cbe147dfbdc 100644 --- a/public/content/translations/tr/developers/docs/data-and-analytics/index.md +++ b/public/content/translations/tr/developers/docs/data-and-analytics/index.md @@ -1,55 +1,72 @@ --- title: Veri ve analizler -description: Dapp'lerinizde kullanmak için zincir içi analitik ve veriler nasıl elde edilir +description: "Merkeziyetsiz uygulamalarınızda kullanmak üzere zincir üstü analitikleri ve verileri nasıl alırsınız" lang: tr --- ## Giriş {#Introduction} -Ağın kullanımı artmaya devam ettikçe, zincir üzerindeki verilerde artan miktarda değerli bilgi bulunacaktır. Veri hacmi hızlıca artarsa, bu bilgileri raporlamak veya bir dapp'ı yönlendirmek için hesaplama, toplama zamanı veya işlem süreci açısından ağır bir çaba haline gelebilir. +Ağın kullanımı artmaya devam ettikçe, zincir üstü verilerde giderek artan miktarda değerli bilgi yer alacaktır. Veri hacmi hızlıca artarsa, bu bilgileri raporlamak veya bir dapp'ı yönlendirmek için hesaplama, toplama zamanı veya işlem süreci açısından ağır bir çaba haline gelebilir. Mevcut veri sağlayıcılarından yararlanmak; geliştirmeyi hızlandırabilir, daha doğru sonuçlar üretebilir ve devam eden bakım çabalarını azaltabilir. Bu, bir ekibin projelerinin sağlamaya çalıştığı temel işlevselliğe odaklanmalarını sağlar. ## Ön Koşullar {#prerequisites} -Veri analizi bağlamında bunları kullanmayı daha iyi anlamak için [Blok Arayıcıları](/developers/docs/data-and-analytics/block-explorers/)'nın temel mantığını anlamalısınız. Ayrıca, bir sistem tasarımına kattıkları faydaları anlamak için [indeks](/glossary/#index) kavramını öğrenin. +Veri analizi bağlamında kullanımlarını daha iyi anlamak için [Blok Arayıcıları](/developers/docs/data-and-analytics/block-explorers/) temel konseptini anlamalısınız. Ayrıca, bir sistem tasarımına kattıkları faydaları anlamak için [indeks](/glossary/#index) kavramına aşina olun. -Mimari kurulum temelleri açısından, teoride olsa bile [API](https://www.wikipedia.org/wiki/API) ve [REST](https://www.wikipedia.org/wiki/Representational_state_transfer)'in ne olduğunu anlamak. +Mimari temeller açısından, teoride bile olsa bir [API](https://www.wikipedia.org/wiki/API) ve [REST](https://www.wikipedia.org/wiki/Representational_state_transfer) öğesinin ne olduğunu anlamak. -## Blok arayıcıları {#block-explorers} +## Blok Arayıcıları {#block-explorers} -Çoğu [Block Arayıcısı](/developers/docs/data-and-analytics/block-explorers/) geliştiricilere bloklar, işlemler, doğrulayıcılar, hesaplar ve zincir üstündeki diğer aktiviteler hakkında gerçek zamanlı verilerin görünürlüğünü sağlamak için [RESTful](https://www.wikipedia.org/wiki/Representational_state_transfer) [API](https://www.wikipedia.org/wiki/API) ağ geçitleri sunar. +Birçok [Blok Arayıcısı](/developers/docs/data-and-analytics/block-explorers/), geliştiricilere bloklar, işlemler, doğrulayıcılar, hesaplar ve diğer zincir üstü faaliyetler hakkındaki gerçek zamanlı verilere görünürlük sağlayacak [RESTful](https://www.wikipedia.org/wiki/Representational_state_transfer) [API](https://www.wikipedia.org/wiki/API) ağ geçitleri sunar. -Geliştiriciler daha sonra, kullanıcılarına [blok zincir](/glossary/#blockchain) ile benzersiz içgörüler ve etkileşimler sağlamak için bu verileri işleyebilir ve dönüştürebilir. Örneğin [Etherscan](https://etherscan.io) her 12 saniyelik aralıkta, yuvalar için yürütme ve mutabakat verileri sağlar. +Geliştiriciler daha sonra bu verileri işleyip dönüştürerek kullanıcılarına [blok zinciri](/glossary/#blockchain) ile benzersiz içgörüler ve etkileşimler sunabilir. Örneğin, [Etherscan](https://etherscan.io) ve [Blockscout](https://eth.blockscout.com) her 12 saniyelik yuva için yürütme ve mutabakat verileri sağlar. ## The Graph {#the-graph} -[Graph Network](https://thegraph.com/), blok zincir verilerini düzenlemek için merkeziyetsiz bir endeksleme protokolüdür. Geliştiriciler, The Graph ile zincir üstü verileri toplamak için zincir dışı ve merkezi veri depoları oluşturmak ve yönetmek yerine, tamamen genel altyapı üzerinde çalışan sunucusuz uygulamalar oluşturabilir. +[The Graph](https://thegraph.com/), alt grafikler olarak bilinen açık API'ler aracılığıyla blok zinciri verilerini sorgulamanın kolay bir yolunu sunan bir indeksleme protokolüdür. -Geliştiriciler, [GraphQL](https://graphql.org/)'u kullanarak, alt grafikler olarak bilinen küratörlüğünde açık API'lardan herhangi birini sorgulayarak dapp'larını sürmek için ihtiyaç duydukları gerekli bilgileri elde edebilirler. Bu dizinlenmiş alt grafikleri sorgulayarak, Raporlar ve merkeziyetsiz uygulamalar yalnızca performans ve ölçeklenebilirlik avantajları elde etmekle kalmaz, aynı zamanda ağ mutabakatı tarafından sağlanan yerleşik doğruluğu da elde eder. Ağa yeni iyileştirmeler ve/veya alt grafikler eklendikçe, projeleriniz bu geliştirmelerden yararlanmak için hızla yinelenebilir. +The Graph ile geliştiriciler şunlardan yararlanabilir: -## İstemci çeşitliliği +- Merkeziyetsiz indeksleme: Blok zinciri verilerinin birden çok indeksleyici aracılığıyla indekslenmesini sağlayarak tek bir hata noktasını ortadan kaldırır +- GraphQL sorguları: İndekslenmiş verileri sorgulamak için güçlü bir GraphQL arayüzü sağlayarak veri alımını çok basit hale getirir +- Özelleştirme: Blok zinciri verilerini dönüştürmek ve depolamak için kendi mantığınızı tanımlayın ve The Graph Ağı'ndaki diğer geliştiriciler tarafından yayınlanan alt grafikleri yeniden kullanın -[İstemci çeşitliliği](/developers/docs/nodes-and-clients/client-diversity/), Ethereum ağı için genel sağlık açısından önemlidir çünkü hatalara veya açıklardan kaynaklanabilecek istismar ve sorunlara karşı esneklik veya direnç sağlar. Şu anda [clientdiversity.org](https://clientdiversity.org/), [rated.network](https://www.rated.network), [supermajority.info](https://supermajority.info//) ve [Ethernodes](https://ethernodes.org/) dahil olmak üzere çeşitli istemci çeşitliliği gösterge panelleri bulunmaktadır. +5 dakika içinde bir alt grafik oluşturmak, dağıtmak ve sorgulamak için bu [hızlı başlangıç](https://thegraph.com/docs/en/quick-start/) kılavuzunu izleyin. + +## İstemci çeşitliliği {#client-diversity} + +[İstemci çeşitliliği](/developers/docs/nodes-and-clients/client-diversity/), hatalara ve istismarlara karşı dayanıklılık sağladığı için Ethereum ağının genel sağlığı açısından önemlidir. Şu anda [clientdiversity.org](https://clientdiversity.org/), [rated.network](https://www.rated.network), [supermajority.info](https://supermajority.info//) ve [Ethernodes](https://ethernodes.org/) dahil olmak üzere birkaç istemci çeşitliliği panosu bulunmaktadır. ## Dune Analytics {#dune-analytics} -[Dune Analytics](https://dune.com/), blok zincir verilerini ilişkisel veritabanı (DuneSQL) tablolarına önceden işler, kullanıcıların SQL kullanarak blok zincir verilerini sorgulaması ve sorgu sonuçlarına dayalı panolar oluşturmasına olanak tanır. Zincir üzerindeki veriler 4 ham tablo halinde düzenlenmektedir: `bloklar`, `işlemler`, (olay/faaliyet) `günlükler` ve (çağrı) `izler`. Popüler sözleşmeler ve protokoller çözümlenmiş yani deşifre edilmiş ve her birinin kendi olay ve çağrı tablo seti bulunmaktadır. Bu olay ve çağrı tabloları daha fazla işlenmiş ve protokol türlerine göre soyutlama tabloları olarak organize edilmiştir; örneğin, dex, borç verme, sabit paralar vb. +[Dune Analytics](https://dune.com/), blok zinciri verilerini ilişkisel veritabanı (DuneSQL) tablolarına önceden işler, kullanıcıların SQL kullanarak blok zinciri verilerini sorgulamasına ve sorgu sonuçlarına dayalı panolar oluşturmasına olanak tanır. Zincir üstü veriler 4 ham tabloya ayrılmıştır: `blocks`, `transactions`, (olay) `logs` ve (çağrı) `traces`. Popüler sözleşmeler ve protokoller çözümlenmiş yani deşifre edilmiş ve her birinin kendi olay ve çağrı tablo seti bulunmaktadır. Bu olay ve çağrı tabloları daha fazla işlenmiş ve protokol türlerine göre soyutlama tabloları olarak organize edilmiştir; örneğin, dex, borç verme, sabit paralar vb. + +## SQD {#sqd} + +[SQD](https://sqd.dev/), büyük hacimli verilere verimli, izinsiz erişim sağlamak için optimize edilmiş, merkeziyetsiz, hiper ölçeklenebilir bir veri platformudur. Şu anda olay günlükleri, işlem makbuzları, izler ve işlem başına durum farklılıkları da dahil olmak üzere geçmiş zincir üstü verileri sunmaktadır. SQD, saniyede 150 bin bloka kadar indeksleme hızına ulaşan, özel veri çıkarma ve işleme ardışık düzenleri oluşturmak için güçlü bir araç seti sunar. + +Başlamak için [belgeleri](https://docs.sqd.dev/) ziyaret edin veya SQD ile neler oluşturabileceğinize dair [EVM örneklerini](https://github.com/subsquid-labs/squid-evm-examples) görün. ## SubQuery Ağı {#subquery-network} -[SubQuery](https://subquery.network/), geliştiricilere Web3 projeleri için hızlı, güvenilir, merkeziyetsiz ve kişiselleştirilmiş API'ler sağlayan öncü veri indeksleyicisidir. SubQuery, 165'ten fazla ekosistemden (Ethereum dahil) geliştiricilerin, kullanıcıları için sezgisel ve sürükleyici deneyimler oluşturmalarını sağlayan zengin indeksli veriler sağlar. SubQuery ağı, durdurulamaz uygulamalarınızı dirençli ve merkeziyetsiz altyapı ağıyla güçlendirir. Veri işleme faaliyetleri için özel bir arka uç oluşturmaya zaman harcamak yerine geleceğin web3 uygulamalarını oluşturmak için SubQuery'nin blokzincir geliştirici araç setini kullanın. +[SubQuery](https://subquery.network/), geliştiricilere web3 projeleri için hızlı, güvenilir, merkeziyetsiz ve özelleştirilmiş API'ler sunan lider bir veri indeksleyicisidir. SubQuery, 165'ten fazla ekosistemden (Ethereum dahil) geliştiricilerin, kullanıcıları için sezgisel ve sürükleyici deneyimler oluşturmalarını sağlayan zengin indeksli veriler sağlar. SubQuery ağı, durdurulamaz uygulamalarınızı dirençli ve merkeziyetsiz altyapı ağıyla güçlendirir. Veri işleme faaliyetleri için özel bir arka uç oluşturmaya zaman harcamak yerine geleceğin web3 uygulamalarını oluşturmak için SubQuery'nin blokzincir geliştirici araç setini kullanın. + +Başlamak için, [SubQuery'nin yönetilen hizmetinde](https://managedservice.subquery.network/) veya [SubQuery'nin merkeziyetsiz ağında](https://app.subquery.network/dashboard) canlıya geçmeden önce test için yerel bir Docker ortamında Ethereum blok zinciri verilerini dakikalar içinde indekslemeye başlamak üzere [Ethereum hızlı başlangıç kılavuzunu](https://academy.subquery.network/quickstart/quickstart_chains/ethereum-gravatar.html) ziyaret edin. -Başlarken, Ethereum blokzinciri verilerini yerel bir Docker ortamında dakikalar içinde indekslemeye başlamak ve ardından [SubQuery'nin yönetilen hizmetinde](https://managedservice.subquery.network/) veya [SubQuery'nin merkeziyetsiz ağında](https://app.subquery.network/dashboard) kullanıma sunmadan önce test etmek için [Ethereum hızlı başlangıç ​​kılavuzunu](https://academy.subquery.network/quickstart/quickstart_chains/ethereum-gravatar.html) ziyaret edin. +## EVM Sorgu Dili {#evm-query-language} -## Ethernow - Bellek Havuzu Veri Programı {#ethernow} -[Blocknative](https://www.blocknative.com/), Ethereum'un geçmiş [bellek havuzu veri arşivine](https://www.ethernow.xyz/mempool-data-archive) açık erişim sunar. Bu, araştırmacıların ve topluluk yararına projelerin Ethereum Ana Ağının zincir öncesi katmanını keşfetmesini mümkün kılar. Bu veri grubu aktif olarak yönetilmektedir ve Ethereum ekosistemindeki bellek havuzu işlem etkinliklerinin en kapsayıcı kaydıdır. [Ethernow](https://www.ethernow.xyz/)'dan daha fazla bilgi edinin. +EVM Sorgu Dili (EQL), EVM (Ethereum Sanal Makinesi) zincirlerini sorgulamak için tasarlanmış SQL benzeri bir dildir. EQL'nin nihai hedefi, geliştiricilere ve araştırmacılara günlük kullanım için ergonomik bir sözdizimi sunarken, EVM zincirinin birinci sınıf vatandaşları (bloklar, hesaplar ve işlemler) üzerinde karmaşık ilişkisel sorguları desteklemektir. EQL ile geliştiriciler, alışılmış SQL benzeri sözdizimini kullanarak blok zinciri verilerini alabilir ve karmaşık standart kod ihtiyacını ortadan kaldırabilir. EQL, standart blok zinciri veri isteklerini (örneğin, Ethereum'daki bir hesabın nonce'unu ve bakiyesini almak veya mevcut blok boyutunu ve zaman damgasını getirmek) destekler ve sürekli olarak daha karmaşık istekler ve özellik setleri için destek eklemektedir. -## Daha Fazla Okuma {#further-reading} +## Ek Okumalar {#further-reading} +- [Kripto Verilerini Keşfetme I: Veri Akış Mimarileri](https://web.archive.org/web/20250125012042/https://research.2077.xyz/exploring-crypto-data-1-data-flow-architectures) - [Graph Ağına Genel Bakış](https://thegraph.com/docs/en/about/) -- [Graph Query Playground](https://thegraph.com/explorer/subgraph/graphprotocol/graph-network-mainnet?version=current) -- [EtherScan'deki API kodu örnekleri](https://etherscan.io/apis#contracts) -- [Beaconcha.in İçaret Zincir'i keşif aracı](https://beaconcha.in) +- [Graph Sorgu Oyun Alanı](https://thegraph.com/explorer/subgraph/graphprotocol/graph-network-mainnet?version=current) +- [EtherScan'deki API kod örnekleri](https://etherscan.io/apis#contracts) +- [Blockscout'taki API belgeleri](https://docs.blockscout.com/devs/apis) +- [Beaconcha.in İşaret Zinciri gezgini](https://beaconcha.in) - [Dune Temelleri](https://docs.dune.com/#dune-basics) - [SubQuery Ethereum Hızlı Başlangıç Kılavuzu](https://academy.subquery.network/indexer/quickstart/quickstart_chains/ethereum-gravatar.html) +- [SQD Ağına Genel Bakış](https://docs.sqd.dev/) +- [EVM Sorgu Dili](https://eql.sh/blog/alpha-release-notes) diff --git a/public/content/translations/tr/developers/docs/data-availability/blockchain-data-storage-strategies/index.md b/public/content/translations/tr/developers/docs/data-availability/blockchain-data-storage-strategies/index.md index cf20128ee6f..c9ca27fef37 100644 --- a/public/content/translations/tr/developers/docs/data-availability/blockchain-data-storage-strategies/index.md +++ b/public/content/translations/tr/developers/docs/data-availability/blockchain-data-storage-strategies/index.md @@ -1,6 +1,6 @@ --- title: Blokzincir Veri Depolama Stratejileri -description: Blokzincir kullanarak veri dopalamanın birçok yolu vardır. Bu makalede farklı stratejiler, bu stratejilerin maliyetleri, artıları ve eksileri ve bu stratejileri güvenli bir şekilde kullanmak için gerekenler karşılaştırılacaktır. +description: "Blokzincir kullanarak veri dopalamanın birçok yolu vardır. Bu makalede farklı stratejiler, bu stratejilerin maliyetleri, artıları ve eksileri ve bu stratejileri güvenli bir şekilde kullanmak için gerekenler karşılaştırılacaktır." lang: tr --- @@ -10,13 +10,13 @@ Blokzincirde ya da blokzincir tarafından güvence altına alınan bir şekilde - Calldata - L1 mekanizmalarıyla zincir dışında - Sözleşme "kodu" -- Olaylar +- Etkinlikler - EVM depolaması Hangi yöntemin kullanılacağı çeşitli ölçütlere bağlıdır: - Bilginin kaynağı. Calldata'daki bilgi direkt olarak blokzincirin kendisinden gelemez. -- Bilginin varış noktası. Calldata yalnızca başlattığı işlemde kullanılabilir. Olaylar zincir üstünde hiçbir zaman erişilebilir değildir. +- Bilginin varış noktası. Calldata yalnızca onu içeren işlemde kullanılabilir. Olaylar zincir üstünde hiçbir zaman erişilebilir değildir. - Ne kadar zorluğa katlanılabilir? Tam ölçekli bir düğüm çalıştıran bilgisayarlar, tarayıcıda çalışan bir uygulamada hafif bir istemciden daha fazla işlem gerçekleştirebilir. - Bilgiye her düğümden kolayca ulaşılabilmesi gerekli midir? - Güvenlik gereklilikleri. @@ -114,5 +114,5 @@ Bu tabloda farklı seçenekler, bu seçenekleri avantajları ve dezavantajları | Calldata | Zincir dışında | Sonsuz Ethereum garantisi (blokzincirin bir parçası) | Sadece bir sözleşmeye yazıldıysa ve o işlemdeyse kullanılabilir | | | L1 mekanizmalarıyla zincir dışında | Zincir dışında | İtiraz dönemi boyunca "bir dürüst doğrulayıcı" garantisi | Sadece karma | Sadece itiraz döneminde, itiraz mekanizması tarafından garanti edilir | | Sözleşme kodu | Zincir üstünde ya da zincir dışında | Sonsuz Ethereum garantisi (blokzincirin bir parçası) | Evet | "Rastgele" bir adrese yazılır, `0xEF` ile başlayamaz | -| Olaylar | Zincir üstünde | Sonsuz Ethereum garantisi (blokzincirin bir parçası) | Hayır | | +| Etkinlikler | Zincir üstünde | Sonsuz Ethereum garantisi (blokzincirin bir parçası) | Hayır | | | Depolama | Zincir üstünde | Sonsuz Ethereum garantisi (blokzincirin bir parçası ve üzerine yazılana kadar mevcut durum) | Evet | | diff --git a/public/content/translations/tr/developers/docs/data-availability/index.md b/public/content/translations/tr/developers/docs/data-availability/index.md index c932a2a9c05..010d84cfca6 100644 --- a/public/content/translations/tr/developers/docs/data-availability/index.md +++ b/public/content/translations/tr/developers/docs/data-availability/index.md @@ -1,84 +1,84 @@ --- -title: Veri kullanılabilirliği -description: Ethereum'da veri kullanılabilirliği ile ilgili sorunlara ve çözümlerine genel bakış +title: "Veri kullanılabilirliği" +description: "Ethereum'da veri kullanılabilirliği ile ilgili sorunlara ve çözümlerine genel bakış" lang: tr --- "Güvenme, doğrula'" Ethereum'da yaygın bir slogandır. Ardındaki fikir, düğümünüzün aldığı bilgilerin doğru olduğunu bağımsız bir şekilde doğrulayabilmesidir. Düğüm, aldığı bloklardaki tüm işlemleri gerçekleştirerek önerilen değişikliklerin düğüm tarafından bağımsız olarak hesaplananlarla tam olarak eşleşip eşleşmediğini kontrol edebilir. Bu durum, düğümlerin bloğu gönderenlerin dürüst olduğuna güvenmek zorunda olmadığı anlamına gelir. Veri eksikse bu mümkün değildir. -**Veri kullanılabilirliği**, bir kullanıcının bir bloğu doğrulamak için gereken verinin gerçekten tüm ağ katılımcıları için kullanılabilir olduğu konusundaki güvencesini ifade eder. Ethereum'un 1. katmanındaki tam düğümler için bu nispeten basittir; tam düğüm her bloğun içindeki verinin bir kopyasını indirir - indirmenin _mümkün_ olabilmesi için veri kullanılabilir olmalıdır. Verileri eksik olan bir blok, blokzincire eklenmek yerine reddedilir. Bu "zincir üstünde veri kullanılabilirliği" olarak adlandırılır ve monolitik blokzincirlerin bir özelliğidir. Tam düğümler, her işlemi indirir ve kendi kendilerine gerçekleştirir, bu nedenle bunları kandırıp geçersiz işlemleri kabul ettirmek mümkün değildir. Ancak modüler blokzincirler, katman 2 toplamaları ve hafif istemciler için veri kullanılabilirliği daha karmaşıktır ve daha sofistike doğrulama prosedürleri gerektirebilir. +**Veri kullanılabilirliği**, bir kullanıcının bir bloğu doğrulamak için gereken verinin gerçekten tüm ağ katılımcıları için kullanılabilir olduğu konusundaki güvencesini ifade eder. Ethereum Katman 1'deki tam düğümler için bu nispeten basittir; tam düğüm her bloktaki tüm verilerin bir kopyasını indirir - indirmenin mümkün olması için verilerin kullanılabilir _olması_ gerekir. Verileri eksik olan bir blok, blokzincire eklenmek yerine reddedilir. Bu, "zincir üstü veri kullanılabilirliği"dir ve monolitik blokzincirlerin bir özelliğidir. Tam düğümler, her işlemi indirir ve kendi kendilerine gerçekleştirir, bu nedenle bunları kandırıp geçersiz işlemleri kabul ettirmek mümkün değildir. Ancak modüler blokzincirler, katman 2 toplamaları ve hafif istemciler için veri kullanılabilirliği daha karmaşıktır ve daha sofistike doğrulama prosedürleri gerektirebilir. -## Ön koşullar {#prerequisites} +## Ön Koşullar {#prerequisites} -Özellikle [mutabakat mekanizmaları](/developers/docs/consensus-mechanisms/) başta olmak üzere, [blokzincirin temellerine](/developers/docs/intro-to-ethereum/) hakim olmanız gerekir. Ayrıca, bu sayfa okuyucunun [bloklar](/developers/docs/blocks/), [işlemler](/developers/docs/transactions/), [düğümler](/developers/docs/nodes-and-clients/), [ölçeklendirme çözümleri](/developers/docs/scaling/) ve diğer ilgili konular hakkında bilgi sahibi olduğunu kabul eder. +[Blokzincir temelleri](/developers/docs/intro-to-ethereum/) ve özellikle [mutabakat mekanizmaları](/developers/docs/consensus-mechanisms/) hakkında iyi bir anlayışa sahip olmalısınız. Bu sayfa ayrıca okuyucunun [bloklar](/developers/docs/blocks/), [işlemler](/developers/docs/transactions/), [düğümler](/developers/docs/nodes-and-clients/), [ölçeklendirme çözümleri](/developers/docs/scaling/) ve diğer ilgili konulara aşina olduğunu varsayar. -## Veri Kullanılabilirliği Sorunu {#the-data-availability-problem} +## Veri kullanılabilirliği sorunu {#the-data-availability-problem} Veri kullanılabilirliği sorunu, blokzincire eklenen bazı işlem verilerinin özetlenmiş şeklinin gerçekten geçerli işlemler kümesini temsil ettiğini tüm ağa kanıtlama ihtiyacını ifade eder, ancak tüm düğümlerin tüm verileri indirmesi gerekmeksizin bunu yapma ihtiyacını ortadan kaldırır. Tam işlem verileri blokları bağımsız olarak doğrulamak için gereklidir ancak tüm düğümlerin tüm işlem verilerini indirmesi, ölçeklendirme açısından bir engel oluşturur. Veri kullanılabilirliği sorununun çözümleri, tüm işlem verilerinin kendileri için veriyi indirip depolamayan ağ katılımcılarına doğrulama için mevcut olduğuna dair yeterli güvence sağlamayı hedefler. -[Açık düğümler](/developers/docs/nodes-and-clients/light-clients) ve [Katman 2 toplamaları](/developers/docs/scaling), kendileri için işlem verilerini indiremeyen ancak güçlü veri kullanılabilirliği güvencelerine ihtiyaç duyan ağ katılımcılarının önemli örnekleridir. İşlem verilerini indirmekten kaçınma, açık düğümleri açık kılan ve toplamaların etkili ölçeklendirme çözümleri olmasını sağlayan unsurdur. +[Hafif düğümler](/developers/docs/nodes-and-clients/light-clients) ve [Katman 2 toplamaları](/developers/docs/scaling), güçlü veri kullanılabilirliği güvenceleri gerektiren ancak işlem verilerini kendileri için indirip işleyemeyen ağ katılımcılarının önemli örnekleridir. İşlem verilerini indirmekten kaçınma, açık düğümleri açık kılan ve toplamaların etkili ölçeklendirme çözümleri olmasını sağlayan unsurdur. -Veri kullanılabilirliği ayrıca ["durumsuz"](/roadmap/statelessness) Ethereum istemcileri için de kritik bir endişedir. Bu istemciler, blokları doğrulamak için durum verilerini indirmek ve depolamak zorunda olmadıklarından veri kullanılabilirliği önemlidir. Durumsuz istemciler yine de verilerin _bir şekilde_ kullanılabilir olduğundan ve doğru şekilde işlendiğinden emin olmak zorundadır. +Veri kullanılabilirliği, blokları doğrulamak için durum verilerini indirmesi ve saklaması gerekmeyen gelecekteki ["durumsuz"](/roadmap/statelessness) Ethereum istemcileri için de kritik bir endişedir. Durumsuz istemciler yine de verilerin _bir yerlerde_ mevcut olduğundan ve doğru bir şekilde işlendiğinden emin olmalıdır. -## Veri Kullanılabilirliği Çözümleri {#data-availability-solutions} +## Veri kullanılabilirliği çözümleri {#data-availability-solutions} ### Veri kullanılabilirliği örneklemesi (DAS) {#data-availability-sampling} -Veri Kullanılabilirliği Örneklemesi (DAS), ağ için herhangi bir düğüme çok fazla yük bindirmeden verilerin kullanılabilir olup olmadığını kontrol etmenin bir yoludur. Her düğüm (hisseleme yapmayan düğümler dahil), toplam verinin küçük, rastgele seçilmiş bir alt kümesini indirir. Örneklerin başarıyla indirilmesi, tüm verilerin mevcut olduğu konusunda yüksek bir güvence sağlar. Bu, veri kümesini gereksiz bilgiyle genişleten (bu işlem, verinin üzerinde bir polinom olarak bilinen bir işlevi sığdırmak ve bu _polinomu_ ek noktalarda değerlendirmek yoluyla yapılır) veri silme kodlamasına dayanır. Bu, gerektiğinde orijinal verinin gereksiz veriden geri kazanılmasına olanak tanır. Bu veri oluşturma sürecinin bir sonucu, orijinal verilerden _herhangi_ biri mevcut değilse, genişletilmiş verinin _yarısının_ eksik olmasıdır! Her düğüm tarafından indirilen veri örneklerinin miktarı, her bir istemcinin örnekleme yoluyla örneklenen veri parçalarının en az yarısının gerçekten mevcut olmadığı durumlarda _bile_ eksik olması olasılığı _son derece yüksek_ olacak şekilde ayarlanabilir. +Veri Kullanılabilirliği Örneklemesi (DAS), ağ için herhangi bir düğüme çok fazla yük bindirmeden verilerin kullanılabilir olup olmadığını kontrol etmenin bir yoludur. Her düğüm (hisseleme yapmayan düğümler dahil), toplam verinin küçük, rastgele seçilmiş bir alt kümesini indirir. Örneklerin başarıyla indirilmesi, tüm verilerin mevcut olduğu konusunda yüksek bir güvence sağlar. Bu, belirli bir veri kümesini yedekli bilgilerle genişleten veri silme kodlamasına dayanır (bu, verilerin üzerine _polinom_ olarak bilinen bir fonksiyonu oturtarak ve bu polinomu ek noktalarda değerlendirerek yapılır). Bu, gerektiğinde orijinal verinin gereksiz veriden geri kazanılmasına olanak tanır. Bu veri oluşturma işleminin bir sonucu olarak, orijinal verilerin _herhangi bir_ kısmı kullanılamıyorsa, genişletilmiş verilerin _yarısı_ eksik olacaktır! Her bir düğüm tarafından indirilen veri örneklerinin miktarı, verilerin yarısından daha azının gerçekten kullanılabilir olması _durumunda_, her bir istemci tarafından örneklenen veri parçalarından en az birinin eksik olmasının _son derece_ muhtemel olacağı şekilde ayarlanabilir. -DAS, [Tam Danksharding](/roadmap/danksharding/#what-is-danksharding) uygulanmaya alındıktan sonra toplama operatörlerinin işlem verilerini kullanılabilir tutmasını sağlamak için kullanılacaktır. Ethereum düğümleri, tüm verilerin mevcut olmasını sağlamak için yukarıda açıklanan yedekleme şemasını kullanarak örneklemelerle sağlanan işlem verilerini rastgele örnekleyecektir. Aynı teknik, blok üreticilerinin tüm verilerini güvenli açık istemcilerin kullanımına açık hale getirmek için kullanılabilir. Benzer şekilde, [önerici-oluşturucu ayrımı](/roadmap/pbs) altında, sadece blok oluşturucunun tüm bloğu işlemesi gerekecek, diğer doğrulayıcılar veri kullanılabilirliği örneklemesi kullanarak doğrulama yapacaklardır. +DAS, [Tam Danksharding](/roadmap/danksharding/#what-is-danksharding) uygulandıktan sonra toplama operatörlerinin işlem verilerini kullanılabilir hale getirmesini sağlamak için kullanılacaktır. Ethereum düğümleri, tüm verilerin mevcut olmasını sağlamak için yukarıda açıklanan yedekleme şemasını kullanarak örneklemelerle sağlanan işlem verilerini rastgele örnekleyecektir. Aynı teknik, blok üreticilerinin tüm verilerini güvenli açık istemcilerin kullanımına açık hale getirmek için kullanılabilir. Benzer şekilde, [önerici-inşa edici ayrımı](/roadmap/pbs) uyarınca, tüm bir bloğu işlemek yalnızca blok inşa edicisinin görevi olurken diğer doğrulayıcılar veri kullanılabilirliği örneklemesi kullanarak doğrulama yapacaktır. ### Veri kullanılabilirliği kurulları {#data-availability-committees} -Veri Kullanılabilirliği Kurulları (DAC'ler), veri kullanılabilirliğini sağlayan veya onaylayan güvenilir taraflardır. DAC'ler, DAS'ın yerine veya DAS [ile birlikte](https://hackmd.io/@vbuterin/sharding_proposal#Why-not-use-just-committees-and-not-DAS) kullanılabilir. Kurullarla birlikte gelen güvenlik güvenceleri, belirli bir yapılandırmaya dayalıdır. Ethereum, örneğin açık istemciler için veri kullanılabilirliğini doğrulamak üzere rastgele örneklenmiş doğrulayıcı alt kümelerini kullanır. +Veri Kullanılabilirliği Kurulları (DAC'ler), veri kullanılabilirliğini sağlayan veya onaylayan güvenilir taraflardır. DAC'ler, DAS'ın yerine [veya onunla birlikte](https://hackmd.io/@vbuterin/sharding_proposal#Why-not-use-just-committees-and-not-DAS) kullanılabilir. Kurullarla birlikte gelen güvenlik güvenceleri, belirli bir yapılandırmaya dayalıdır. Ethereum, örneğin açık istemciler için veri kullanılabilirliğini doğrulamak üzere rastgele örneklenmiş doğrulayıcı alt kümelerini kullanır. -Bazı validiumlar da DAC'leri kullanır. DAC, verilerin kopyalarını çevrimdışı olarak depolayan güvenilir bir düğüm kümesidir. DAC, bir anlaşmazlık durumunda verileri kullanıma sunmak zorundadır. DAC üyeleri, bahsi geçen verinin gerçekten mevcut olduğunu kanıtlamak için zincir üstünde tasdikler yayımlar. Bazı validiumlar, DAC'leri bir hisse ispatı (PoS) doğrulayıcı sistemiyle değiştirir. Burada, herkes bir doğrulayıcı olabilir ve veriyi zincir dışında depolayabilir. Ancak bir "bono" sağlamaları gerekmektedir, bu da bir akıllı sözleşmeye yatırılır. Doğrulayıcının verileri saklaması gibi bir kötü niyetli davranış durumunda bono kesilebilir. Hisse ispatı veri kullanılabilirliği kurulları, dürüst davranışı doğrudan teşvik ettikleri için normal DAC'lere göre daha güvenlidir. +Bazı validiumlar da DAC'leri kullanır. DAC, verilerin kopyalarını çevrimdışı olarak depolayan güvenilir bir düğüm kümesidir. DAC, bir anlaşmazlık durumunda verileri kullanıma sunmak zorundadır. DAC üyeleri ayrıca, söz konusu verilerin gerçekten kullanılabilir olduğunu kanıtlamak için zincir üstü tasdikler yayınlar. Bazı validiumlar, DAC'leri bir hisse ispatı (PoS) doğrulayıcı sistemiyle değiştirir. Burada, herkes bir doğrulayıcı olabilir ve veriyi zincir dışında depolayabilir. Ancak bir "bono" sağlamaları gerekmektedir, bu da bir akıllı sözleşmeye yatırılır. Doğrulayıcının verileri saklaması gibi bir kötü niyetli davranış durumunda bono kesilebilir. Hisse ispatı veri kullanılabilirliği kurulları, dürüst davranışı doğrudan teşvik ettikleri için normal DAC'lere göre daha güvenlidir. ## Veri kullanılabilirliği ve hafif düğümler {#data-availability-and-light-nodes} -[Hafif düğümler](/developers/docs/nodes-and-clients/light-clients), aldıkları blok başlıklarını blok verilerini indirmeden doğrulamak zorundadır. Bu hafifliğin maliyeti, tam düğümlerin yaptığı gibi yerel olarak işlemleri yeniden çalıştırarak blok başlıklarını bağımsız olarak doğrulayamamalarıdır. +[Hafif düğümlerin](/developers/docs/nodes-and-clients/light-clients), aldıkları blok başlıklarının doğruluğunu blok verilerini indirmeden doğrulamaları gerekir. Bu hafifliğin maliyeti, tam düğümlerin yaptığı gibi yerel olarak işlemleri yeniden çalıştırarak blok başlıklarını bağımsız olarak doğrulayamamalarıdır. -Ethereum hafif düğümleri, bir _senkronizasyon kuruluna_ atanmış rastgele 512 doğrulayıcının rastgele kümelerine güvenmektedir. Senkronizasyon kurulu, başlıktaki verilerin doğru olduğunu hafif düğümlere kriptografik bir imza kullanarak sinyal veren bir DAC gibi hareket eder. Senkronizasyon kurulu her gün yenilenir. Her blok başlığı, hangi doğrulayıcılardan _sonraki_ bloğu onaylamasının beklendiği konusunda hafif düğümleri uyararak gerçek senkronizasyon kurulunu taklit eden kötü niyetli bir grup tarafından aldatılmasını önler. +Ethereum hafif düğümleri, bir _senkronizasyon kuruluna_ atanmış 512 doğrulayıcıdan oluşan rastgele kümelere güvenir. Senkronizasyon kurulu, başlıktaki verilerin doğru olduğunu hafif düğümlere kriptografik bir imza kullanarak sinyal veren bir DAC gibi hareket eder. Senkronizasyon kurulu her gün yenilenir. Her blok başlığı, _sonraki_ bloğu imzalaması beklenen doğrulayıcılar hakkında hafif düğümleri uyarır. Böylece, gerçek senkronizasyon kuruluymuş gibi davranan kötü niyetli bir gruba güvenerek kandırılmaları önlenir. -Pekala, bir saldırgan hafif düğümlere kötü niyetli bir blok başlığı aktarmayı bir şekilde _başarırsa_ ve onları dürüst bir senkronizasyon kurulu tarafından onaylandığına ikna ederse ne olur? Bu durumda, saldırgan geçersiz işlemleri sürece dahil edebilir ve hafif istemci, blok başlığında özetlenen tüm durum değişikliklerini bağımsız olarak kontrol etmediği için bu işlemleri körü körüne kabul edebilir. Bundan korunmak için hafif istemci sahtecilik kanıtlarını kullanabilir. +Ancak bir saldırgan bir şekilde hafif istemcilere kötü niyetli bir blok başlığı iletmeyi _başarırsa_ ve onları dürüst bir senkronizasyon kurulu tarafından imzalandığına ikna ederse ne olur? Bu durumda, saldırgan geçersiz işlemleri sürece dahil edebilir ve hafif istemci, blok başlığında özetlenen tüm durum değişikliklerini bağımsız olarak kontrol etmediği için bu işlemleri körü körüne kabul edebilir. Bundan korunmak için hafif istemci sahtecilik kanıtlarını kullanabilir. Bu sahtecilik kanıtlarının çalışma şekli, ağda dolaşan geçersiz bir durum geçişi gören bir tam düğümün, önerilen bir durum geçişinin belirli bir işlem kümesinden kesinlikle kaynaklanamayacağını gösteren küçük bir veri parçası oluşturup bu veriyi taraflara yayımlamasıdır. Hafif düğümler bu sahtecilik kanıtlarını alıp kötü blok başlıklarını atmak için kullanabilir ve bu sayede tam düğümlerle aynı dürüst zincir üzerinde kalabilirler. Bu, tam düğümlerin tüm işlem verilerine erişiminin olmasına dayalıdır. Kötü bir blok başlığını yayımlayan ve aynı zamanda işlem verilerinin kullanıma açık olmasını sağlamayan bir saldırgan, tam düğümlerin sahtecilik kanıtları üretmesini engelleyebilir. Tam düğümler, kötü bir blok hakkında bir uyarı işareti gönderebilse de bu uyarıyı kanıtlarla destekleyemezler, çünkü kanıt üretmek için veri sağlanmamıştır! -Bu veri erişilebilirlik sorununun çözümü DAS'dir. Hafif düğümler, tam durum verilerinin çok küçük rastgele parçalarını indirir ve örnekleri kullanarak tüm veri setinin mevcut olduğunu doğrularlar. N sayıda rastgele parça indirdikten sonra hatalı şekilde tam veri kullanılabilirliğinin kabul edilme olasılığı hesaplanabilir ([örneğin 100 parça için olasılık 10^-30](https://dankradfeist.de/ethereum/2019/12/20/data-availability-checks.html)'dur, yani son derece düşüktür). +Bu veri erişilebilirlik sorununun çözümü DAS'dir. Hafif düğümler, tam durum verilerinin çok küçük rastgele parçalarını indirir ve örnekleri kullanarak tüm veri setinin mevcut olduğunu doğrularlar. N adet rastgele parçayı indirdikten sonra tam veri kullanılabilirliğini yanlış bir şekilde varsaymanın gerçek olasılığı hesaplanabilir ([100 parça için bu olasılık 10^-30'dur](https://dankradfeist.de/ethereum/2019/12/20/data-availability-checks.html), yani inanılmaz derecede düşüktür). Bu senaryoda bile, yalnızca birkaç baytı saklayan saldırılar, rastgele veri taleplerinde bulunan istemcilerin gözünden kaçabilir. Silme kodlaması, önerilen durum değişikliklerini kontrol etmek için kullanılabilecek kayıp küçük veri parçalarını yeniden oluşturarak bu sorunu çözer. Ardından yeniden oluşturulan veri kullanılarak bir sahtecilik kanıtı oluşturulabilir ve bu sayede hafif düğümlerin kötü başlıkları kabul etmesi engellenebilir. -**Not:** DAS ve sahtecilik kanıtları hisse ispatı Ethereum hafif istemcileri için henüz uygulanmamıştır ancak bunlar yol haritasında bulunmaktadır ve muhtemelen ZK-SNARK tabanlı kanıtlar şeklinde gerçekleşecektir. Günümüzdeki hafif istemciler, bir tür DAC'ye dayalıdır: senkronizasyon kurulunun kimliklerini doğrular ve ardından aldıkları imzalı blok başlıklarına güvenirler. +**Not:** DAS ve sahtecilik kanıtları, hisse ispatı Ethereum hafif istemcileri için henüz uygulanmamıştır ancak bunlar yol haritasındadır ve büyük olasılıkla ZK-SNARK tabanlı kanıtlar şeklinde olacaktır. Günümüzdeki hafif istemciler, bir tür DAC'ye dayalıdır: senkronizasyon kurulunun kimliklerini doğrular ve ardından aldıkları imzalı blok başlıklarına güvenirler. ## Veri kullanılabilirliği ve katman 2 toplamaları {#data-availability-and-layer-2-rollups} -[Toplamalar](/glossary/#rollups) gibi [katman 2 ölçeklendirme çözümleri](/layer-2/), işlemleri zincir dışında işleyerek Ethereum'un işlem maliyetlerini azaltır ve işlem hacmini artırır. Toplama işlemleri, sıkıştırılıp yığınlar halinde Ethereum'da yayımlanır. Yığınlar, zincir dışındaki binlerce ayrı işlemi Ethereum'da tek bir işlemi olarak gösterir. Bu, temel katman üzerindeki sıkışıklığı azaltır ve kullanıcılar için ücretleri düşürür. +[Toplamalar](/glossary/#rollups) gibi [Katman 2 ölçeklendirme çözümleri](/layer-2/), işlemleri zincir dışında işleyerek işlem maliyetlerini düşürür ve Ethereum'un işlem hacmini artırır. Toplama işlemleri, sıkıştırılıp yığınlar halinde Ethereum'da yayımlanır. Yığınlar, Ethereum üzerindeki tek bir işlemde binlerce ayrı zincir dışı işlemi temsil eder. Bu, temel katman üzerindeki sıkışıklığı azaltır ve kullanıcılar için ücretleri düşürür. -Ancak, Ethereum'da yayımlanan "özet" işlemlere, sadece önerilen durum değişikliği bağımsız olarak doğrulanabiliyor ve zincir dışındaki tüm ayrı işlemlerinin uygulanmasının sonucu olduğu onaylanabiliyorsa güvenmek mümkündür. Toplama operatörleri bu doğrulama için işlem verilerini kullanılabilir hale getirmezlerse, yanlış verileri Ethereum'a gönderebilirler. +Ancak, Ethereum'da yayımlanan 'özet' işlemlere, sadece önerilen durum değişikliği bağımsız olarak doğrulanabiliyor ve zincir dışındaki tüm ayrı işlemlerinin uygulanmasının sonucu olduğu onaylanabiliyorsa güvenmek mümkündür. Toplama operatörleri bu doğrulama için işlem verilerini kullanılabilir hale getirmezlerse, yanlış verileri Ethereum'a gönderebilirler. -[İyimser toplamalar](/developers/docs/scaling/optimistic-rollups/), sıkıştırılmış işlem verilerini Ethereum'a gönderir ve bağımsız doğrulayıcıların verileri kontrol etmelerine izin vermek için belirli bir süre (genellikle 7 gün) bekler. Herhangi bir sorun tespit eden kişi, sahtecilik kanıtı üretip bu kanıtı toplamaya itiraz etmek için kullanabilir. Bu, zinciri geriye döndürüp geçersiz bloğu çıkartır. Bu, sadece verilerin kullanılabilir olduğu durumda mümkündür. Şu anda, iyimser toplamaların işlem verilerini L1'e göndermesinin 2 yolu vardır. Bazı toplamalar, verileri kalıcı olarak zincir üstünde bulunan `CALLDATA` olarak kalıcı şekilde kullanılabilir hale getirir. EIP-4844'ün uygulamaya alınması sonrası bazı toplamalar, işlem verilerini bunun yerine daha ucuz blob depolama alanına gönderiyor. Bu, kalıcı bir depolama değildir. Bağımsız doğrulayıcıların, veriler Ethereum katman 1'den silinmeden önce yaklaşık 18 gün içinde blob'ları sorgulayıp itirazlarını iletmeleri gerekir. Verilerin kullanılabilirliği, Ethereum protokolü tarafından yalnızca bu kısa zaman aralığı için garanti edilir. Bunun ardından, Ethereum ekosistemindeki diğer varlıkların sorumluluğuna girer. Herhangi bir düğüm, DAS kullanarak, yani blob verilerinin küçük, rastgele örneklerini indirerek veri kullanılabilirliğini doğrulayabilir. +[İyimser toplamalar](/developers/docs/scaling/optimistic-rollups/), bağımsız doğrulayıcıların verileri kontrol etmesine olanak tanımak için sıkıştırılmış işlem verilerini Ethereum'a gönderir ve bir süre (genellikle 7 gün) bekler. Herhangi bir sorun tespit eden kişi, sahtecilik kanıtı üretip bu kanıtı toplamaya itiraz etmek için kullanabilir. Bu, zinciri geriye döndürüp geçersiz bloğu çıkartır. Bu, sadece verilerin kullanılabilir olduğu durumda mümkündür. Şu anda, iyimser toplamaların işlem verilerini L1'e göndermesinin 2 yolu vardır. Bazı toplamalar, kalıcı olarak zincir üstünde yer alan `CALLDATA` olarak verileri kalıcı şekilde kullanılabilir hale getirir. EIP-4844'ün uygulamaya alınması sonrası bazı toplamalar, işlem verilerini bunun yerine daha ucuz blob depolama alanına gönderiyor. Bu, kalıcı bir depolama değildir. Bağımsız doğrulayıcıların, veriler Ethereum katman 1'den silinmeden önce yaklaşık 18 gün içinde blob'ları sorgulayıp itirazlarını iletmeleri gerekir. Verilerin kullanılabilirliği, Ethereum protokolü tarafından yalnızca bu kısa zaman aralığı için garanti edilir. Bunun ardından, Ethereum ekosistemindeki diğer varlıkların sorumluluğuna girer. Herhangi bir düğüm, DAS kullanarak, yani blob verilerinin küçük, rastgele örneklerini indirerek veri kullanılabilirliğini doğrulayabilir. -[Sıfır bilgili (ZK) toplamalar](/developers/docs/scaling/zk-rollups), durum geçişlerinin doğruluğunu garanti eden [sıfır bilgili doğruluk kanıtları](/glossary/#zk-proof) nedeniyle işlem verilerini yayımlamaya ihtiyaç duymaz. Ancak, durum verilerine erişimiz olmadan ZK toplamasının işlevselliğini garanti edemeyeceğimiz (veya etkileşime giremeyeceğimiz) için veri kullanılabilirliği hala bir sorundur. Örneğin, bir operatör toplamanın durumu hakkındaki ayrıntıları saklarsa, kullanıcılar bakiyelerini bilemezler. Ayrıca, yeni eklenen bir bloktaki bilgileri kullanarak durum güncellemeleri gerçekleştiremezler. +[Sıfır bilgi (ZK) toplamaları](/developers/docs/scaling/zk-rollups), [sıfır bilgi geçerlilik kanıtları](/glossary/#zk-proof) durum geçişlerinin doğruluğunu garanti ettiğinden işlem verilerini göndermek zorunda değildir. Ancak, durum verilerine erişimiz olmadan ZK toplamasının işlevselliğini garanti edemeyeceğimiz (veya etkileşime giremeyeceğimiz) için veri kullanılabilirliği hala bir sorundur. Örneğin, bir operatör toplamanın durumu hakkındaki ayrıntıları saklarsa, kullanıcılar bakiyelerini bilemezler. Ayrıca, yeni eklenen bir bloktaki bilgileri kullanarak durum güncellemeleri gerçekleştiremezler. -## Veri kullanılabilirliği ile veri alınabilirliği karşılaştırması {#data-availability-vs-data-retrievability} +## Veri kullanılabilirliği ve veri alınabilirliği {#data-availability-vs-data-retrievability} Veri kullanılabilirliği ile veri alınabilirliği farklı kavramlardır. Veri kullanılabilirliği, tam düğümlerin belirli bir blokla ilişkilendirilen tam işlem kümesine erişebildiği ve doğrulayabildiğine ilişkin güvenceye verilen isimdir. Ancak bu, verilerin sonsuza dek kullanılabilir olduğu anlamına gelmez. -Veri alınabilirliği, düğümlerin blokzincirden _geçmişe ilişkin bilgileri_ alabilme yeteneğidir. Geçmişe ilişkin veriler, yeni blokları doğrulamak için değil, yalnızca tam düğümleri başlangıç bloğundan senkronize etmek veya geçmişteki belirli istekleri karşılamak için gereklidir. +Veri alınabilirliği, düğümlerin blokzincirden _geçmişe dönük bilgileri_ alma yeteneğidir. Geçmişe ilişkin veriler, yeni blokları doğrulamak için değil, yalnızca tam düğümleri başlangıç bloğundan senkronize etmek veya geçmişteki belirli istekleri karşılamak için gereklidir. -Çekirdek Ethereum protokolü, veri alınabilirliği yerine daha çok veri kullanılabilirliği ile ilgilidir. Veri alınabilirliği, üçüncü taraflar tarafından işletilen küçük bir arşiv düğümleri popülasyonu tarafından sağlanabilir veya [Portal Ağı](https://www.ethportal.net/) gibi merkezi olmayan dosya depolama kullanılarak ağa yayılabilir. +Çekirdek Ethereum protokolü, veri alınabilirliği yerine daha çok veri kullanılabilirliği ile ilgilidir. Veri alınabilirliği, üçüncü taraflar tarafından çalıştırılan küçük bir arşiv düğümleri topluluğu tarafından sağlanabilir veya [Portal Network](https://www.ethportal.net/) gibi merkeziyetsiz dosya depolama sistemleri kullanılarak ağ genelinde dağıtılabilir. -## Daha fazla okuma {#further-reading} +## Daha fazla kaynak {#further-reading} -- [Veri Kullanılabilirliği nedir?](https://medium.com/blockchain-capital-blog/wtf-is-data-availability-80c2c95ded0f) -- [Veri Kullanılabilirliği nedir?](https://coinmarketcap.com/alexandria/article/what-is-data-availability) -- [Ethereum Zincir Dışında Veri Kullanılabilirliği Görünümü](https://blog.celestia.org/ethereum-off-chain-data-availability-landscape/) -- [Veri kullanılabilirliği kontrolleri hakkında temel bilgiler](https://dankradfeist.de/ethereum/2019/12/20/data-availability-checks.html) -- [Parçalama + DAS önerisine ilişkin açıklama](https://hackmd.io/@vbuterin/sharding_proposal#ELI5-data-availability-sampling) -- [Veri kullanılabilirliği ve silme kodlaması hakkında bir not](https://github.com/ethereum/research/wiki/A-note-on-data-availability-and-erasure-coding#can-an-attacker-not-circumvent-this-scheme-by-releasing-a-full-unavailable-block-but-then-only-releasing-individual-bits-of-data-as-clients-query-for-them) +- [WTF is Data Availability?](https://medium.com/blockchain-capital-blog/wtf-is-data-availability-80c2c95ded0f) +- [Veri Kullanılabilirliği Nedir?](https://coinmarketcap.com/academy/article/what-is-data-availability) +- [Veri kullanılabilirliği kontrollerine giriş](https://dankradfeist.de/ethereum/2019/12/20/data-availability-checks.html) +- [Parçalama + DAS teklifinin bir açıklaması](https://hackmd.io/@vbuterin/sharding_proposal#ELI5-data-availability-sampling) +- [Veri kullanılabilirliği ve silme kodlaması üzerine bir not](https://github.com/ethereum/research/wiki/A-note-on-data-availability-and-erasure-coding#can-an-attacker-not-circumvent-this-scheme-by-releasing-a-full-unavailable-block-but-then-only-releasing-individual-bits-of-data-as-clients-query-for-them) - [Veri kullanılabilirliği kurulları.](https://medium.com/starkware/data-availability-e5564c416424) - [Hisse ispatı veri kullanılabilirliği kurulları.](https://blog.matter-labs.io/zkporter-a-breakthrough-in-l2-scaling-ed5e48842fbf) -- [Veri alınabilirliği sorununa yönelik çözümler](https://notes.ethereum.org/@vbuterin/data_sharding_roadmap#Who-would-store-historical-data-under-sharding) -- [Veri Kullanılabilirliği veya: Toplamalar Endişelenmeyi Bırakıp Ethereum'u Sevmeyi Nasıl Öğrendi?](https://ethereum2077.substack.com/p/data-availability-in-ethereum-rollups) +- [Veri alınabilirliği sorununa çözümler](https://notes.ethereum.org/@vbuterin/data_sharding_roadmap#Who-would-store-historical-data-under-sharding) +- [Data Availability Or: How Rollups Learned To Stop Worrying And Love Ethereum](https://web.archive.org/web/20250515194659/https://web.archive.org/web/20241108192208/https://research.2077.xyz/data-availability-or-how-rollups-learned-to-stop-worrying-and-love-ethereum) +- [EIP-7623: Çağrı Verisi Maliyetini Artırma](https://web.archive.org/web/20250515194659/https://research.2077.xyz/eip-7623-increase-calldata-cost) diff --git a/public/content/translations/tr/developers/docs/data-structures-and-encoding/index.md b/public/content/translations/tr/developers/docs/data-structures-and-encoding/index.md index b14a3078118..a218f8f72c0 100644 --- a/public/content/translations/tr/developers/docs/data-structures-and-encoding/index.md +++ b/public/content/translations/tr/developers/docs/data-structures-and-encoding/index.md @@ -1,32 +1,32 @@ --- -title: Veri yapıları ve kodlama -description: Temel Ethereum veri yapılarına genel bir bakış. +title: "Veri yapıları ve kodlama" +description: "Temel Ethereum veri yapılarına genel bir bakış." lang: tr sidebarDepth: 2 --- -Ethereum, büyük miktarda veri üretir, depolar ve transfer eder. Bu veri, bir kişinin nispeten sınırlı tüketici sınıfı donanımıyla [bir düğüm çalıştırabilmesi](/run-a-node/) için standartlaştırılmış ve bellek bakımından verimli yollar ile biçimlendirilmelidir. Bunu başarmak için Ethereum yığınında belirli birkaç veri yapısı kullanılır. +Ethereum, büyük miktarda veri üretir, depolar ve transfer eder. Bu verinin, herhangi birinin nispeten mütevazı, tüketici sınıfı bir donanımda [bir düğüm çalıştırmasına](/run-a-node/) olanak tanımak için standartlaştırılmış ve bellek açısından verimli yollarla biçimlendirilmesi gerekir. Bunu başarmak için Ethereum yığınında belirli birkaç veri yapısı kullanılır. -## Ön koşullar {#prerequisites} +## Ön Koşullar {#prerequisites} -Ethereum'un temellerine ve [istemci yazılımına](/developers/docs/nodes-and-clients/) hakim olmalısınız. Ağ katmanı ve [Ethereum tanıtım belgesine](/whitepaper/) aşina olmanız da önerilir. +Ethereum'un temellerini ve [istemci yazılımını](/developers/docs/nodes-and-clients/) anlamalısınız. Ağ katmanına ve [Ethereum tanıtım belgesine](/whitepaper/) aşina olmanız önerilir. ## Veri yapıları {#data-structures} -### Patricia merkle dijital ağaçları {#patricia-merkle-tries} +### Patricia Merkle ağaçları {#patricia-merkle-tries} Patricia Merkle Dijital Ağaçları, anahtar-değer çiftlerini belirleyici ve kriptografik açıdan kimliği doğrulanmış bir dijital ağaç şeklinde kodlayan yapılardır. Bu yapılar, Ethereum'un yürütüm katmanında yaygın olarak kullanılır. -[Patricia Merkle Dijital Ağaçları Hakkında Daha Fazla Bilgi](/developers/docs/data-structures-and-encoding/patricia-merkle-trie) +[Patricia Merkle Ağaçları hakkında daha fazla bilgi](/developers/docs/data-structures-and-encoding/patricia-merkle-trie) ### Özyinelemeli Uzunluk Ön Eki {#recursive-length-prefix} Özyinelemeli Uzunluk Ön Eki (RLP), Ethereum'un yürütüm katmanında yaygın şekilde kullanılan bir serileştirme yöntemidir. -[RLP Hakkında Daha Fazla Bilgi](/developers/docs/data-structures-and-encoding/rlp) +[RLP hakkında daha fazla bilgi](/developers/docs/data-structures-and-encoding/rlp) ### Basit Serileştirme {#simple-serialize} Basit Serileştirme (SSZ), merkle işlemi ile uyumluluğu nedeniyle Ethereum'un fikir birliği katmanında kullanılan baskın serileştirme biçimidir. -[SSZ Hakkında Daha Fazla Bilgi](/developers/docs/data-structures-and-encoding/ssz) +[SSZ hakkında daha fazla bilgi](/developers/docs/data-structures-and-encoding/ssz) diff --git a/public/content/translations/tr/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md b/public/content/translations/tr/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md index 89e6386b129..38ab30816f2 100644 --- a/public/content/translations/tr/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md +++ b/public/content/translations/tr/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md @@ -1,23 +1,23 @@ --- -title: Merkle Patricia Dijital Ağacı -description: Merkle Patricia Dijital Ağacına Giriş. +title: "Merkle Patricia Dijital Ağacı" +description: "Merkle Patricia Dijital Ağacına Giriş." lang: tr sidebarDepth: 2 --- -Ethereum'un durumu (tüm hesapların, bakiyelerin ve akıllı sözleşmelerin toplamı), bilgisayar biliminde genel olarak Merkle Ağacı olarak bilinen veri yapısının özel bir versiyonuna kodlanır. Bu yapı, kriptografideki birçok uygulama için kullanışlıdır. Çünkü ağaca dolanmış tüm bireysel veri parçaları arasında doğrulanabilir bir ilişki oluşturur ve bu da, veriler hakkında bir şeyler kanıtlamak için kullanılabilecek tek bir **kök** değeriyle sonuçlanır. +Ethereum'un durumu (tüm hesapların, bakiyelerin ve akıllı sözleşmelerin toplamı), bilgisayar biliminde genel olarak Merkle Ağacı olarak bilinen veri yapısının özel bir versiyonuna kodlanır. Bu yapı, kriptografideki birçok uygulama için kullanışlıdır çünkü ağaca dolanmış tüm bireysel veri parçaları arasında doğrulanabilir bir ilişki oluşturur ve bu da veriler hakkında bir şeyler kanıtlamak için kullanılabilecek tek bir **kök** değeriyle sonuçlanır. -Ethereum'un veri yapısı PATRICIA'nın (Alfasayısal Kodlanmış Bilgileri Almak için Pratik Algoritma) bazı özelliklerini ödünç aldığı ve Ethereum durumunu oluşturan öğelerin verimli şekilde veri alımı (re**trie**val) için tasarlandığından "değiştirilmiş Merkle-Patricia Trie"dir. +Ethereum'un veri yapısı, PATRICIA'nın (Practical Algorithm To Retrieve Information Coded in Alphanumeric - Alfasayısal Kodlanmış Bilgileri Almak için Pratik Algoritma) bazı özelliklerini ödünç aldığı ve Ethereum durumunu oluşturan öğelerin verimli şekilde veri geri alımı (re**trie**val) için tasarlandığından 'değiştirilmiş Merkle-Patricia Trie'dir. -Merkle-Patricia trie, kesin ve kriptografik olarak doğrulanabilirdir: Bir durum kökü üretmenin tek yolu, onu durumun her bir parçasından hesaplamaktır ve aynı olan iki durum, kök karması ve ona yol açan karmalar karşılaştırılarak kolayca kanıtlanabilir (_bir Merkle ispatı_). Tam tersinden bakacak olursak, aynı kök karmasına sahip iki farklı durum oluşturmak mümkün değildir ve farklı değerlere sahip durumları değiştirme girişimi farklı bir durum kök karmasına yol açar. Teorik olarak bu yapı, eklemeler, aramalar ve silmeler için `O(log(n))` verimliliğinin "kutsal kasesini" sağlar. +Bir Merkle-Patricia trie deterministik ve kriptografik olarak doğrulanabilirdir: Bir durum kökü oluşturmanın tek yolu, onu durumun her bir parçasından hesaplamaktır ve aynı olan iki durum, kök karması ve ona yol açan karmalar karşılaştırılarak kolayca kanıtlanabilir (_bir Merkle kanıtı_). Tam tersinden bakacak olursak, aynı kök karmasına sahip iki farklı durum oluşturmak mümkün değildir ve farklı değerlere sahip durumları değiştirme girişimi farklı bir durum kök karmasına yol açar. Teorik olarak, bu yapı eklemeler, aramalar ve silmeler için `O(log(n))` verimliliğinin 'kutsal kasesini' sağlar. -Ethereum, yakın gelecekte olası protokol geliştirmeleri açısından birçok fırsat yaratacak olan [Verkle Ağacı](/roadmap/verkle-trees) yapısına geçmeyi düşünüyor. +Yakın gelecekte Ethereum, gelecekteki protokol iyileştirmeleri için birçok yeni olasılığın önünü açacak olan bir [Verkle Ağacı](/roadmap/verkle-trees) yapısına geçmeyi planlıyor. -## Ön koşullar {#prerequisites} +## Ön Koşullar {#prerequisites} -Bu sayfayı daha iyi anlamak için [karmalar](https://en.wikipedia.org/wiki/Hash_function), [Merkle ağaçları](https://en.wikipedia.org/wiki/Merkle_tree), [tries](https://en.wikipedia.org/wiki/Trie) ve [serileştirme](https://en.wikipedia.org/wiki/Serialization) hakkında temel düzeyde bilgi sahibi olmak faydalı olabilir. Bu makale, temel bir [dijital ağacın](https://en.wikipedia.org/wiki/Radix_tree) tanımıyla başlıyor, ardından Ethereum'un daha optimize edilmiş veri yapısı için gerekli değişiklikleri aşamalı olarak tanıtıyor. +Bu sayfayı daha iyi anlamak için [karmalar](https://en.wikipedia.org/wiki/Hash_function), [Merkle ağaçları](https://en.wikipedia.org/wiki/Merkle_tree), [trie'lar](https://en.wikipedia.org/wiki/Trie) ve [serileştirme](https://en.wikipedia.org/wiki/Serialization) hakkında temel bilgilere sahip olmak faydalı olacaktır. Bu makale, temel bir [radix ağacının](https://en.wikipedia.org/wiki/Radix_tree) tanımıyla başlıyor, ardından Ethereum'un daha optimize edilmiş veri yapısı için gerekli değişiklikleri kademeli olarak tanıtıyor. -## Temel taban dijital ağaçları {#basic-radix-tries} +## Temel radix trie'lar {#basic-radix-tries} Temel bir taban dijital ağacında her düğüm aşağıdaki şekilde görünür: @@ -25,146 +25,149 @@ Temel bir taban dijital ağacında her düğüm aşağıdaki şekilde görünür [i_0, i_1 ... i_n, value] ``` -Burada `i_0 ... i_n`, alfabenin sembollerini (genellikle ikili veya altılı) temsil eder; `value`, düğümdeki terminal değerdir ve `i_0, i_1 ... i_n` yuvalarındaki değerler ya `NULL` veya diğer düğümlerin (bizim durumumuzda, karmaları) işaretçilerdir. Bu, temel düzeyde bir `(key, value)` deposunu oluşturur. +Burada `i_0 ...` `i_n` alfabenin sembollerini (genellikle ikili veya onaltılık) temsil eder, `value` düğümdeki terminal değerdir ve `i_0, i_1 ...` içindeki değerler `i_n` yuvaları ya `NULL` ya da diğer düğümlere yönelik işaretçilerdir (bizim durumumuzda, karmalarıdır). Bu, temel bir `(anahtar, değer)` deposu oluşturur. -Bir dizi anahtar değer çiftinin tabi olduğu sıralamayı sürdürmek için bir taban ağaç veri yapısını kullanmak istediğinizi varsayalım. Örneğin, dijital ağaçta şu anda `dog` anahtarı ile eşlenen değeri bulmak istiyorsanız, önce `dog` anahtarını alfabenin harflerine dönüştürün (`64 6f 67` değerini vererek) ve ardından değeri bulana kadar bu yolu takip ederek dijital ağaçtan aşağı doğru inin. Diğer bir deyişle, dijital ağacın kök düğümünü bulmak için kök karmasını düz bir anahtar/değer veritabanında arayarak başlayın. Kök düğüm, diğer düğümlere işaret eden bir dizi anahtar olarak gösterilir. Dizin `6`'daki değeri bir anahtar olarak kullanın ve düğümü bir seviye aşağı çekmek için düz anahtar/değer veritabanına bakın. Daha sonra bir sonraki değere bakmak için dizin `4`'ü seçin, ardından dizin `6`'yı seçin ve şu yolu izleyene kadar bu şekilde devam edin: `root -> 6 -> 4 -> 6 -> 15 -> 6 -> 7`, düğümün değerine bakın ve sonucu döndürün. +Bir dizi anahtar değer çiftinin tabi olduğu sıralamayı sürdürmek için bir taban ağaç veri yapısını kullanmak istediğinizi varsayalım. Trie'da `dog` anahtarıyla eşleştirilmiş geçerli değeri bulmak için, önce `dog` kelimesini alfabe harflerine dönüştürür (`64 6f 67` vererek) ve ardından değeri bulana kadar bu yolu izleyerek trie'dan aşağı inersiniz. Diğer bir deyişle, dijital ağacın kök düğümünü bulmak için kök karmasını düz bir anahtar/değer veritabanında arayarak başlayın. Kök düğüm, diğer düğümlere işaret eden bir dizi anahtar olarak gösterilir. `6` dizinindeki değeri bir anahtar olarak kullanır ve düğümü bir seviye aşağı indirmek için düz anahtar/değer veritabanında aratırsınız. Ardından bir sonraki değere bakmak için `4` dizinini, sonra `6` dizinini seçersiniz ve bu böyle devam eder, ta ki şu yolu izleyene kadar: `root -> 6 -> 4 -> 6 -> 15 -> 6 -> 7`, düğümün değerine bakar ve sonucu döndürürsünüz. -"Dijital ağaçta" bir şeye bakmak ile altta yatan düz anahtar/değer "veritabanı" arasında bir fark vardır. Her ikisi de anahtar/değer düzenlemelerini tanımlasa da temel veritabanı, bir anahtarın geleneksel 1 adımlık aramasını yapabilir. Dijital ağaçtaki bir anahtara bakmak, yukarıda açıklanan son değere ulaşmak için birden çok temel veritabanı araması yapılmasını gerektirir. Belirsizliği ortadan kaldırmak için gelin ikincisine `path` adını verelim. +"Dijital ağaçta" bir şeye bakmak ile altta yatan düz anahtar/değer "veritabanı" arasında bir fark vardır. Her ikisi de anahtar/değer düzenlemelerini tanımlasa da temel veritabanı, bir anahtarın geleneksel 1 adımlık aramasını yapabilir. Dijital ağaçtaki bir anahtara bakmak, yukarıda açıklanan son değere ulaşmak için birden çok temel veritabanı araması yapılmasını gerektirir. Belirsizliği ortadan kaldırmak için ikincisine `yol` diyelim. Taban dijital ağaçları için güncelleme ve silme işlemleri aşağıdaki gibi tanımlanabilir: -``` - def update(node,path,value): - curnode = db.get(node) if node else [ NULL ] * 17 +```python + def update(node_hash, path, value): + curnode = db.get(node_hash) if node_hash else [NULL] * 17 newnode = curnode.copy() - if path == '': + if path == "": newnode[-1] = value else: - newindex = update(curnode[path[0]],path[1:],value) + newindex = update(curnode[path[0]], path[1:], value) newnode[path[0]] = newindex - db.put(hash(newnode),newnode) + db.put(hash(newnode), newnode) return hash(newnode) - def delete(node,path): - if node is NULL: + def delete(node_hash, path): + if node_hash is NULL: return NULL else: - curnode = db.get(node) + curnode = db.get(node_hash) newnode = curnode.copy() - if path == '': + if path == "": newnode[-1] = NULL else: - newindex = delete(curnode[path[0]],path[1:]) + newindex = delete(curnode[path[0]], path[1:]) newnode[path[0]] = newindex if all(x is NULL for x in newnode): return NULL else: - db.put(hash(newnode),newnode) + db.put(hash(newnode), newnode) return hash(newnode) ``` -Bir "Merkle" Taban ağacı, düğümleri birbirine bağlayıp deterministik olarak oluşturulmuş kriptografik karma özetlerini kullanarak oluşturulur. Bu içerik adresleme (anahtar/değer veritabanında `key == keccak256(rlp(value))`), depolanan veri için kriptografik bütünlük garantisi sağlar. Belli bir dijital ağacın kök karmasının herkesçe bilinmesi durumunda, alttaki yaprak verilere erişimi olan herkes, belirli bir değeri ağaç köküne ekleyen her düğümün karmasını sağlayarak dijital ağacın belirli bir yol üzerinde bir değeri içerdiğine dair kanıt oluşturabilir. +Bir "Merkle" Taban ağacı, düğümleri birbirine bağlayıp deterministik olarak oluşturulmuş kriptografik karma özetlerini kullanarak oluşturulur. Bu içerik adresleme (anahtar/değer veritabanında `key == keccak256(rlp(value))`) depolanan veriler için kriptografik bir bütünlük garantisi sağlar. Belli bir dijital ağacın kök karmasının herkesçe bilinmesi durumunda, alttaki yaprak verilere erişimi olan herkes, belirli bir değeri ağaç köküne ekleyen her düğümün karmasını sağlayarak dijital ağacın belirli bir yol üzerinde bir değeri içerdiğine dair kanıt oluşturabilir. -Bir saldırganın var olmayan bir `(path, value)` çiftinin kanıtını sunması imkansızdır, çünkü kök karması nihayetinde onun altındaki tüm karmalara dayanmaktadır. Temelde yapılacak herhangi bir değişiklik kök karmasını değiştirecektir. Karmayı, veri hakkındaki yapısal bilgilerin, karma işlevinin ön görüntü koruması ile güvence altına alınan sıkıştırılmış bir gösterimi olarak düşünebilirsiniz. +Kök karması nihayetinde altındaki tüm karmalara dayandığından, bir saldırganın var olmayan bir `(yol, değer)` çiftinin kanıtını sunması imkansızdır. Temelde yapılacak herhangi bir değişiklik kök karmasını değiştirecektir. Karmayı, veri hakkındaki yapısal bilgilerin, karma işlevinin ön görüntü koruması ile güvence altına alınan sıkıştırılmış bir gösterimi olarak düşünebilirsiniz. -Bir taban ağacının atomik birimini (örneğin tek bir onaltılık karakter veya 4 bitlik bir ikili sayı) "nibble" olarak adlandıracağız. Yukarıda açıklandığı gibi, bir seferde bir nibble boyunca bir yol üzerinde gezinirken düğümler maksimum olarak 16 alt öğeye atıfta bulunabilirken ancak bir `value` öğesi içerebilir. Bu nedenle onları, uzunluğu 17 olan bir dizi olarak gösteririz. 17 öğeli bu dizileri "dal düğümleri" olarak adlandırıyoruz. +Bir radix ağacının atomik bir birimine (örneğin, tek bir onaltılık karakter veya 4 bitlik ikili sayı) "nibble" diyeceğiz. Yukarıda açıklandığı gibi, bir yolu her seferinde bir nibble ilerleyerek geçerken, düğümler en fazla 16 alt öğeye başvurabilir ancak bir `değer` öğesi de içerebilir. Bu nedenle onları, uzunluğu 17 olan bir dizi olarak gösteririz. 17 öğeli bu dizileri "dal düğümleri" olarak adlandırıyoruz. -## Merkle Patricia Önek Ağacı {#merkle-patricia-trees} +## Merkle Patricia Trie {#merkle-patricia-trees} -Taban dijital ağaçları, büyük bir kısıtlamaya tabidir: bu ağaçlar verimsizdir. Ethereum'daki olduğu gibi, yolun 64 karakter uzunluğunda (`bytes32` içindeki nibble sayısı) olduğu durumda bir `(path, value)` bağlaması depolamak istiyorsanız, her karakter için bir seviye depolamak için bir kilobayttan fazla ekstra alan gerekecektir ve her arama veya silme işlemi, 64 adımın tamamından geçecektir. Aşağıda açıklanan Patricia dijital ağacı bu sorunu çözer. +Taban dijital ağaçları, büyük bir kısıtlamaya tabidir: bu ağaçlar verimsizdir. Ethereum'da olduğu gibi, yolun 64 karakter uzunluğunda olduğu (`bytes32` içindeki nibble sayısı) bir `(yol, değer)` bağlamasını saklamak isterseniz, karakter başına bir seviye depolamak için bir kilobayttan fazla ekstra alana ihtiyacınız olacaktır ve her arama veya silme işlemi tam 64 adım sürecektir. Aşağıda açıklanan Patricia dijital ağacı bu sorunu çözer. ### Optimizasyon {#optimization} Merkle Patricia dijital ağacındaki bir düğüm aşağıdaki şekillerden biri gibi gözükür: -1. `NULL` (boş dize olarak gösterilir) -2. `branch` 17 öğeli bir düğüm `[ v0 ... v15, vt ]` -3. `leaf` 2-öğeli bir düğüm `[ encodedPath, value ]` -4. `extension` 2 öğeli bir düğüm `[ encodedPath, key ]` +1. `NULL` (boş dize olarak temsil edilir) +2. `dal` 17 öğeli bir düğüm `[ v0 ...` `v15, vt ]` +3. `yaprak` 2 öğeli bir düğüm `[ encodedPath, value ]` +4. `uzantı` 2 öğeli bir düğüm `[ encodedPath, key ]` -64 karakterlik yollar sayesinde dijital ağacın ilk birkaç katmanını geçtikten sonra, aşağı inerken yolun en azından bir kısmında ayrılan yolun bulunmadığı bir düğüme ulaşmanız kaçınılmazdır. Yol boyunca en fazla 15 seyrek `NULL` düğüm oluşturmak zorunda kalmaktan kaçınmak için `[ encodedPath, key ]` biçiminde bir `extension` düğümü kurarak inişi kısaltıyoruz. Burada `encodedPath`, ileri atlamayı sağlayan "kısmi yolu" içerir (aşağıda açıklanan sıkıştırılmış bir kodlama kullanılarak) ve `key`, bir sonraki veritabanı araması içindir. +64 karakterlik yollar sayesinde dijital ağacın ilk birkaç katmanını geçtikten sonra, aşağı inerken yolun en azından bir kısmında ayrılan yolun bulunmadığı bir düğüme ulaşmanız kaçınılmazdır. Yol boyunca 15'e kadar seyrek `NULL` düğüm oluşturmaktan kaçınmak için, `[ encodedPath, key ]` biçiminde bir `uzantı` düğümü kurarak inişi kısaltırız; burada `encodedPath` ileri atlamak için "kısmi yolu" içerir (aşağıda açıklanan sıkıştırılmış bir kodlama kullanılarak) ve `anahtar` sonraki veritabanı araması içindir. -`encodedPath`'in ilk nibble'ında bir bayrakla işaretlenebilecek bir `leaf` düğümü söz konusu olduğunda yol, önceki düğümlerin tüm yol parçalarını kodlar ve `value`'yu doğrudan arayabiliriz. +`encodedPath`'in ilk nibble'ındaki bir bayrakla işaretlenebilen bir `yaprak` düğüm için, yol önceki tüm düğümün yol parçalarını kodlar ve `değeri` doğrudan arayabiliriz. Bununla birlikte, yukarıdaki optimizasyondan iki anlam çıkıyor. -Nibble'larda yolların üzerinden geçerken geçmemiz gereken nibble sayısının tek olduğu durumlar olabilir ancak bunun nedeni, tüm verilerin `bytes` biçiminde depolanmasıdır. Örneğin, nibble `1` ile nibble `01` (her ikisi de `<01>` olarak depolanmalıdır) arasında ayrım yapmak mümkün değildir. Tek sayıda uzunluğu belirtmek için kısmi yola önek olarak bir bayrak verilir. +Yolları nibble'lar halinde geçerken, geçilecek tek sayıda nibble ile karşılaşabiliriz, ancak tüm veriler `bayt` formatında saklandığı için. Örneğin, `1` nibble'ı ile `01` nibble'larını (her ikisi de `<01>` olarak saklanmalıdır) ayırt etmek mümkün değildir. Tek sayıda uzunluğu belirtmek için kısmi yola önek olarak bir bayrak verilir. -### Özellik: İsteğe bağlı sonlandırıcılı onaltılık dizinin sıkıştırılmış kodlaması {#specification} +### Belirtim: İsteğe bağlı sonlandırıcılı onaltılık dizinin sıkıştırılmış kodlaması {#specification} Yukarıda açıklandığı gibi, hem _tek ve çift kalan kısmi yol uzunluğu_ hem de _yaprak ve uzantı düğümü_ işaretlemesi, herhangi bir 2 öğeli düğümün kısmi yolunun ilk nibble'ında bulunur. Bu, aşağıdaki sonuçları verir: - hex char bits | node type partial path length - ---------------------------------------------------------- - 0 0000 | extension even - 1 0001 | extension odd - 2 0010 | terminating (leaf) even - 3 0011 | terminating (leaf) odd +| onaltılık karakter | bitler | düğüm türü | yol uzunluğu | +| ------------------ | ------ | ---------------------------------------- | ------------ | +| 0 | 0000 | uzantı | çift | +| 1 | 0001 | uzantı | tek | +| 2 | 0010 | sonlandırıcı (yaprak) | çift | +| 3 | 0011 | sonlandırıcı (yaprak) | tek | -Çift kalan yol uzunluğu (`0` veya `2`) için ardından her zaman başka bir `0` "dolgu" nibble'ı gelecektir. +Kalan yol uzunluğu çift olduğunda (`0` veya `2`), bunu her zaman başka bir `0` "dolgu" nibble'ı takip edecektir. -``` +```python def compact_encode(hexarray): term = 1 if hexarray[-1] == 16 else 0 - if term: hexarray = hexarray[:-1] + if term: + hexarray = hexarray[:-1] oddlen = len(hexarray) % 2 flags = 2 * term + oddlen if oddlen: hexarray = [flags] + hexarray else: hexarray = [flags] + [0] + hexarray - // hexarray now has an even length whose first nibble is the flags. - o = '' - for i in range(0,len(hexarray),2): - o += chr(16 * hexarray[i] + hexarray[i+1]) + # hexarray now has an even length whose first nibble is the flags. + o = "" + for i in range(0, len(hexarray), 2): + o += chr(16 * hexarray[i] + hexarray[i + 1]) return o ``` Örnekler: -``` - > [ 1, 2, 3, 4, 5, ...] +```python + > [1, 2, 3, 4, 5, ...] '11 23 45' - > [ 0, 1, 2, 3, 4, 5, ...] + > [0, 1, 2, 3, 4, 5, ...] '00 01 23 45' - > [ 0, f, 1, c, b, 8, 10] + > [0, f, 1, c, b, 8, 10] '20 0f 1c b8' - > [ f, 1, c, b, 8, 10] + > [f, 1, c, b, 8, 10] '3f 1c b8' ``` Merkle Patricia dijital ağacında bir düğüm almak için genişletilmiş kod: -``` - def get_helper(node,path): - if path == []: return node - if node = '': return '' - curnode = rlp.decode(node if len(node) < 32 else db.get(node)) +```python + def get_helper(node_hash, path): + if path == []: + return node_hash + if node_hash == "": + return "" + curnode = rlp.decode(node_hash if len(node_hash) < 32 else db.get(node_hash)) if len(curnode) == 2: (k2, v2) = curnode k2 = compact_decode(k2) - if k2 == path[:len(k2)]: - return get(v2, path[len(k2):]) + if k2 == path[: len(k2)]: + return get(v2, path[len(k2) :]) else: - return '' + return "" elif len(curnode) == 17: - return get_helper(curnode[path[0]],path[1:]) + return get_helper(curnode[path[0]], path[1:]) - def get(node,path): + def get(node_hash, path): path2 = [] for i in range(len(path)): path2.push(int(ord(path[i]) / 16)) path2.push(ord(path[i]) % 16) path2.push(16) - return get_helper(node,path2) + return get_helper(node_hash, path2) ``` -### Örnek Dijital Ağaç {#example-trie} +### Trie Örneği {#example-trie} -Şu dört yol/değer çiftini içeren bir trie istediğimizi varsayalım: `('do', 'verb')`, `('dog', 'puppy')`, `('doge', 'coins')`, `('horse', 'stallion')`. +Dört yol/değer çifti içeren bir trie istediğimizi varsayalım: `('do', 'verb')`, `('dog', 'puppy')`, `('doge', 'coins')`, `('horse', 'stallion')`. -İlk olarak, hem yolları hem de değerleri `bytes`' dönüştürürüz. Aşağıda, daha kolay anlaşılması için _yollar_ için gerçek bayt gösterimleri `<>` ile gösterilirken _değerler_ hala `''` dizeler olarak gösterilir(bunlar da aslında `byte` olacaktır): +İlk olarak hem yolları hem de değerleri `bayt`'a dönüştürürüz. Aşağıda, _yollar_ için gerçek bayt gösterimleri `<>` ile belirtilirken, _değerler_ daha kolay anlaşılması için hâlâ `''` ile belirtilen dizeler olarak gösterilmektedir (onlar da aslında `bayt` olacaktır): ``` <64 6f> : 'verb' @@ -183,38 +186,37 @@ Merkle Patricia dijital ağacında bir düğüm almak için genişletilmiş kod: hashD: [ <17>, [ <>, <>, <>, <>, <>, <>, [ <35>, 'coins' ], <>, <>, <>, <>, <>, <>, <>, <>, <>, 'puppy' ] ] ``` -Bir düğüme başka bir düğüm içinde başvurulduğunda, dahil edilenler `H(rlp.encode(node))`, where `H(x) = keccak256(x) if len(x) >= 32 else x` and `rlp.encode` is the [RLP](/developers/docs/data-structures-and-encoding/rlp) kodlama işlevidir. +Bir düğüme başka bir düğüm içinde referans verildiğinde, dahil edilen şey, eğer `len(rlp.encode(node)) >= 32` ise `keccak256(rlp.encode(node))`, değilse `node`'dur; burada `rlp.encode` [RLP](/developers/docs/data-structures-and-encoding/rlp) kodlama işlevidir. -Bir dijital ağacı güncellerken _eğer_ yeni oluşturulan düğümün uzunluğu >= 32 ise, `(keccak 256 (x), x)` anahtar/değer çiftini kalıcı bir arama tablosunda saklamanız gerektiğini unutmayın. Bununla birlikte düğüm bundan daha kısaysa, f (x) = x işlevi tersine çevrilebilir olduğundan hiçbir şeyin depolanmasına gerek yoktur. +Bir trie'ı güncellerken, yeni oluşturulan düğümün uzunluğu >= 32 _ise_, `(keccak256(x), x)` anahtar/değer çiftini kalıcı bir arama tablosunda saklamak gerektiğini unutmayın. Bununla birlikte düğüm bundan daha kısaysa, f (x) = x işlevi tersine çevrilebilir olduğundan hiçbir şeyin depolanmasına gerek yoktur. -## Ethereum'da Dijital Ağaçlar {#tries-in-ethereum} +## Ethereum'daki Trie'lar {#tries-in-ethereum} Ethereum'ün yürütüm katmanındaki tüm merkle ağaçları, Merkle Patricia Dijital Ağacını kullanır. Bir blok başlığında bu dijital ağaçların 3'ünden 3 kök vardır. -1. durumKökü (stateRoot) -2. işlemKökü (transactionsRoot) -3. makbuzKökü (receiptsRoot) +1. durumKökü (stateRoot) +2. işlemKökü (transactionsRoot) +3. makbuzKökü (receiptsRoot) -### Durum Dijital Ağacı {#state-trie} +### Durum Trie'ı {#state-trie} -Bir adet genel durum dijital ağacı vardır ve bu, bir istemci bir bloğu her işlediğinde güncellenir. İçindeki `path` her zaman şudur: `keccak 256 (ethereumAddress)` ve `value` her zaman şudur: `rlp(ethereumAccount)`. Bir Ethereum `account`'u 4 öğeli bir `[nonce,balance,storageRoot,codeHash]` dizisidir. Bu noktada, bu `storageRoot` öğesinin başka bir patricia dijital ağacının kökü olduğunu belirtmekte fayda vardır: +Bir adet genel durum dijital ağacı vardır ve bu, bir istemci bir bloğu her işlediğinde güncellenir. İçinde bir `yol` her zaman `keccak256(ethereumAddress)` ve bir `değer` her zaman `rlp(ethereumAccount)`'dır. Daha spesifik olarak bir Ethereum `hesabı`, 4 öğeli bir `[nonce,balance,storageRoot,codeHash]` dizisidir. Bu noktada, bu `storageRoot`'un başka bir patricia trie'ının kökü olduğunu belirtmekte fayda var: -### Depolama Dijital Ağacı {#storage-trie} +### Depolama Trie'ı {#storage-trie} -Depolama dijital ağacı, _tüm_ sözleşme verilerinin bulunduğu yerdir. Her bir hesap için ayrı bir depolama dijital ağacı vardır. Verilen bir adresteki belirli depolama konumlarındaki değerleri alabilmek için depolama adresi, depoda depolanan verilerin tam sayı konumu ve blok kimliği gereklidir. Bunlar daha sonra JSON-RPC API'sinde tanımlanan `eth_getStorageAt` öğesine bağımsız değişkenler olarak yapıştırılabilir, ör. `0x295a70b2de5e3953354a6a8344e616ed314d7251` adresi için depolama yuvası 0'daki verileri almak amacıyla: +Depolama trie'ı _tüm_ sözleşme verilerinin bulunduğu yerdir. Her bir hesap için ayrı bir depolama dijital ağacı vardır. Verilen bir adresteki belirli depolama konumlarındaki değerleri alabilmek için depolama adresi, depoda depolanan verilerin tam sayı konumu ve blok kimliği gereklidir. Bunlar daha sonra JSON-RPC API'sinde tanımlanan `eth_getStorageAt`'e argüman olarak aktarılabilir, ör. `0x295a70b2de5e3953354a6a8344e616ed314d7251` adresi için depolama yuvası 0'daki verileri almak için: -``` +```bash curl -X POST --data '{"jsonrpc":"2.0", "method": "eth_getStorageAt", "params": ["0x295a70b2de5e3953354a6a8344e616ed314d7251", "0x0", "latest"], "id": 1}' localhost:8545 {"jsonrpc":"2.0","id":1,"result":"0x00000000000000000000000000000000000000000000000000000000000004d2"} - ``` -Depolama alanındaki diğer öğelerin alınması biraz daha karmaşıktır çünkü ilk önce depolama alanındaki konumun hesaplanması gerekir. Konum, adresin `keccak 256` karması ve depolama konumu alınarak hesaplanır, her ikisi de 32 bayt uzunluğa kadar sıfırlarla doldurulmuştur. Örneğin, `0x391694e7e0b0cce554cb130d723a9d27458f9298` adresi için depolama yuvası 1'deki verilerin konumu: +Depolama alanındaki diğer öğelerin alınması biraz daha karmaşıktır çünkü ilk önce depolama alanındaki konumun hesaplanması gerekir. Konum, adresin ve depolama konumunun `keccak256` karması olarak hesaplanır, her ikisi de 32 bayt uzunluğa ulaşacak şekilde başlarına sıfır eklenir. Örneğin, `0x391694e7e0b0cce554cb130d723a9d27458f9298` adresi için depolama yuvası 1'deki verilerin konumu şöyledir: -``` +```python keccak256(decodeHex("000000000000000000000000391694e7e0b0cce554cb130d723a9d27458f9298" + "0000000000000000000000000000000000000000000000000000000000000001")) ``` @@ -227,37 +229,37 @@ undefined "0x6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9" ``` -Buradaki `path` bu nedenle `keccak256(<6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9>)`'dır. Bu, artık daha önce olduğu gibi verileri depolama ağacından almak için kullanılabilir: +Bu nedenle `yol`, `keccak256(<6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9>)`'dır. Bu, artık daha önce olduğu gibi verileri depolama ağacından almak için kullanılabilir: -``` +```bash curl -X POST --data '{"jsonrpc":"2.0", "method": "eth_getStorageAt", "params": ["0x295a70b2de5e3953354a6a8344e616ed314d7251", "0x6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9", "latest"], "id": 1}' localhost:8545 {"jsonrpc":"2.0","id":1,"result":"0x000000000000000000000000000000000000000000000000000000000000162e"} ``` -Not: Bir Ethereum hesabının `storageRoot`'u, eğer bir sözleşme hesabı değilse varsayılan olarak boştur. +Not: Bir Ethereum hesabının `storageRoot`'u, bir sözleşme hesabı değilse varsayılan olarak boştur. -### İşlem Dijital Ağacı {#transaction-trie} +### İşlemler Trie'ı {#transaction-trie} -Her blok için ayrı bir işlem dijital ağacı vardır ve aynı şekilde `(key, value)` çiftlerini saklar. Buradaki yol: aşağıdakiler tarafından belirlenen bir değere karşılık gelen anahtarı temsil eden `rlp(transactionIndex)`'dir: +Her blok için ayrı bir işlemler trie'ı bulunur ve bu da yine `(anahtar, değer)` çiftlerini saklar. Buradaki bir yol, `rlp(transactionIndex)`'tir ve bu, şu şekilde belirlenen bir değere karşılık gelen anahtarı temsil eder: -``` +```python if legacyTx: value = rlp(tx) else: value = TxType | encode(tx) ``` -Bununla ilgili daha fazla bilgiyi [EIP 2718](https://eips.ethereum.org/EIPS/eip-2718) belgelerinde bulabilirsiniz. +Bununla ilgili daha fazla bilgi [EIP 2718](https://eips.ethereum.org/EIPS/eip-2718) belgelerinde bulunabilir. -### Makbuz Dijital Ağaçları {#receipts-trie} +### Makbuzlar Trie'ı {#receipts-trie} -Her bloğun kendi makbuz dijital ağacı vardır. Burada `path`: `rlp(transactionIndex)`'dir. `transactionIndex`, dahil edildiği blok içerisindeki indeksidir. Makbuz dijital ağacı hiçbir zaman güncellenmez. İşlemler dijital ağacına benzer şekilde güncel ve eski makbuzlar mevcuttur. Makbuzlar dijital ağacı içerisinde belirli bir makbuzu sorgulamak için bloktaki işlemin indeksi, makbuz yükü ve işlem türü gereklidir. Döndürülen makbuz, `TransactionType` ve `ReceiptPayload`'un birleşimi olarak tanımlanan `Receipt` türünde ya da `rlp([status, cumulativeGasUsed, logsBloom, logs])` olarak tanımlanan `LegacyReceipt` türünde olabilir. +Her bloğun kendi makbuz dijital ağacı vardır. Buradaki bir `yol`: `rlp(transactionIndex)`'dir. `transactionIndex`, dahil edildiği blok içindeki dizinidir. Makbuz dijital ağacı hiçbir zaman güncellenmez. İşlemler dijital ağacına benzer şekilde güncel ve eski makbuzlar mevcuttur. Makbuzlar dijital ağacı içerisinde belirli bir makbuzu sorgulamak için bloktaki işlemin indeksi, makbuz yükü ve işlem türü gereklidir. Döndürülen makbuz, `TransactionType` ve `ReceiptPayload`'un birleşimi olarak tanımlanan `Receipt` türünde veya `rlp([status, cumulativeGasUsed, logsBloom, logs])` olarak tanımlanan `LegacyReceipt` türünde olabilir. -Bununla ilgili daha fazla bilgiyi [EIP 2718](https://eips.ethereum.org/EIPS/eip-2718) belgelerinde bulabilirsiniz. +Bununla ilgili daha fazla bilgi [EIP 2718](https://eips.ethereum.org/EIPS/eip-2718) belgelerinde bulunabilir. -## Daha Fazla Okuma {#further-reading} +## Ek Okumalar {#further-reading} -- [Değiştirilmiş Merkle Patricia Dijital Ağacı - Ethereum bir durumu nasıl kaydeder?](https://medium.com/codechain/modified-merkle-patricia-trie-how-ethereum-saves-a-state-e6d7555078dd) -- [Ethereum'da Merkle işlemi](https://blog.ethereum.org/2015/11/15/merkling-in-ethereum/) -- [Ethereum dijital ağacını anlama](https://easythereentropy.wordpress.com/2014/06/04/understanding-the-ethereum-trie/) +- [Değiştirilmiş Merkle Patricia Trie — Ethereum bir durumu nasıl kaydeder](https://medium.com/codechain/modified-merkle-patricia-trie-how-ethereum-saves-a-state-e6d7555078dd) +- [Ethereum'da Merkle'lama](https://blog.ethereum.org/2015/11/15/merkling-in-ethereum/) +- [Ethereum trie'ını anlama](https://easythereentropy.wordpress.com/2014/06/04/understanding-the-ethereum-trie/) diff --git a/public/content/translations/tr/developers/docs/data-structures-and-encoding/rlp/index.md b/public/content/translations/tr/developers/docs/data-structures-and-encoding/rlp/index.md index 0b868076734..355b1764cd9 100644 --- a/public/content/translations/tr/developers/docs/data-structures-and-encoding/rlp/index.md +++ b/public/content/translations/tr/developers/docs/data-structures-and-encoding/rlp/index.md @@ -1,24 +1,24 @@ --- -title: Özyinelemeli uzunluk ön eki (RLP) serileştirmesi -description: Ethereum'un yürütüm katmanında rlp şifrelemesinin bir tanımı. +title: "Özyinelemeli uzunluk ön eki (RLP) serileştirmesi" +description: "Ethereum'un yürütüm katmanında rlp şifrelemesinin bir tanımı." lang: tr sidebarDepth: 2 --- -Özyinelemeli Uzunluk Ön Eki (RLP), Ethereum'un yürütüm istemcilerinde yaygın şekilde kullanılan bir serileştirme yoludur. RLP, düğümler arasında veri transferini, alan açısından verimli bir biçimde standartlaştırır. RLP'nin amacı, rastgele iç içe geçmiş ikili veri dizilerini kodlamaktır. RLP, Ethereum'un yürütüm katmanında nesneleri serileştirmek için kullanılan temel kodlama yöntemidir. RLP'nin ana amacı, yapıyı kodlamaktır; RLP, pozitif tamsayılar hariç olmak üzere belirli veri tiplerinin (örneğin dizeler, yüzer veriler) kodlanmasını daha yüksek düzeyli protokollere devreder. Pozitif tamsayılar, başlarında sıfır olmadan big-endian ikili biçiminde gösterilmelidir (böylece sıfır tamsayı değeri boş bayt dizisine eşdeğer olur). Başında sıfır bulunan seri duruma getirilmiş pozitif tamsayılar, RLP kullanan herhangi bir üst düzey protokol tarafından geçersiz olarak değerlendirilmelidir. +Özyinelemeli Uzunluk Ön Eki (RLP), Ethereum'un yürütüm istemcilerinde yaygın şekilde kullanılan bir serileştirme yoludur. RLP, düğümler arasında veri transferini, alan açısından verimli bir biçimde standartlaştırır. RLP'nin amacı, rastgele iç içe geçmiş ikili veri dizilerini kodlamaktır. RLP, Ethereum'un yürütüm katmanında nesneleri serileştirmek için kullanılan temel kodlama yöntemidir. RLP'nin ana amacı yapıyı kodlamaktır; pozitif tam sayılar hariç olmak üzere RLP, belirli veri türlerinin (ör. dizeler, kayan noktalı sayılar) kodlanmasını daha üst düzey protokollere devreder. Pozitif tamsayılar, başlarında sıfır olmadan big-endian ikili biçiminde gösterilmelidir (böylece sıfır tamsayı değeri boş bayt dizisine eşdeğer olur). Başında sıfır bulunan seri duruma getirilmiş pozitif tamsayılar, RLP kullanan herhangi bir üst düzey protokol tarafından geçersiz olarak değerlendirilmelidir. -Daha fazla bilgi için bkz. [Ethereum sarı kağıdı (Appendix B)](https://ethereum.github.io/yellowpaper/paper.pdf#page=19). +[Ethereum sarı bülteninde (Ek B)](https://ethereum.github.io/yellowpaper/paper.pdf#page=19) daha fazla bilgi bulabilirsiniz. Bir sözlüğü kodlamak için RLP kullanmanın iki kabul edilmiş yolu: -- sözlüksel bir sırada anahtarlarla `[[k1,v1],[k2,v2]...]` kullanmak +- sözlüksel sırada anahtarlarla `[[k1,v1],[k2,v2]...]` kullanın - Ethereum'un yaptığı gibi kodlama için üst düzey Patricia Ağacını kullanmak ## Tanım {#definition} RLP kodlama fonksiyonu bir öğeyi içine alır. Bir öğe aşağıdaki gibi tanımlanır: -- bir dize (yani bayt dizisi), bir öğedir +- bir dize (yani bayt dizisi) bir öğedir - öğelerin listesi, bir öğedir - bir pozitif tamsayı bir öğedir @@ -27,7 +27,7 @@ RLP kodlama fonksiyonu bir öğeyi içine alır. Bir öğe aşağıdaki gibi tan - boş dize; - "cat" kelimesini içeren dize; - herhangi bir sayıda dize içeren bir liste; -- `["cat", ["puppy", "cow"], "horse", [[]], "pig", [""], "sheep"]` gibi daha karmaşık veri yapıları. +- ve `["cat", ["puppy", "cow"], "horse", [[]], "pig", [""], "sheep"]` gibi daha karmaşık veri yapıları. - `100` sayısı Bu sayfanın geri kalanı bağlamında "dize", "belirli sayıda ikili veri baytı" anlamına gelir; hiçbir özel kodlama kullanılmaz ve dizelerin içeriği hakkında hiçbir bilgiye sahip olunduğu ima edilmez (minimum olmayan pozitif tamsayılara karşın kuralın gerektirdiği durumlar hariç). @@ -35,12 +35,12 @@ Bu sayfanın geri kalanı bağlamında "dize", "belirli sayıda ikili veri bayt RLP kodlaması şu şekilde tanımlanır: - Pozitif bir tamsayı için big-endian yorumu tam sayı olan en kısa bayt dizisine dönüştürülür ve ardından aşağıdaki kurallar uyarınca bir dize olarak kodlanır. -- Değer aralığı `[0x00, 0x7f]` (ondalık `[0, 127]`) olan tek bir bayt söz konusu olduğunda, bu bayt kendisinin RLP kodlamasıdır. -- Aksi takdirde, eğer bir dize 0-55 bayt uzunluğunda ise RLP kodlaması, (**0x80**, ondalık olarak 128) değerine sahip bir tek bayt ile dizenin uzunluğu ve onu takip eden dizeden oluşur. Bu nedenle, ilk baytın aralığı `[0x80, 0xb7]` (ondalık olarak `[128, 183]`)'dir. -- Eğer bir dize 55 bayttan daha uzunsa, RLP kodlaması bir tane **0xb7** (ondalık 183) değerine sahip tek bir bayt ile başlar. Ardından, dizenin uzunluğunun ikili formundaki uzunluğu bayt cinsinden eklenir, ardından dizenin uzunluğu ve en sonunda dizenin kendisi eklenir. Örneğin, 1024 bayt uzunluğundaki bir dize `\xb9\x04\x00` (ondalık `185, 4, 0`) olarak kodlanır ve ardından dize gelir. Burada, ilk bayt olarak `0xb9` (183 + 2 = 185) ve ardından gerçek dizenin uzunluğunu belirten 2 bayt `0x0400` (ondalık olarak 1024) gelir. Bu nedenle, ilk baytın aralığı `[0xb8, 0xbf]` (ondalık olarak `[184, 191]`) şeklindedir. +- Değeri `[0x00, 0x7f]` (ondalık `[0, 127]`) aralığında olan tek bir bayt için bu bayt kendi RLP kodlamasıdır. +- Aksi takdirde, bir dize 0-55 bayt uzunluğundaysa, RLP kodlaması **0x80** (onl. 128) değerindeki tek bir bayt artı dizenin uzunluğu ve ardından dizenin kendisinden oluşur. Böylece ilk baytın aralığı `[0x80, 0xb7]` (onl. `[128, 183]`) olur. +- Bir dize 55 bayttan uzunsa, RLP kodlaması şunlardan oluşur: **0xb7** (onl. 183) değerinde tek bir bayt, artı ikili biçimdeki dizenin uzunluğunun bayt cinsinden uzunluğu, ardından dizenin uzunluğu ve son olarak dizenin kendisi. Örneğin, 1024 bayt uzunluğunda bir dize, `\xb9\x04\x00` (onl. `185, 4, 0`) olarak kodlanır ve ardından dize gelir. Burada, ilk bayt olarak `0xb9` (183 + 2 = 185), ardından gerçek dizenin uzunluğunu belirten 2 baytlık `0x0400` (onl. 1024) gelir. Böylece ilk baytın aralığı `[0xb8, 0xbf]` (onl. `[184, 191]`) olur. - Bir dize 2^64 bayt uzunluğunda veya daha uzunsa kodlanamayabilir. -- Bir listenin toplam yükü (yani tüm öğelerinin RLP kodlanmış toplam uzunluğu) 0-55 bayt arasında ise RLP kodlaması, **0xc0** değerine sahip tek bir bayt ile yükün uzunluğu ve ardından öğelerin RLP kodlamalarının birleştirilmiş halinden oluşur. Bu nedenle, ilk baytın aralığı `[0xc0, 0xf7]` (ondalık olarak `[192, 247]`) şeklindedir. -- Bir listenin toplam yükü 55 bayttan daha uzunsa RLP kodlaması, **0xf7** değerine sahip tek bir bayt ile ikili biçimde yükün uzunluğunun bayt cinsinden uzunluğu ve ardından yükün uzunluğu ve onun da ardından öğelerin RLP kodlamalarının birleştirilmiş halinden oluşur. Bu nedenle, ilk baytın aralığı `[0xb8, 0xbf]` (ondalık olarak `[248, 255]`) şeklindedir. +- Bir listenin toplam yükü (yani RLP kodlu tüm öğelerinin birleşik uzunluğu) 0-55 bayt uzunluğundaysa, RLP kodlaması, değeri **0xc0** olan tek bir bayt artı yükün uzunluğu ve ardından öğelerin RLP kodlamalarının birleşiminden oluşur. Böylece ilk baytın aralığı `[0xc0, 0xf7]` (onl. `[192, 247]`) olur. +- Bir listenin toplam yükü 55 bayttan uzunsa RLP kodlaması; **0xf7** değerinde tek bir bayt, artı ikili formdaki yük uzunluğunun bayt cinsinden uzunluğu, ardından yükün uzunluğu ve son olarak da öğelerin RLP kodlamalarının birleşiminden oluşur. Böylece ilk baytın aralığı `[0xf8, 0xff]` (onl. `[248, 255]`) olur. Kodda, bu: @@ -62,7 +62,7 @@ def encode_length(L, offset): elif L < 256**8: BL = to_binary(L) return chr(len(BL) + offset + 55) + BL - raise Exception("input too long") + raise Exception("girdi çok uzun") def to_binary(x): if x == 0: @@ -73,37 +73,37 @@ def to_binary(x): ## Örnekler {#examples} - "dog" dizesi = = [ 0x83, 'd', 'o', 'g' ] -- [ "cat", "dog" ] listesi = `[ 0xc8, 0x83, 'c', 'a', 't', 0x83, 'd', 'o', 'g' ]` +- `[ "cat", "dog" ]` listesi = `[ 0xc8, 0x83, 'c', 'a', 't', 0x83, 'd', 'o', 'g' ]` - boş dize ('null') = `[ 0x80 ]` - boş liste = `[ 0xc0 ]` -- tam sayı 0 =`[ 0x80 ]` -- bayt '\\x00' = `[ 0x00 ]` -- bayt '\\x0f' = `[ 0x0f ]` -- baytlar '\\x04\\x00' = `[ 0x82, 0x04, 0x00 ]` -- ağacın [küme teorisi ile gösterimi](http://en.wikipedia.org/wiki/Set-theoretic_definition_of_natural_numbers), `[ [], [[]], [ [], [[]] ] ] = [ 0xc7, 0xc0, 0xc1, 0xc0, 0xc3, 0xc0, 0xc1, 0xc0 ]` -- "Lorem ipsum dolor sit amet, consectetur adipisicing elit" dizesi =`[ 0xb8, 0x38, 'L', 'o', 'r', 'e', 'm', ' ', ... , 'e', 'l', 'ı', 't' ]` +- 0 tamsayısı = `[ 0x80 ]` +- `\x00` baytı = `[ 0x00 ]` +- `\x0f` baytı = `[ 0x0f ]` +- `\x04\x00` baytları = `[ 0x82, 0x04, 0x00 ]` +- üçün [küme kuramsal temsili](http://en.wikipedia.org/wiki/Set-theoretic_definition_of_natural_numbers), `[ [], [[]], [ [], [[]] ] ] = [ 0xc7, 0xc0, 0xc1, 0xc0, 0xc3, 0xc0, 0xc1, 0xc0 ]` +- `"Lorem ipsum dolor sit amet, consectetur adipisicing elit"` dizesi = `[ 0xb8, 0x38, 'L', 'o', 'r', 'e', 'm', ' ', ...` , 'e', 'l', 'i', 't' ]` -## RLP kodunu çözme {#rlp-decoding} +## RLP kod çözme {#rlp-decoding} RLP'nin kodlaması kurallarına ve sürecine göre RLP kod çözme girdisi, bir ikili veri dizisi olarak kabul edilir. RLP kod çözme süreci aşağıdaki gibidir: -1. giriş verilerinin ilk baytına (yani önek) ve veri tipinin kodunun çözülmesine göre, gerçek verilerin uzunluğu ve kayma; +1. girdi verisinin ilk baytına (yani önekine) göre veri türü, gerçek veri uzunluğu ve ofsetin kodunu çözme; -2. verilerin türüne ve kaymasına göre, pozitif tamsayılar için minimum kodlama kuralına uyarak, verilerin kodunu uygun şekilde çözün; +2. verilerin türüne ve kaymasına göre, pozitif tamsayılar için minimum kodlama kuralına uyarak, verilerin kodunu uygun şekilde çözün; -3. girdinin geri kalanını çözmeye devam edin; +3. girdinin geri kalanını çözmeye devam edin; Bunların yanında veri tiplerini ve kaymaları kodlamanın kuralları şu şekildedir: -1. i̇lk baytın (yani, önek) aralığı [0x00, 0x7f] ise, veri bir dizedir ve dize, doğrudan ilk baytın kendisidir; +1. ilk baytın (yani önekin) aralığı [0x00, 0x7f] ise, veri bir dizedir ve dize doğrudan ilk baytın kendisidir; -2. i̇lk baytın aralığı [0x80, 0xb7] ise veri bir dizedir ve dizenin uzunluğu ilk bayttan 0x80 çıkarıldığında elde edilen değere eşit uzunluktadır; +2. i̇lk baytın aralığı [0x80, 0xb7] ise veri bir dizedir ve dizenin uzunluğu ilk bayttan 0x80 çıkarıldığında elde edilen değere eşit uzunluktadır; -3. veri, ilk baytın aralığı [0xf8, 0xff] ise ve uzunluğu ilk bayt eksi 0xf7'ye eşit olan listenin toplam yükü ilk baytı takip ediyorsa ve hepsini kodlamalarının birleşimi bir listedir. listenin öğeleri, listenin toplam yükünü takip eder; +3. veri, ilk baytın aralığı [0xf8, 0xff] ise ve uzunluğu ilk bayt eksi 0xf7'ye eşit olan listenin toplam yükü ilk baytı takip ediyorsa ve hepsini kodlamalarının birleşimi bir listedir. listenin öğeleri, listenin toplam yükünü takip eder; -4. ilk bayt aralığı [0xc0, 0xf7] ise veriler bir listedir ve toplam yükün ilk bayta eşit olduğu listenin tüm öğelerinin RLP kodlamalarının sıralanması eksi 0xc0 ilk baytı takip eder; +4. ilk bayt aralığı [0xc0, 0xf7] ise veriler bir listedir ve toplam yükün ilk bayta eşit olduğu listenin tüm öğelerinin RLP kodlamalarının sıralanması eksi 0xc0 ilk baytı takip eder; -5. ilk baytın aralığı [0xf8, 0xff] ise veri bir listedir ve uzunluğu ilk bayt eksi 0xf7'ye eşit olan listenin toplam yükü ilk baytı takip eder ve tümünün RLP kodlamalarının birleşimi listenin öğeleri listenin toplam yükünü takip eder; +5. ilk baytın aralığı [0xf8, 0xff] ise veri bir listedir ve uzunluğu ilk bayt eksi 0xf7'ye eşit olan listenin toplam yükü ilk baytı takip eder ve tümünün RLP kodlamalarının birleşimi listenin öğeleri listenin toplam yükünü takip eder; Kodda, bu: @@ -123,7 +123,7 @@ def rlp_decode(input): def decode_length(input): length = len(input) if length == 0: - raise Exception("input is null") + raise Exception("girdi boş") prefix = ord(input[0]) if prefix <= 0x7f: return (0, 1, str) @@ -141,23 +141,23 @@ def decode_length(input): lenOfListLen = prefix - 0xf7 listLen = to_integer(substr(input, 1, lenOfListLen)) return (1 + lenOfListLen, listLen, list) - raise Exception("input does not conform to RLP encoding form") + raise Exception("girdi RLP kodlama biçimine uymuyor") def to_integer(b): length = len(b) if length == 0: - raise Exception("input is null") + raise Exception("girdi boş") elif length == 1: return ord(b[0]) return ord(substr(b, -1)) + to_integer(substr(b, 0, -1)) * 256 ``` -## Daha fazla okuma {#further-reading} +## Daha fazla kaynak {#further-reading} - [Ethereum'da RLP](https://medium.com/coinmonks/data-structure-in-ethereum-episode-1-recursive-length-prefix-rlp-encoding-decoding-d1016832f919) -- [Yakın planda Ethereum: RLP](https://medium.com/coinmonks/ethereum-under-the-hood-part-3-rlp-decoding-df236dc13e58) -- [Coglio, A. (2020). Ethereum ACL2'deki Özyinelemeli Uzunluk Ön Eki. arXiv ön baskı arXiv:2009.13769.](https://arxiv.org/abs/2009.13769) +- [Perde arkasında Ethereum: RLP](https://medium.com/coinmonks/ethereum-under-the-hood-part-3-rlp-decoding-df236dc13e58) +- [Coglio, A. (2020). Ethereum ACL2'deki Özyinelemeli Uzunluk Ön Eki. arXiv preprint arXiv:2009.13769.](https://arxiv.org/abs/2009.13769) -## İlgili konular {#related-topics} +## Alakalı başlıklar {#related-topics} -- [Patricia merkle dijital ağacı](/developers/docs/data-structures-and-encoding/patricia-merkle-trie) +- [Patricia merkle trie](/developers/docs/data-structures-and-encoding/patricia-merkle-trie) diff --git a/public/content/translations/tr/developers/docs/data-structures-and-encoding/ssz/index.md b/public/content/translations/tr/developers/docs/data-structures-and-encoding/ssz/index.md index a9a28d93d73..0b7c46b8131 100644 --- a/public/content/translations/tr/developers/docs/data-structures-and-encoding/ssz/index.md +++ b/public/content/translations/tr/developers/docs/data-structures-and-encoding/ssz/index.md @@ -1,11 +1,11 @@ --- -title: Basit serileştirme -description: Ethereum'un SSZ biçiminin açıklaması. +title: "Basit serileştirme" +description: "Ethereum'un SSZ biçiminin açıklaması." lang: tr sidebarDepth: 2 --- -**Basit serileştirme (SSZ)**, İşaret Zincirinde kullanılan serileştirme yöntemidir. Bu, yürütüm katmanında kullanılan RLP serileştirmesini, eş keşif protokolü hariç fikir birliği katmanının tamamında değiştirir. SSZ, belirleyici ve aynı zamanda Merkle işlemini verimli bir şekilde gerçekleştirebilecek şekilde tasarlanmıştır. SSZ'nin iki bileşeni olduğu düşünülebilir: bir serileştirme şeması ve serileştirilmiş veri yapısıyla etkili bir şekilde çalışacak şekilde tasarlanmış bir Merkle işlemi şeması. +**Basit serileştirme (SSZ)**, İşaret Zinciri'nde kullanılan serileştirme yöntemidir. Bu, yürütüm katmanında kullanılan RLP serileştirmesini, eş keşif protokolü hariç fikir birliği katmanının tamamında değiştirir. RLP serileştirmesi hakkında daha fazla bilgi edinmek için [Özyinelemeli uzunluk ön eki (RLP)](/developers/docs/data-structures-and-encoding/rlp/) konusuna bakın. SSZ, belirleyici ve aynı zamanda Merkle işlemini verimli bir şekilde gerçekleştirebilecek şekilde tasarlanmıştır. SSZ'nin iki bileşeni olduğu düşünülebilir: bir serileştirme şeması ve serileştirilmiş veri yapısıyla etkili bir şekilde çalışacak şekilde tasarlanmış bir Merkle işlemi şeması. ## SSZ nasıl çalışır? {#how-does-ssz-work} @@ -16,7 +16,7 @@ SSZ, kendini tanımlamayan bir serileştirme şemasıdır; aksine önceden bilin - işaretsiz tam sayılar - Boole değerleri -Karmaşık "bileşik" tipler için serileştirme daha karmaşıktır çünkü bileşik tip, farklı türleri veya farklı boyutları olan birden çok öğeyi veya her ikisini birden içerebilir. Bu nesnelerin hepsi sabit uzunluklara sahipse (yani öğelerin boyutu her zaman gerçek değerlerine bakılmaksızın sabitse) serileştirme, bileşik tipteki her bir öğenin küçük uçlu bayt dizisine dönüştürülmesinden ibarettir. Bu bayt dizileri bir araya getirilir. Serileştirilmiş nesne, sabit uzunluktaki öğelerin bayt listesi temsilini, seri halden çıkarılan nesnede görünen sıra ile aynı düzende içerir. +Karmaşık "bileşik" tipler için serileştirme daha karmaşıktır çünkü bileşik tip, farklı türleri veya farklı boyutları olan birden çok öğeyi veya her ikisini birden içerebilir. Bu nesnelerin tümünün sabit uzunluklara sahip olduğu durumlarda (yani, öğelerin boyutu gerçek değerlerinden bağımsız olarak her zaman sabitse), serileştirme, bileşik türdeki her bir öğenin sıralı olarak little-endian bayt dizelerine dönüştürülmesinden ibarettir. Bu bayt dizileri bir araya getirilir. Serileştirilmiş nesne, sabit uzunluktaki öğelerin bayt listesi temsilini, seri halden çıkarılan nesnede görünen sıra ile aynı düzende içerir. Değişken uzunluğa sahip tipler için gerçek veri, serileştirilmiş nesnede o öğenin konumunda bir "kayma" değeri ile değiştirilir. Gerçek veri, serileştirilmiş nesnenin sonunda bir yığına eklenir. Kayma değeri, gerçek verinin yığındaki başlangıç noktasının indeksi olup ilgili baytları gösteren bir işaretçi olarak görev yapar. @@ -44,14 +44,14 @@ Aşağıdaki örnek, hem sabit hem de değişken uzunluktaki öğelere sahip bir ``` -`serialized` aşağıdaki yapıya sahip olacaktır ( burada sadece 4 bite doldurulmuş, gerçekte 32 bite doldurulur, `int` gösterimi açıklık amacıyla tutulur): +`serialized` aşağıdaki yapıya sahip olacaktır (burada sadece 4 bite doldurulmuş, gerçekte 32 bite doldurulur ve `int` gösterimi açıklık amacıyla tutulur): ``` [37, 0, 0, 0, 55, 0, 0, 0, 16, 0, 0, 0, 22, 0, 0, 0, 1, 2, 3, 4] ------------ ----------- ----------- ----------- ---------- | | | | | - number1 number2 offset for number 3 value for - vector vector + number1 number2 vektör için number3 vektör için + ofset değer ``` @@ -59,11 +59,11 @@ açıklık sağlamak için çizgilere bölünmüştür: ``` [ - 37, 0, 0, 0, # little-endian encoding of `number1`. - 55, 0, 0, 0, # little-endian encoding of `number2`. - 16, 0, 0, 0, # The "offset" that indicates where the value of `vector` starts (little-endian 16). - 22, 0, 0, 0, # little-endian encoding of `number3`. - 1, 2, 3, 4, # The actual values in `vector`. + 37, 0, 0, 0, # `number1`'in little-endian kodlaması. + 55, 0, 0, 0, # `number2`'nin little-endian kodlaması. + 16, 0, 0, 0, # `vector` değerinin nerede başladığını gösteren "ofset" (little-endian 16). + 22, 0, 0, 0, # `number3`'ün little-endian kodlaması. + 1, 2, 3, 4, # `vector` içindeki gerçek değerler. ] ``` @@ -71,25 +71,25 @@ Bu hala bir basitleştirmedir; yukarıdaki şemaladaki tam sayılar ve sıfırla ``` [ - 10100101000000000000000000000000 # little-endian encoding of `number1` - 10110111000000000000000000000000 # little-endian encoding of `number2`. - 10010000000000000000000000000000 # The "offset" that indicates where the value of `vector` starts (little-endian 16). - 10010110000000000000000000000000 # little-endian encoding of `number3`. - 10000001100000101000001110000100 # The actual value of the `bytes` field. + 10100101000000000000000000000000 # `number1`'in little-endian kodlaması + 10110111000000000000000000000000 # `number2`'nin little-endian kodlaması. + 10010000000000000000000000000000 # `vector` değerinin nerede başladığını gösteren "ofset" (little-endian 16). + 10010110000000000000000000000000 # `number3`'ün little-endian kodlaması. + 10000001100000101000001110000100 # `bytes` alanının gerçek değeri. ] ``` Bu nedenle, değişken uzunluktaki tiplerin gerçek değerleri, serileştirilmiş nesnenin sonunda bir yığında saklanır ve kaymaları, sıralı alan listesinde doğru pozisyonlarında depolanır. -Ayrıca, `BitList` türü gibi özel muamele gerektiren bazı durumlar da bulunur. Bu durumlar, serileştirmede uzunluk sınırlamasının eklenmesini ve seri halden çıkarma sırasında kaldırılmasını gerektirir. Detaylı bilgiler [SSZ spesifikasyonunda](https://github.com/ethereum/consensus-specs/blob/dev/ssz/simple-serialize.md) mevcuttur. +Ayrıca, serileştirme sırasında bir uzunluk sınırı eklenmesini ve seri halden çıkarma sırasında kaldırılmasını gerektiren `BitList` türü gibi özel işlem gerektiren bazı durumlar da bulunur. Tüm ayrıntılar [SSZ belirtiminde](https://github.com/ethereum/consensus-specs/blob/dev/ssz/simple-serialize.md) mevcuttur. -### Seri durumdan çıkarma {#deserialization} +### Seriden Çıkarma {#deserialization} Bu nesneyi seri durumdan çıkarmak için şema gereklidir. Şema, serileştirilmiş verinin kesin düzenini tanımlar, böylece her bir özel öğe, bayt grubundan anlamlı bir nesneye, öğelerin doğru türüne, değerine, boyutuna ve konumuna sahip şekilde seri halden çıkarılabilir. Şema, hangi değerlerin gerçek değerler olduğunu ve hangi değerlerin kayma olduğunu seri durumdan çıkarıcıya bildiren unsurdur. Bir nesne serileştirildiğinde tüm alan adları kaybolur ancak bunlar, seri halden çıkarma sırasında şemaya göre tekrar oluşturulur. -Bu konuyla ilgili interaktif bir açıklamayı [ssz.dev](https://www.ssz.dev/overview) adresinde bulabilirsiniz. +Bu konuyla ilgili etkileşimli bir açıklama için [ssz.dev](https://www.ssz.dev/overview) adresine bakın. -## Merkle işlemini gerçekleştirme {#merkleization} +## Merkle'laştırma {#merkleization} Bu SSZ serileştirilmiş nesnesi, daha sonra aynı verinin bir Merkle ağacı gösterimine dönüştürülebilir. İlk olarak, serileştirilmiş nesnedeki 32 baytlık parçaların sayısı belirlenir. Bunlar, ağacın "yaprakları"dır. Toplam yaprak sayısı, yaprakları karma hale getirerek sonunda tek bir karma ağaç kökü üretmek için 2'nin bir katı olmalıdır. Eğer bu doğal olarak böyle değilse, 32 baytlık sıfırlar içeren ekstra yapraklar eklenir. Diyagram olarak ifade etmek gerekirse: @@ -109,16 +109,16 @@ Bu SSZ serileştirilmiş nesnesi, daha sonra aynı verinin bir Merkle ağacı g Ağacın yapraklarının, yukarıdaki örnekte olduğu gibi doğal olarak eşit şekilde dağılmadığı durumlar da vardır. Örneğin yaprak 4, Merkle ağacına ilave "derinlik" eklenmesini gerektiren ve dolayısıyla eşit olmayan bir ağaç oluşmasına yol açan birden fazla öğeye sahip bir kapsayıcı olabilir. -Bu ağaç öğelerine yaprak X, düğüm X gibi isimler yerine genelleştirilmiş indeksler verebiliriz. Bu, kök = 1 ile başlayan ve her seviyede soldan sağa sayılan genelleştirilmiş indekslerle yapılır. Bu, yukarıda açıklanan genelleştirilmiş indekstir. Serileştirilmiş listedeki her öğenin, `2**depth + idx`'e eşit bir genelleştirilmiş dizini vardır; burada idx, serileştirilmiş nesnedeki sıfır dizinli konumudur ve derinlik, Merkle ağacındaki düzey sayısıdır ve öğe (yaprak) sayısının iki tabanındaki logaritması olarak belirlenebilir. +Bu ağaç öğelerine yaprak X, düğüm X gibi isimler yerine genelleştirilmiş indeksler verebiliriz. Bu, kök = 1 ile başlayan ve her seviyede soldan sağa sayılan genelleştirilmiş indekslerle yapılır. Bu, yukarıda açıklanan genelleştirilmiş indekstir. Serileştirilmiş listedeki her öğenin `2**depth + idx`'e eşit bir genelleştirilmiş dizini vardır. Burada `idx`, serileştirilmiş nesnedeki sıfır dizinli konumunu, `depth` ise Merkle ağacındaki seviye sayısını belirtir. Derinlik, öğe (yaprak) sayısının iki tabanlı logaritması olarak belirlenebilir. -## Genelleştirilmiş indeksler {#generalized-indices} +## Genelleştirilmiş dizinler {#generalized-indices} -Bir genelleştirilmiş indeks, her düğümün bir genelleştirilmiş indeksi temsil ettiği ikili bir Merkle ağacındaki bir düğümü temsil eden tam sayıdır, burada her düğümün genelleştirilmiş indeksi `2 ** depth + index in row` şeklindedir. +Genelleştirilmiş dizin, ikili bir Merkle ağacındaki bir düğümü temsil eden bir tam sayıdır; bu ağaçta her düğümün `2 ** depth + sıradaki dizin` şeklinde bir genelleştirilmiş dizini vardır. ``` - 1 --depth = 0 2**0 + 0 = 1 - 2 3 --depth = 1 2**1 + 0 = 2, 2**1+1 = 3 - 4 5 6 7 --depth = 2 2**2 + 0 = 4, 2**2 + 1 = 5... + 1 --derinlik = 0 2**0 + 0 = 1 + 2 3 --derinlik = 1 2**1 + 0 = 2, 2**1+1 = 3 + 4 5 6 7 --derinlik = 2 2**2 + 0 = 4, 2**2 + 1 = 5... ``` @@ -126,12 +126,13 @@ Bu gösterim, Merkle ağacındaki her bir veri parçası için bir düğüm olu ## Çoklu kanıtlar {#multiproofs} -Belirli bir öğeyi temsil eden genelleştirilmiş endekslerin listesini sağlamak, onu karma ağaç kökü ile karşılaştırarak doğrulamamıza olanak tanır. Bu kök, gerçekliğin kabul edilmiş versiyonudur. Sağladığımız herhangi bir veri, Merkle ağacında (genelleştirilmiş indeksi tarafından belirlenir) doğru yere yerleştirilerek ve kökün sabit kaldığı gözlemlenerek bu gerçekliğe karşı doğrulanabilir. Belirli bir genelleştirilmiş indeks kümesinin içeriğini doğrulamak için gereken en küçük düğüm kümesini hesaplamak için [burada](https://github.com/ethereum/consensus-specs/blob/dev/ssz/merkle-proofs.md#merkle-multiproofs) spesifikasyon içinde özel fonksiyonlar bulunmaktadır. +Belirli bir öğeyi temsil eden genelleştirilmiş endekslerin listesini sağlamak, onu karma ağaç kökü ile karşılaştırarak doğrulamamıza olanak tanır. Bu kök, gerçekliğin kabul edilmiş versiyonudur. Sağladığımız herhangi bir veri, Merkle ağacında (genelleştirilmiş indeksi tarafından belirlenir) doğru yere yerleştirilerek ve kökün sabit kaldığı gözlemlenerek bu gerçekliğe karşı doğrulanabilir. Belirtimde [burada](https://github.com/ethereum/consensus-specs/blob/dev/ssz/merkle-proofs.md#merkle-multiproofs), belirli bir genelleştirilmiş dizinler kümesinin içeriğini doğrulamak için gereken en küçük düğüm kümesinin nasıl hesaplanacağını gösteren işlevler bulunmaktadır. -Örneğin, aşağıdaki ağaçta indeks 9'daki verileri doğrulamak için 8, 9, 5, 3, 1 indekslerindeki verilerin özetine ihtiyacımız vardır. (8,9) karmasının karma (4) ile eşit olması gerekir, bu, 5 ile karma hale getirilerek 2 elde edilir ve bu da 3 ile karma hale getirilerek ağaç kökü 1 elde edilir. 9 için yanlış veri sağlanırsa, kök de değişir; bunu tespit eder ve dalı doğrulayamayız. +Örneğin, aşağıdaki ağaçta indeks 9'daki verileri doğrulamak için 8, 9, 5, 3, 1 indekslerindeki verilerin özetine ihtiyacımız vardır. +(8,9) karmasının karma (4) ile eşit olması gerekir, bu, 5 ile karma hale getirilerek 2 elde edilir ve bu da 3 ile karma hale getirilerek ağaç kökü 1 elde edilir. 9 için yanlış veri sağlanırsa, kök de değişir; bunu tespit eder ve dalı doğrulayamayız. ``` -* = data required to generate proof +* = kanıt oluşturmak için gereken veriler 1* 2 3* @@ -140,10 +141,10 @@ Belirli bir öğeyi temsil eden genelleştirilmiş endekslerin listesini sağlam ``` -## Daha fazla okuma {#further-reading} +## Daha fazla kaynak {#further-reading} - [Ethereum'u Yükseltme: SSZ](https://eth2book.info/altair/part2/building_blocks/ssz) -- [Ethereum'u Yükseltme: Merkle İşlemi](https://eth2book.info/altair/part2/building_blocks/merkleization) +- [Ethereum'u Yükseltme: Merkle'laştırma](https://eth2book.info/altair/part2/building_blocks/merkleization) - [SSZ uygulamaları](https://github.com/ethereum/consensus-specs/issues/2138) -- [SSZ hesaplayıcısı](https://simpleserialize.com/) +- [SSZ hesaplayıcı](https://simpleserialize.com/) - [SSZ.dev](https://www.ssz.dev/) diff --git a/public/content/translations/tr/developers/docs/data-structures-and-encoding/web3-secret-storage-definition/index.md b/public/content/translations/tr/developers/docs/data-structures-and-encoding/web3-secret-storage-definition/index.md index 57651a4d9cc..ec816d93386 100644 --- a/public/content/translations/tr/developers/docs/data-structures-and-encoding/web3-secret-storage-definition/index.md +++ b/public/content/translations/tr/developers/docs/data-structures-and-encoding/web3-secret-storage-definition/index.md @@ -1,6 +1,6 @@ --- -title: Web3 gizli depolama tanımı -description: Web3 gizli depolamasının resmi tanımı +title: "Web3 gizli depolama tanımı" +description: "Web3 gizli depolamasının resmi tanımı" lang: tr sidebarDepth: 2 --- diff --git a/public/content/translations/tr/developers/docs/data-structures-and-encoding/web3-secret-storage/index.md b/public/content/translations/tr/developers/docs/data-structures-and-encoding/web3-secret-storage/index.md new file mode 100644 index 00000000000..7c96a9cb829 --- /dev/null +++ b/public/content/translations/tr/developers/docs/data-structures-and-encoding/web3-secret-storage/index.md @@ -0,0 +1,195 @@ +--- +title: "Web3 gizli depolama tanımı" +description: "Web3 gizli depolamasının resmi tanımı" +lang: tr +sidebarDepth: 2 +--- + +Uygulamanızın Ethereum üzerinde çalışmasını sağlamak için web3.js kütüphanesi tarafından sağlanan web3 nesnesini kullanabilirsiniz. Bu nesne arka planda, RPC çağrıları vasıtasıyla yerel bir düğümle iletişim kurar. [web3](https://github.com/ethereum/web3.js/), bir RPC katmanını ortaya çıkaran herhangi bir Ethereum düğümüyle çalışır. + +`web3`, `eth` nesnesini içerir - web3.eth. + +```js +var fs = require("fs") +var recognizer = require("ethereum-keyfile-recognizer") + +fs.readFile("keyfile.json", (err, data) => { + var json = JSON.parse(data) + var result = recognizer(json) +}) + +/** sonuç + * [ 'web3', 3 ] web3 (v3) anahtar dosyası + * [ 'ethersale', undefined ] Ethersale anahtar dosyası + * null geçersiz anahtar dosyası + */ +``` + +Bu belge, Web3 Gizli Depolama Tanımı'nın **3. sürümünü** belgeler. + +## Tanım {#definition} + +Kripto algoritmasının artık AES-128-CBC'ye sabitlenmemesi dışında (Minimum gereksinim artık AES-128-CTR'dir), dosyanın kodlaması ve kod çözmesi büyük oranda versiyon 1 ile aynıdır. Çoğu anlam/algoritma sürüm 1 ile benzerdir; tek farkı `mac` değeridir, bu da türetilmiş anahtarın en soldan ikinci 16 baytının tam `ciphertext` ile birleştirilerek SHA3 (keccak-256) ile hesaplanmış halidir. + +Gizli anahtar dosyaları doğrudan `~/.web3/keystore` (Unix benzeri sistemlerde) ve `~/AppData/Web3/keystore` (Windows'ta) dizinlerinde depolanır. Herhangi bir ad verilebilir, ancak iyi bir kural `.json` kullanmaktır; burada ``, gizli anahtara verilen 128 bitlik UUID'dir (gizli anahtarın adresi için gizliliği koruyan bir vekil). + +Bu tür dosyaların tamamının ilişkilendirilmiş bir parolası vardır. Belirli bir `.json` dosyasının gizli anahtarını türetmek için önce dosyanın şifreleme anahtarı türetilir; bunun için dosyanın parolası alınır ve `kdf` anahtarında açıklanan şekilde bir anahtar türetme işlevinden geçirilir. KDF işlevinin KDF'ye bağımlı statik ve dinamik parametreleri, `kdfparams` anahtarında açıklanmıştır. + +PBKDF2'nin minimum düzeyde uyumlu tüm uygulamalar tarafından desteklenmesi gerekir, bu durum şu şekilde belirtilir: + +- `kdf`: `pbkdf2` + +PBKDF2 için kdfparams şunları içerir: + +- `prf`: `hmac-sha256` olmalıdır (gelecekte genişletilebilir); +- `c`: yineleme sayısı; +- `salt`: PBKDF'ye aktarılan salt; +- `dklen`: türetilen anahtarın uzunluğu. >= 32 olmalıdır. + +Dosyanın anahtarı, türetildikten sonra MAC türetilmesi yoluyla doğrulanmalıdır. MAC, türetilmiş anahtarın en soldan ikinci 16 baytının `ciphertext` anahtarının içeriğiyle birleştirilmesiyle oluşturulan bayt dizisinin SHA3 (keccak-256) karması olarak hesaplanmalıdır, yani: + +```js +KECCAK(DK[16..31] ++ ) +``` + +(burada `++` birleştirme operatörüdür) + +Bu değer `mac` anahtarıyla karşılaştırılmalıdır; eğer farklı ise farklı bir parola istenmelidir (ya da işlem iptal edilmelidir). + +Dosyanın anahtarı onaylandıktan sonra, dosyanın içindeki şifreli metin (dosyadaki `ciphertext` anahtarı), `cipher` anahtarıyla belirtilen simetrik şifreleme algoritması kullanılarak çözülebilir ve metne `cipherparams` anahtarı aracılığıyla parametreler atanabilir. Türetilen anahtar boyutuyla algoritmanın anahtar boyutu uyuşmuyorsa türetilen anahtarın sıfırla doldurulmuş sağ tarafı, algoritmanın anahtarı olarak kullanılmalıdır. + +Minimum düzeyde uyumlu tüm uygulamalar aşağıda belirtilen şekilde AES-128-CTR algoritmasını desteklemelidir: + +- `cipher: aes-128-ctr` + +Cipherparams anahtarına verilen anahtarlar gibi bu şifre de aşağıdaki parametreleri alır: + +- `iv`: Şifreleme için 128 bitlik başlatma vektörü. + +Şifreleme anahtarı, türetilmiş anahtarın en soldaki 16 baytıdır, yani `DK[0..15]` + +Bir gizli anahtarın oluşturulması/şifrelenmesi, bu talimatların tersi uygulanarak gerçekleştirilebilir. `uuid`, `salt` ve `iv` değerlerinin gerçekten rastgele olduğundan emin olun. + +Sürümün "kesin" bir tanımlayıcısı olarak işlev görmesi gereken `version` alanına ek olarak, uygulamalar biçimdeki daha küçük, bozucu olmayan değişiklikleri izlemek için `minorversion`'ı da kullanabilir. + +## Test Vektörleri {#test-vectors} + +Detaylar: + +- `Adres`: `008aeeda4d805471df9b2a5b0f38a0c3bcba786b` +- `ICAP`: `XE542A5PZHH8PYIZUBEJEO0MFWRAPPIL67` +- `UUID`: `3198bc9c-6672-5ab3-d9954942343ae5b6` +- `Parola`: `testpassword` +- `Gizli`: `7a28b5ba57c53603b0b07b56bba752f7784bf506fa95edc395f5cf6c7514fe9d` + +### PBKDF2-SHA-256 {#PBKDF2-SHA-256} + +`AES-128-CTR` ve `PBKDF2-SHA-256` kullanan test vektörü: + +`~/.web3/keystore/3198bc9c-6672-5ab3-d9954942343ae5b6.json` dosyasının içeriği: + +```json +{ + "crypto": { + "cipher": "aes-128-ctr", + "cipherparams": { + "iv": "6087dab2f9fdbbfaddc31a909735c1e6" + }, + "ciphertext": "5318b4d5bcd28de64ee5559e671353e16f075ecae9f99c7a79a38af5f869aa46", + "kdf": "pbkdf2", + "kdfparams": { + "c": 262144, + "dklen": 32, + "prf": "hmac-sha256", + "salt": "ae3cd4e7013836a3df6bd7241b12db061dbe2c6785853cce422d148a624ce0bd" + }, + "mac": "517ead924a9d0dc3124507e3393d175ce3ff7c1e96529c6c555ce9e51205e9b2" + }, + "id": "3198bc9c-6672-5ab3-d995-4942343ae5b6", + "version": 3 +} +``` + +**Ara Değerler**: + +`Türetilmiş anahtar`: `f06d69cdc7da0faffb1008270bca38f5e31891a3a773950e6d0fea48a7188551` +`MAC Gövdesi`: `e31891a3a773950e6d0fea48a71885515318b4d5bcd28de64ee5559e671353e16f075ecae9f99c7a79a38af5f869aa46` +`MAC`: `517ead924a9d0dc3124507e3393d175ce3ff7c1e96529c6c555ce9e51205e9b2` +`Şifreleme anahtarı`: `f06d69cdc7da0faffb1008270bca38f5` + +### Scrypt {#scrypt} + +AES-128-CTR ve Scrypt'i kullanarak vektörü test edin: + +```json +{ + "crypto": { + "cipher": "aes-128-ctr", + "cipherparams": { + "iv": "740770fce12ce862af21264dab25f1da" + }, + "ciphertext": "dd8a1132cf57db67c038c6763afe2cbe6ea1949a86abc5843f8ca656ebbb1ea2", + "kdf": "scrypt", + "kdfparams": { + "dklen": 32, + "n": 262144, + "p": 1, + "r": 8, + "salt": "25710c2ccd7c610b24d068af83b959b7a0e5f40641f0c82daeb1345766191034" + }, + "mac": "337aeb86505d2d0bb620effe57f18381377d67d76dac1090626aa5cd20886a7c" + }, + "id": "3198bc9c-6672-5ab3-d995-4942343ae5b6", + "version": 3 +} +``` + +**Ara Değerler**: + +`Türetilmiş anahtar`: `7446f59ecc301d2d79bc3302650d8a5cedc185ccbb4bf3ca1ebd2c163eaa6c2d` +`MAC Gövdesi`: `edc185ccbb4bf3ca1ebd2c163eaa6c2ddd8a1132cf57db67c038c6763afe2cbe6ea1949a86abc5843f8ca656ebbb1ea2` +`MAC`: `337aeb86505d2d0bb620effe57f18381377d67d76dac1090626aa5cd20886a7c` +`Şifreleme anahtarı`: `7446f59ecc301d2d79bc3302650d8a5c` + +## Sürüm 1'den Değişiklikler {#alterations-from-v2} + +Bu sürüm, [burada](https://github.com/ethereum/homestead-guide/blob/master/old-docs-for-reference/go-ethereum-wiki.rst/Passphrase-protected-key-store-spec.rst) yayımlanan sürüm 1'deki çeşitli tutarsızlıkları düzeltir. Bu düzeltmeler kısaca: + +- Büyük harf kullanımı gereksiz ve tutarsızdır (scrypt küçük harfli, Kdf karışık harfli, MAC büyük harfli). +- Adres gereksiz ve gizliliği tehlikeye atıyor. +- `Salt`, özünde anahtar türetme işlevinin bir parametresidir ve genel olarak kripto ile değil, bu işlevle ilişkilendirilmelidir. +- _SaltLen_ gereksizdir (Salt'tan türetilmesi yeterlidir). +- Kripto algoritması sabit şekilde belirttiği halde anahtar türetme işlevi verilmiştir. +- `Version`, özünde sayısal olsa da bir dizedir (bir dizeyle yapılandırılmış sürüm oluşturma mümkün olabilir, ancak nadiren değişen bir yapılandırma dosyası biçimi için kapsam dışı kabul edilebilir). +- `KDF` ve `cipher` kavramsal olarak kardeş kavramlar olmalarına rağmen farklı şekilde düzenlenmişlerdir. +- `MAC`, boşlukları dikkate almayan bir veri parçası üzerinden hesaplanır(!) + +Biçim üzerinde değişiklikler yapıldı ve aşağıdaki dosya elde edildi, bağlantı verilen önceki sayfada yer alan örnekle işlevsel açıdan eşdeğerdir: + +```json +{ + "crypto": { + "cipher": "aes-128-cbc", + "ciphertext": "07533e172414bfa50e99dba4a0ce603f654ebfa1ff46277c3e0c577fdc87f6bb4e4fe16c5a94ce6ce14cfa069821ef9b", + "cipherparams": { + "iv": "16d67ba0ce5a339ff2f07951253e6ba8" + }, + "kdf": "scrypt", + "kdfparams": { + "dklen": 32, + "n": 262144, + "p": 1, + "r": 8, + "salt": "06870e5e6a24e183a5c807bd1c43afd86d573f7db303ff4853d135cd0fd3fe91" + }, + "mac": "8ccded24da2e99a11d48cda146f9cc8213eb423e2ea0d8427f41c3be414424dd", + "version": 1 + }, + "id": "0498f19a-59db-4d54-ac95-33901b4f1870", + "version": 2 +} +``` + +## Sürüm 2'den Değişiklikler {#alterations-from-v2} + +Versiyon 2, çok sayıda hata içeren erken bir C++ uygulamasıydı. Bütün önemli kısımları aynı şekilde bırakıldı. diff --git a/public/content/translations/tr/developers/docs/design-and-ux/dex-design-best-practice/index.md b/public/content/translations/tr/developers/docs/design-and-ux/dex-design-best-practice/index.md index a0202ec96af..3f5e06d76d5 100644 --- a/public/content/translations/tr/developers/docs/design-and-ux/dex-design-best-practice/index.md +++ b/public/content/translations/tr/developers/docs/design-and-ux/dex-design-best-practice/index.md @@ -1,6 +1,6 @@ --- -title: Merkeziyetsiz borsa (DEX) tasarımına ilişkin en iyi pratikler -description: Jeton takasına yönelik kullanıcı deneyimi/kullanıcı arayüzü kararlarını açıklayan bir rehber. +title: "Merkeziyetsiz borsa (DEX) tasarımına ilişkin en iyi pratikler" +description: "Jeton takasına yönelik kullanıcı deneyimi/kullanıcı arayüzü kararlarını açıklayan bir rehber." lang: tr --- @@ -167,7 +167,7 @@ Sonuç olarak, kullanılabilirlik açısından büyük bir fark yaratmayacağı Modanın zamanla nasıl değiştiğini görmek biraz ilginç bir deneyim oldu. Uniswap başlangıçta jetonu solda tutuyordu, fakat artık sağa geçirdi. Sushiswap da bir tasarım güncellemesi sırasında bu değişikliğe gitti. Hepsi olmasa da çoğu protokol aynı yolu izledi. -Geleneksel finansta para biriminin simgesi genelde sayının önüne koyulur, örneğin $50, €50, £50 gibi, fakat biz 50 Dolar, 50 Euro, 50 pound _diyoruz_. +Geleneksel finansta para biriminin simgesi genelde sayının önüne koyulur, örneğin $50, €50, £50 gibi, fakat biz 50 dolar, 50 euro, 50 pound _diyoruz_. Ortalama kullanıcı -özellikle soldan sağa, üstten alta okuyan biri için- jetonu sağda gördüğünde muhtemelen daha doğal hisseder. @@ -205,7 +205,7 @@ Buton, aynı zamanda gerçekleştirilmesi gereken **eylemle de eşleştirilebili ![Ana CTA içinde gösterilen hata mesajı](./17.png) -### Bu figma dosyasıyla kendinizinkini oluşturun {#build-your-own-with-this-figma-file} +## Bu figma dosyasıyla kendinizinkini oluşturun {#build-your-own-with-this-figma-file} Birçok farklı protokolün sıkı çalışması sayesinde merkeziyetsiz borsa tasarımı oldukça ilerledi. Kullanıcının hangi bilgilere ihtiyacı olduğunu, bu bilgileri nasıl göstermemiz gerektiğini ve bu akışı nasıl mümkün olabildiğince düzgün yapabileceğimizi biliyoruz. Bu makalenin UX prensipleriyle ilgili sağlam bir temel sunabildiğini umarız. diff --git a/public/content/translations/tr/developers/docs/design-and-ux/heuristics-for-web3/index.md b/public/content/translations/tr/developers/docs/design-and-ux/heuristics-for-web3/index.md index f75bf19cc55..56431fe3d85 100644 --- a/public/content/translations/tr/developers/docs/design-and-ux/heuristics-for-web3/index.md +++ b/public/content/translations/tr/developers/docs/design-and-ux/heuristics-for-web3/index.md @@ -1,11 +1,11 @@ --- -title: Web3 arayüz tasarımı için 7 sezgisel yöntem -description: Web3'ün kullanılabilirliğini iyileştirmeye yönelik ilkeler +title: "Web3 arayüz tasarımı için 7 sezgisel yöntem" +description: "Web3'ün kullanılabilirliğini iyileştirmeye yönelik ilkeler" lang: tr --- Kullanılabilirliğe ilişkin sezgisel yöntemler, sitenizin kullanılabilirliğini ölçmek için kullanabileceğiniz genel "temel kurallardır". -Bu sezgisel yöntemler Web3 için özel olarak uyarlanmıştır ve Jakob Nielsen'in [etkileşim tasarımının 10 genel ilkesi](https://www.nngroup.com/articles/ten-usability-heuristics/) ile birlikte kullanılmalıdır. +Buradaki 7 sezgisel yöntem, Web3 için özel olarak tasarlanmıştır ve Jakob Nielsen'in [etkileşim tasarımı için 10 genel ilkesi](https://www.nngroup.com/articles/ten-usability-heuristics/) ile birlikte kullanılmalıdır. ## Web3 için yedi kullanılabilirlik sezgisel yöntemi {#seven-usability-heuristics-for-web3} @@ -54,7 +54,7 @@ Güvenlik öncelikli olmalıdır ve bu kullanıcıya belirtilmiş olmalıdır. **Örnek:** Denetimlerinizi alt bilgiye belirgin bir boyutta ekleyin. -![Denetimler internet sitesinin alt bilgisinde belirtilir](./Image2.png) +![Web sitesi altbilgisinde belirtilen denetimler](./Image2.png) ### 3. En önemli bilgi barizdir {#the-most-important-info-is-obvious} diff --git a/public/content/translations/tr/developers/docs/design-and-ux/index.md b/public/content/translations/tr/developers/docs/design-and-ux/index.md index cec275f23da..998657879dd 100644 --- a/public/content/translations/tr/developers/docs/design-and-ux/index.md +++ b/public/content/translations/tr/developers/docs/design-and-ux/index.md @@ -1,64 +1,66 @@ --- -title: Web3'te tasarım ve kullanıcı deneyimi -description: Web3 alanında ve Ethereum'da kullanıcı deneyimi tasarımı ve araştırmalarına giriş +title: "Web3'te tasarım ve kullanıcı deneyimi" +description: "Web3 alanında ve Ethereum'da kullanıcı deneyimi tasarımı ve araştırmalarına giriş" lang: tr --- Ethereum ile tasarımda yeni misiniz? Burası sizin için doğru yer. Ethereum topluluğu sizi web3 ile tasarım ve araştırmanın temelleri ile tanıştırmak için yazılı kaynaklara sahip. Diğer uygulama tasarımlarından biliyor olabileceğiniz kavramlardan farklı temel kavramlar hakkında bilgi edineceksiniz. -Önce web3 hakkında biraz daha temel bilgi edinmek ister misiniz? [**Bilgi merkezi**](/learn/)'ne göz atın. +Önce web3 hakkında biraz daha temel bilgi edinmek ister misiniz? [**Öğrenim merkezi**](/learn/)ne göz atın. -## Kullanıcı araştırması ile başlayalım {#start-with-user-research} +## Kullanıcı araştırmasıyla başlayın {#start-with-user-research} -Etkili tasarım, görsel olarak çekici kullanıcı arayüzleri yaratmanın ötesinde bir anlam ifade eder. Kullanıcı ihtiyaçları, hedefleri ve itici faktörleri hakkında derin bir anlayış kazandırır. Bu yüzden, işlerini bilinçli ve bir amaca yönelik gerçekleştirdiklerinden emin olmaları için tüm tasarımcılara, [**çift karolu süreç**](https://en.wikipedia.org/wiki/Double_Diamond_(design_process_model)) gibi bir tasarım sürecini benimsemelerini şiddetle tavsiye ediyoruz. +Etkili tasarım, görsel olarak çekici kullanıcı arayüzleri yaratmanın ötesinde bir anlam ifade eder. Kullanıcı ihtiyaçları, hedefleri ve itici faktörleri hakkında derin bir anlayış kazandırır. Bu nedenle, tüm tasarımcıların çalışmalarının planlı ve kasıtlı olduğundan emin olmak için [**çift elmas süreci**](https://en.wikipedia.org/wiki/Double_Diamond_\(design_process_model\)) gibi bir tasarım sürecini benimsemelerini şiddetle tavsiye ederiz. -- [Web3 daha çok Kullanıcı Deneyimi Araştırmacısına ve Tasarımcıya ihtiyaç duyuyor](https://blog.akasha.org/akasha-conversations-9-web3-needs-more-ux-researchers-and-designers) - Mevcut tasarım olgunlaşma sürecine genel bakış -- [Web3'te Kullanıcı Deneyimi Araştırması için basit bir kılavuz](https://uxplanet.org/a-complete-guide-to-ux-research-for-web-3-0-products-d6bead20ebb1) - Nasıl araştırma yapılacağına dair basit bir kılavuz -- [Web3'te Kullanıcı Deneyimi Kararlarına Nasıl Yaklaşılır?](https://archive.devcon.org/archive/watch/6/data-empathy-how-to-approach-ux-decisions-in-web3/) - Nicel ile nitel araştırmaya ve ikisi arasındaki farklara kısa bir genel bakış (video, 6 dak.) -- [Web3'te kullanıcı deneyimi araştırmacısı olmak](https://medium.com/@georgia.rakusen/what-its-like-being-a-user-researcher-in-web3-6a4bcc096849) - Web3'te kullanıcı deneyimi araştırmacısı olmaya dair kişisel bir bakış açısı +- [Web3'ün daha fazla UX Araştırmacısına ve Tasarımcısına ihtiyacı var](https://blog.akasha.org/akasha-conversations-9-web3-needs-more-ux-researchers-and-designers) - Mevcut tasarım olgunluğuna genel bir bakış +- [web3'te UX Araştırması için basit bir rehber](https://uxplanet.org/a-complete-guide-to-ux-research-for-web-3-0-products-d6bead20ebb1) - Nasıl araştırma yapılacağına dair basit bir rehber +- [Web3'te UX Kararlarına Nasıl Yaklaşılır](https://archive.devcon.org/archive/watch/6/data-empathy-how-to-approach-ux-decisions-in-web3/) - Nicel ve nitel araştırmalara ve ikisi arasındaki farklara kısa bir genel bakış (video, 6 dk.) +- [web3'te bir UX araştırmacısı olmak](https://medium.com/@georgia.rakusen/what-its-like-being-a-user-researcher-in-web3-6a4bcc096849) - web3'te bir UX araştırmacısı olmanın nasıl bir şey olduğuna dair kişisel bir görüş -## Web3'te araştırma çalışmaları {#research-in-web3} +## web3'teki araştırma çalışmaları {#research-in-web3} Bu, web3'te yapılmış ve tasarım ve ürün kararlarını vermenize yardım edebilecek veya kendi çalışmanızı yürütürken ilham kaynağı olabilecek kullanıcı araştırmalarının özenle hazırlanmış bir listesidir. -| Odak alanı | İsim | -|:-------------------------------------------------------------------------------- |:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Kriptoya alıştırma | [CRADL: Kripto Parada Kullanıcı Deneyimi](https://docs.google.com/presentation/d/1s2OPSH5sMJzxRYaJSSRTe8W2iIoZx0PseIV-WeZWD1s/edit?usp=sharing) | -| Kriptoya alıştırma | [CRADL: Kripto Para Alıştırma Süreci](https://docs.google.com/presentation/d/1R9nFuzA-R6SxaGCKhoMbE4Vxe0JxQSTiHXind3LVq_w/edit?usp=sharing) | -| Kriptoya alıştırma | [Bitcoin UX raporu](https://github.com/patestevao/BitcoinUX-report/blob/master/report.md) | -| Kriptoya alıştırma | [ConSensys: 2023'te dünyada Web3'ün algılanma durumu](https://consensys.io/insight-report/web3-and-crypto-global-survey-2023) | -| Kriptoya alıştırma | [NEAR: Benimseme yolculuğunu hızlandırma](https://drive.google.com/file/d/1VuaQP4QSaQxR5ddQKTMGI0b0rWdP7uGn/view) | -| Stake etme | [Hisseleme: Önemli trendler, çıkarımlar ve tahminler - Eth Staker](https://lookerstudio.google.com/u/0/reporting/cafcee00-e1af-4148-bae8-442a88ac75fa/page/p_ja2srdhh2c?s=hmbTWDh9hJo) | -| Stake etme | [Çok Uygulamalı Hisseleme](https://github.com/threshold-network/UX-User-Research/blob/main/Multi-App%20Staking%20(MAS)/iterative-user-study/MAS%20Iterative%20User%20Study.pdf) | -| DAO | [2022 DAO Araştırma Güncellemesi: DAO Geliştiricileri Nelere İhtiyaç Duyuyor?](https://blog.aragon.org/2022-dao-research-update/) | -| DeFi | [2024'te DeFi'ın durumu](https://stateofdefi.org/) (devam eden bir araştırma) | -| DeFi | [Kapsam havuzları](https://github.com/threshold-network/UX-User-Research/tree/main/Keep%20Coverage%20Pool) | -| DeFi | [ConSensys: DeFi Kullanıcı Araştırması Raporu 2022](https://cdn2.hubspot.net/hubfs/4795067/ConsenSys%20Codefi-Defi%20User%20ResearchReport.pdf) | -| Metaverse | [Metaverse: Kullanıcı Araştırması Raporu](https://www.politico.com/f/?id=00000187-7685-d820-a7e7-7e85d1420000) | -| Metaverse | [Safariye Çıkmak: Metaverse'teki Kullanıcıları Araştırmak](https://archive.devcon.org/archive/watch/6/going-on-safari-researching-users-in-the-metaverse/?tab=YouTube) (video, 27 dak.) | -| Ethereum.org kullanıcı deneyimi istatistikleri | [Kullanılabilirlik ve kullanıcı memnuniyeti anketi panosu - Ethereum.org](https://lookerstudio.google.com/reporting/0a189a7c-a890-40db-a5c6-009db52c81c9) | - -## Web3 için tasarım {#design-for-web3} - -- [Web3 Kullanıcı Deneyimi Tasarımı El Kitabı](https://web3ux.design/) - Web3 uygulamaları pratik tasarım rehberi -- [Web3 Tasarım Prensipleri](https://medium.com/@lyricalpolymath/web3-design-principles-f21db2f240c1) - Blokzincir tabanlı merkeziyetsiz uygulamalar için bir kullanıcı deneyimi kuralları çerçevesi -- [Blokzincir Tasarım İlkeleri](https://medium.com/design-ibm/blockchain-design-principles-599c5c067b6e) - IBM blokzincir tasarım ekibi tarafından alınan dersler -- [Web3 Tasarım Desenleri](https://www.web3designpatterns.io/)- Gerçek Web3 ürünlerinden alınan tasarım desenlerinden oluşturulan bir kütüphane -- [W3design.io](https://w3design.io/) - Ekosistemdeki farklı projelerin Kullanıcı Deneyimi akışlarından oluşturulan bir kütüphane -- [Neueux.com](https://neueux.com/apps) - Kullanıcı akışları üzerine çeşitli filtreleme seçenekleri içeren bir Kullanıcı Arayüzü kütüphanesi -- [Web3'ün Kullanılabilirlik Krizi: Bilmeniz Gerekenler!](https://www.youtube.com/watch?v=oBSXT_6YDzg) - Geliştirici odaklı proje üretiminde karşılaşılabilecek tehlikelere dair bir panel tartışması (video, 34 dakika) +| Odak alanı | İsim | +| :------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Kriptoya Başlangıç | [The Reown Pulse 2024: Kripto Tüketici Hissiyatı ve Kullanımı](https://reown.com/blog/unveiling-walletconnects-consumer-crypto-report) | +| Kriptoya Başlangıç | [CRADL: Kripto Paralarda UX](https://docs.google.com/presentation/d/1s2OPSH5sMJzxRYaJSSRTe8W2iIoZx0PseIV-WeZWD1s/edit?usp=sharing) | +| Kriptoya Başlangıç | [CRADL: Kripto Paraya Başlangıç](https://docs.google.com/presentation/d/1R9nFuzA-R6SxaGCKhoMbE4Vxe0JxQSTiHXind3LVq_w/edit?usp=sharing) | +| Kriptoya Başlangıç | [Bitcoin UX raporu](https://github.com/patestevao/BitcoinUX-report/blob/master/report.md) | +| Kriptoya Başlangıç | [Consensys: Dünya Çapında Web3 Algısının Durumu 2023](https://consensys.io/insight-report/web3-and-crypto-global-survey-2023) | +| Kriptoya Başlangıç | [NEAR: Benimsenmeye giden yolculuğu hızlandırmak](https://drive.google.com/file/d/1VuaQP4QSaQxR5ddQKTMGI0b0rWdP7uGn/view) | +| Hisseleme | [OpenUX: Rocket Pool Düğüm Operatörü UX](https://storage.googleapis.com/rocketpool/RocketPool-NodeOperator-UX-Report-Jan-2024.pdf) | +| Hisseleme | [Hisseleme: Ana eğilimler, çıkarımlar ve tahminler - Eth Paydaşı](https://lookerstudio.google.com/u/0/reporting/cafcee00-e1af-4148-bae8-442a88ac75fa/page/p_ja2srdhh2c?s=hmbTWDh9hJo) | +| Hisseleme | [Çoklu Uygulama Hisseleme](https://github.com/threshold-network/UX-User-Research/blob/main/Multi-App%20Staking%20\(MAS\)/iterative-user-study/MAS%20Iterative%20User%20Study.pdf) | +| DAO | [2022 DAO Araştırma Güncellemesi: DAO Kurucularının Neye İhtiyacı Var?](https://blog.aragon.org/2022-dao-research-update/) | +| DeFi | [Kapsam havuzları](https://github.com/threshold-network/UX-User-Research/tree/main/Keep%20Coverage%20Pool) | +| DeFi | [Consensys: DeFi Kullanıcı Araştırması Raporu 2022](https://cdn2.hubspot.net/hubfs/4795067/ConsenSys%20Codefi-Defi%20User%20ResearchReport.pdf) | +| Metaverse | [Metaverse: Kullanıcı Araştırması Raporu](https://www.politico.com/f/?id=00000187-7685-d820-a7e7-7e85d1420000) | +| Metaverse | [Safari'ye Çıkmak: Metaverse'te Kullanıcıları Araştırmak](https://archive.devcon.org/archive/watch/6/going-on-safari-researching-users-in-the-metaverse/?tab=YouTube) (video, 27 dk.) | + +## web3 için tasarım {#design-for-web3} + +- [Web3 UX Tasarım El Kitabı](https://web3ux.design/) - Web3 uygulamaları tasarlamak için pratik rehber +- [Web3 Tasarım İlkeleri](https://medium.com/@lyricalpolymath/web3-design-principles-f21db2f240c1) - Blokzincir tabanlı merkeziyetsiz uygulamalar için bir UX kuralları çerçevesi +- [Blokzincir Tasarım İlkeleri](https://medium.com/design-ibm/blockchain-design-principles-599c5c067b6e) - IBM'deki blokzincir tasarım ekibi tarafından öğrenilen dersler +- [Neueux.com](https://neueux.com/apps) - Çeşitli filtreleme seçenekleriyle kullanıcı akışlarının arayüz kütüphanesi +- [Web3'ün Kullanılabilirlik Krizi: Bilmeniz Gerekenler!](https://www.youtube.com/watch?v=oBSXT_6YDzg) - Geliştirici odaklı proje oluşturmanın tuzakları üzerine bir panel tartışması (video, 34 dk.) + +## Başlarken {#getting-started} + +- [Web3 için Sezgisel Yöntemler](/developers/docs/design-and-ux/heuristics-for-web3/) - Web3 arayüz tasarımı için 7 sezgisel yöntem +- [DEX Tasarımı En İyi Uygulamaları](/developers/docs/design-and-ux/dex-design-best-practice/) - Merkeziyetsiz Borsalar tasarlamak için bir rehber ## Web3 Tasarım Vaka Çalışmaları {#design-case-studies} -- [Deep Work Studio](https://deepwork.studio/case-studies/) -- [Kripto Kullanıcı Deneyimi El Kitabı](https://www.cryptouxhandbook.com/) -- [OpenSea üzerinden NFT satmak](https://builtformars.com/case-studies/opensea) -- [Cüzdan Kullanıcı Deneyimi sökümü, cüzdanların nasıl değişmesi gerektiğine ilişkin açıklama](https://www.youtube.com/watch?v=oTpuxYj8JWI&ab_channel=ETHDenver) (video, 20 dak.) +- [Deep Work Studio](https://www.deepwork.studio/case-studies) +- [OpenSea'de bir NFT Satmak](https://builtformars.com/case-studies/opensea) +- [Cüzdan UX incelemesi: cüzdanlar nasıl değişmeli](https://www.youtube.com/watch?v=oTpuxYj8JWI&ab_channel=ETHDenver) (video, 20 dk.) ## Tasarım Ödülleri {#bounties} - [Dework](https://app.dework.xyz/bounties) -- [Buildbox hackhaton'ları](https://app.buidlbox.io/) +- [Buildbox hackathon'ları](https://app.buidlbox.io/) - [ETHGlobal hackathon'ları](https://ethglobal.com/) ## Tasarım DAO'ları ve toplulukları {#design-daos-and-communities} @@ -67,18 +69,18 @@ Profesyonel, topluluk destekli organizasyonlara veya tasarım gruplarına katıl - [Vectordao.com](https://vectordao.com/) - [Deepwork.studio](https://www.deepwork.studio/) -- [Designer-dao.xyz](https://www.designer-dao.xyz/) - [We3.co](https://we3.co/) - [Openux.xyz](https://openux.xyz/) -## Tasarım Sistemleri {#design-systems} +## Tasarım Sistemleri ve diğer tasarım kaynakları {#design-systems-and-resources} -- [Optimism Design](https://www.figma.com/@optimism) (Figma) +- [Optimism Tasarımı](https://www.figma.com/@optimism) (Figma) - [Ethereum.org Tasarım sistemi](https://www.figma.com/@ethdotorg) (Figma) -- [Finity, Polygon tarafından geliştirilen bir tasarım sistemi](https://www.figma.com/community/file/1073921725197233598/finity-design-system) (Figma) +- [Finity, Polygon tarafından oluşturulan bir tasarım sistemi](https://www.figma.com/community/file/1073921725197233598/finity-design-system) (Figma) - [Kleros Tasarım Sistemi](https://www.figma.com/community/file/999852250110186964/kleros-design-system) (Figma) - [Safe Tasarım Sistemi](https://www.figma.com/community/file/1337417127407098506/safe-design-system) (Figma) - [ENS Tasarım sistemi](https://thorin.ens.domains/) - [Mirror Tasarım Sistemi](https://degen-xyz.vercel.app/) -**Bu sayfada listelenen makaleler ve projeler tarafımızca resmen onaylı değildir** ve yalnızca bilgilendirme amacıyla verilmiştir. [Liste politikamızdaki](/contributing/design/adding-design-resources) kriterlere göre bu sayfaya bağlantılar ekliyoruz. Eklememizi istediğiniz bir proje/makale varsa, bu sayfayı [GitHub](https://github.com/ethereum/ethereum-org-website/blob/dev/public/content/developers/docs/design-and-ux/index.md) üzerinden düzenleyin. +**Bu sayfada listelenen makaleler ve projeler resmi onay niteliği taşımaz** ve yalnızca bilgilendirme amacıyla sunulmuştur. +Bu sayfaya, [listeleme politikamızdaki](/contributing/design/adding-design-resources) ölçütlere dayanarak bağlantılar ekliyoruz. Bir proje/makale eklememizi isterseniz bu sayfayı [GitHub](https://github.com/ethereum/ethereum-org-website/blob/dev/public/content/developers/docs/design-and-ux/index.md) üzerinde düzenleyin. diff --git a/public/content/translations/tr/developers/docs/development-networks/index.md b/public/content/translations/tr/developers/docs/development-networks/index.md index 80fe352ee6e..4803a0aff9e 100644 --- a/public/content/translations/tr/developers/docs/development-networks/index.md +++ b/public/content/translations/tr/developers/docs/development-networks/index.md @@ -1,6 +1,6 @@ --- -title: Geliştirme Ağları -description: Geliştirme ağlarına ve Ethereum uygulamaları oluşturmaya yardımcı mevcut araçlara genel bakış. +title: "Geliştirme Ağları" +description: "Geliştirme ağlarına ve Ethereum uygulamaları oluşturmaya yardımcı mevcut araçlara genel bakış." lang: tr --- @@ -8,7 +8,7 @@ Akıllı sözleşmelerle bir Ethereum uygulaması geliştirirken, onu dağıtmad Web geliştirme için bilgisayarınızda yerel bir sunucu çalıştırmaya benzer şekilde, bir geliştirici ağı kullanarak dapp'inizi test etmek için yerel bir blok zinciri örneği oluşturabilirsiniz. Bu Ethereum geliştirme ağları, genel bir test ağından çok daha hızlı yinelemeye izin veren özellikler sunar (örneğin, bir test ağı musluğundan ETH almakla uğraşmanıza gerek yoktur). -## Ön koşullar {#prerequisites} +## Ön Koşullar {#prerequisites} Geliştirme ağlarına dalmadan önce [Ethereum yığınının temellerini](/developers/docs/ethereum-stack/) ve [Ethereum ağlarını](/developers/docs/networks/) anlamalısınız. @@ -18,15 +18,15 @@ Geliştirme ağları, özünde yerel geliştirme için özel olarak tasarlanmı **Neden standart bir Ethereum düğümünü yerel olarak çalıştırmıyoruz ki?** -Siz [bir düğüm](/developers/docs/nodes-and-clients/#running-your-own-node) _çalıştırabilirsiniz_, ancak geliştirme ağları özellikle geliştirme amacıyla özel olarak tasarlandığı için, genellikle şunlar gibi kullanışlı özelliklerle sahip olurlar: +Bir [düğüm](/developers/docs/nodes-and-clients/#running-your-own-node) _çalıştırabilirsiniz_ ancak geliştirme ağları geliştirme için özel olarak oluşturulduğundan, genellikle aşağıdakiler gibi kullanışlı özelliklerle birlikte gelirler: -- Yerel blok zincirinizi deterministik olarak verilerle tohumlama (ör. ETH bakiyeli hesaplar) +- Yerel blokzincirinizi deterministik olarak verilerle tohumlama (ör. ETH bakiyeli hesaplar) - Aldığı her işlemle anlık ve sırasıyla, herhangi bir gecikme olmaksızın blok üretme - Gelişmiş hata ayıklama ve kaydetme işlevi ## Mevcut araçlar {#available-projects} -**Not**: Çoğu [geliştirme çerçevesi](/developers/docs/frameworks/) yerleşik bir geliştirme ağı içerir. [Yerel geliştirme ortamınızı kurmak](/developers/local-environment/) için bir çerçeve ile başlamanızı öneririz. +**Not**: Çoğu [geliştirme çerçevesi](/developers/docs/frameworks/) yerleşik bir geliştirme ağı içerir. Bir çerçeveyle [yerel geliştirme ortamınızı kurmanızı](/developers/local-environment/) öneririz. ### Hardhat Ağı {#hardhat-network} @@ -35,22 +35,20 @@ Geliştirme için tasarlanmış yerel bir Ethereum ağı. Sözleşmelerinizi da Hardhat Network, profesyoneller için bir Ethereum geliştirme ortamı olan Hardhat ile yerleşik olarak gelir. - [Web sitesi](https://hardhat.org/) -- [GitHub](https://github.com/nomiclabs/hardhat) +- [GitHub](https://github.com/NomicFoundation/hardhat) ### Yerel İşaret Zincirleri {#local-beacon-chains} Bazı fikir birliği istemcileri, test amacıyla yerel işaret zincirleri oluşturmak için yerleşik araçlara sahiptir. Lighthouse, Nimbus ve Lodestar için talimatlar mevcuttur: -- [Lodestar kullanan yerel test ağı](https://chainsafe.github.io/lodestar/contribution/advanced-topics/setting-up-a-testnet#post-merge-local-testnet/) -- [Lighthouse kullanan yerel test ağı](https://lighthouse-book.sigmaprime.io/setup.html#local-testnets) +- [Lodestar kullanarak yerel test ağı](https://chainsafe.github.io/lodestar/contribution/advanced-topics/setting-up-a-testnet#post-merge-local-testnet/) +- [Lighthouse kullanarak yerel test ağı](https://lighthouse-book.sigmaprime.io/setup.html#local-testnets) -### Herkese açık Ethereum Test zincileri {#public-beacon-testchains} +### Halka Açık Ethereum Test Zincirleri {#public-beacon-testchains} -Ayrıca Ethereum'un halka açık iki test uygulaması da bulunmaktadır: Sepolia ve Hoodi. Sepolia, hızlı senkronizasyon için kapalı bir doğrulayıcı kümesiyle uygulama geliştirme için önerilen standart test ağıdır. Hoodi, açık bir doğrulayıcı kümesi kullanan ve potansiyel olarak herkesin doğrulama yapmasına izin veren, doğrulama ve hisseleme için bir test ağıdır. +Ayrıca Ethereum'un sürdürülen iki halka açık test uygulaması bulunmaktadır: Sepolia ve Hoodi. Uzun vadeli desteğe sahip ve önerilen test ağı Hoodi'dir ve herkes bu ağda doğrulama yapmakta serbesttir. Sepolia izinli bir doğrulayıcı seti kullanır, bu da bu test ağında yeni doğrulayıcılara genel erişim olmadığı anlamına gelir. -- [Hoodi Hisseleme Başlama Noktası](https://hoodi.launchpad.ethereum.org/en/) -- [Sepolia Web sitesi](https://sepolia.dev/) -- [Hoodi Web sitesi](https://hoodi.ethpandaops.io/) +- [Hoodi Hisseleme Başlama Noktası](https://hoodi.launchpad.ethereum.org/) ### Kurtosis Ethereum Paketi {#kurtosis} @@ -63,11 +61,11 @@ Ethereum Kurtosis paketi, Docker veya Kubernetes üzerinde parametrelendirilebil - [GitHub](https://github.com/kurtosis-tech/kurtosis) - [Dokümanlar](https://docs.kurtosis.com/) -## daha fazla okuma {#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!_ -## İlgili konular {#related-topics} +## Alakalı başlıklar {#related-topics} -- [Geliştirici çerçeveleri](/developers/docs/frameworks/) -- [Yerel bir geliştirme ortamı oluşturun](/developers/local-environment/) +- [Geliştirme çerçeveleri](/developers/docs/frameworks/) +- [Yerel bir geliştirme ortamı kurun](/developers/local-environment/) diff --git a/public/content/translations/tr/developers/docs/ethereum-stack/index.md b/public/content/translations/tr/developers/docs/ethereum-stack/index.md index ecd744a2641..43f56604509 100644 --- a/public/content/translations/tr/developers/docs/ethereum-stack/index.md +++ b/public/content/translations/tr/developers/docs/ethereum-stack/index.md @@ -1,6 +1,6 @@ --- -title: Ethereum yığınına giriş -description: Ethereum yazılım yığınının farklı katmanlarına ve nasıl uyuştuklarına dair bir inceleme. +title: "Ethereum yığınına giriş" +description: "Ethereum yazılım yığınının farklı katmanlarına ve nasıl uyuştuklarına dair bir inceleme." lang: tr --- @@ -10,39 +10,39 @@ Ancak, yazılım uygulamalarının Ethereum blok zinciri ile nasıl etkileşime ## Seviye 1: Ethereum Sanal Makinesi {#ethereum-virtual-machine} -[Ethereum Sanal Makinesi (EVM)](/developers/docs/evm/) Ethereum üzerindeki akıllı sözleşmeler için olan program ortamıdır. Ethereum blok zincirindeki tüm akıllı sözleşmeler ve durum değişiklikleri [işlemler](/developers/docs/transactions/) tarafından yürütülür. EVM, Ethereum ağında yapılan tüm işlemleri idare eder. +[Ethereum Sanal Makinesi (EVM)](/developers/docs/evm/), Ethereum üzerindeki akıllı sözleşmelerin çalışma zamanı ortamıdır. Ethereum blokzincirindeki tüm akıllı sözleşmeler ve durum değişiklikleri, [işlemler](/developers/docs/transactions/) tarafından yürütülür. EVM, Ethereum ağında yapılan tüm işlemleri idare eder. -Herhangi bir sanal makinede olduğu gibi, EVM çalıştırılan kod ve çalıştırılan makine (bir Ethereum düğümü) arasında bir soyutlama seviyesi oluşturur. EVM, şu anda dünyadaki farklı noktalarda bulunan binlerce düğümde çalışıyor. +Herhangi bir sanal makinede olduğu gibi, EVM çalıştırılan kod ve çalıştırılan makine (bir Ethereum düğümü) arasında bir soyutlama seviyesi oluşturur. Şu anda EVM, dünya geneline dağılmış binlerce düğümde çalışmaktadır. -EVM arka planda belirli görevleri yürütmek için bir dizi işlem kodu talimatı kullanmaktadır. Bu (140 eşsiz) işlem kodu EVM'nin [Turing bütünlüğüne](https://en.wikipedia.org/wiki/Turing_completeness) sahip olmasını sağlar, yani yeterli kaynaklar verildiğinde EVM'nin herhangi bir şeyi hesaplayabileceği anlamına gelir. +EVM arka planda belirli görevleri yürütmek için bir dizi işlem kodu talimatı kullanmaktadır. Bu (140 benzersiz) işlem kodu, EVM'nin [Turing-bütünlüğüne](https://en.wikipedia.org/wiki/Turing_completeness) sahip olmasını sağlar; bu da, yeterli kaynak sağlandığında EVM'nin hemen hemen her şeyi hesaplayabileceği anlamına gelir. Bir DAPP geliştiricisi olarak EVM hakkında çok bilgili olmanıza gerek yok, tek bilmeniz gereken şey; EVM'nin Ethereum'daki bütün uygulamaların temeli olduğudur. -## Seviye 2: Akıllı Sözleşmeler {#smart-contracts} +## Seviye 2: Akıllı sözleşmeler {#smart-contracts} -[Akıllı sözleşmeler](/developers/docs/smart-contracts/) Ethereum blok zincirinde çalışan yürütülebilir uygulamalardır. +[Akıllı sözleşmeler](/developers/docs/smart-contracts/), Ethereum blokzincirinde çalışan yürütülebilir programlardır. -Akıllı sözleşmeler EVM bayt koduna (işlem kodları denilen alt düzey makine yönergeleri) derlenen spesifik [programlama dilleri](/developers/docs/smart-contracts/languages/) kullanılarak yazılırlar. +Akıllı sözleşmeler, EVM bayt koduna (işlem kodları olarak adlandırılan düşük seviyeli makine talimatları) derlenen belirli [programlama dilleri](/developers/docs/smart-contracts/languages/) kullanılarak yazılır. -Akıllı sözleşmeler açık kaynak kütüphane işlevi görmelerinin yanında, esasen her zaman çalışan ve kapatılamayan açık API hizmetleridir. Akıllı sözleşmeler kullanıcıların ve uygulamaların ([dapp'lerin](/developers/docs/dapps/)) yetki gerekmeden etkileşime girebileceği herkese açık fonksiyonlar sağlarlar. Bir uygulama işlevsellik oluşturmak için dağıtılmış akıllı sözleşmelerle entegre olabilir, örneğin [veri akışları](/developers/docs/oracles/) ekleme veya token takaslarını destekleme gibi. Ek olarak, herhangi biri kendi uygulamasının ihtiyaçlarını karşılamak amaçlı özel işlevsellik eklemek için Ethereum'a yeni akıllı sözleşmeler dağıtabilir. +Akıllı sözleşmeler açık kaynak kütüphane işlevi görmelerinin yanında, esasen her zaman çalışan ve kapatılamayan açık API hizmetleridir. Akıllı sözleşmeler; kullanıcıların ve uygulamaların ([merkeziyetsiz uygulamaların](/developers/docs/dapps/)) izin gerektirmeden etkileşime girebileceği, halka açık işlevler sağlar. Herhangi bir uygulama; [veri akışları](/developers/docs/oracles/) eklemek veya token takaslarını desteklemek gibi işlevsellikler oluşturmak için, dağıtılmış akıllı sözleşmelerle entegre olabilir. Ek olarak, herhangi biri kendi uygulamasının ihtiyaçlarını karşılamak amaçlı özel işlevsellik eklemek için Ethereum'a yeni akıllı sözleşmeler dağıtabilir. Bir dapp geliştiricisi olarak, sadece Ethereum blok zincirinde özel işlevsellik eklemek istiyorsanız akıllı sözleşmeler yazmanız gerekecek. Projenizin ihtiyaçlarının çoğunu veya tamamını sadece mevcut akıllı sözleşmelerle entegre olarak karşılayabildiğinizi görebilirsiniz; sabit para ile ödemeleri destekleme veya token'ların merkeziyetsiz takasını etkinleştirme buna örnek gösterilebilir. ## Seviye 3: Ethereum düğümleri {#ethereum-nodes} -Bir uygulamanın Ethereum blok zinciriyle etkileşime geçebilmesi için öncelikle bir [Ethereum düğümüne](/developers/docs/nodes-and-clients/) bağlanması gereklidir. Bir düğüme bağlanmak blok zinciri verisi okumanızı ve/veya ağa işlemler göndermenizi sağlar. +Bir uygulamanın Ethereum blokzinciri ile etkileşime girebilmesi için [bir Ethereum düğümüne](/developers/docs/nodes-and-clients/) bağlanması gerekir. Bir düğüme bağlanmak blok zinciri verisi okumanızı ve/veya ağa işlemler göndermenizi sağlar. -Ethereum düğümleri yazılım, yani bir Ethereum istemcisi çalıştıran bilgisayarlardır. İstemci, her bloktaki tüm işlemleri doğrulayan; ağı güvenli ve verileri doğru tutan bir Ethereum uygulamasıdır. **Ethereum düğümleri, Ethereum blok zinciridir**. Ortaklaşa hâlde Ethereum blok zincirinin durumunu depolarlar ve blok zinciri durumunu değiştirmek için işlemler üzerinde mutabakata varırlar. +Ethereum düğümleri yazılım, yani bir Ethereum istemcisi çalıştıran bilgisayarlardır. İstemci, her bloktaki tüm işlemleri doğrulayan, ağı güvenli ve verileri doğru tutan bir Ethereum uygulamasıdır. **Ethereum düğümleri, Ethereum blok zinciridir**. Ortaklaşa hâlde Ethereum blok zincirinin durumunu depolarlar ve blok zinciri durumunu değiştirmek için işlemler üzerinde mutabakata varırlar. -Uygulamanız ([JSON-RPC API](/developers/docs/apis/json-rpc/) aracılığıyla) bir Ethereum düğümüne bağlandığında, blok zincirinden veri okuyabilir (kullanıcı hesap bakiyeleri gibi) ve ağa yeni işlemler yayınlayabilir (kullanıcı hesapları arasında ETH aktarımı yapmak veya akıllı sözleşmelerin fonksiyonlarını yürütmek gibi). +Uygulamanızı bir Ethereum düğümüne ([JSON-RPC API](/developers/docs/apis/json-rpc/) aracılığıyla) bağladığınızda, uygulamanız blokzincirden (kullanıcı hesabı bakiyeleri gibi) verileri okuyabilir ve ayrıca ağa (kullanıcı hesapları arasında ETH aktarma veya akıllı sözleşmelerin işlevlerini yürütme gibi) yeni işlemler yayınlayabilir. ## Seviye 4: Ethereum istemci API'leri {#ethereum-client-apis} Birçok kolaylık kütüphanesi (Ethereum'un açık kaynak topluluğu tarafından geliştirilen ve sürdürülen) uygulamalarınızın Ethereum blok zinciriyle bağlantı kurmasını ve iletişime geçmesini sağlar. -Eğer kullanıcıya dönük uygulamanız bir web uygulaması ise, ön ucunuzda doğrudan `npm install` [JavaScript API](/developers/docs/apis/javascript/) yapmayı tercih edebilirsiniz. Ya da belki bu işlevselliği bir [Python](/developers/docs/programming-languages/python/) veya [Java](/developers/docs/programming-languages/java/) API'si kullanarak sunucu tarafında uygulamayı seçebilirsiniz. +Kullanıcıya yönelik uygulamanız bir web uygulamasıysa, doğrudan ön yüzünüze bir [JavaScript API'sini](/developers/docs/apis/javascript/) `npm install` ile kurmayı seçebilirsiniz. Veya bu işlevselliği, bir [Python](/developers/docs/programming-languages/python/) ya da [Java](/developers/docs/programming-languages/java/) API'si kullanarak sunucu tarafında uygulamayı tercih edebilirsiniz. -Bu API'ler her ne kadar yığının gerekli bir parçası olmasalar da, bir Ethereum düğümüyle doğrudan etkileşime geçmenin zorluklarının çoğunu basitleştirirler. Ayrıca, bir geliştirici olarak Ethereum istemcilerinin karmaşıklıkları ile daha az zaman harcayabilmeniz ve uygulamanızın benzersiz işlevselliğine daha fazla zaman ayırabilmeniz için yardımcı işlevler (örneğin, ETH'yi Gwei'ye dönüştürmek) sağlarlar. +Bu API'ler her ne kadar yığının gerekli bir parçası olmasalar da, bir Ethereum düğümüyle doğrudan etkileşime geçmenin zorluklarının çoğunu basitleştirirler. Ayrıca, bir geliştirici olarak Ethereum istemcilerinin karmaşıklıklarıyla daha az zaman harcamanız ve uygulamanıza özgü işlevselliğe daha fazla odaklanmanız için yardımcı işlevler (örneğin ETH'yi Gwei'ye dönüştürme) de sağlarlar. ## Seviye 5: Son kullanıcı uygulamaları {#end-user-applications} @@ -52,9 +52,9 @@ Bu kullanıcı arayüzlerini geliştirme yollarınız özünde değişmez. Kulla ## Yığınınızı seçmeye hazır mısınız? {#ready-to-choose-your-stack} -Ethereum uygulamanız için [yerel bir geliştirme ortamı kurulumu](/developers/local-environment/) rehberimizi inceleyin. +Ethereum uygulamanız için [yerel bir geliştirme ortamı kurma](/developers/local-environment/) kılavuzumuza göz atın. -## Daha fazla bilgi {#further-reading} +## Daha fazla kaynak {#further-reading} - [Bir Web 3.0 uygulamasının mimarisi](https://www.preethikasireddy.com/post/the-architecture-of-a-web-3-0-application) - _Preethi Kasireddy_ diff --git a/public/content/translations/tr/developers/docs/evm/index.md b/public/content/translations/tr/developers/docs/evm/index.md index ac2d2782989..cd8bf0f9b30 100644 --- a/public/content/translations/tr/developers/docs/evm/index.md +++ b/public/content/translations/tr/developers/docs/evm/index.md @@ -1,36 +1,37 @@ --- -title: Ethereum Sanal Makinesi (EVM) -description: Ethereum Sanal Makinesine (EVM) ve EVM'nin durum, işlem ve akıllı sözleşmelerle olan ilgisine dair bir giriş. +title: "Ethereum Sanal Makinası (EVM)" +description: "Ethereum Sanal Makinesine (EVM) ve EVM'nin durum, işlem ve akıllı sözleşmelerle olan ilgisine dair bir giriş." lang: tr --- -Ethereum Sanal Makinesi (EVM), tüm ethereum düğümlerinde kodu sürekli ve güvenli bir şekilde çalıştıran merkeziyetsiz bir sanal ortamdır. Düğümler, [işlemler](/developers/docs/evm/opcodes/) için gereken bilişim eforunu ölçmek amacıyla "[gaz](/gas/)" kullanarak akıllı sözleşmeleri yürütmek için EVM'yi çalıştırır, böylece kaynaklar verimli şekilde paylaştırılır ve ağ güvenliği sağlanır. +Ethereum Sanal Makinesi (EVM), tüm Ethereum düğümlerinde kodu sürekli ve güvenli bir şekilde çalıştıran merkeziyetsiz bir sanal ortamdır. Düğümler, akıllı sözleşmeleri yürütmek için EVM'yi çalıştırır, [operasyonlar](/developers/docs/evm/opcodes/) için gereken hesaplama çabasını ölçmek için "[gaz](/developers/docs/gas/)" kullanır, böylece verimli kaynak tahsisi ve ağ güvenliği sağlanmış olur. -## Ön koşullar {#prerequisites} +## Ön Koşullar {#prerequisites} -[Bayt](https://wikipedia.org/wiki/Byte), [bellek](https://wikipedia.org/wiki/Computer_memory) ve [yığın](https://wikipedia.org/wiki/Stack_(abstract_data_type)) gibi bilgisayar bilimlerindeki yaygın terminolojiyi temel seviyede kavramak, EVM'yi anlamak için zorunludur. Ayrıca [karmafonksiyonları](https://wikipedia.org/wiki/Cryptographic_hash_function) ve [Merkleağaçları](https://wikipedia.org/wiki/Merkle_tree) gibi kriptografi/blok zincir konseptlerini bilmek faydalı olur. +EVM'yi anlamak için [bayt](https://wikipedia.org/wiki/Byte), [bellek](https://wikipedia.org/wiki/Computer_memory) ve [yığın](https://wikipedia.org/wiki/Stack_\(abstract_data_type\)) gibi bilgisayar bilimindeki yaygın terminolojiye temel düzeyde aşina olmak gereklidir. [Karma işlevleri](https://wikipedia.org/wiki/Cryptographic_hash_function) ve [Merkle ağacı](https://wikipedia.org/wiki/Merkle_tree) gibi kriptografi/blokzincir kavramlarına aşina olmak da yararlı olacaktır. -## Defterden durum makinesine {#from-ledger-to-state-machine} +## Ledger'dan durum makinesine {#from-ledger-to-state-machine} “Dağıtılmış defter” analojisi, genellikle temel kriptografi araçlarını kullanarak merkeziyetsiz bir para birimini mümkün kılan Bitcoin gibi blok zincirlerini tanımlamak için kullanılır. Defter, bir kişinin defteri değiştirmek için neler yapıp yapamayacağını düzenleyen kurallara uyması gereken bir faaliyet kaydı tutar. Örneğin, bir Bitcoin adresi daha önce aldığından daha fazla Bitcoin harcayamaz. Bu kurallar, Bitcoin ve diğer birçok blok zincirindeki tüm işlemlerin temelini oluşturur. -Ethereum'un neredeyse tamamen aynı sezgisel kuralları takip eden kendi yerel kripto parası (Ether) olsa da, Ethereum çok daha güçlü bir fonksiyonu da mümkün kılar: [akıllı sözleşmeler](/developers/docs/smart-contracts/). Bu daha karmaşık olan özellik için daha karmaşık bir analoji gerekir. Ethereum, dağıtılmış bir defter değil de dağıtılmış bir [durum makinesidir](https://wikipedia.org/wiki/Finite-state_machine). Ethereum'un durumu, yalnızca tüm hesapları ve bakiyeleri değil, aynı zamanda önceden tanımlanmış bir dizi kurala göre bloktan bloğa değişebilen ve isteğe bağlı makine kodunu çalıştırabilen _makine durumunu_ tutan büyük bir veri yapısıdır. Durumu bloktan bloğa değiştirmenin özel kuralları EVM tarafından tanımlanır. +Ethereum'un neredeyse tamamen aynı sezgisel kuralları takip eden kendi yerel kripto parası (ether) olsa da, çok daha güçlü bir işlevi de mümkün kılar: [akıllı sözleşmeler](/developers/docs/smart-contracts/). Bu daha karmaşık olan özellik için daha karmaşık bir analoji gerekir. Ethereum, dağıtık bir defter yerine dağıtık bir [durum makinesidir](https://wikipedia.org/wiki/Finite-state_machine). Ethereum'un durumu, yalnızca tüm hesapları ve bakiyeleri değil, aynı zamanda önceden tanımlanmış bir dizi kurala göre bloktan bloğa değişebilen ve isteğe bağlı makine kodunu çalıştırabilen bir _makine durumunu_ da tutan büyük bir veri yapısıdır. Durumu bloktan bloğa değiştirmenin özel kuralları EVM tarafından tanımlanır. -![EVM'nin oluşumunu gösteren bir diyagram](./evm.png) _Diyagram [Ethereum EVM resmediciden](https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf) uyarlanmıştır_ +![EVM'nin yapısını gösteren bir diyagram](./evm.png) +_Diyagram [Ethereum EVM illustrated](https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf) kaynağından uyarlanmıştır_ ## Ethereum durum geçiş fonksiyonu {#the-ethereum-state-transition-function} -EVM, matematiksel bir fonksiyon gibi davranır: Bir girdi verildiğinde, deterministik bir çıktı üretir. Bu nedenle, Ethereum'u bir **durum geçiş fonksiyonuna** sahip olarak daha belirgin bir şekilde tanımlamak oldukça yararlıdır: +EVM, matematiksel bir fonksiyon gibi davranır: Bir girdi verildiğinde, deterministik bir çıktı üretir. Bu nedenle Ethereum'u **durum geçiş fonksiyonuna** sahip olarak daha resmi bir şekilde tanımlamak oldukça yararlıdır: ``` Y(S, T)= S' ``` -Eski `(S)` geçerli durum ve yeni `(T)` geçerli işlem grubu ele alındığında, Ethereum `Y(S, T)` durum geçiş fonksiyonu, yeni `S'` geçerli çıktı durumu üretir +Eski bir geçerli durum `(S)` ve yeni bir geçerli işlem kümesi `(T)` verildiğinde, Ethereum durum geçiş fonksiyonu `Y(S, T)` yeni bir geçerli çıktı durumu olan `S'`'yi üretir. ### Durum {#state} -Ethereum bağlamında durum, tüm [hesapları](/developers/docs/accounts/) hash değerleri ile bağlı tutabilen ve blok zincirinde saklanan tek bir kök hash değerine indirgenebilir hâle getirebilen [değiştirilmiş Merkle Patricia Ağacı](/developers/docs/data-structures-and-encoding/patricia-merkle-trie/) adlı devasa bir veri yapısıdır. +Ethereum bağlamında durum, tüm [hesapları](/developers/docs/accounts/) karmalarla bağlı tutan ve blokzincirde depolanan tek bir kök karmasına indirgenebilen, [değiştirilmiş Merkle Patricia Ağacı](/developers/docs/data-structures-and-encoding/patricia-merkle-trie/) adı verilen devasa bir veri yapısıdır. ### İşlemler {#transactions} @@ -40,39 +41,48 @@ Sözleşme oluşturma, derlenmiş [akıllı sözleşme](/developers/docs/smart-c ## EVM talimatları {#evm-instructions} -EVM, 1024 öğe derinliğinde bir [yığın makinesi](https://wikipedia.org/wiki/Stack_machine) olarak çalışır. Her öğe, 256 bitlik kriptografi (Keccak-256 hash'leri veya secp256k1 imzaları gibi) ile kullanım kolaylığı sağlamak için seçilmiş 256 bitlik bir kelimedir. +EVM, 1024 öğe derinliğine sahip bir [yığın makinesi](https://wikipedia.org/wiki/Stack_machine) olarak çalışır. Her öğe, 256 bitlik kriptografi (Keccak-256 hash'leri veya secp256k1 imzaları gibi) ile kullanım kolaylığı sağlamak için seçilmiş 256 bitlik bir kelimedir. -Yürütme sırasında EVM, işlemler arasında varlığını sürdürmeyen geçici bir _bellek_ (kelime adresli bayt dizisi olarak) tutar. +Yürütme sırasında EVM, işlemler arasında kalıcı olmayan geçici bir _bellek_ (kelime adresli bir bayt dizisi olarak) tutar. -Ancak sözleşmeler, söz konusu hesap ve küresel durumun bir parçası ile ilişkili bir Merkle Patricia _depolama_ ağacı (kelime adreslenebilir bir kelime dizisi olarak) içerir. +### Geçici depolama -Derlenmiş akıllı sözleşme bayt kodu, `XOR`, `AND`, `ADD`, `SUB` vb. gibi standart yığın işlemleri gerçekleştiren bir dizi EVM [işlem kodları](/developers/docs/evm/opcodes) olarak yürütülür. EVM ayrıca, `ADDRESS`, `BALANCE`, `BLOCKHASH` vb. gibi blok zincirine özgü bir dizi yığın işlemi uygular. +Geçici depolama, `TSTORE` ve `TLOAD` işlem kodları aracılığıyla erişilen, işlem başına bir anahtar-değer deposudur. Aynı işlem sırasındaki tüm dahili çağrılar boyunca varlığını sürdürür ancak işlem sonunda temizlenir. Belleğin aksine, geçici depolama yürütme çerçevesinden ziyade EVM durumunun bir parçası olarak modellenir, ancak küresel duruma işlenmez. Geçici depolama, bir işlem sırasındaki dahili çağrılar arasında gaz açısından verimli geçici durum paylaşımını mümkün kılar. -![EVM operasyonlarında gazın nerede gerekli olduğunu gösteren bir diyagram](../gas/gas.png) _Diyagramlar [Ethereum EVM resmediciden](https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf) uyarlanmıştır_ +### Depolama + +Sözleşmeler, söz konusu hesapla ilişkili ve küresel durumun bir parçası olan bir Merkle Patricia _depolama_ ağacı (kelimeyle adreslenebilir bir kelime dizisi olarak) içerir. Bu kalıcı depolama, yalnızca tek bir işlem süresince kullanılabilen ve hesabın kalıcı depolama ağacının bir parçasını oluşturmayan geçici depolamadan farklıdır. + +### İşlem kodları + +Derlenmiş akıllı sözleşme bayt kodu, `XOR`, `AND`, `ADD`, `SUB` vb. gibi standart yığın işlemlerini gerçekleştiren bir dizi EVM [işlem kodu](/developers/docs/evm/opcodes) olarak yürütülür. EVM ayrıca `ADDRESS`, `BALANCE`, `BLOCKHASH` vb. gibi blokzincire özgü bir dizi yığın işlemi uygular. İşlem kodu seti ayrıca geçici depolamaya erişim sağlayan `TSTORE` ve `TLOAD`'u da içerir. + +![EVM işlemleri için gazın nerede gerektiğini gösteren bir diyagram](../gas/gas.png) +_Diyagramlar [Ethereum EVM illustrated](https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf) kaynağından uyarlanmıştır_ ## EVM uygulamaları {#evm-implementations} EVM'nin tüm uygulamaları, Ethereum Sarı Kağıdında açıklanan şartnameye uymalıdır. -Ethereum'un dokuz yıllık geçmişinde, EVM birkaç revizyondan geçmiştir ve çeşitli programlama dillerinde birkaç uygulaması mevcuttur. +Ethereum'un on yıllık geçmişi boyunca EVM çeşitli revizyonlardan geçmiştir ve EVM'nin farklı programlama dillerinde yazılmış çeşitli uygulamaları bulunmaktadır. -Tüm [Ethereum yürütme istemcileri](/developers/docs/nodes-and-clients/#execution-clients) bir EVM uygulaması içerir. Ek olarak, çok sayıda bütünsel uygulama da vardır: +[Ethereum yürütüm istemcileri](/developers/docs/nodes-and-clients/#execution-clients) bir EVM uygulaması içerir. Ek olarak, çok sayıda bütünsel uygulama da vardır: - [Py-EVM](https://github.com/ethereum/py-evm) - _Python_ - [evmone](https://github.com/ethereum/evmone) - _C++_ - [ethereumjs-vm](https://github.com/ethereumjs/ethereumjs-vm) - _JavaScript_ -- [revm](https://github.com/bluealloy/revm)-_Rust_ +- [revm](https://github.com/bluealloy/revm) - _Rust_ -## Daha Fazla Bilgi {#further-reading} +## Ek Okumalar {#further-reading} -- [Ethereum Sarı Kağıdı](https://ethereum.github.io/yellowpaper/paper.pdf) +- [Ethereum Sarı Raporu](https://ethereum.github.io/yellowpaper/paper.pdf) - [Jellopaper ya da diğer adıyla KEVM: K'de EVM Semantiği](https://jellopaper.org/) -- [Bej Kağıt](https://github.com/chronaeon/beigepaper) +- [Bej Rapor](https://github.com/chronaeon/beigepaper) - [Ethereum Sanal Makinesi İşlem Kodları](https://www.ethervm.io/) -- [Ethereum Sanal Makinesi İşlem Kodları İnteraktif Referansı](https://www.evm.codes/) -- [Solidity'nin belgelerine kısa bir giriş](https://docs.soliditylang.org/en/latest/introduction-to-smart-contracts.html#index-6) -- [Ethereum'da Uzmanlaşmak - Ethereum Sanal Makinası](https://github.com/ethereumbook/ethereumbook/blob/openedition/13evm.asciidoc) +- [Ethereum Sanal Makinesi İşlem Kodları Etkileşimli Referansı](https://www.evm.codes/) +- [Solidity'nin dokümantasyonundaki kısa bir giriş](https://docs.soliditylang.org/en/latest/introduction-to-smart-contracts.html#index-6) +- [Mastering Ethereum - Ethereum Sanal Makinesi](https://github.com/ethereumbook/ethereumbook/blob/openedition/13evm.asciidoc) -## İlgili konular {#related-topics} +## İlgili Konular {#related-topics} - [Gaz](/developers/docs/gas/) diff --git a/public/content/translations/tr/developers/docs/evm/opcodes/index.md b/public/content/translations/tr/developers/docs/evm/opcodes/index.md index 5e41d7a571b..077a2d30d2c 100644 --- a/public/content/translations/tr/developers/docs/evm/opcodes/index.md +++ b/public/content/translations/tr/developers/docs/evm/opcodes/index.md @@ -1,174 +1,177 @@ --- -title: EVM için işlem kodları -description: Ethereum Sanal Makinası için tüm mevcut işlem kodlarının bir listesi. +title: "EVM için işlem kodları" +description: "Ethereum Sanal Makinası için tüm mevcut işlem kodlarının bir listesi." lang: tr --- ## Genel Bakış {#overview} -Bu EVM referans sayfasının [wolflo/evm-opcodes](https://github.com/wolflo/evm-opcodes) güncellenmiş bir versiyonudur. Ayrıca [Sarı Kağıt](https://ethereum.github.io/yellowpaper/paper.pdf)'tan, [Jello Kağıt](https://jellopaper.org/evm/)'tan ve [geth](https://github.com/ethereum/go-ethereum) uygulamasından alınmıştır. Bunun erişilebilir bir referans olması amaçlanmıştır, ancak özellikle net değildir. Eğer doğruluktan emin olmak ve her kenar durumundan haberdar olmak istiyorsanız, Jello Kağıdı veya bir müşteri uygulaması kullanmanız tavsiye edilir. +Bu, [wolflo/evm-opcodes](https://github.com/wolflo/evm-opcodes) adresindeki EVM referans sayfasının güncellenmiş bir sürümüdür. +Ayrıca [Sarı Bülten](https://ethereum.github.io/yellowpaper/paper.pdf), [Jello Bülteni](https://jellopaper.org/evm/) ve [geth](https://github.com/ethereum/go-ethereum) uygulamasından da yararlanılmıştır. +Bunun erişilebilir bir referans olması amaçlanmıştır, ancak özellikle net değildir. +Eğer doğruluktan emin olmak ve her kenar durumundan haberdar olmak istiyorsanız, Jello Kağıdı veya bir müşteri uygulaması kullanmanız tavsiye edilir. -İnteraktif bir referans mı arıyorsunuz? Göz atın: [evm.codes](https://www.evm.codes/). +İnteraktif bir referans mı arıyorsunuz? [evm.codes](https://www.evm.codes/) sitesine göz atın. -Değişken gaz ücretleri ile ilgili operasyonlar için bkz. [gas.md](https://github.com/wolflo/evm-opcodes/blob/main/gas.md). +Dinamik gaz maliyetli işlemler için [gas.md](https://github.com/wolflo/evm-opcodes/blob/main/gas.md) dosyasına bakın. -💡 Hızlı ipucu: Tam satırları görmek istiyorsanız, masaüstünde yatay olarak kaydırmak için `[shift] + kaydırmayı` kullanın. +💡 Hızlı ipucu: Tüm satırları görüntülemek için, masaüstünde yatay olarak kaydırmak üzere `[shift] + scroll` kullanın. -| Yığın | İsim | Gaz | Başlangıç Yığını | Sonuç Yığını | Bellek/Depolama | Notlar | -|:-----:|:-------------- |:-----------------------------------------------------------------------------------------------:|:------------------------------------------------ |:-------------------------------------------- |:----------------------------------------------------------------------------- |:--------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| 00 | STOP | 0 | | | | halt execution | -| 01 | EKLE | 3 | `a, b` | `a + b` | | (u)int256 addition modulo 2\*\*256 | -| 02 | MUL | 5 | `a, b` | `a * b` | | (u)int256 multiplication modulo 2\*\*256 | -| 03 | ALT | 3 | `a, b` | `a - b` | | (u)int256 addition modulo 2\*\*256 | -| 04 | DIV | 5 | `a, b` | `a // b` | | uint256 division | -| 05 | SDIV | 5 | `a, b` | `a // b` | | int256 division | -| 06 | MOD | 5 | `a, b` | `a % b` | | uint256 modulus | -| 07 | SMOD | 5 | `a, b` | `a % b` | | int256 modulus | -| 08 | ADDMOD | 8 | `a, b, N` | `(a + b) % N` | | (u)int256 addition modulo N | -| 09 | MULMOD | 8 | `a, b, N` | `(a * b) % N` | | (u)int256 multiplication modulo N | -| 0A | EXP | [A1](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a1-exp) | `a, b` | `a ** b` | | uint256 exponentiation modulo 2\*\*256 | -| 0B | SIGNEXTEND | 5 | `b, x` | `SIGNEXTEND(x, b)` | | [sign extend](https://wikipedia.org/wiki/Sign_extension) `x` from `(b+1)` bytes to 32 bytes | -| 0C-0F | _invalid_ | | | | | | -| 10 | LT | 3 | `a, b` | `a < b` | | uint256 less-than | -| 11 | GT | 3 | `a, b` | `a > b` | | uint256 greater-than | -| 12 | SLT | 3 | `a, b` | `a < b` | | int256 less-than | -| 13 | SGT | 3 | `a, b` | `a > b` | | int256 greater-than | -| 14 | EQ | 3 | `a, b` | `a == b` | | (u)int256 equality | -| 15 | ISZERO | 3 | `a` | `a == 0` | | (u)int256 iszero | -| 16 | AND | 3 | `a, b` | `a && b` | | bitwise AND | -| 17 | OR | 3 | `a, b` | `a \|\| b` | | bitwise OR | -| 18 | XOR | 3 | `a, b` | `a ^ b` | | bitwise XOR | -| 19 | NOT | 3 | `a` | `~a` | | bitwise NOT | -| 1A | BYTE | 3 | `i, x` | `(x >> (248 - i * 8)) && 0xFF` | | `i`th byte of (u)int256 `x`, from the left | -| 1B | SHL | 3 | `shift, val` | `val << shift` | | shift left | -| 1C | SHR | 3 | `shift, val` | `val >> shift` | | logical shift right | -| 1D | SAR | 3 | `shift, val` | `val >> shift` | | arithmetic shift right | -| 1E-1F | _invalid_ | | | | | | -| 20 | KECCAK256 | [A2](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a2-sha3) | `ost, len` | `keccak256(mem[ost:ost+len-1])` | | keccak256 | -| 21-2F | _invalid_ | | | | | | -| 30 | ADDRESS | 2 | `.` | `address(this)` | | address of executing contract | -| 31 | BALANCE | [A5](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a5-balance-extcodesize-extcodehash) | `addr` | `addr.balance` | | balance, in wei | -| 32 | ORIGIN | 2 | `.` | `tx.origin` | | address that originated the tx | -| 33 | CALLER | 2 | `.` | `msg.sender` | | address of msg sender | -| 34 | CALLVALUE | 2 | `.` | `msg.value` | | msg value, in wei | -| 35 | CALLDATALOAD | 3 | `idx` | `msg.data[idx:idx+32]` | | read word from msg data at index `idx` | -| 36 | CALLDATASIZE | 2 | `.` | `len(msg.data)` | | length of msg data, in bytes | -| 37 | CALLDATACOPY | [A3](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a3-copy-operations) | `dstOst, ost, len` | `.` | mem[dstOst:dstOst+len-1] := msg.data[ost:ost+len-1] | copy msg data | -| 38 | CODESIZE | 2 | `.` | `len(this.code)` | | length of executing contract's code, in bytes | -| 39 | CODECOPY | [A3](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a3-copy-operations) | `dstOst, ost, len` | `.` | | mem[dstOst:dstOst+len-1] := this.code[ost:ost+len-1] | copy executing contract's bytecode | -| 3A | GASPRICE | 2 | `.` | `tx.gasprice` | | gas price of tx, in wei per unit gas [\*\*](https://eips.ethereum.org/EIPS/eip-1559#gasprice) | -| 3B | EXTCODESIZE | [A5](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a5-balance-extcodesize-extcodehash) | `addr` | `len(addr.code)` | | size of code at addr, in bytes | -| 3C | EXTCODECOPY | [A4](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a4-extcodecopy) | `addr, dstOst, ost, len` | `.` | mem[dstOst:dstOst+len-1] := addr.code[ost:ost+len-1] | copy code from `addr` | -| 3D | RETURNDATASIZE | 2 | `.` | `size` | | size of returned data from last external call, in bytes | -| 3E | RETURNDATACOPY | [A3](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a3-copy-operations) | `dstOst, ost, len` | `.` | mem[dstOst:dstOst+len-1] := returndata[ost:ost+len-1] | copy returned data from last external call | -| 3F | EXTCODEHASH | [A5](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a5-balance-extcodesize-extcodehash) | `addr` | `karma` | | hash = addr.exists ? keccak256(addr.code) : 0 | -| 40 | BLOCKHASH | 20 | `blockNum` | `blockHash(blockNum)` | | | -| 41 | COINBASE | 2 | `.` | `block.coinbase` | | mevcut bloğu önerenin adresi | -| 42 | TIMESTAMP | 2 | `.` | `block.timestamp` | | timestamp of current block | -| 43 | NUMBER | 2 | `.` | `block.number` | | number of current block | -| 44 | PREVRANDAO | 2 | `.` | `randomness beacon` | | randomness beacon | -| 45 | GASLIMIT | 2 | `.` | `block.gaslimit` | | gas limit of current block | -| 46 | CHAINID | 2 | `.` | `chain_id` | | push current [chain id](https://eips.ethereum.org/EIPS/eip-155) onto stack | -| 47 | SELFBALANCE | 5 | `.` | `address(this).balance` | | balance of executing contract, in wei | -| 48 | BASEFEE | 2 | `.` | `block.basefee` | | base fee of current block | -| 49 | BLOBHASH | 3 | `idx` | `tx.blob_versioned_hashes[idx]` | | [EIP-4844](https://eips.ethereum.org/EIPS/eip-4844) | -| 4A | BLOBBASEFEE | 2 | `.` | `block.blobbasefee` | | blob base fee of current block ([EIP-7516](https://eips.ethereum.org/EIPS/eip-7516)) | -| 4B-4F | _invalid_ | | | | | | -| 50 | POP | 2 | `_anon` | `.` | | remove item from top of stack and discard it | -| 51 | MLOAD | 3[\*](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a0-1-memory-expansion) | `ost` | `mem[ost:ost+32]` | | read word from memory at offset `ost` | -| 52 | MSTORE | 3[\*](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a0-1-memory-expansion) | `ost, val` | `.` | mem[ost:ost+32] := val | write a word to memory | -| 53 | MSTORE8 | 3[\*](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a0-1-memory-expansion) | `ost, val` | `.` | mem[ost] := val && 0xFF | write a single byte to memory | -| 54 | SLOAD | [A6](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a6-sload) | `key` | `storage[key]` | | read word from storage | -| 55 | SSTORE | [A7](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a7-sstore) | `key, val` | `.` | storage[key] := val | write word to storage | -| 56 | JUMP | 8 | `dst` | `.` | | `$pc := dst` mark that `pc` is only assigned if `dst` is a valid jumpdest | -| 57 | JUMPI | 10 | `dst, condition` | `.` | | `$pc := condition ? dst : $pc + 1` | -| 58 | PC | 2 | `.` | `$pc` | | program counter | -| 59 | MSIZE | 2 | `.` | `len(mem)` | | size of memory in current execution context, in bytes | -| 5A | GAS | 2 | `.` | `gasRemaining` | | | -| 5B | JUMPDEST | 1 | | | mark valid jump destination | a valid jump destination for example a jump destination not inside the push data | -| 5C | TLOAD | 100 | `key` | `tstorage[key]` | | read word from transient storage ([EIP-1153](https://eips.ethereum.org/EIPS/eip-1153)) | -| 5D | TSTORE | 100 | `key, val` | `.` | tstorage[key] := val | write word to transient storage ([EIP-1153](https://eips.ethereum.org/EIPS/eip-1153)) | -| 5E | MCOPY | 3+3\*words+[A0](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a0-1-memory-expansion) | `dstOst, ost, len` | `.` | mem[dstOst] := mem[ost:ost+len] | copy memory from one area to another ([EIP-5656](https://eips.ethereum.org/EIPS/eip-5656)) | -| 5F | PUSH0 | 2 | `.` | `uint8` | | değişmez değer 0'ı yığına it | -| 60 | PUSH1 | 3 | `.` | `uint8` | | push 1-byte value onto stack | -| 61 | PUSH2 | 3 | `.` | `uint16` | | push 2-byte value onto stack | -| 62 | PUSH3 | 3 | `.` | `uint24` | | push 3-byte value onto stack | -| 63 | PUSH4 | 3 | `.` | `uint32` | | push 4-byte value onto stack | -| 64 | PUSH5 | 3 | `.` | `uint40` | | push 5-byte value onto stack | -| 65 | PUSH6 | 3 | `.` | `uint48` | | push 6-byte value onto stack | -| 66 | PUSH7 | 3 | `.` | `uint56` | | push 7-byte value onto stack | -| 67 | PUSH8 | 3 | `.` | `uint64` | | push 8-byte value onto stack | -| 68 | PUSH9 | 3 | `.` | `uint72` | | push 9-byte value onto stack | -| 69 | PUSH10 | 3 | `.` | `uint80` | | push 10-byte value onto stack | -| 6A | PUSH11 | 3 | `.` | `uint88` | | push 11-byte value onto stack | -| 6B | PUSH12 | 3 | `.` | `uint96` | | push 12-byte value onto stack | -| 6C | PUSH13 | 3 | `.` | `uint104` | | push 13-byte value onto stack | -| 6D | PUSH14 | 3 | `.` | `uint112` | | push 14-byte value onto stack | -| 6E | PUSH15 | 3 | `.` | `uint120` | | push 15-byte value onto stack | -| 6F | PUSH16 | 3 | `.` | `uint128` | | push 16-byte value onto stack | -| 70 | PUSH17 | 3 | `.` | `uint136` | | push 17-byte value onto stack | -| 71 | PUSH18 | 3 | `.` | `uint144` | | push 18-byte value onto stack | -| 72 | PUSH19 | 3 | `.` | `uint152` | | push 19-byte value onto stack | -| 73 | PUSH20 | 3 | `.` | `uint160` | | push 20-byte value onto stack | -| 74 | PUSH21 | 3 | `.` | `uint168` | | push 21-byte value onto stack | -| 75 | PUSH22 | 3 | `.` | `uint176` | | push 22-byte value onto stack | -| 76 | PUSH23 | 3 | `.` | `uint184` | | push 23-byte value onto stack | -| 77 | PUSH24 | 3 | `.` | `uint192` | | push 24-byte value onto stack | -| 78 | PUSH25 | 3 | `.` | `uint200` | | push 25-byte value onto stack | -| 79 | PUSH26 | 3 | `.` | `uint208` | | push 26-byte value onto stack | -| 7A | PUSH27 | 3 | `.` | `uint216` | | push 27-byte value onto stack | -| 7B | PUSH28 | 3 | `.` | `uint224` | | push 28-byte value onto stack | -| 7C | PUSH29 | 3 | `.` | `uint232` | | push 29-byte value onto stack | -| 7D | PUSH30 | 3 | `.` | `uint240` | | push 30-byte value onto stack | -| 7E | PUSH31 | 3 | `.` | `uint248` | | push 31-byte value onto stack | -| 7F | PUSH32 | 3 | `.` | `uint256` | | push 32-byte value onto stack | -| 80 | DUP1 | 3 | `a` | `a, a` | | clone 1st value on stack | -| 81 | DUP2 | 3 | `_, a` | `a, _, a` | | clone 2nd value on stack | -| 82 | DUP3 | 3 | `_, _, a` | `a, _, _, a` | | clone 3rd value on stack | -| 83 | DUP4 | 3 | `_, _, _, a` | `a, _, _, _, a` | | clone 4th value on stack | -| 84 | DUP5 | 3 | `..., a` | `a, ..., a` | | clone 5th value on stack | -| 85 | DUP6 | 3 | `..., a` | `a, ..., a` | | clone 6th value on stack | -| 86 | DUP7 | 3 | `..., a` | `a, ..., a` | | clone 7th value on stack | -| 87 | DUP8 | 3 | `..., a` | `a, ..., a` | | clone 8th value on stack | -| 88 | DUP9 | 3 | `..., a` | `a, ..., a` | | clone 9th value on stack | -| 89 | DUP10 | 3 | `..., a` | `a, ..., a` | | clone 10th value on stack | -| 8A | DUP11 | 3 | `..., a` | `a, ..., a` | | clone 11th value on stack | -| 8B | DUP12 | 3 | `..., a` | `a, ..., a` | | clone 12th value on stack | -| 8C | DUP13 | 3 | `..., a` | `a, ..., a` | | clone 13th value on stack | -| 8D | DUP14 | 3 | `..., a` | `a, ..., a` | | clone 14th value on stack | -| 8E | DUP15 | 3 | `..., a` | `a, ..., a` | | clone 15th value on stack | -| 8F | DUP16 | 3 | `..., a` | `a, ..., a` | | clone 16th value on stack | -| 90 | SWAP1 | 3 | `a, b` | `b, a` | | | -| 91 | SWAP2 | 3 | `a, _, b` | `b, _, a` | | | -| 92 | SWAP3 | 3 | `a, _, _, b` | `b, _, _, a` | | | -| 93 | SWAP4 | 3 | `a, _, _, _, b` | `b, _, _, _, a` | | | -| 94 | SWAP5 | 3 | `a, ..., b` | `b, ..., a` | | | -| 95 | SWAP6 | 3 | `a, ..., b` | `b, ..., a` | | | -| 96 | SWAP7 | 3 | `a, ..., b` | `b, ..., a` | | | -| 97 | SWAP8 | 3 | `a, ..., b` | `b, ..., a` | | | -| 98 | SWAP9 | 3 | `a, ..., b` | `b, ..., a` | | | -| 99 | SWAP10 | 3 | `a, ..., b` | `b, ..., a` | | | -| 9A | SWAP11 | 3 | `a, ..., b` | `b, ..., a` | | | -| 9B | SWAP12 | 3 | `a, ..., b` | `b, ..., a` | | | -| 9C | SWAP13 | 3 | `a, ..., b` | `b, ..., a` | | | -| 9D | SWAP14 | 3 | `a, ..., b` | `b, ..., a` | | | -| 9E | SWAP15 | 3 | `a, ..., b` | `b, ..., a` | | | -| 9F | SWAP16 | 3 | `a, ..., b` | `b, ..., a` | | | -| A0 | LOG0 | [A8](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a8-log-operations) | `ost, len` | `.` | | LOG0(memory[ost:ost+len-1]) | -| A1 | LOG1 | [A8](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a8-log-operations) | `ost, len, topic0` | `.` | | LOG1(memory[ost:ost+len-1], topic0) | -| A2 | LOG2 | [A8](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a8-log-operations) | `ost, len, topic0, topic1` | `.` | | LOG2(memory[ost:ost+len-1], topic0, topic1) | -| A3 | LOG3 | [A8](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a8-log-operations) | `ost, len, topic0, topic1, topic2` | `.` | | LOG3(memory[ost:ost+len-1], topic0, topic1, topic2) | -| A4 | LOG4 | [A8](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a8-log-operations) | `ost, len, topic0, topic1, topic2, topic3` | `.` | | LOG4(memory[ost:ost+len-1], topic0, topic1, topic2, topic3) | -| A5-EF | _invalid_ | | | | | | -| F0 | CREATE | [A9](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a9-create-operations) | `val, ost, len` | `addr` | | addr = keccak256(rlp([address(this), this.nonce])) | -| F1 | CALL | [AA](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#aa-call-operations) | gas, addr, val, argOst, argLen, retOst, retLen | `success` | mem[retOst:retOst+retLen-1] := returndata | | -| F2 | CALLCODE | [AA](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#aa-call-operations) | `gas, addr, val, argOst, argLen, retOst, retLen` | `success` | mem[retOst:retOst+retLen-1] = returndata | same as DELEGATECALL, but does not propagate original msg.sender and msg.value | -| F3 | RETURN | 0[\*](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a0-1-memory-expansion) | `ost, len` | `.` | | return mem[ost:ost+len-1] | -| F4 | DELEGATECALL | [AA](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#aa-call-operations) | `gas, addr, argOst, argLen, retOst, retLen` | `success` | mem[retOst:retOst+retLen-1] := returndata | | -| F5 | CREATE2 | [A9](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a9-create-operations) | `val, ost, len, salt` | `addr` | | addr = keccak256(0xff ++ address(this) ++ salt ++ keccak256(mem[ost:ost+len-1]))[12:] | -| F6-F9 | _invalid_ | | | | | | -| FA | STATICCALL | [AA](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#aa-call-operations) | `gas, addr, argOst, argLen, retOst, retLen` | `success` | mem[retOst:retOst+retLen-1] := returndata | | -| FB-FC | _invalid_ | | | | | | -| FD | REVERT | 0[\*](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a0-1-memory-expansion) | `ost, len` | `.` | | revert(mem[ost:ost+len-1]) | -| FE | INVALID | [AF](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#af-invalid) | | | designated invalid opcode - [EIP-141](https://eips.ethereum.org/EIPS/eip-141) | | -| FF | SELFDESTRUCT | [AB](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#ab-selfdestruct) | `addr` | `.` | | sends all ETH to `addr`; if executed in the same transaction as a contract was created it destroys the contract | +| Yığın | İsim | Gaz | Başlangıç Yığını | Sonuç Yığını | Bellek/Depolama | Notlar | | +| :---: | :------------- | :---------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------ | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------- | +| 00 | STOP | 0 | | | | yürütmeyi durdur | | +| 01 | EKLE | 3 | `a, b` | `a + b` | | (u)int256 toplama modülo 2\*\*256 | | +| 02 | MUL | 5 | `a, b` | `a * b` | | (u)int256 çarpma modülo 2\*\*256 | | +| 03 | SUB | 3 | `a, b` | `a - b` | | (u)int256 çıkarma modülo 2\*\*256 | | +| 04 | DIV | 5 | `a, b` | `a // b` | | uint256 bölme | | +| 05 | SDIV | 5 | `a, b` | `a // b` | | int256 bölme | | +| 06 | MOD | 5 | `a, b` | `a % b` | | uint256 modülüs | | +| 07 | SMOD | 5 | `a, b` | `a % b` | | int256 modülüs | | +| 08 | ADDMOD | 8 | `a, b, N` | `(a + b) % N` | | (u)int256 toplama modülo N | | +| 09 | MULMOD | 8 | `a, b, N` | `(a * b) % N` | | (u)int256 çarpma modülo N | | +| 0A | EXP | [A1](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a1-exp) | `a, b` | `a ** b` | | uint256 üs alma modülo 2\*\*256 | | +| 0B | SIGNEXTEND | 5 | `b, x` | `SIGNEXTEND(x, b)` | | `x`'i `(b+1)` bayttan 32 bayta [işaret genişlet](https://wikipedia.org/wiki/Sign_extension) | | +| 0C-0F | _geçersiz_ | | | | | | | +| 10 | LT | 3 | `a, b` | `a < b` | | uint256 küçüktür | | +| 11 | GT | 3 | `a, b` | `a > b` | | uint256 büyüktür | | +| 12 | SLT | 3 | `a, b` | `a < b` | | int256 küçüktür | | +| 13 | SGT | 3 | `a, b` | `a > b` | | int256 büyüktür | | +| 14 | EQ | 3 | `a, b` | `a == b` | | (u)int256 eşitlik | | +| 15 | ISZERO | 3 | `a` | `a == 0` | | (u)int256 sıfır mı | | +| 16 | AND | 3 | `a, b` | `a && b` | | bitsel VE | | +| 17 | OR | 3 | `a, b` | `a \\|\\| b` | | bitsel VEYA | | +| 18 | XOR | 3 | `a, b` | `a ^ b` | | bitsel XOR | | +| 19 | NOT | 3 | `a` | `~a` | | bitsel DEĞİL | | +| 1A | BYTE | 3 | `i, x` | `(x >> (248 - i * 8)) && 0xFF` | | (u)int256 `x`'in soldan `i`'inci baytı | | +| 1B | SHL | 3 | `shift, val` | `val << shift` | | sola kaydır | | +| 1C | SHR | 3 | `shift, val` | `val >> shift` | | mantıksal sağa kaydırma | | +| 1D | SAR | 3 | `shift, val` | `val >> shift` | | aritmetik sağa kaydırma | | +| 1E-1F | _geçersiz_ | | | | | | | +| 20 | KECCAK256 | [A2](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a2-sha3) | `ost, len` | `keccak256(mem[ost:ost+len-1])` | | keccak256 | | +| 21-2F | _geçersiz_ | | | | | | | +| 30 | ADDRESS | 2 | `.` | `address(this)` | | yürütülen sözleşmenin adresi | | +| 31 | BALANCE | [A5](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a5-balance-extcodesize-extcodehash) | `addr` | `addr.balance` | | bakiye, wei cinsinden | | +| 32 | ORIGIN | 2 | `.` | `tx.origin` | | işlemi başlatan adres | | +| 33 | CALLER | 2 | `.` | `msg.sender` | | msg göndericisinin adresi | | +| 34 | CALLVALUE | 2 | `.` | `msg.value` | | msg değeri, wei cinsinden | | +| 35 | CALLDATALOAD | 3 | `idx` | `msg.data[idx:idx+32]` | | `idx` dizinindeki msg verisinden kelime oku | | +| 36 | CALLDATASIZE | 2 | `.` | `len(msg.data)` | | msg verisinin uzunluğu, bayt cinsinden | | +| 37 | CALLDATACOPY | [A3](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a3-copy-operations) | `dstOst, ost, len` | `.` | mem[dstOst:dstOst+len-1] := msg.data[ost:ost+len-1] | msg verisini kopyala | | +| 38 | CODESIZE | 2 | `.` | `len(this.code)` | | yürütülen sözleşmenin kodunun uzunluğu, bayt cinsinden | | +| 39 | CODECOPY | [A3](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a3-copy-operations) | `dstOst, ost, len` | `.` | | mem[dstOst:dstOst+len-1] := this.code[ost:ost+len-1] | yürütülen sözleşmenin bayt kodunu kopyala | +| 3A | GASPRICE | 2 | `.` | `tx.gasprice` | | işlemin gaz fiyatı, gaz birimi başına wei cinsinden [\*\*](https://eips.ethereum.org/EIPS/eip-1559#gasprice) | | +| 3B | EXTCODESIZE | [A5](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a5-balance-extcodesize-extcodehash) | `addr` | `len(addr.code)` | | adresteki kodun boyutu, bayt cinsinden | | +| 3C | EXTCODECOPY | [A4](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a4-extcodecopy) | `addr, dstOst, ost, len` | `.` | mem[dstOst:dstOst+len-1] := addr.code[ost:ost+len-1] | `addr` adresinden kodu kopyala | | +| 3D | RETURNDATASIZE | 2 | `.` | `size` | | son harici çağrıdan dönen verinin boyutu, bayt cinsinden | | +| 3E | RETURNDATACOPY | [A3](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a3-copy-operations) | `dstOst, ost, len` | `.` | mem[dstOst:dstOst+len-1] := returndata[ost:ost+len-1] | son harici çağrıdan dönen veriyi kopyala | | +| 3F | EXTCODEHASH | [A5](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a5-balance-extcodesize-extcodehash) | `addr` | `karma` | | karma = addr.exists ? keccak256(addr.code) : 0 | | +| 40 | BLOCKHASH | 20 | `blockNum` | `blockHash(blockNum)` | | | | +| 41 | COINBASE | 2 | `.` | `block.coinbase` | | mevcut bloğu önerenin adresi | | +| 42 | TIMESTAMP | 2 | `.` | `block.timestamp` | | mevcut bloğun zaman damgası | | +| 43 | NUMBER | 2 | `.` | `block.number` | | mevcut bloğun numarası | | +| 44 | PREVRANDAO | 2 | `.` | `randomness beacon` | | rastgelelik işaretçisi | | +| 45 | GASLIMIT | 2 | `.` | `block.gaslimit` | | mevcut bloğun gaz limiti | | +| 46 | CHAINID | 2 | `.` | `chain_id` | | mevcut [zincir kimliğini](https://eips.ethereum.org/EIPS/eip-155) yığına it | | +| 47 | SELFBALANCE | 5 | `.` | `address(this).balance` | | yürütülen sözleşmenin bakiyesi, wei cinsinden | | +| 48 | BASEFEE | 2 | `.` | `block.basefee` | | mevcut bloğun taban ücreti | | +| 49 | BLOBHASH | 3 | `idx` | `tx.blob_versioned_hashes[idx]` | | [EIP-4844](https://eips.ethereum.org/EIPS/eip-4844) | | +| 4A | BLOBBASEFEE | 2 | `.` | `block.blobbasefee` | | mevcut bloğun blob taban ücreti ([EIP-7516](https://eips.ethereum.org/EIPS/eip-7516)) | | +| 4B-4F | _geçersiz_ | | | | | | | +| 50 | POP | 2 | `_anon` | `.` | | yığının tepesinden öğeyi kaldır ve at | | +| 51 | MLOAD | 3[\*](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a0-1-memory-expansion) | `ost` | `mem[ost:ost+32]` | | `ost` ofsetindeki bellekten kelime oku | | +| 52 | MSTORE | 3[\*](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a0-1-memory-expansion) | `ost, val` | `.` | mem[ost:ost+32] := val | belleğe bir kelime yaz | | +| 53 | MSTORE8 | 3[\*](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a0-1-memory-expansion) | `ost, val` | `.` | mem[ost] := val && 0xFF | belleğe tek bir bayt yaz | | +| 54 | SLOAD | [A6](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a6-sload) | `key` | `storage[key]` | | depolamadan kelime oku | | +| 55 | SSTORE | [A7](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a7-sstore) | `key, val` | `.` | storage[key] := val | depolamaya kelime yaz | | +| 56 | JUMP | 8 | `dst` | `.` | | `$pc := dst` `pc`'nin yalnızca `dst` geçerli bir atlama hedefiyse atandığını işaretle | | +| 57 | JUMPI | 10 | `dst, condition` | `.` | | `$pc := condition ?` dst : $pc + 1` | | +| 58 | PC | 2 | `.` | `$pc` | | program sayacı | | +| 59 | MSIZE | 2 | `.` | `len(mem)` | | mevcut yürütme bağlamındaki bellek boyutu, bayt cinsinden | | +| 5A | GAS | 2 | `.` | `gasRemaining` | | | | +| 5B | JUMPDEST | 1 | | | geçerli atlama hedefini işaretle | örneğin itme verilerinin içinde olmayan bir atlama hedefi gibi geçerli bir atlama hedefi | | +| 5C | TLOAD | 100 | `key` | `tstorage[key]` | | geçici depolamadan kelime oku ([EIP-1153](https://eips.ethereum.org/EIPS/eip-1153)) | | +| 5D | TSTORE | 100 | `key, val` | `.` | tstorage[key] := val | geçici depolamaya kelime yaz ([EIP-1153](https://eips.ethereum.org/EIPS/eip-1153)) | | +| 5E | MCOPY | 3+3\*words+[A0](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a0-1-memory-expansion) | `dstOst, ost, len` | `.` | mem[dstOst] := mem[ost:ost+len] | belleği bir alandan diğerine kopyala ([EIP-5656](https://eips.ethereum.org/EIPS/eip-5656)) | | +| 5F | PUSH0 | 2 | `.` | `uint8` | | değişmez değer 0'ı yığına it | | +| 60 | PUSH1 | 3 | `.` | `uint8` | | 1 baytlık değeri yığına it | | +| 61 | PUSH2 | 3 | `.` | `uint16` | | 2 baytlık değeri yığına it | | +| 62 | PUSH3 | 3 | `.` | `uint24` | | 3 baytlık değeri yığına it | | +| 63 | PUSH4 | 3 | `.` | `uint32` | | 4 baytlık değeri yığına it | | +| 64 | PUSH5 | 3 | `.` | `uint40` | | 5 baytlık değeri yığına it | | +| 65 | PUSH6 | 3 | `.` | `uint48` | | 6 baytlık değeri yığına it | | +| 66 | PUSH7 | 3 | `.` | `uint56` | | 7 baytlık değeri yığına it | | +| 67 | PUSH8 | 3 | `.` | `uint64` | | 8 baytlık değeri yığına it | | +| 68 | PUSH9 | 3 | `.` | `uint72` | | 9 baytlık değeri yığına it | | +| 69 | PUSH10 | 3 | `.` | `uint80` | | 10 baytlık değeri yığına it | | +| 6A | PUSH11 | 3 | `.` | `uint88` | | 11 baytlık değeri yığına it | | +| 6B | PUSH12 | 3 | `.` | `uint96` | | 12 baytlık değeri yığına it | | +| 6C | PUSH13 | 3 | `.` | `uint104` | | 13 baytlık değeri yığına it | | +| 6D | PUSH14 | 3 | `.` | `uint112` | | 14 baytlık değeri yığına it | | +| 6E | PUSH15 | 3 | `.` | `uint120` | | 15 baytlık değeri yığına it | | +| 6F | PUSH16 | 3 | `.` | `uint128` | | 16 baytlık değeri yığına it | | +| 70 | PUSH17 | 3 | `.` | `uint136` | | 17 baytlık değeri yığına it | | +| 71 | PUSH18 | 3 | `.` | `uint144` | | 18 baytlık değeri yığına it | | +| 72 | PUSH19 | 3 | `.` | `uint152` | | 19 baytlık değeri yığına it | | +| 73 | PUSH20 | 3 | `.` | `uint160` | | 20 baytlık değeri yığına it | | +| 74 | PUSH21 | 3 | `.` | `uint168` | | 21 baytlık değeri yığına it | | +| 75 | PUSH22 | 3 | `.` | `uint176` | | 22 baytlık değeri yığına it | | +| 76 | PUSH23 | 3 | `.` | `uint184` | | 23 baytlık değeri yığına it | | +| 77 | PUSH24 | 3 | `.` | `uint192` | | 24 baytlık değeri yığına it | | +| 78 | PUSH25 | 3 | `.` | `uint200` | | 25 baytlık değeri yığına it | | +| 79 | PUSH26 | 3 | `.` | `uint208` | | 26 baytlık değeri yığına it | | +| 7A | PUSH27 | 3 | `.` | `uint216` | | 27 baytlık değeri yığına it | | +| 7B | PUSH28 | 3 | `.` | `uint224` | | 28 baytlık değeri yığına it | | +| 7C | PUSH29 | 3 | `.` | `uint232` | | 29 baytlık değeri yığına it | | +| 7D | PUSH30 | 3 | `.` | `uint240` | | 30 baytlık değeri yığına it | | +| 7E | PUSH31 | 3 | `.` | `uint248` | | 31 baytlık değeri yığına it | | +| 7F | PUSH32 | 3 | `.` | `uint256` | | 32 baytlık değeri yığına it | | +| 80 | DUP1 | 3 | `a` | `a, a` | | yığındaki 1'inci değeri kopyala | | +| 81 | DUP2 | 3 | `_, a` | `a, _, a` | | yığındaki 2'nci değeri kopyala | | +| 82 | DUP3 | 3 | `_, _, a` | `a, _, _, a` | | yığındaki 3'üncü değeri kopyala | | +| 83 | DUP4 | 3 | `_, _, _, a` | `a, _, _, _, a` | | yığındaki 4'üncü değeri kopyala | | +| 84 | DUP5 | 3 | `..., a` | `a, ..., a` | | yığındaki 5'inci değeri kopyala | | +| 85 | DUP6 | 3 | `..., a` | `a, ..., a` | | yığındaki 6'ncı değeri kopyala | | +| 86 | DUP7 | 3 | `..., a` | `a, ..., a` | | yığındaki 7'nci değeri kopyala | | +| 87 | DUP8 | 3 | `..., a` | `a, ..., a` | | yığındaki 8'inci değeri kopyala | | +| 88 | DUP9 | 3 | `..., a` | `a, ..., a` | | yığındaki 9'uncu değeri kopyala | | +| 89 | DUP10 | 3 | `..., a` | `a, ..., a` | | yığındaki 10'uncu değeri kopyala | | +| 8A | DUP11 | 3 | `..., a` | `a, ..., a` | | yığındaki 11'inci değeri kopyala | | +| 8B | DUP12 | 3 | `..., a` | `a, ..., a` | | yığındaki 12'nci değeri kopyala | | +| 8C | DUP13 | 3 | `..., a` | `a, ..., a` | | yığındaki 13'üncü değeri kopyala | | +| 8D | DUP14 | 3 | `..., a` | `a, ..., a` | | yığındaki 14'üncü değeri kopyala | | +| 8E | DUP15 | 3 | `..., a` | `a, ..., a` | | yığındaki 15'inci değeri kopyala | | +| 8F | DUP16 | 3 | `..., a` | `a, ..., a` | | yığındaki 16'ncı değeri kopyala | | +| 90 | SWAP1 | 3 | `a, b` | `b, a` | | | | +| 91 | SWAP2 | 3 | `a, _, b` | `b, _, a` | | | | +| 92 | SWAP3 | 3 | `a, _, _, b` | `b, _, _, a` | | | | +| 93 | SWAP4 | 3 | `a, _, _, _, b` | `b, _, _, _, a` | | | | +| 94 | SWAP5 | 3 | `a, ..., b` | `b, ..., a` | | | | +| 95 | SWAP6 | 3 | `a, ..., b` | `b, ..., a` | | | | +| 96 | SWAP7 | 3 | `a, ..., b` | `b, ..., a` | | | | +| 97 | SWAP8 | 3 | `a, ..., b` | `b, ..., a` | | | | +| 98 | SWAP9 | 3 | `a, ..., b` | `b, ..., a` | | | | +| 99 | SWAP10 | 3 | `a, ..., b` | `b, ..., a` | | | | +| 9A | SWAP11 | 3 | `a, ..., b` | `b, ..., a` | | | | +| 9B | SWAP12 | 3 | `a, ..., b` | `b, ..., a` | | | | +| 9C | SWAP13 | 3 | `a, ..., b` | `b, ..., a` | | | | +| 9D | SWAP14 | 3 | `a, ..., b` | `b, ..., a` | | | | +| 9E | SWAP15 | 3 | `a, ..., b` | `b, ..., a` | | | | +| 9F | SWAP16 | 3 | `a, ..., b` | `b, ..., a` | | | | +| A0 | LOG0 | [A8](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a8-log-operations) | `ost, len` | `.` | | LOG0(memory[ost:ost+len-1]) | | +| A1 | LOG1 | [A8](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a8-log-operations) | `ost, len, topic0` | `.` | | LOG1(memory[ost:ost+len-1], topic0) | | +| A2 | LOG2 | [A8](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a8-log-operations) | `ost, len, topic0, topic1` | `.` | | LOG2(memory[ost:ost+len-1], topic0, topic1) | | +| A3 | LOG3 | [A8](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a8-log-operations) | `ost, len, topic0, topic1, topic2` | `.` | | LOG3(memory[ost:ost+len-1], topic0, topic1, topic2) | | +| A4 | LOG4 | [A8](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a8-log-operations) | `ost, len, topic0, topic1, topic2, topic3` | `.` | | LOG4(memory[ost:ost+len-1], topic0, topic1, topic2, topic3) | | +| A5-EF | _geçersiz_ | | | | | | | +| F0 | CREATE | [A9](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a9-create-operations) | `val, ost, len` | `addr` | | addr = keccak256(rlp([address(this), this.nonce])) | | +| F1 | CALL | [AA](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#aa-call-operations) | gas, addr, val, argOst, argLen, retOst, retLen | `başarılı` | mem[retOst:retOst+retLen-1] := returndata | | | +| F2 | CALLCODE | [AA](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#aa-call-operations) | `gas, addr, val, argOst, argLen, retOst, retLen` | `başarılı` | mem[retOst:retOst+retLen-1] = returndata | DELEGATECALL ile aynı, ancak orijinal msg.sender ve msg.value'yu yaymaz | | +| F3 | RETURN | 0[\*](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a0-1-memory-expansion) | `ost, len` | `.` | | return mem[ost:ost+len-1] | | +| F4 | DELEGATECALL | [AA](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#aa-call-operations) | `gas, addr, argOst, argLen, retOst, retLen` | `başarılı` | mem[retOst:retOst+retLen-1] := returndata | | | +| F5 | CREATE2 | [A9](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a9-create-operations) | `val, ost, len, salt` | `addr` | | addr = keccak256(0xff ++ address(this) ++ salt ++ keccak256(mem[ost:ost+len-1]))[12:] | | +| F6-F9 | _geçersiz_ | | | | | | | +| FA | STATICCALL | [AA](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#aa-call-operations) | `gas, addr, argOst, argLen, retOst, retLen` | `başarılı` | mem[retOst:retOst+retLen-1] := returndata | | | +| FB-FC | _geçersiz_ | | | | | | | +| FD | REVERT | 0[\*](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a0-1-memory-expansion) | `ost, len` | `.` | | revert(mem[ost:ost+len-1]) | | +| FE | INVALID | [AF](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#af-invalid) | | | belirlenmiş geçersiz işlem kodu - [EIP-141](https://eips.ethereum.org/EIPS/eip-141) | | | +| FF | SELFDESTRUCT | [AB](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#ab-selfdestruct) | `addr` | `.` | | tüm ETH'yi `addr` adresine gönderir; bir sözleşmenin oluşturulduğu aynı işlemde yürütülürse sözleşmeyi yok eder | | diff --git a/public/content/translations/tr/developers/docs/frameworks/index.md b/public/content/translations/tr/developers/docs/frameworks/index.md index 3dd1b159d5e..0d74c47c205 100644 --- a/public/content/translations/tr/developers/docs/frameworks/index.md +++ b/public/content/translations/tr/developers/docs/frameworks/index.md @@ -1,6 +1,6 @@ --- -title: Dapp Geliştirme Çerçeveleri -description: Çerçevelerin avantajlarını keşfedin ve uygun seçenekleri karşılaştırın. +title: "Dapp Geliştirme Çerçeveleri" +description: "Çerçevelerin avantajlarını keşfedin ve uygun seçenekleri karşılaştırın." lang: tr --- @@ -18,18 +18,18 @@ Tam teşekküllü bir dapp inşa etmek teknolojinin farklı parçalarını gerek ## Ön Koşullar {#prerequisites} -Çerçevelere girmeden önce, [dapp'ler](/developers/docs/dapps/) ve [Ethereum yığını](/developers/docs/ethereum-stack/) konularına girişimizi okumanızı öneririz. +Çerçevelere girmeden önce, [merkeziyetsiz uygulamalar](/developers/docs/dapps/) ve [Ethereum yığını](/developers/docs/ethereum-stack/) hakkındaki giriş yazımızı okumanızı öneririz. ## Mevcut çerçeveler {#available-frameworks} **Foundry** - **_Foundry, Ethereum uygulamaları geliştirmeye yönelik son derece hızlı, taşınabilir ve modüler bir araç setidir_** -- [Foundry'yi yükleyin](https://book.getfoundry.sh/) +- [Foundry'yi Yükleyin](https://book.getfoundry.sh/) - [Foundry kitabı](https://book.getfoundry.sh/) -- [Telegram'da Foundry topluluğu sohbet grubu](https://t.me/foundry_support) +- [Telegram'daki Foundry topluluk sohbeti](https://t.me/foundry_support) - [Awesome Foundry](https://github.com/crisgarner/awesome-foundry) -**Hardhat -** **_Profesyoneller için Ethereum geliştirme platformu._** +**Hardhat -** **_Profesyoneller için Ethereum geliştirme ortamı._** - [hardhat.org](https://hardhat.org) - [GitHub](https://github.com/nomiclabs/hardhat) @@ -41,8 +41,8 @@ Tam teşekküllü bir dapp inşa etmek teknolojinin farklı parçalarını gerek **Web3j -** **_JVM üzerinde blokzincir uygulamaları geliştirmeye yönelik bir platformdur._** -- [Ana Sayfa](https://www.web3labs.com/web3j-sdk) -- [Dokümanlar](https://docs.web3j.io) +- [Ana sayfa](https://www.web3labs.com/web3j-sdk) +- [Belgeler](https://docs.web3j.io) - [GitHub](https://github.com/web3j/web3j) **ethers-kt -** **_EVM tabanlı blokzincirler için eşzamansız, yüksek performanslı Kotlin/Java/Android kütüphanesi._** @@ -60,12 +60,12 @@ Tam teşekküllü bir dapp inşa etmek teknolojinin farklı parçalarını gerek - [GitHub](https://github.com/scaffold-eth/scaffold-eth-2) -**Tenderly -** **_Blok zincir geliştiricilerinin akıllı sözleşmeler oluşturmasını, test etmesini, hata ayıklamasını, izlemesini ve çalıştırmasını ve dapp UX'i geliştirmesini sağlayan Web3 geliştirme platformu._** +**Tenderly -** **_Blokzincir geliştiricilerinin akıllı sözleşmeler oluşturmasını, test etmesini, hata ayıklamasını, izlemesini ve çalıştırmasını ve dapp UX'i geliştirmesini sağlayan Web3 geliştirme platformu._** - [Web sitesi](https://tenderly.co/) -- [Dokümanlar](https://docs.tenderly.co/) +- [Belgeler](https://docs.tenderly.co/) -**The Graph -** **_Blokzincir verilerini verimli şekilde sorgulamaya yarayan The Graph_** +**The Graph -** **_Blokzincir verisini verimli şekilde sorgulamak için The Graph._** - [Web sitesi](https://thegraph.com/) - [Öğretici](/developers/tutorials/the-graph-fixing-web3-data-querying/) @@ -84,7 +84,7 @@ Tam teşekküllü bir dapp inşa etmek teknolojinin farklı parçalarını gerek **thirdweb SDK -** **_Güçlü SDK'larımız ve CLI kullanarak akıllı sözleşmelerinizle etkileşimde bulunabilecek web3 uygulamaları oluşturun._** -- [Dokümanlar](https://portal.thirdweb.com/sdk/) +- [Belgeler](https://portal.thirdweb.com/sdk/) - [GitHub](https://github.com/thirdweb-dev/) **Chainstack -** **_Web3 (Ethereum ve diğer) Geliştirme Platformu._** @@ -93,21 +93,21 @@ Tam teşekküllü bir dapp inşa etmek teknolojinin farklı parçalarını gerek - [GitHub](https://github.com/chainstack) - [Discord](https://discord.gg/BSb5zfp9AT) -**Crossmint -** **_Tüm büyük EVM zincirleri (ve diğerleri) üzerinde NFT uygulamaları oluşturmanıza olanak tanıyan, kurumsal düzeyde Web3 geliştirme platformudur._** +**Crossmint -** **_Tüm büyük EVM zincirleri (ve diğerleri) üzerinde NFT uygulamaları oluşturmanıza olanak tanıyan, kurumsal düzeyde bir Web3 geliştirme platformu._** - [Web sitesi](https://www.crossmint.com) -- [Dokümanlar](https://docs.crossmint.com) +- [Dokümantasyon](https://docs.crossmint.com) - [Discord](https://discord.com/invite/crossmint) -**Brownie -** **_Python tabanlı geliştirme ortamı ve test çerçevesidir._** +**Brownie -** **_Python tabanlı geliştirme ortamı ve test çerçevesi._** -- [Dokümanlar](https://eth-brownie.readthedocs.io/en/latest/) +- [Belgeler](https://eth-brownie.readthedocs.io/en/latest/) - [GitHub](https://github.com/eth-brownie/brownie) - **Brownie şu anda yönetilmemektedir** **OpenZeppelin SDK -** **_Akıllı Sözleşmeler İçin Temel Araç Kiti: Akıllı sözleşmeler geliştirmenize, derlemenize, yükseltmenize, dağıtmanıza ve bunlarla etkileşime geçmenize yardımcı olacak bir dizi araç._** -- [OpenZeppelin SDK](https://openzeppelin.com/sdk/) +- [OpenZeppelin Defender SDK](https://docs.openzeppelin.com/defender/sdk) - [GitHub](https://github.com/OpenZeppelin/openzeppelin-sdk) - [Topluluk Forumu](https://forum.openzeppelin.com/c/support/17) - **OpenZeppelin SDK'nin geliştirme aşaması sona erdi** @@ -115,27 +115,35 @@ Tam teşekküllü bir dapp inşa etmek teknolojinin farklı parçalarını gerek **Catapulta -** **_Çok zincirli akıllı sözleşme dağıtım aracı, blok arayıcılarda doğrulamaları otomatikleştirin, dağıtılan akıllı sözleşmeleri takip edin ve dağıtım raporlarını paylaşın, Foundry ve Hardhat projeleri için tak ve çalıştır özelliği._** - [Web sitesi](https://catapulta.sh/) -- [Dokümanlar](https://catapulta.sh/docs) +- [Belgeler](https://catapulta.sh/docs) - [Github](https://github.com/catapulta-sh) -**Covalent -** **_200+ Zincir için Zenginleştirilmiş Blokzincir API'leri._** +**GoldRush (Covalent tarafından desteklenmektedir) -** **_GoldRush, geliştiriciler, analistler ve işletmeler için en kapsamlı blokzincir veri API paketini sunar. İster bir DeFi panosu, bir cüzdan, bir alım satım botu, bir yapay zeka aracısı isterse bir uyumluluk platformu oluşturuyor olun, veri API'leri ihtiyacınız olan temel zincir üstü verilere hızlı, doğru ve geliştirici dostu erişim sağlar_** -- [covalenthq.com](https://www.covalenthq.com/) -- [Dokümanlar](https://www.covalenthq.com/docs/api/) +- [Web sitesi](https://goldrush.dev/) +- [Belgeler](https://goldrush.dev/docs/chains/ethereum) - [GitHub](https://github.com/covalenthq) - [Discord](https://www.covalenthq.com/discord/) **Wake -** **_Sözleşme testleri, bulanıklaştırma, dağıtım, güvenlik açığı taraması ve kodda gezinme için hepsi bir arada Python çerçevesi._** -- [Ana Sayfa](https://getwake.io/) -- [Dokümanlar](https://ackeeblockchain.com/wake/docs/latest/) +- [Ana sayfa](https://getwake.io/) +- [Belgeler](https://ackeeblockchain.com/wake/docs/latest/) - [GitHub](https://github.com/Ackee-Blockchain/wake) -- [VS Code Uzantısı](https://marketplace.visualstudio.com/items?itemName=AckeeBlockchain.tools-for-solidity) +- [VS Code Eklentisi](https://marketplace.visualstudio.com/items?itemName=AckeeBlockchain.tools-for-solidity) -## daha fazla okuma {#further-reading} +**Veramo -** **_Merkeziyetsiz uygulama geliştiricilerinin, uygulamalarına merkeziyetsiz kimlikler ve doğrulanabilir kimlik bilgileri oluşturmasını kolaylaştıran açık kaynaklı, modüler ve agnostik bir çerçeve._** -_Size yardımcı olan bir topluluk kaynağı biliyor musunuz? Bu sayfayı düzenleyin ve ekleyin!_ +- [Ana sayfa](https://veramo.io/) +- [Belgeler](https://veramo.io/docs/basics/introduction) +- [GitHub](https://github.com/uport-project/veramo) +- [Discord](https://discord.com/invite/FRRBdjemHV) +- [NPM Paketi](https://www.npmjs.com/package/@veramo/core) -## İlgili konular {#related-topics} +## Daha fazla kaynak {#further-reading} -- [Yerel bir geliştirme ortamı oluşturun](/developers/local-environment/) +_Size yardımcı olan bir topluluk kaynağı mı biliyorsunuz? Bu sayfayı düzenleyin ve onu ekleyin!_ + +## Alakalı başlıklar {#related-topics} + +- [Yerel bir geliştirme ortamı kurun](/developers/local-environment/) diff --git a/public/content/translations/tr/developers/docs/gas/index.md b/public/content/translations/tr/developers/docs/gas/index.md index e403e0038c6..c62dc464131 100644 --- a/public/content/translations/tr/developers/docs/gas/index.md +++ b/public/content/translations/tr/developers/docs/gas/index.md @@ -1,12 +1,13 @@ --- -title: Gaz ve ücretler -description: +title: "Gaz ve ücretler" +metaTitle: "Ethereum gaz ve ücretleri: teknik genel bakış" +description: "Ethereum gaz ücretleri, nasıl hesaplandıkları ve ağ güvenliği ile işlem işlemedeki rolleri hakkında bilgi edinin." lang: tr --- Gaz, Ethereum ağı için çok önemlidir. Arabaların benzinle çalıştığı gibi Ethereum ağı da gaz ile çalışır. -## Ön koşullar {#prerequisites} +## Ön Koşullar {#prerequisites} Bu sayfayı daha iyi anlamak için öncelikle [işlemler](/developers/docs/transactions/) ve [EVM](/developers/docs/evm/) hakkında bilgi edinmenizi öneririz. @@ -16,80 +17,85 @@ Gaz, Ethereum ağında belirli işlemleri yürütmek için gereken bilgi işlem Her Ethereum işlemi çalışabilmek için bilgi işlem kaynaklarına ihtiyaç duyduğu için, söz konusu kaynaklar Ethereum'un spamlara karşı kırılgan olmadığı ve ne kadar bilgi işlem tekrarı olursa olsun takılmayacağından emin olmak için bu kaynaklar satın alınmalıdır. Bilgi işlem için ödenen ücret bir gaz ücreti formu gibi gösterilir. -Gaz ücreti **bir işlemin yapılabilmesi için kullanılan gaz miktarı ve bir birim gazın ücretinin çarpımıdır**. Ücret işlem başarılı da olsa başarısız da olsa ödenir. +Gaz ücreti, **bir işlemi gerçekleştirmek için kullanılan gaz miktarının, birim gaz başına maliyet ile çarpımıdır**. Ücret işlem başarılı da olsa başarısız da olsa ödenir. -![EVM operasyonlarında gazın nerede gerekli olduğunu gösteren diyagram](./gas.png) _Diyagram [Ethereum EVM resmediciden](https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf) uyarlanmıştır_ +![EVM operasyonlarında gazın nerede gerekli olduğunu gösteren bir diyagram](./gas.png) +_Diyagram [Resimli Ethereum EVM](https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf) kaynağından uyarlanmıştır_ Gaz ücretleri Ethereum'un yerel para birimi olan ether (ETH) ile ödenmelidir. Gaz ücretlerinden genellikle gweide'den (bir ETH zümresi) bahsedilir. Her gwei Ethereumun 1 milyarda biridir, ETH (0,000000001 ETH ya da 10-9 ETH). Örneğin, gazınızın maliyeti 0,000000001 ether demek yerine, gazınızın maliyetinin 1 gwei olduğunu söyleyebilirsiniz. -Gwei kelimesi "giga-wei"nin sıkıştırılmış halidir, "milyar wei" anlamına gelir. Bir gwei 1 milyar weiye eşittir. Wei'nin kendisi (adını [b-money](https://www.investopedia.com/terms/b/bmoney.asp) yaratıcısı [Wei Dai](https://wikipedia.org/wiki/Wei_Dai)'den almıştır) ETH'nin en küçük birimidir. +Gwei kelimesi "giga-wei"nin sıkıştırılmış halidir, "milyar wei" anlamına gelir. Bir gwei 1 milyar weiye eşittir. Wei'nin kendisi ([b-money](https://www.investopedia.com/terms/b/bmoney.asp) para biriminin yaratıcısı [Wei Dai](https://wikipedia.org/wiki/Wei_Dai)'den adını almıştır) ETH'nin en küçük birimidir. ## Gaz Ücretleri nasıl hesaplanır? {#how-are-gas-fees-calculated} Bir işlem ibraz ederken ödemeye niyetli olduğunuz gaz ücretini kendiniz belirlersiniz. Belli bir gaz miktarını belirleyerek, bir sonraki blokta işleminizin dahil edilmesi için bir teklif veriyorsunuz. Eğer çok düşük bir teklif verirseniz, doğrulayıcıların sizin işleminizi dahil etme ihtimali daha azdır, yani işleminiz ya geç gerçekleşecektir ya da hiç gerçeklemeyecektir. Eğer çok fazla teklif verirseniz de, biraz ETH kaybedebilirsiniz. Yani ne kadar ödemeniz gerektiğine nasıl karar verebilirsiniz? -Ödediğiniz toplam gaz iki bileşene bölünür: `ana ücret` ve `öncelik ücreti` (bahşiş). +Ödediğiniz toplam gaz iki bileşene ayrılır: `taban ücret` ve `öncelik ücreti` (bahşiş). -`Ana ücret` protokol tarafından belirlenir, işleminizin geçerli sayılabilmesi için en azından bu miktarın tamamını ödemeniz gerekir. `Öncelik ücreti` ise ana ücrete eklediğiniz ve işleminizi bir sonraki bloka dahil etmeleri konusunda doğrulayıcıları etkileme amaçlı bir bahşiştir. +`Taban ücret` protokol tarafından belirlenir; işleminizin geçerli sayılması için en az bu tutarı ödemeniz gerekir. `Öncelik ücreti`, işleminizi doğrulayıcılar için cazip hale getirmek amacıyla taban ücrete eklediğiniz bir bahşiştir, böylece doğrulayıcılar işleminizi bir sonraki bloğa dahil etmek için seçerler. -Sadece `ana ücreti` ödeyen bir işlem teknik olarak geçerlidir fakat muhtemelen dahil edilmeyecektir çünkü doğrulayıcıların onları diğerlerinin yerine seçmesi için hiçbir teşvikleri yoktur. Doğru `öncelik` bahşişi işleminizi gönderdiğiniz sıradaki ağ kullanımına göre belirlenir, eğer çok fazla talep varsa `önceliğinizi` yüksek ayarlamanız gerekebilir, ancak talep azsa daha az ödeyebilirsiniz. +Yalnızca `taban ücreti` ödeyen bir işlem teknik olarak geçerlidir ancak doğrulayıcılara onu başka bir işlem yerine seçmeleri için hiçbir teşvik sunmadığından dahil edilmesi olası değildir. 'Doğru' `öncelik` ücreti, işleminizi gönderdiğiniz andaki ağ kullanımına göre belirlenir. Eğer çok fazla talep varsa, `öncelik` ücretinizi daha yüksek ayarlamanız gerekebilir, ancak daha az talep olduğunda daha az ödeyebilirsiniz. Örnek olarak, diyelim ki Jordan'ın Taylor'a 1 ETH ödemesi gerekiyor. Bir ETH transferi 21.000 birim gaz gerektirir ve ana ücret de 10 gweidir. Jordan 2 gwei'lik bir bahşiş ekler. Tüm ücret artık şuna eşit olurdu: -`kullanılan gaz birimi * (ana ücret+ bahşiş) değerine karşılık gelir` +`kullanılan gaz birimi * (taban ücret + öncelik ücreti)` -`ana ücret` protokol tarafından seçilirken `öncelik ücreti` kullanıcının doğrulayıcıya ödediği değerdir. +`taban ücret` protokol tarafından belirlenen bir değerken, `öncelik ücreti` kullanıcı tarafından doğrulayıcıya bahşiş olarak belirlenen bir değerdir. -yani `21.000 * (10 + 2) = 252.000 gwei` (0,000252 ETH). +ör., `21,000 * (10 + 2) = 252,000 gwei` (0,000252 ETH). -Jordan parayı gönderdiğinde, Jordan'ın hesabından 1,000252 ETH düşülecek. Taylor'a 1,0000 ETH yatırılacak. Doğrulayıcı 0,000042 ETH'lik bir bahşiş alacak. 0,00021 ETH'lik `ana ücret` yanar. +Jordan parayı gönderdiğinde, Jordan'ın hesabından 1,000252 ETH düşülecek. Taylor'a 1,0000 ETH yatırılacak. Doğrulayıcı 0,000042 ETH'lik bir bahşiş alacak. 0,00021 ETH'lik `taban ücret` yakılır. -### Ana ücret {#base-fee} +### Taban ücret {#base-fee} -Her blokun bir rezerv fiyatı niteliğinde bir ana ücreti vardır. Bir bloka dahil edilmeye uygun olmak için, gaz başına teklif edilen fiyatın en azından ana ücrete eşit olması gerekir. Ana ücret, mevcut bloktan bağımsız olarak hesaplanır ve bunun yerine önündeki bloklar tarafından belirlenir ve bu da kullanıcılar için işlem ücretlerini daha öngörülebilir hale getirir. Blok oluşturudluğunda bu **ana ücret "yanar"** ve döngüden silinir. +Her blokun bir rezerv fiyatı niteliğinde bir ana ücreti vardır. Bir bloka dahil edilmeye uygun olmak için, gaz başına teklif edilen fiyatın en azından ana ücrete eşit olması gerekir. Taban ücret, mevcut bloktan bağımsız olarak hesaplanır ve bunun yerine kendisinden önceki bloklar tarafından belirlenir, bu da işlem ücretlerini kullanıcılar için daha öngörülebilir hale getirir. Blok oluşturulduğunda bu **taban ücret "yakılır"** ve dolaşımdan kaldırılır. -Ana ücret, önceki blokun boyutunu (tüm işlemler için kullanılan gaz miktarını) hedef boyutla karşılaştıran bir formülle hesaplanır. Hedef blok boyutu aşılırsa ana ücret blok başına maksimum %12,5 oranında artacaktır. Bu katlanarak büyüme, blok boyutunun süresiz olarak yüksek kalmasını ekonomik olarak imkânsız hale getiriyor. +Taban ücret, önceki bloğun boyutunu (tüm işlemler için kullanılan gaz miktarı) hedef boyutla (gaz limitinin yarısı) karşılaştıran bir formülle hesaplanır. Hedef blok boyutunun hedefin üstünde veya altında olmasına bağlı olarak taban ücret, blok başına en fazla %12,5 oranında artacak veya azalacaktır. Bu katlanarak büyüme, blok boyutunun süresiz olarak yüksek kalmasını ekonomik olarak imkânsız hale getiriyor. | Blok Numarası | Dahil Edilen Gaz | Ücret Artışı | Mevcut Taban Ücret | -| ------------- | ----------------:| ------------:| ------------------:| -| 1 | 15 milyon | 0% | 100 gwei | -| 2 | 30 milyon | 0% | 100 gwei | -| 3 | 30 milyon | %12,5 | 112,5 gwei | -| 4 | 30 milyon | %12,5 | 126,6 gwei | -| 5 | 30 milyon | %12,5 | 142,4 gwei | -| 6 | 30 milyon | %12,5 | 160,2 gwei | -| 7 | 30 milyon | %12,5 | 180,2 gwei | -| 8 | 30 milyon | %12,5 | 202,7 gwei | - -Yukarıdaki tabloyu takip ederek: 9 numaralı blokta bir işlem oluşturmak için bir cüzdan, kullanıcıya bir sonraki bloka eklenecek **maksimum ana ücretin** `mevcut ana ücret * %112,5` veya `202,7 gwei * %112,5 = 228,1 gwei` olduğunu kesin olarak bildirecektir. +| ------------- | ---------------: | -----------: | -----------------: | +| 1 | 18M | %0 | 100 gwei | +| 2 | 36M | %0 | 100 gwei | +| 3 | 36M | %12,5 | 112,5 gwei | +| 4 | 36M | %12,5 | 126,6 gwei | +| 5 | 36M | %12,5 | 142,4 gwei | +| 6 | 36M | %12,5 | 160,2 gwei | +| 7 | 36M | %12,5 | 180,2 gwei | +| 8 | 36M | %12,5 | 202,7 gwei | + +Yukarıdaki tabloda, gaz limiti olarak 36 milyon kullanılarak bir örnek gösterilmiştir. Bu örneği takiben, 9 numaralı blokta bir işlem oluşturmak için bir cüzdan, kullanıcıya bir sonraki bloğa eklenecek **maksimum taban ücretin** `mevcut taban ücret * %112,5` veya `202,7 gwei * %112,5 = 228,1 gwei` olduğunu kesin olarak bildirecektir. Ayrıca, blok başlatılırken oluşan ana ücretin artışı sebebiyle uzun ve esnek blok artışları görmemizin pek olası olmadığına da dikkat etmek önemlidir. -| Blok Numarası | Dahil Edilen Gaz | Ücret Artışı | Mevcut Taban Ücret | -| ------------- | ----------------:| ------------:| ------------------:| -| 30 | 30 milyon | %12,5 | 2705,6 gwei | -| ... | ... | %12,5 | ... | -| 50 | 30 milyon | %12,5 | 28531,3 gwei | -| ... | ... | %12,5 | ... | -| 100 | 30 milyon | %12,5 | 10302608,6 gwei | +| Blok Numarası | Dahil Edilen Gaz | Ücret Artışı | Mevcut Taban Ücret | +| --------------------------------------------------- | --------------------------------------------------: | -----------: | --------------------------------------------------: | +| 30 | 36M | %12,5 | 2705,6 gwei | +| ... | ... | %12,5 | ... | +| 50 | 36M | %12,5 | 28531,3 gwei | +| ... | ... | %12,5 | ... | +| 100 | 36M | %12,5 | 10302608,6 gwei | ### Öncelik ücreti (bahşişler) {#priority-fee} -Öncelik ücreti (bahşiş) ise doğrulayıcıları bir işlemi bloka koyması için teşvik eder. Bahşişler olmadan, doğrulayıcılar boş blokları kazmayı ekonomik olarak mantıklı bulurlar çünkü onlardan da aynı blok ödülünü kazanırlar. Küçük bahşişler doğrulayıcılara bir işlemi dahil etmek için küçük bir teşvik verir. Tercihen bloktaki diğer işlemlerden önce uygulanacak işlemler için rekabet edilen tercihlerin önüne geçme yolu olarak daha büyük bahşiş eklemek denenebilir. +Öncelik ücreti (bahşiş), doğrulayıcıları, yalnızca blok gaz limitiyle kısıtlanmış bir bloktaki işlem sayısını en üst düzeye çıkarmaya teşvik eder. Bahşişler olmadan, rasyonel bir doğrulayıcı, doğrudan yürütme katmanı veya mutabakat katmanı cezası olmaksızın daha az sayıda, hatta sıfır işlem dahil edebilir, çünkü hisseleme ödülleri bir bloktaki işlem sayısından bağımsızdır. Ek olarak, bahşişler kullanıcıların aynı blok içinde öncelik için diğerlerinden daha yüksek teklif vermesine olanak tanır ve bu da aciliyeti etkili bir şekilde belirtir. ### Maksimum ücret {#maxfee} -Ağ üzerinde bir işlem yürütmek için kullanıcılar, işlemlerinin yürütülmesi için ödemek istedikleri maksimum limiti belirleyebilirler. Bu isteğe bağlı parametre, `maxFeePerGas` olarak bilinir. Bir işlemin gerçekleşmesi için maksimum ücretin, ana ücret ve bahşiş toplamını aşması gerekir. Maksimum ücret ile ana ücret ve bahşiş toplamı arasındaki fark, işlemi gönderene iade edilir. +Ağ üzerinde bir işlem yürütmek için kullanıcılar, işlemlerinin yürütülmesi için ödemek istedikleri maksimum limiti belirleyebilirler. Bu isteğe bağlı parametre `maxFeePerGas` olarak bilinir. Bir işlemin gerçekleşmesi için maksimum ücretin, ana ücret ve bahşiş toplamını aşması gerekir. Maksimum ücret ile ana ücret ve bahşiş toplamı arasındaki fark, işlemi gönderene iade edilir. ### Blok boyutu {#block-size} -Her blokun hedef boyutu 30 milyon gazdır, ancak blokların boyutu, 60 milyon gaz blok sınırına kadar (hedef blok boyutunun 2 katı) ağ talebine göre artacak veya azalacaktır. Protokol, _tâtonnement_ süreci ile ortalama 30 milyonluk bir denge bloku boyutuna ulaşır. Bu, blok boyutunun hedef blok boyutundan büyük olması durumunda, protokolün bir sonraki blok için ana ücreti artıracağı anlamına gelir. Benzer şekilde, blok boyutu hedef blok boyutundan küçükse protokol ana ücreti düşürür. Ana ücretin ayarlandığı miktar, mevcut blok boyutunun hedeften ne kadar uzak olduğu ile orantılıdır. [Bloklar hakkında daha fazlası](/developers/docs/blocks/). +Her bloğun hedef boyutu, mevcut gaz limitinin yarısıdır, ancak blokların boyutu, blok limitine ulaşılana kadar (hedef blok boyutunun 2 katı) ağ talebine göre artacak veya azalacaktır. Protokol, _tâtonnement_ süreci aracılığıyla hedefte bir denge ortalama blok boyutuna ulaşır. Bu, blok boyutunun hedef blok boyutundan büyük olması durumunda, protokolün bir sonraki blok için ana ücreti artıracağı anlamına gelir. Benzer şekilde, blok boyutu hedef blok boyutundan küçükse protokol ana ücreti düşürür. + +Ana ücretin ayarlandığı miktar, mevcut blok boyutunun hedeften ne kadar uzak olduğu ile orantılıdır. Bu, boş bir blok için -%12,5'ten başlayan, hedef boyutta %0 olan ve gaz limitine ulaşan bir blok için +%12,5'e kadar çıkan doğrusal bir hesaplamadır. Gaz limiti, doğrulayıcı sinyallerine ve ağ yükseltmelerine bağlı olarak zamanla dalgalanabilir. [Gaz limitindeki değişiklikleri zaman içinde buradan görüntüleyebilirsiniz](https://eth.blockscout.com/stats/averageGasLimit?interval=threeMonths). -### Pratikte gaz ücretlerini hesaplamak {#calculating-fees-in-practice} +[Bloklar hakkında daha fazla bilgi](/developers/docs/blocks/) + +### Uygulamada gaz ücretlerini hesaplama {#calculating-fees-in-practice} Açık bir şekilde işlemin uygulanması için ne kadar ödemek istediğinizi belirtebilirsiniz. Ancak, çoğu sağlayıcı kullanıcıları üzerlerine binecek kompleks yükten kurtarmak için otomatik olarak kararlaştırılan ve tavsiye edilen bir işlem ücreti belirleyecektir (ana ücret+önerilen öncelik ücreti). @@ -97,42 +103,49 @@ Açık bir şekilde işlemin uygulanması için ne kadar ödemek istediğinizi b Kısacası, gas ücretleri Ethereum ağının güvenli kalmasına yardımcı olur. Ağda yürütülen her hesaplama için bir ücret talep ederek, kötü niyetli kişilerin ağa spam göndermesini önlüyoruz. Kazara veya düşmanca sonsuz döngüleri veya koddaki diğer hesaplama israfını önlemek için, her işlemin kullanabileceği kod yürütmenin hesaplama adımına bir sınır koyması gerekir. Temel bilgi işlem birimi "gaz"dır. -Bir işlem bir limit içerse de, işlemde kullanılmayan herhangi bir gaz kullanıcıya iade edilir (yani `maksismum ücret - (ana ücret + bahşiş)` iade edilir). +Bir işlem bir limit içerse de işlemde kullanılmayan gaz kullanıcıya iade edilir (ör. `maksimum ücret - (taban ücret + bahşiş)` iade edilir). -![Kullanılmayan gazın nasıl iade edildiğini gösteren diyagram](../transactions/gas-tx.png) _Diyagram [Ethereum EVM resmediciden](https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf) uyarlanmıştır_ +![Kullanılmayan gazın nasıl iade edildiğini gösteren diyagram](../transactions/gas-tx.png) +_Diyagram [Resimli Ethereum EVM](https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf) kaynağından uyarlanmıştır_ ## Gaz limiti nedir? {#what-is-gas-limit} -Gaz limitinden kasıt bir işlemde tüketebileceğiniz maksimum gaz miktarıdır. [Akıllı sözleşmeleri](/developers/docs/smart-contracts/) içeren daha karmaşık işlemler, daha fazla hesaplama çalışması gerektirdiğinden, basit bir ödemeden daha yüksek bir gaz limiti gerektirir. Standart bir ETH transferi, 21.000 birim gaz limiti gerektirir. +Gaz limitinden kasıt bir işlemde tüketebileceğiniz maksimum gaz miktarıdır. [Akıllı sözleşmeleri](/developers/docs/smart-contracts/) içeren daha karmaşık işlemler daha fazla hesaplama işi gerektirir, bu nedenle basit bir ödemeden daha yüksek bir gaz limiti gerektirirler. Standart bir ETH transferi, 21.000 birim gaz limiti gerektirir. -Örneğin, basit bir ETH transferi için 50.000 gaz limiti koyarsanız, EVM 21.000 tüketir ve kalan 29.000'i geri alırsınız. Ancak, örneğin basit bir ETH transferi için 20.000'lik bir gaz limiti gibi çok az gaz belirtirseniz, EVM işlemi gerçekleştirmeye çalışırken 20.000 gaz biriminizi tüketir, ancak işlemi tamamlamaz. Ethereum Sanal Makinesi daha sonra herhangi bir değişikliği geri alır, ancak doğrulayıcı zaten 20000 gaz birimi değerinde iş yaptığı için o gaz tüketilmişir. +Örneğin, basit bir ETH transferi için 50.000 gaz limiti koyarsanız, EVM 21.000 tüketir ve kalan 29.000'i geri alırsınız. Ancak, çok az gaz belirtirseniz, örneğin basit bir ETH transferi için 20.000'lik bir gaz limiti, işlem doğrulama aşamasında başarısız olur. Bir bloğa dahil edilmeden önce reddedilecek ve gaz tüketilmeyecektir. Öte yandan, bir işlem yürütme sırasında gazı biterse (örneğin, bir akıllı sözleşme gazın tamamını yarı yolda kullanırsa), EVM herhangi bir değişikliği geri alır, ancak sağlanan tüm gaz yine de gerçekleştirilen iş için tüketilir. ## Gaz ücretleri neden bu kadar yükselebiliyor? {#why-can-gas-fees-get-so-high} Yüksek gaz ücretleri, Ethereum'un popülaritesinden kaynaklanmaktadır. Eğer çok fazla talep varsa, kullanıcılar daha yüksek bahşiş miktarları teklif edip diğer kullanıcıların işlemlerini saf dışı bırakmaya çalışmalıdır. Daha yüksek bahşiş, işleminizin bir sonraki bloka geçmesini daha olası hale getirebilir. Ayrıca, daha kompleks akıllı sözleşme uygulamaları fonksiyonlarını desteklemek için bir çok işlem yapıyor olabilirler, bu da onların çok fazla gaz tüketmesine sebep olur. -## Gaz maliyetlerini azaltmak için girişimler {#initiatives-to-reduce-gas-costs} +## Gaz maliyetlerini düşürmeye yönelik girişimler {#initiatives-to-reduce-gas-costs} + +Ethereum [ölçeklenebilirlik yükseltmeleri](/roadmap/) nihayetinde gaz ücreti sorunlarından bazılarını ele almalıdır, bu da platformun saniyede binlerce işlemi işlemesini ve küresel olarak ölçeklenmesini sağlayacaktır. -Ethereum [ölçeklenebilirlik yükseltmeleri](/roadmap/) nihayetinde platformun saniyede binlerce işlemi işlemesini ve küresel olarak ölçeklendirmesini sağlayacak olan bazı gaz ücreti sorunlarını çözecektir. +Katman 2 ölçeklendirme; gaz maliyetlerini, kullanıcı deneyimini ve ölçeklenebilirliği büyük ölçüde iyileştirmeye yönelik birincil bir girişimdir. -Katman 2 ölçeklendirme; gaz maliyetlerini, kullanıcı deneyimini ve ölçeklenebilirliği büyük ölçüde iyileştirmeye yönelik birincil bir girişimdir. [Katman 2 ölçeklendirme hakkında daha fazlası](/developers/docs/scaling/#layer-2-scaling). +[Katman 2 ölçeklendirme hakkında daha fazla bilgi](/developers/docs/scaling/#layer-2-scaling) -## Gaz ücretlerini takip etme {#monitoring-gas-fees} +## Gaz ücretlerini izleme {#monitoring-gas-fees} ETH'nizi daha ucuza gönderebilmeniz için gaz fiyatlarını takip etmek istiyorsanız, aşağıdakiler gibi birçok farklı araç kullanabilirsiniz: - [Etherscan](https://etherscan.io/gastracker) _İşlem gaz fiyatı tahmincisi_ -- [Blocknative ETH Gas Estimator](https://chrome.google.com/webstore/detail/blocknative-eth-gas-estim/ablbagjepecncofimgjmdpnhnfjiecfm) _Gaz tahmin eden, hem Tip 0 eski işlemleri hem de Tip 2 EIP-1559 işlemlerini destekleyen Chrome uzantısı._ -- [Cryptoneur Gas Fees Calculator](https://www.cryptoneur.xyz/gas-fees-calculator) _Ana Ağ, Arbitrum ve Polygon üzerindeki farklı işlem türleri için yerel para biriminizde gaz ücretlerini hesaplayın._ +- [Blockscout](https://eth.blockscout.com/gas-tracker) _Açık kaynaklı işlem gaz fiyatı tahmincisi_ +- [ETH Gas Tracker](https://www.ethgastracker.com/) _İşlem ücretlerini azaltmak ve tasarruf etmek için Ethereum ve L2 gaz fiyatlarını izleyin ve takip edin_ +- [Blocknative ETH Gas Estimator](https://chrome.google.com/webstore/detail/blocknative-eth-gas-estim/ablbagjepecncofimgjmdpnhnfjiecfm) _Hem Tip 0 eski işlemleri hem de Tip 2 EIP-1559 işlemlerini destekleyen gaz tahmini Chrome uzantısı._ +- [Cryptoneur Gas Fees Calculator](https://www.cryptoneur.xyz/gas-fees-calculator) _Ana Ağ, Arbitrum ve Polygon'daki farklı işlem türleri için gaz ücretlerini yerel para biriminizde hesaplayın._ ## İlgili araçlar {#related-tools} -- [Blocknative's Gas Platform](https://www.blocknative.com/gas) _Blocknative'in küresel bellek havuzu veri platformu tarafından desteklenen gaz tahmin API'sı_ +- [Blocknative's Gas Platform](https://www.blocknative.com/gas) _Blocknative'in küresel bellek havuzu veri platformu tarafından desteklenen gaz tahmin API'si_ +- [Gas Network](https://gas.network) Zincir Üstü Gaz Kâhinleri. 35'ten fazla zincir için destek. -## Daha fazla bilgi {#further-reading} +## Daha fazla kaynak {#further-reading} -- [Ethereum Gazı Açıklaması](https://defiprime.com/gas) -- [Akıllı Sözleşmelerinizin gaz tüketimini azaltmak](https://medium.com/coinmonks/8-ways-of-reducing-the-gas-consumption-of-your-smart-contracts-9a506b339c0a) -- [Geliştiriciler İçin Gaz Optimizasyonu](https://www.alchemy.com/overviews/solidity-gas-optimization) -- [EIP-1559 dokümanları](https://eips.ethereum.org/EIPS/eip-1559). -- [Tim Beiko'nun EIP-1559 Kaynakları](https://hackmd.io/@timbeiko/1559-resources). +- [Ethereum Gaz Açıklaması](https://defiprime.com/gas) +- [Akıllı Sözleşmelerinizin gaz tüketimini azaltma](https://medium.com/coinmonks/8-ways-of-reducing-the-gas-consumption-of-your-smart-contracts-9a506b339c0a) +- [Geliştiriciler için Gaz Optimizasyon Stratejileri](https://www.alchemy.com/overviews/solidity-gas-optimization) +- [EIP-1559 belgeleri](https://eips.ethereum.org/EIPS/eip-1559). +- [Tim Beiko'nun EIP-1559 Kaynakları](https://hackmd.io/@timbeiko/1559-resources) +- [EIP-1559: Mekanizmaları Memlerden Ayırma](https://web.archive.org/web/20241126205908/https://research.2077.xyz/eip-1559-separating-mechanisms-from-memes) diff --git a/public/content/translations/tr/developers/docs/ides/index.md b/public/content/translations/tr/developers/docs/ides/index.md index e337d92867c..b10086d93b5 100644 --- a/public/content/translations/tr/developers/docs/ides/index.md +++ b/public/content/translations/tr/developers/docs/ides/index.md @@ -1,43 +1,42 @@ --- -title: Tümleşik Geliştirme Ortamları (IDE'ler) -description: +title: "Tümleşik Geliştirme Ortamları (IDE'ler)" +description: "Remix, VS Code ve popüler eklentiler de dahil olmak üzere Ethereum geliştirmesi için web tabanlı ve masaüstü IDE'leri hakkında bilgi edinin." lang: tr --- -Bir [tümleşik geliştirme ortamı (IDE)](https://wikipedia.org/wiki/Integrated_development_environment) kurmak söz konusu olduğunda Ethereum'da uygulama programlamak, başka herhangi bir yazılım projesini programlamaya benzer. Birçok seçenek bulunduğu için tercihlerinize en iyi uyan IDE veya kod editörünü seçin. Büyük ihtimalle Ethereum geliştirme için en iyi IDE seçimi, hâlihazırda geleneksel yazılım geliştirme için kullandığınız IDE olacaktır. +[Tümleşik geliştirme ortamı (IDE)](https://wikipedia.org/wiki/Integrated_development_environment) kurmak söz konusu olduğunda, Ethereum üzerinde uygulama programlamak, diğer herhangi bir yazılım projesini programlamaya benzer. Birçok seçenek bulunduğu için tercihlerinize en iyi uyan IDE veya kod editörünü seçin. Büyük ihtimalle Ethereum geliştirme için en iyi IDE seçimi, hâlihazırda geleneksel yazılım geliştirme için kullandığınız IDE olacaktır. ## Web tabanlı IDE'ler {#web-based-ides} -[Yerel bir geliştirme ortamı](/developers/local-environment/) kurmadan önce kodla uğraşmak istiyorsanız, bu web uygulamaları Ethereum akıllı sözleşme geliştirme için özel olarak inşa edilmiştir. +[Yerel bir geliştirme ortamı](/developers/local-environment/) kurmadan önce kodla uğraşmak istiyorsanız, bu web uygulamaları Ethereum akıllı sözleşme geliştirme için özel olarak oluşturulmuştur. -**[Remix](https://remix.ethereum.org/)** - **_İçine inşa edilmiş şekilde bir statik analize ve test blok zincir sanal makinesine sahip olan web temelli bir IDE_** +**[Remix](https://remix.ethereum.org/)** - **_Dahili statik analiz ve test blokzinciri sanal makinesi içeren web tabanlı bir IDE_** - [Belgeler](https://remix-ide.readthedocs.io/en/latest/#) - [Gitter](https://gitter.im/ethereum/remix) -**[ChainIDE](https://chainide.com/)** - **_Bulut temelli çok zincirli bir IDE_** +**[ChainIDE](https://chainide.com/)** - **_Bulut tabanlı, çok zincirli bir IDE_** - [Belgeler](https://chainide.gitbook.io/chainide-english-1/) - [Yardım forumu](https://forum.chainide.com/) -**[Replit (Solidity Başlatıcı - Beta)](https://replit.com/@replit/Solidity-starter-beta)** - **_Hızlı yeniden yüklemeli, hata kontrollü ve birinci kalite test ağı destekli Ethereum için bir özelleştirilebilir geliştirme ortamı_** +**[Replit (Solidity Starter - Beta)](https://replit.com/@replit/Solidity-starter-beta)** - **_Anında yeniden yükleme, hata denetimi ve birinci sınıf test ağı desteği özelliklerine sahip, Ethereum için özelleştirilebilir bir geliştirme ortamı_** - [Belgeler](https://docs.replit.com/) -**[Tenderly Sandbox](https://sandbox.tenderly.co/)** - **_Solidity ve JavaScript kullanarak akıllı sözleşmeler yazabileceğiniz, yürütebileceğiniz ve hatalarını ayıklayabileceğiniz hızlı bir prototipleme ortamı_** +**[Tenderly Sandbox](https://sandbox.tenderly.co/)** - **_Solidity ve JavaScript kullanarak tarayıcıda akıllı sözleşmeler yazabileceğiniz, yürütebileceğiniz ve hatalarını ayıklayabileceğiniz hızlı bir prototip oluşturma ortamı_** -**[EthFiddle](https://ethfiddle.com/)** - **_Akıllı sözleşmenizi yazmanızı, derlemenizi ve hatalarını ayıklamanızı sağlayan web temelli bir IDE_** +**[EthFiddle](https://ethfiddle.com/)** - **_Akıllı sözleşmenizi yazmanıza, derlemenize ve hatalarını ayıklamanıza olanak tanıyan web tabanlı bir IDE_** - [Gitter](https://gitter.im/loomnetwork/ethfiddle) ## Masaüstü IDE'leri {#desktop-ides} -Çoğu bilinen IDE, Ethereum geliştirme deneyimini iyileştirmek için inşa edilmiş eklentiler bulundurur. En azından [akıllı sözleşme dilleri](/developers/docs/smart-contracts/languages/) için söz dizimi vurgulaması sağlarlar. +Çoğu bilinen IDE, Ethereum geliştirme deneyimini iyileştirmek için inşa edilmiş eklentiler bulundurur. En azından, [akıllı sözleşme dilleri](/developers/docs/smart-contracts/languages/) için söz dizimi vurgulaması sağlarlar. -**Visual Studio Code -** **_Resmi Ethereum destekli, profesyonel çapraz platform IDE'sidir._** +**Visual Studio Code -** **_Resmi Ethereum destekli, profesyonel, platformlar arası bir IDE_** - [Visual Studio Code](https://code.visualstudio.com/) -- [Azure Blockchain Workbench](https://azuremarketplace.microsoft.com/en-us/marketplace/apps/microsoft-azure-blockchain.azure-blockchain-workbench?tab=Overview) - [Kod örnekleri](https://github.com/Azure-Samples/blockchain/blob/master/blockchain-workbench/application-and-smart-contract-samples/readme.md) - [GitHub](https://github.com/microsoft/vscode) @@ -55,10 +54,10 @@ Bir [tümleşik geliştirme ortamı (IDE)](https://wikipedia.org/wiki/Integrated ## Eklentiler ve uzantılar {#plugins-extensions} - [solidity](https://marketplace.visualstudio.com/items?itemName=JuanBlanco.solidity) - Visual Studio Code için Ethereum Solidity Dili -- [VS Code için Solidity + Hardhat](https://marketplace.visualstudio.com/items?itemName=NomicFoundation.hardhat-solidity) - Hardhat ekibinden Solidity ve Hardhat desteği -- [Prettier Solidity](https://github.com/prettier-solidity/prettier-plugin-solidity) - prettier kullanan kod formatlayıcısı +- [Solidity + Hardhat for VS Code](https://marketplace.visualstudio.com/items?itemName=NomicFoundation.hardhat-solidity) - Hardhat ekibinden Solidity ve Hardhat desteği +- [Prettier Solidity](https://github.com/prettier-solidity/prettier-plugin-solidity) - Prettier kullanan kod biçimlendirici -## Daha fazla bilgi {#further-reading} +## Daha fazla kaynak {#further-reading} - [Ethereum IDE'leri](https://www.alchemy.com/list-of/web3-ides-on-ethereum) _- Alchemy'nin Ethereum IDE'leri listesi_ diff --git a/public/content/translations/tr/developers/docs/index.md b/public/content/translations/tr/developers/docs/index.md index 0bfee0666a9..5bb929d616e 100644 --- a/public/content/translations/tr/developers/docs/index.md +++ b/public/content/translations/tr/developers/docs/index.md @@ -1,12 +1,12 @@ --- -title: Ethereum geliştirme dokümanları -description: ethereum.org geliştirici belgelerinin tanıtımı. +title: "Ethereum geliştirme dokümanları" +description: "ethereum.org geliştirici belgelerinin tanıtımı." lang: tr --- Bu belge, Ethereum ile geliştirmenize yardımcı olmak için tasarlanmıştır. Ethereum'un kavramsal yönünü kapsar, Ethereum teknoloji yığınını açıklar ve daha karmaşık uygulamalar ve kullanım alanları için gelişmiş konuları belgeler. -Bu, açık kaynaklı bir topluluk çalışması olduğu için yararlı olabileceğini düşündüğünüz yeni konuları önermekten, yeni içerik eklemekten ve örnekler vermekten çekinmeyin. Tüm dökümanlar GitHub üzerinden düzenlenebilir. Eğer nasıl yapılacağından emin değilseniz [şu talimatları izleyin](https://github.com/ethereum/ethereum-org-website/blob/dev/docs/editing-markdown.md). +Bu, açık kaynaklı bir topluluk çalışması olduğu için yararlı olabileceğini düşündüğünüz yeni konuları önermekten, yeni içerik eklemekten ve örnekler vermekten çekinmeyin. Tüm dökümanlar GitHub üzerinden düzenlenebilir – nasıl yapılacağından emin değilseniz, [bu talimatları izleyin](https://github.com/ethereum/ethereum-org-website/blob/dev/docs/editing-markdown.md). ## Geliştirme modülleri {#development-modules} diff --git a/public/content/translations/tr/developers/docs/intro-to-ether/index.md b/public/content/translations/tr/developers/docs/intro-to-ether/index.md index c0a33a4bab8..ccbdc3661ca 100644 --- a/public/content/translations/tr/developers/docs/intro-to-ether/index.md +++ b/public/content/translations/tr/developers/docs/intro-to-ether/index.md @@ -1,12 +1,12 @@ --- -title: Ether'a giriş -description: Ether kripto parasına yönelik bir geliştirici tanıtımı. +title: "Ether'e teknik giriş" +description: "Ether kripto parasına yönelik bir geliştirici tanıtımı." lang: tr --- ## Ön Koşullar {#prerequisites} -Bu sayfayı daha iyi anlamanıza yardımcı olmak için önce [ Ethereum'a Giriş](/developers/docs/intro-to-ethereum/)'i okumanızı öneririz. +Bu sayfayı daha iyi anlamanıza yardımcı olmak için öncelikle [Ethereum'a Giriş](/developers/docs/intro-to-ethereum/) sayfasını okumanızı öneririz. ## Kripto para nedir? {#what-is-a-cryptocurrency} @@ -18,15 +18,15 @@ Bir takas aracı, mallar ve hizmetler için ödeme olarak yaygın olarak kabul e ## Ether nedir? {#what-is-ether} -**Ether (ETH)** Ethereum ağındaki birçok şey için kullanılan bir kripto paradır. Esasen, işlem ücretleri için kabul edilen tek ödeme yoludur ve [Birleşim](/roadmap/merge) sonrasında ether Ana Ağ'da blok doğrulamak ve önermek için gereklidir. Ether ayrıca, [DeFi](/defi) kredi piyasalarında birincil teminat biçimi olarak, NFT piyasalarında bir hesap birimi olarak, hizmetlerin gerçekleştirilmesi veya gerçek dünya mallarının satılması için kazanılan ödeme ve daha fazlası olarak kullanılır. +**Ether (ETH)**, Ethereum ağında birçok şey için kullanılan kripto paradır. Temel olarak, işlem ücretleri için kabul edilen tek ödeme şeklidir ve [Birleşim](/roadmap/merge) sonrasında Ana Ağ'da blokları doğrulamak ve önermek için ether gereklidir. Ether ayrıca [DeFi](/defi) borç verme piyasalarında birincil teminat şekli olarak, NFT pazar yerlerinde bir hesap birimi olarak, hizmetler gerçekleştirmek veya gerçek dünya mallarını satmak için kazanılan ödeme olarak ve daha fazlası için kullanılır. -Ethereum, geliştiricilerin tümü bir bilgi işlem gücü havuzunu paylaşan [**merkeziyetsiz uygulamalar (dapp'ler)**](/developers/docs/dapps) oluşturmasına olanak tanır. Bu paylaşılan havuz sınırlı olduğu için Ethereum'un onu kimin kullanacağını belirlemek için bir mekanizmaya ihtiyacı vardır. Aksi takdirde, bir dapp yanlışlıkla veya kötü niyetli olarak tüm ağ kaynaklarını tüketebilir ve bu da başkalarının ona erişmesini engelleyebilir. +Ethereum, geliştiricilerin tümünün bir bilgi işlem gücü havuzunu paylaştığı [**merkeziyetsiz uygulamalar (dapp'ler)**](/developers/docs/dapps) oluşturmasına olanak tanır. Bu paylaşılan havuz sınırlı olduğu için Ethereum'un onu kimin kullanacağını belirlemek için bir mekanizmaya ihtiyacı vardır. Aksi takdirde, bir dapp yanlışlıkla veya kötü niyetli olarak tüm ağ kaynaklarını tüketebilir ve bu da başkalarının ona erişmesini engelleyebilir. -Ether kripto parası, Ethereum'un bilgi işlem gücü için bir fiyatlandırma mekanizmasını destekler. Kullanıcılar bir işlem yapmak istediklerinde, işlemlerinin blok zincirinde tanınması için ether ödemeleri gerekir. Bu kullanım maliyetleri, [gaz ücretleri](/developers/docs/gas/) olarak bilinir ve gaz ücreti, işlemi gerçekleştirmek için gereken bilgi işlem gücü miktarına ve ağ genelindeki zamandaki bilgi işlem gücü talebine bağlıdır. +Ether kripto parası, Ethereum'un bilgi işlem gücü için bir fiyatlandırma mekanizmasını destekler. Kullanıcılar bir işlem yapmak istediklerinde, işlemlerinin blok zincirinde tanınması için ether ödemeleri gerekir. Bu kullanım maliyetleri [gaz ücretleri](/developers/docs/gas/) olarak bilinir ve gaz ücreti, işlemi yürütmek için gereken bilgi işlem gücü miktarına ve o andaki ağ genelindeki bilgi işlem gücü talebine bağlıdır. Bu nedenle, kötü niyetli bir dapp sonsuz bir döngü gönderse bile, işlemin sonunda kullanacak ether'ı kalmaz ve işlem sona ererek ağın normale dönmesine izin verir. -Ethereum ve ether'dan [yaygın](https://www.reuters.com/article/us-crypto-currencies-lending-insight-idUSKBN25M0GP#:~:text=price%20of%20ethereum) [olarak](https://abcnews.go.com/Business/bitcoin-slumps-week-low-amid-renewed-worries-chinese/story?id=78399845#:~:text=cryptocurrencies%20including%20ethereum) [aynı şeylermiş gibi bahsedilir](https://www.cnn.com/2021/03/14/tech/nft-art-buying/index.html#:~:text=price%20of%20ethereum): İnsanlar "Ethereum fiyatından" bahsederken, ether'ın fiyatını kastederler. +Ethereum ve ether'i birbirine [karıştırmak yaygındır](https://abcnews.go.com/Business/bitcoin-slumps-week-low-amid-renewed-worries-chinese/story?id=78399845) — insanlar "Ethereum'un fiyatından" bahsettiğinde, aslında ether'in fiyatını tarif etmektedirler. ## Ether basma {#minting-ether} @@ -38,15 +38,15 @@ Ether önerilen her bir blok için ve mutabakata ulaşmaya bağlı diğer doğru Blok ödülleri yoluyla yaratılmasının yanı sıra ether, "yakma" adı verilen bir süreçle yok edilebilir. Ether, yakıldığında dolaşımdan kalıcı olarak çıkarılır. -Ethereum üzerindeki her işlemde ether yakılır. Kullanıcılar işlemler için ödeme yaptığında, ağ tarafından işlem talebine göre belirlenen bir temel gaz ücreti yok edilir. Bu, değişken blok büyüklüğü ve maksimum gaz ücreti ile birleştirildiğinde, Ethereum'da işlem ücreti tahminini basitleştirir. [Bloklar](https://etherscan.io/block/12965263), ağ talebi yüksek olduğunda bastıklarından daha fazla ether yakarak ether ihtiyacını etkili bir şekilde dengeler. +Ethereum üzerindeki her işlemde ether yakılır. Kullanıcılar işlemler için ödeme yaptığında, ağ tarafından işlem talebine göre belirlenen bir temel gaz ücreti yok edilir. Bu, değişken blok büyüklüğü ve maksimum gaz ücreti ile birleştirildiğinde, Ethereum'da işlem ücreti tahminini basitleştirir. Ağ talebi yüksek olduğunda, [bloklar](https://eth.blockscout.com/block/22580057) bastıklarından daha fazla ether yakabilir ve bu da ether ihracını etkili bir şekilde dengeler. -Ana ücreti yakmak blok üreticilerinin işlemleri manipüle etme kabiliyetine engel olur. Örneğin, blok üreticileri ana ücreti alırlarsa, kendi işlemlerini ücretsiz olarak dahil edebilir ve diğer herkes için ana ücreti yükseltebilirler. Alternatif olarak, bazı kullanıcılara zincir dışı temel ücreti iade edebilirler ve bu da daha opak ve karmaşık bir işlem ücreti piyasasına yol açar. +Taban ücreti yakmak, bir blok üreticisinin işlemleri manipüle etme kabiliyetini engeller. Örneğin, blok üreticileri ana ücreti alırlarsa, kendi işlemlerini ücretsiz olarak dahil edebilir ve diğer herkes için ana ücreti yükseltebilirler. Alternatif olarak, bazı kullanıcılara taban ücreti zincir dışı iade edebilirler, bu da daha opak ve karmaşık bir işlem ücreti piyasasına yol açar. -## Ether'ın birimleri {#denominations} +## Ether birimleri {#denominations} Ethereum'daki birçok işlemin değeri küçük olduğundan, ether'in daha küçük hesap birimleri için referans alınabilecek birkaç birimi vardır. Bu birimlerden olan Wei ve gwei, özellikle önemlidir. -Wei, mümkün olan en küçük ether miktarıdır ve sonuç olarak, [Ethereum Sarı Kağıdı (Ethereum Yellowpaper)](https://ethereum.github.io/yellowpaper/paper.pdf) gibi birçok teknik uygulama, tüm hesaplamalarında Wei'yi temel alır. +Wei, mümkün olan en küçük ether miktarıdır ve sonuç olarak, [Ethereum Sarı Sayfaları](https://ethereum.github.io/yellowpaper/paper.pdf) gibi birçok teknik uygulama, tüm hesaplamaları Wei cinsinden yapar. Giga-wei'nin kısaltması olan Gwei, genellikle Ethereum'daki gaz maliyetlerini tanımlamak için kullanılır. @@ -55,24 +55,24 @@ Giga-wei'nin kısaltması olan Gwei, genellikle Ethereum'daki gaz maliyetlerini | Wei | 10-18 | Teknik uygulamaları | | Gwei | 10-9 | İnsanlar tarafından okunabilir gaz ücretleri | -## Etheri transfer yapmak {#transferring-ether} +## Ether transfer etme {#transferring-ether} -Ethereum'daki her işlem, göndericinin adresinden alıcı adresine gönderilecek, wei cinsinden ifade edilen, aktarılacak ether miktarını belirten bir `value` alanı içerir. +Ethereum'daki her işlem, göndericinin adresinden alıcı adresine gönderilecek olan, wei cinsinden belirtilen transfer edilecek ether miktarını belirten bir `value` alanı içerir. -Alıcı adresi bir [akıllı sözleşme](/developers/docs/smart-contracts/) olduğunda bu aktarılan ether, akıllı sözleşme kodunu yürüttüğünde gazın ödenmesi için kullanılabilir. +Alıcı adresi bir [akıllı sözleşme](/developers/docs/smart-contracts/) olduğunda, bu transfer edilen ether, akıllı sözleşme kodunu yürüttüğünde gaz ücretini ödemek için kullanılabilir. [İşlemler hakkında daha fazla bilgi](/developers/docs/transactions/) ## Ether sorgulama {#querying-ether} -Kullanıcılar, herhangi bir [hesabın](/developers/docs/accounts/) ether bakiyesini, hesabın wei cinsinden ether varlıklarını gösteren `balance` alanını inceleyerek sorgulayabilir. +Kullanıcılar, wei cinsinden tutulan ether'i gösteren hesabın `balance` alanını inceleyerek herhangi bir [hesabın](/developers/docs/accounts/) ether bakiyesini sorgulayabilir. -[Etherscan](https://etherscan.io), web tabanlı bir uygulama aracılığıyla adres bakiyelerini denetlemek için popüler bir araçtır. Örneğin, [bu Etherscan sayfası](https://etherscan.io/address/0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae), Ethereum Vakfı'nın bakiyesini gösterir. Hesap bakiyeleri cüzdanlar kullanılarak veya doğrudan düğümlere istekte bulunarak da sorgulanabilir. +[Etherscan](https://etherscan.io) ve [Blockscout](https://eth.blockscout.com), web tabanlı uygulamalar aracılığıyla adres bakiyelerini incelemek için kullanılan popüler araçlardır. Örneğin, [bu Blockscout sayfası](https://eth.blockscout.com/address/0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe) Ethereum Vakfı'nın bakiyesini gösterir. Hesap bakiyeleri cüzdanlar kullanılarak veya doğrudan düğümlere istekte bulunarak da sorgulanabilir. -## Daha fazla bilgi {#further-reading} +## Daha fazla kaynak {#further-reading} -- [Ether'in ve Ethereum'un Tanımı](https://www.cmegroup.com/education/courses/introduction-to-ether/defining-ether-and-ethereum.html) - _CME Grubu_ -- [Ethereum Teknik Raporu](/whitepaper/): Ethereum'a dair ilk teklif. Bu belge, ether'ın tanımını ve yaratılmasının amaçlarını içerir. -- [Gwei Hesaplayıcı](https://www.alchemy.com/gwei-calculator): Wei, gwei ve eter kolayca dönüştürmek için bu gwei hesap makinesini kullanın. İstediğiniz miktarda wei, gwei veya ETH girmeniz yeterlidir ve dönüşüm otomatik olarak hesaplanır. +- [Ether ve Ethereum'u Tanımlamak](https://www.cmegroup.com/education/courses/introduction-to-ether/defining-ether-and-ethereum.html) – _CME Group_ +- [Ethereum Teknik Raporu](/whitepaper/): Ethereum için orijinal teklif. Bu belge, ether'ın tanımını ve yaratılmasının amaçlarını içerir. +- [Gwei Hesaplayıcı](https://www.alchemy.com/gwei-calculator): Wei, gwei ve ether'i kolayca dönüştürmek için bu gwei hesaplayıcısını kullanın. İstediğiniz miktarda wei, gwei veya ETH girmeniz yeterlidir ve dönüşüm otomatik olarak hesaplanır. _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/intro-to-ethereum/index.md b/public/content/translations/tr/developers/docs/intro-to-ethereum/index.md index 40a7e7ea1b2..0b559704cec 100644 --- a/public/content/translations/tr/developers/docs/intro-to-ethereum/index.md +++ b/public/content/translations/tr/developers/docs/intro-to-ethereum/index.md @@ -1,10 +1,10 @@ --- -title: Ethereum'a Giriş -description: Bir dapp geliştiricisi Ethereum'un temel kavramlarını tanıtıyor. +title: "Ethereum'a teknik giriş" +description: "Bir dapp geliştiricisi Ethereum'un temel kavramlarını tanıtıyor." lang: tr --- -## Blok zinciri nedir? {#what-is-a-blockchain} +## Blok zincir nedir? {#what-is-a-blockchain} Blok zinciri, ağdaki birçok bilgisayarda paylaşılan ve güncellenen açık bir veri tabanıdır. @@ -14,15 +14,15 @@ Peş peşe gruplar hâlinde depolanan veri ve durumlara "Blok" denir. Eğer baş Ağdaki her bilgisayar, her yeni blok ve bir bütün olarak zincir üzerinde anlaşmalıdır. Bu bilgisayarlar "düğümler" olarak bilinir. Düğümler, blok zinciri ile etkileşime giren herkesin aynı verilere sahip olmasını sağlar. Bu dağıtılmış anlaşmayı gerçekleştirmek için blok zincirlerinin bir mutabakat birliği mekanizmasına ihtiyacı var. -Ethereum, [hisse ispatı tabanlı bir mutabakat mekanizması](/developers/docs/consensus-mechanisms/pos/) kullanıyor. Zincire yeni bloklar eklemek isteyen herhangi biri, teminat olarak Ethereum'daki yerel para birimi olan ETH'yi hisselemeli ve doğrulayıcı yazılımını çalıştırmalı. Böylece, bu "doğrulayıcılar" diğer doğrulayıcıların kontrol edip blok zincire eklediği blokları önermek için rastgele seçilebilir. Katılımcıları dürüst ve mümkün olduğunca çevrimiçi erişilebilir olmaya şiddetle teşvik eden bir ödül ve ceza sistemi vardır. +Ethereum, [hisse ispatı tabanlı bir mutabakat mekanizması](/developers/docs/consensus-mechanisms/pos/) kullanır. Zincire yeni bloklar eklemek isteyen herhangi biri, teminat olarak Ethereum'daki yerel para birimi olan ETH'yi hisselemeli ve doğrulayıcı yazılımını çalıştırmalı. Böylece, bu "doğrulayıcılar" diğer doğrulayıcıların kontrol edip blok zincire eklediği blokları önermek için rastgele seçilebilir. Katılımcıları dürüst ve mümkün olduğunca çevrimiçi erişilebilir olmaya şiddetle teşvik eden bir ödül ve ceza sistemi vardır. -Blok zincir verisinin nasıl şifrelendiğini ve sonrasında blok referanslarının geçmişine nasıl eklendiğini görmek isterseniz, Anders Brownworth tarafından verilen [bu demoyu](https://andersbrownworth.com/blockchain/blockchain) ve ona eşlik eden aşağıdaki videoyu gördüğünüzden emin olun. +Blokzincir verilerinin nasıl karma haline getirildiğini ve ardından blok referansları geçmişine nasıl eklendiğini görmek isterseniz, Anders Brownworth'ün hazırladığı [bu demoya](https://andersbrownworth.com/blockchain/blockchain) göz attığınızdan ve aşağıdaki videoyu izlediğinizden emin olun. Anders'ın blok zincirlerdeki karmaları açıklamasını izleyin: -## Ethereum nedir? {#what-is-ethereum} +## Ethereum Nedir? {#what-is-ethereum} Ethereum, içinde gömülü bilgisayar bulunan bir blok zincirdir. Bu blok zincir, uygulamaları ve organizasyonları merkeziyetsiz, izin gerektirmeyen ve sansüre dirençli bir şekilde inşa etmek için varolan bir kuruluştur. @@ -44,19 +44,19 @@ ETH aynı zamanda ağa kriptoekonomik güvenlik sağlamak için üç ana şekild ## Akıllı sözleşmeler nedir? {#what-are-smart-contracts} -Pratikte, katılımcılar EVM'de her hesaplama isteği gönderdiklerinde yeni kod yazmazlar. Bunun yerine, uygulama geliştiricileri programları (yeniden kullanılabilir kod parçacıkları) EVM durumuna yükler ve kullanıcılar bu kod parçacıklarını değişen parametrelerle yürütmek için talepte bulunur. Yüklenen ve ağ tarafından uygulanan programlara akıllı sözleşme diyoruz. +Pratikte, katılımcılar EVM'de her hesaplama talebi gönderdiklerinde yeni kod yazmazlar. Bunun yerine, uygulama geliştiricileri programları (yeniden kullanılabilir kod parçacıkları) EVM durumuna yükler ve kullanıcılar bu kod parçacıklarını değişen parametrelerle yürütmek için talepte bulunur. Ağa yüklenen ve ağ tarafından yürütülen programlara "akıllı sözleşmeler" diyoruz. Çok temel bir düzeyde, bir akıllı sözleşmeyi otomat gibi düşünebiliriz: belli koşullarla çağırılıp, koşullar sağlanıyorsa bazı işler yapan bir kod. Örneğin, basit bir satıcı akıllı sözleşmesi, arayan kişi belirli bir alıcıya ETH gönderirse bir dijital varlığın sahipliğini oluşturabilir ve atayabilir. -Her geliştirici, ağa bir ücret ödeme karşılığında, blok zinciri veri kaynağı şeklinde kullanarak, ağa açık bir akıllı sözleşme oluşturabilir. Herhangi bir kullanıcı daha sonra, yine ağa ödenen bir ücret karşılığında kodunu yürütmek için akıllı sözleşmeyi arayabilir. +Her geliştirici, ağa bir ücret ödeme karşılığında, blok zinciri veri kaynağı şeklinde kullanarak, ağa açık bir akıllı sözleşme oluşturabilir. Herhangi bir kullanıcı daha sonra, yine ağa ödenen bir ücret karşılığında kodunu yürütmek için akıllı sözleşmeyi çağırabilir. Böylece akıllı sözleşmelerle geliştiriciler, pazar yerleri, finansal araçlar, oyunlar vb. gibi, isteğe bağlı olarak karmaşık, kullanıcıya yönelik uygulamalar ve hizmetler oluşturabilir ve dağıtabilir. ## Terminoloji {#terminology} -### Blok zinciri {#blockchain} +### Blokzincir {#blockchain} -Ağın geçmişinde Ethereum ağına bağlı olan tüm blokların sırası. Her blok, tüm bloklar üzerinde (ve dolayısıyla kesin tarih boyunca) bir sıralamayı korumamıza yardımcı olan bir önceki bloka bir referans içerdiği için bu şekilde adlandırılmıştır. +Ağın geçmişinde Ethereum ağına taahhüt edilmiş tüm blokların sırası. Her blok, tüm bloklar üzerinde (ve dolayısıyla kesin tarih boyunca) bir sıralamayı korumamıza yardımcı olan bir önceki bloka bir referans içerdiği için bu şekilde adlandırılmıştır. ### ETH {#eth} @@ -68,7 +68,7 @@ Ağın geçmişinde Ethereum ağına bağlı olan tüm blokların sırası. Her Ethereum Sanal Makinesi, durumu Ethereum ağındaki her katılımcı tarafından saklanan ve hakkında hemfikir olunan global sanal bilgisayardır. Herhangi bir katılımcı, EVM'de rastgele kod yürütülmesini talep edebilir; kod yürütme, EVM'nin durumunu değiştirir. -[EVM hakkında daha fazlası](/developers/docs/evm/) +[EVM hakkında daha fazla bilgi](/developers/docs/evm/) ### Düğümler {#nodes} @@ -80,7 +80,7 @@ EVM durumunu depolayan gerçek hayattaki makineler. Düğümler, EVM durumu ve y ETH'nin depolandığı yerdir. Kullanıcılar hesap açabilir, hesaplarına ETH yatırabilir ve hesaplarından diğer kullanıcılara ETH transfer edebilirler. Hesaplar ve hesap bakiyeleri EVM'de büyük bir tabloda saklanır; bunlar genel EVM durumunun bir parçasıdır. -[Hesaplar hakkında daha fazlası](/developers/docs/accounts/) +[Hesaplar hakkında daha fazla bilgi](/developers/docs/accounts/) ### İşlemler {#transactions} @@ -96,21 +96,29 @@ Bir "işlem talebi", EVM'de kod yürütme talebinin resmi terimidir ve bir "işl İşlem hacmi çok yüksektir, bu nedenle işlemler partiler veya bloklar halinde "taahhüt edilir". Bloklar genellikle düzinelerce ila yüzlerce işlem içerir. -[Bloklar hakkında daha fazlası](/developers/docs/blocks/) +[Bloklar hakkında daha fazla bilgi](/developers/docs/blocks/) ### Akıllı sözleşmeler {#smart-contracts} -Bir geliştiricinin EVM durumuna yayınladığı yeniden kullanılabilir bir kod parçacığı (bir program). Herkes bir işlem talebinde bulunarak akıllı sözleşme kodunun yürütülmesini talep edebilir. Geliştiriciler akıllı sözleşmeler yayınlayarak EVM'ye (oyunlar, pazar yerleri, finansal araçlar vb.) keyfi yürütülebilir uygulamalar yazabildikleri için, bu uygulamalara genellikle [dapp veya Merkeziyetsiz Uygulama denir.](/developers/docs/dapps/). +Bir geliştiricinin EVM durumuna yayınladığı yeniden kullanılabilir bir kod parçacığı (bir program). Herkes bir işlem talebinde bulunarak akıllı sözleşme kodunun yürütülmesini talep edebilir. Geliştiriciler EVM'ye rastgele yürütülebilir uygulamalar (oyunlar, pazar yerleri, finansal araçlar vb.) yazabildiğinden akıllı sözleşmeler yayınlayarak, bunlara genellikle [merkeziyetsiz uygulamalar](/developers/docs/dapps/) de denir. [Akıllı sözleşmeler hakkında daha fazla bilgi](/developers/docs/smart-contracts/) -## Daha fazla bilgi {#further-reading} +## Daha fazla kaynak {#further-reading} -- [Ethereum Teknik Raporu](/whitepaper/) -- [Peki, Ethereum nasıl çalışır?](https://medium.com/@preethikasireddy/how-does-ethereum-work-anyway-22d1df506369) - _Preethi Kasireddy_ (**bkz.** bu kaynak hâlâ değerlidir, ancak [Birleşim](/roadmap/merge) öncesine dayandığı ve bu nedenle Ethereum'un iş ispatı mekanizmasını referans gösterdiği unutulmamalıdır - Ethereum şu anda [hisse ispatı](/developers/docs/consensus-mechanisms/pos) kullanılarak güvence altına alınmıştır) +- [Ethereum Tanıtım Belgesi](/whitepaper/) +- [Peki, Ethereum nasıl çalışır?](https://medium.com/@preethikasireddy/how-does-ethereum-work-anyway-22d1df506369) - _Preethi Kasireddy_ (**Not:** Bu kaynak hâlâ değerli olsa da [Birleşim](/roadmap/merge) öncesine ait olduğunu ve bu nedenle Ethereum'un iş ispatı mekanizmasına atıfta bulunduğunu unutmayın - Ethereum artık [hisse ispatı](/developers/docs/consensus-mechanisms/pos) kullanılarak güvence altına alınmıştır) -_Size yardımcı olan bir topluluk kaynağı biliyor musunuz? Bu sayfayı düzenleyin ve ekleyin!_ +### Görerek öğrenmeyi mi tercih ediyorsunuz? {#visual-learner} + +Bu video serisi, temel konuların kapsamlı bir incelemesini sunar: + + + +[Ethereum Temelleri Oynatma Listesi](https://youtube.com/playlist?list=PLqgutSGloqiJyyoL0zvLVFPS-GMD2wKa5&si=kZTf5I7PKGTXDsOZ) + +_Size yardımcı olan bir topluluk kaynağı mı biliyorsunuz? Bu sayfayı düzenleyin ve onu ekleyin!_ ## İlgili öğreticiler {#related-tutorials} -- [Bir geliştiricinin Ethereum rehberi, bölüm 1](/developers/tutorials/a-developers-guide-to-ethereum-part-one/)_- Ethereum'un Python ve web3.py kullanarak acemi dostu bir şekilde keşfi_ +- [Bir geliştiricinin Ethereum rehberi, bölüm 1](/developers/tutorials/a-developers-guide-to-ethereum-part-one/) _– Python ve web3.py kullanarak Ethereum'un başlangıç dostu bir şekilde keşfi_ diff --git a/public/content/translations/tr/developers/docs/mev/index.md b/public/content/translations/tr/developers/docs/mev/index.md index 4a22de08bd8..32013cfe43e 100644 --- a/public/content/translations/tr/developers/docs/mev/index.md +++ b/public/content/translations/tr/developers/docs/mev/index.md @@ -1,6 +1,6 @@ --- -title: Maksimal çıkarılabilir değer (MEV) -description: Maksimal çıkarılabilir değere (MEV) giriş +title: "Maksimum çıkarılabilir değer (MEV)" +description: "Maksimum çıkarılabilir değere (MEV) giriş" lang: tr --- @@ -8,31 +8,31 @@ Maksimal çıkarılabilir değer (MEV), bir bloktaki işlemlerin sırasını dah ## Maksimum çıkarılabilir değer {#maximal-extractable-value} -Maksimum çıkarılabilir değer, ilk olarak [iş ispatı](/developers/docs/consensus-mechanisms/pow/) bağlamında uygulandı ve başlangıçta "madenci çıkarılabilir değeri" olarak adlandırıldı. Bunun sebebi, iş ispatında katılım, çıkarım ve sıralamayı madencilerin kontrol etmesidir. Ancak, [Birleşim](/roadmap/merge) aracılığıyla hisse ispatına geçişten sonra bu rollerden doğrulayıcılar sorumlu olacak ve madencilik artık Ethereum protokolünün bir parçası olmayacaktır. Ancak değer çıkarım yöntemleri hala mevcuttur, yani artık bunun yerine "Maksimum çıkarılabilir değer" kullanılacaktır. +Maksimum çıkarılabilir değer, ilk olarak [iş ispatı](/developers/docs/consensus-mechanisms/pow/) bağlamında uygulandı ve başlangıçta "madenci çıkarılabilir değeri" olarak adlandırıldı. Bunun sebebi, iş ispatında katılım, çıkarım ve sıralamayı madencilerin kontrol etmesidir. Ancak [The Merge](/roadmap/merge) aracılığıyla hisse ispatına geçişten bu yana bu rollerden doğrulayıcılar sorumlu olmuştur ve madencilik artık Ethereum protokolünün bir parçası değildir. Ancak değer çıkarım yöntemleri hala mevcuttur, yani artık bunun yerine "Maksimum çıkarılabilir değer" kullanılacaktır. -## Ön koşullar {#prerequisites} +## Ön Koşullar {#prerequisites} -[İşlemler](/developers/docs/transactions/), [bloklar](/developers/docs/blocks/), [hisse ispatı](/developers/docs/consensus-mechanisms/pos) ve [gaz](/developers/docs/gas/) hakkında bilgi sahibi olduğunuzdan emin olun. [Merkeziyetsiz uygulamalar](/apps/) ve [DeFi](/defi/) ile aşina olmak da faydalı olabilir. +[İşlemlere](/developers/docs/transactions/), [bloklara](/developers/docs/blocks/), [hisse ispatına](/developers/docs/consensus-mechanisms/pos) ve [gaza](/developers/docs/gas/) aşina olduğunuzdan emin olun. [merkeziyetsiz uygulamalara](/apps/) ve [DeFi'ye](/defi/) aşina olmak da faydalıdır. -## MEV çıkarma {#mev-extraction} +## MEV çıkarımı {#mev-extraction} Teoride MEV, kârlı bir MEV fırsatının yürütülmesini garanti edebilecek tek taraf oldukları için tamamen doğrulayıcılara ilave edilir. Ancak pratikte, MEV'in büyük bir kısmı "arayıcılar" olarak bilinen bağımsız ağ katılımcıları tarafından çıkarılır. Arayıcılar kârlı MEV fırsatlarını tespit etmek için blok zinciri verisi üzerinde karmaşık algoritmalar çalıştırırlar ve botların otomatik olarak bu karlı işlemleri ağa göndermesini sağlarlar. Doğrulayıcılar tüm MEV miktarının bir kısmını her şekilde alırlar çünkü arayıcılar kârlı işlemlerinin bir bloğa katılımının yüksek ihtimali karşılığında yüksek gaz ücretleri (doğrulayıcılara giden) ödemeye razıdır. Arayıcıların ekonomik olarak rasyonel olduklarını varsayarsak, bir arayıcının ödemeye razı olduğu gaz ücreti, arayıcının MEV'sinin %100'üne kadar bir miktar olacaktır (çünkü gaz ücreti daha yüksek olsaydı, arayıcı para kaybederdi). -Bununla birlikte, [merkeziyetsiz borsa arbitrajı](#mev-examples-dex-arbitrage) gibi oldukça rekabetçi MEV fırsatları için arayıcılar, toplam MEV gelirlerinin %90'ını veya daha fazlasını doğrulayıcıya gaz ücreti olarak ödemek zorundadır, çünkü pek çok insan aynı kârlı arbitraj ticareti yapmak ister. Bunun nedeni, arbitraj işlemlerinin devam etmesini garanti etmenin tek yolunun, işlemi en yüksek gaz fiyatıyla sunmak olmasıdır. +Bununla birlikte, [merkeziyetsiz borsa arbitrajı](#mev-examples-dex-arbitrage) gibi oldukça rekabetçi MEV fırsatları için, arayıcıların toplam MEV gelirlerinin %90'ını veya daha fazlasını doğrulayıcıya gaz ücreti olarak ödemesi gerekebilir, çünkü pek çok kişi aynı kârlı arbitraj ticaretini yapmak istemektedir. Bunun nedeni, arbitraj işlemlerinin devam etmesini garanti etmenin tek yolunun, işlemi en yüksek gaz fiyatıyla sunmak olmasıdır. ### Gaz golfü {#mev-extraction-gas-golfing} Bu dinamik, "gaz golfü"nde iyi olmayı, yani işlemleri en az miktarda gaz kullanacak şekilde programlamayı bir rekabet avantajı hâline getirdi, çünkü bu, arayıcıların toplam gaz ücretlerini sabit tutarken daha yüksek bir gaz fiyatı belirlemesine olanak tanır (gaz ücretleri = gaz fiyatı \* kullanılan gaz). -Birkaç iyi bilinen gazlı golf tekniği: daha az depolama alanı (ve böylece gaz) harcadıkları için uzun bir sıfır dizisiyle başlayan adresler kullanmak (ör. [0x000000000C521824EaFf97Eac7B73B084ef9306](https://etherscan.io/address/0x0000000000c521824eaff97eac7b73b084ef9306)); bir depolama yuvası başlatmak (bakiye 0 olduğunda gerçekleşen durum), bir depolama yuvasını güncellemekten daha fazla gaza mal olduğu için sözleşmelerde ufak bir [ERC-20](/developers/docs/standards/tokens/erc-20/) token bakiyesi bırakmak. Gaz kullanımını azaltmak için daha fazla teknik bulmak, arayıcılar arasında aktif bir araştırma alanıdır. +Birkaç iyi bilinen gaz golfü tekniği şunları içerir: depolamak için daha az yer (ve dolayısıyla gaz) kapladıkları için uzun bir sıfır dizisiyle başlayan adresler kullanmak (ör. [0x0000000000C521824EaFf97Eac7B73B084ef9306](https://eth.blockscout.com/address/0x0000000000C521824EaFf97Eac7B73B084ef9306)); ve bir depolama yuvasını başlatmak (bakiye 0 ise durum budur) bir depolama yuvasını güncellemekten daha fazla gaza mal olduğu için sözleşmelerde küçük [ERC-20](/developers/docs/standards/tokens/erc-20/) jeton bakiyeleri bırakmak. Gaz kullanımını azaltmak için daha fazla teknik bulmak, arayıcılar arasında aktif bir araştırma alanıdır. -### Genelleştirilmiş frontrunnerlar {#mev-extraction-generalized-frontrunners} +### Genelleştirilmiş öncüler {#mev-extraction-generalized-frontrunners} Kârlı MEV fırsatlarını tespit etmek için karmaşık algoritmalar programlamaktansa, bazı arayıcılar genelleştirilmiş öncüler kullanırlar. Genelleştirilmiş öncüler, bellek havuzunu kârlı işlemleri tespit etmek için izleyen botlardır. Öncü, kâr potansiyeli olan işlemin kodunu kopyalar, adresleri öncü adresiyle değiştirir ve değiştirilmiş işlemin öncü adresine kâr olarak döndüğünü iki kez kontrol etmek için işlemi yerel olarak çalıştırır. İşlem gerçekten kârlıysa öncü, değiştirilmiş işlemi değiştirilmiş adresle ve daha yüksek bir gaz ücretiyle gönderecektir, yani orijinal işleme "öncülük" yapacak ve orijinal arayıcının MEV'ini alacaktır. -### Flashbot'lar {#mev-extraction-flashbots} +### Flashbots {#mev-extraction-flashbots} Flashbot'lar, yürütüm istemcilerini arama yapanların MEV işlemlerini genel bellek havuzuna açıklamadan doğrulayıcılara göndermelerine olanak tanıyan bir hizmetle genişleten bağımsız bir projedir. Bu, işlemlere genelleştirilmiş öncüler tarafından öncülük edilmesini önler. @@ -40,23 +40,23 @@ Flashbot'lar, yürütüm istemcilerini arama yapanların MEV işlemlerini genel MEV, blokzincirde birkaç şekilde ortaya çıkar. -### Merkeziyetsiz borsa arbitrajı {#mev-examples-dex-arbitrage} +### DEX arbitrajı {#mev-examples-dex-arbitrage} -[Merkeziyetsiz borsa](/glossary/#dex) (DEX) arbitrajı, en basit ve yaygın MEV fırsatıdır. Bunun sonucu olarak ayrıca en rekabetçi olanıdır. +[Merkeziyetsiz borsa](/glossary/#dex) (DEX) arbitrajı, en basit ve en iyi bilinen MEV fırsatıdır. Bunun sonucu olarak ayrıca en rekabetçi olanıdır. Şu şekilde çalışır: İki merkeziyetsiz borsa bir jetonu iki farklı fiyattan sunuyorsa, biri jetonu düşük fiyatlı merkeziyetsiz borsada satın alabilir ve tek bir atomik işlemde daha yüksek fiyatlı merkeziyetsiz borsada satabilir. Blokzincirin işleme şekli sayesinde bu, gerçek ve risksiz bir arbitrajdır. -[Burada](https://etherscan.io/tx/0x5e1657ef0e9be9bc72efefe59a2528d0d730d478cfc9e6cdd09af9f997bb3ef4) bir araştırmacının Uniswap ve Sushiswap'ta ETH/DAI çiftinin farklı fiyatlandırmasından yararlanarak 1.000 ETH'yi 1.045 ETH'ye çevirdiği kârlı bir arbitraj işlemi örneği verilmiştir. +[İşte](https://eth.blockscout.com/tx/0x5e1657ef0e9be9bc72efefe59a2528d0d730d478cfc9e6cdd09af9f997bb3ef4) bir arayıcının Uniswap ile Sushiswap'taki ETH/DAI çiftinin farklı fiyatlandırmasından yararlanarak 1.000 ETH'yi 1.045 ETH'ye dönüştürdüğü kârlı bir arbitraj işlemi örneği. -### Likidasyonlar {#mev-examples-liquidations} +### Tasfiyeler {#mev-examples-liquidations} Borç protokolü likidasyonları başka bir yaygın MEV fırsatı sunar. -Maker ve Aave gibi borç verme protokolleri, kullanıcıların bir tür teminat (örneğin, ETH) yatırmasını gerektirir. Yatırılan teminat, sonrasında diğer kullanıcılara borç vermek için kullanılır. +Maker ve Aave gibi borç verme protokolleri, kullanıcıların bir miktar teminat (ör. ETH) yatırmasını gerektirir. Yatırılan bu teminat daha sonra diğer kullanıcılara borç vermek için kullanılır. -Kullanıcılar sonrasında diğerlerinden neye ihtiyaç duyduklarına göre (örn. bir MakerDAO yönetişim önerisinde oy vermek için MKR ödünç alabilirsiniz) yatırdıkları teminatın belli bir yüzdeliğine kadar varlık ve jeton ödünç alabilir. Örnek olarak, ödünç miktarı maksimum %30 ise, protokole 100 DAI yatıran bir kullanıcı başka bir varlıktan 30 DAI değerine kadar ödünç alabilir. Tam ödünç gücü yüzdesini protokol belirler. +Kullanıcılar daha sonra ihtiyaçlarına bağlı olarak (örneğin, bir MakerDAO yönetişim teklifinde oy kullanmak istiyorsanız MKR ödünç alabilirsiniz) yatırdıkları teminatın belirli bir yüzdesine kadar başkalarından varlık ve jeton ödünç alabilirler. Örnek olarak, ödünç miktarı maksimum %30 ise, protokole 100 DAI yatıran bir kullanıcı başka bir varlıktan 30 DAI değerine kadar ödünç alabilir. Tam ödünç gücü yüzdesini protokol belirler. -Bir borçlunun teminatı dalgalandıkça, borç alma gücü de azalır. Piyasa dalgalanmaları nedeniyle ödünç alınan varlıkların değeri, teminatlarının değerinin %30'unu aşarsa (yine, kesin yüzde protokol tarafından belirlenir), protokol tipik olarak herkesin teminatı likide etmesine izin vererek borç verenlere anında ödeme yapmasına izin verir (bu, geleneksel finanstaki [teminat çağrılarının](https://www.investopedia.com/terms/m/margincall.asp) işleyişine benzer). Likide edilirse, borçlu genellikle bir kısmı likide eden kişiye giden yüksek bir likidasyon ücreti ödemek zorundadır: MEV fırsatı bu noktada devreye girer. +Bir borçlunun teminatı dalgalandıkça, borç alma gücü de azalır. Piyasa dalgalanmaları nedeniyle, ödünç alınan varlıkların değeri, diyelim ki teminatlarının değerinin %30'unu aşarsa (yine, kesin yüzde protokol tarafından belirlenir), protokol tipik olarak herkesin teminatı tasfiye etmesine ve borç verenlere anında ödeme yapmasına olanak tanır (bu, geleneksel finansta [teminat tamamlama çağrılarının](https://www.investopedia.com/terms/m/margincall.asp) işleyişine benzer). Likide edilirse, borçlu genellikle bir kısmı likide eden kişiye giden yüksek bir likidasyon ücreti ödemek zorundadır: MEV fırsatı bu noktada devreye girer. Arayıcılar, hangi borçluların likide edilebileceğini belirlemek ve bir likidasyon işlemi gönderen ve likidasyon ücretini kendileri için toplayan ilk kişi olmak için blok zinciri verilerini mümkün olduğunca hızlı bir şekilde ayrıştırmak için rekabet eder. @@ -66,37 +66,37 @@ Sandviç ticareti, başka bir yaygın MEV çıkarma yöntemidir. Arayıcı, sandviçlemek için bellek havuzunda büyük DEX ticaretleri arar. Örneğin, birinin Uniswap üzerinde DAI ile 10.000 UNI satın almak istediğini varsayalım. Bu büyüklükteki bir ticaret, UNI/DAI çifti üzerinde anlamlı bir etkiye sahip olacak ve DAI'ye göre UNI'nin fiyatını potansiyel olarak önemli ölçüde artıracaktır. -Bir arayıcı, bu büyük ticaretin UNI/DAI çifti üzerindeki yaklaşık fiyat etkisini hesaplayabilir ve büyük ticaretten hemen _önce_ bir optimal satın alma emri yürüterek UNI'yi ucuza satın alabilir, ardından büyük ticaretten hemen _sonra_ bir satış emri yürüterek, büyük emirin neden olduğu daha yüksek fiyata satar. +Bir arayıcı, bu büyük işlemin UNI/DAI çifti üzerindeki yaklaşık fiyat etkisini hesaplayabilir ve büyük işlemden hemen _önce_ en uygun alış emrini gerçekleştirerek UNI'yi ucuza alabilir, ardından büyük işlemden hemen _sonra_ bir satış emri gerçekleştirerek büyük emrin neden olduğu daha yüksek fiyattan satabilir. -Ancak sandviçleme, atomik olmadığı için daha risklidir (yukarıda açıklandığı gibi DEX arbitrajının aksine) ve bir [salmonella saldırısına](https://github.com/Defi-Cartel/salmonella) açıktır. +Ancak sandviçleme, atomik olmadığı için (yukarıda açıklandığı gibi DEX arbitrajının aksine) daha risklidir ve [salmonella saldırısına](https://github.com/Defi-Cartel/salmonella) açıktır. -### NFT MEV {#mev-examples-nfts} +### NFT MEV'i {#mev-examples-nfts} MEV, NFT dünyası içinde yükselen bir fenomendir ve muhakkak kârlı olmayabilir. Bununla birlikte NFT işlemleri, diğer tüm Ethereum işlemleri tarafından paylaşılan aynı blok zincirinde gerçekleştiğinden, arayıcılar NFT pazarındaki geleneksel MEV fırsatlarında kullanılanlara benzer teknikleri de kullanabilirler. -Örneğin, popüler bir NFT yayınlanacaksa ve bir arayıcı belirli bir NFT veya NFT seti istiyorsa, NFT'yi satın almak için ilk sırada olacak şekilde bir işlemi programlayabilir veya NFT setinin tamamını tek seferde tek işlemde satın alabilir. Veya bir NFT [hatayla düşük bir fiyata listelenirse](https://www.theblockcrypto.com/post/113546/mistake-sees-69000-cryptopunk-sold-for-less-than-a-cent), bir arayıcı diğer alıcıların önüne geçebilir ve onu ucuza kapabilir. +Örneğin, popüler bir NFT yayınlanacaksa ve bir arayıcı belirli bir NFT veya NFT seti istiyorsa, NFT'yi satın almak için ilk sırada olacak şekilde bir işlemi programlayabilir veya NFT setinin tamamını tek seferde tek işlemde satın alabilir. Veya bir NFT [yanlışlıkla düşük bir fiyata listelenirse](https://www.theblockcrypto.com/post/113546/mistake-sees-69000-cryptopunk-sold-for-less-than-a-cent), bir arayıcı diğer alıcıların önüne geçerek (front-run) onu ucuza kapabilir. -Önde gelen bir NFT MEV örneği, bir arayıcı her bir Cryptopunk'u taban fiyatta [satın almak](https://etherscan.io/address/0x650dCdEB6ecF05aE3CAF30A70966E2F395d5E9E5) için 7 milyon $ harcadığında gerçekleşti. Bir blok zinciri araştırmacısı, [Twitter'da](https://twitter.com/IvanBogatyy/status/1422232184493121538) alıcının satın alım işlemini gizlemek için bir MEV sağlayıcısıyla nasıl çalıştığını açıkladı. +NFT MEV'inin öne çıkan bir örneği, bir arayıcının taban fiyattaki her bir Cryptopunk'ı [satın almak](https://eth.blockscout.com/address/0x650dCdEB6ecF05aE3CAF30A70966E2F395d5E9E5?tab=txs) için 7 milyon dolar harcadığında meydana geldi. Bir blokzincir araştırmacısı [Twitter'da](https://twitter.com/IvanBogatyy/status/1422232184493121538) alıcının, satın alma işlemini gizli tutmak için bir MEV sağlayıcısıyla nasıl çalıştığını açıkladı. ### Uzun kuyruk {#mev-examples-long-tail} DEX arbitrajı, likidasyonlar ve sandviç ticareti çok iyi bilinen MEV fırsatlarıdır ve yeni arayıcılar için kârlı olmaları pek olası değildir. Bununla birlikte, daha az bilinen MEV fırsatlarından oluşan uzun bir kuyruk bulunur (NFT MEV'in böyle bir fırsat olduğu söylenebilir). -Yeni başlayan arayıcılar, bu uzun kuyrukta MEV'i arayarak daha fazla başarıya erişebilirler. Flashbotların [MEV iş ilanları](https://github.com/flashbots/mev-job-board), bazı yükselen fırsatları listeler. +Yeni başlayan arayıcılar, bu uzun kuyrukta MEV'i arayarak daha fazla başarıya erişebilirler. Flashbot'un [MEV iş ilanı panosu](https://github.com/flashbots/mev-job-board) ortaya çıkan bazı fırsatları listeler. -## MEV'nin etkileri {#effects-of-mev} +## MEV'in etkileri {#effects-of-mev} MEV tamamen kötü değildir: Ethereum üzerinde MEV'in iyi ve kötü sonuçları bulunmaktadır. -### İyi {#effects-of-mev-the-good} +### İyi yönleri {#effects-of-mev-the-good} Birçok DeFi projesi, protokollerinin kullanışlılığını ve istikrarını sağlamak için ekonomik olarak rasyonel aktörlere güvenir. Örneğin DEX arbitrajı, kullanıcıların token'ları için en iyi, en doğru fiyatları almalarını sağlar ve borç verme protokolleri, borç verenlere ödeme yapılmasını sağlamak için borç alanlar teminatlandırma oranlarının altına düştüğünde hızlı likidasyonlara dayanır. Ekonomik verimsizlikleri araştıran ve düzelten ve protokollerin ekonomik teşviklerinden yararlanan rasyonel arayıcılar olmadan, DeFi protokolleri ve genel olarak dapp'ler bugün olduğu kadar sağlam olmayabilirdi. -### Kötü {#effects-of-mev-the-bad} +### Kötü yönleri {#effects-of-mev-the-bad} Uygulama katmanında, sandviç ticareti gibi bazı MEV biçimleri kullanıcılar için kesinlikle daha kötü bir deneyime neden olur. Sandviçlenen kullanıcılar yüksek düşüş ve ticaretlerinde daha kötü yürütme ile karşı karşıya kalırlar. @@ -104,51 +104,51 @@ Ağ katmanında, genelleştirilmiş öncüler ve sıklıkla katıldıkları gaz Bloklar _içinde_ gerçekleşenlerin ötesinde MEV, bloklar _arası_ zararlı etkilere sahip olabilir. Bir blokta mevcut olan MEV, standart blok ödülünü önemli ölçüde aşarsa, doğrulayıcılar blokları yeniden düzenlemeye ve MEV'yi kendi adlarına yakalamaya teşvik edilebilir, bu da blok zincirinin yeniden düzenlenmesine ve mutabakat kararsızlığına neden olabilir. -Blok zincirinin yeniden düzenlenmesine yönelik bu ihtimal [geçmişte Bitcoin blok zincirinde incelenmiştir](https://dl.acm.org/doi/10.1145/2976749.2978408). Bitcoin'in blok ödülü yarıları ve işlem ücretleri, blok ödülünün gitgide daha büyük bir bölümünü oluşturduğundan madencilerin bir sonraki bloğun ödülünden vazgeçmesinin ve bunun yerine geçmiş blokları daha yüksek ücretlerle yeniden kazmasının ekonomik olarak rasyonel hâle geldiği durumlar ortaya çıkıyor. MEV'nin büyümesiyle Ethereum'da benzer bir durum meydana gelebilir ve blok zincirinin bütünlüğü tehlikeye girebilir. +Blokzincirin yeniden düzenlenmesi olasılığı [daha önce Bitcoin blokzincirinde araştırılmıştır](https://dl.acm.org/doi/10.1145/2976749.2978408). Bitcoin'in blok ödülü yarıları ve işlem ücretleri, blok ödülünün gitgide daha büyük bir bölümünü oluşturduğundan madencilerin bir sonraki bloğun ödülünden vazgeçmesinin ve bunun yerine geçmiş blokları daha yüksek ücretlerle yeniden kazmasının ekonomik olarak rasyonel hâle geldiği durumlar ortaya çıkıyor. MEV'nin büyümesiyle Ethereum'da benzer bir durum meydana gelebilir ve blok zincirinin bütünlüğü tehlikeye girebilir. -## MEV'nin Durumu {#state-of-mev} +## MEV'in durumu {#state-of-mev} -MEV çıkarımı 2021'in başlarında balonlanarak yılın ilk birkaç ayında son derece yüksek gaz fiyatlarına neden oldu. Flashbotların MEV rölesinin ortaya çıkması, genelleştirilmiş öncülerin etkinliğini azalttı ve gaz fiyatı açık artırmalarını zincirden çıkararak sıradan kullanıcılar için gaz fiyatlarını düşürdü. +MEV çıkarımı 2021'in başlarında balonlanarak yılın ilk birkaç ayında son derece yüksek gaz fiyatlarına neden oldu. Flashbots'un MEV rölesinin ortaya çıkması, genelleştirilmiş öncülerin etkinliğini azaltmış ve gaz fiyatı açık artırmalarını zincir dışına taşıyarak sıradan kullanıcılar için gaz fiyatlarını düşürmüştür. Birçok araştırmacı MEV'den hala iyi para kazanırken, fırsatlar daha iyi bilinir hale geldikçe ve daha fazla araştırmacı aynı fırsat için rekabet ettikçe, madenciler/doğrulayıcılar giderek daha fazla toplam MEV geliri elde edecektir (çünkü başlangıçta yukarıda açıklananla aynı tür gaz açık artırmaları, özel olarak da olsa Flashbot'larda da gerçekleşir ve doğrulayıcılar ortaya çıkan gaz gelirini yakalar). MEV ayrıca Ethereum'a özgü değildir ve fırsatlar Ethereum'da daha rekabetçi hâle geldikçe arayıcılar, Ethereum'dakilere benzer MEV fırsatlarının daha az rekabetle mevcut olduğu Binance Smart Chain gibi alternatif blok zincirlerine yöneliyorlar. -Öte yandan, iş ispatından hisse ispatına geçiş ve Ethereum'u toplamaları kullanarak ölçeklendirmeye yönelik süregelen çabalar, MEV görünümünü halen belirgin olmayan şekillerde değiştirmektedir. Garantili blok önericilerinin kısa bir süre önceden bilinmesinin, iş ispatındaki olasılıksal model ile karşılaştırılğında MEV çıkarma dinamiklerini nasıl etkileyeceği veya [tek gizli lider seçimi](https://ethresear.ch/t/secret-non-single-leader-election/11789) ve [dağıtılmış doğrulayıcı teknolojisi](/staking/dvt/) uygulandığında bunun nasıl bozulacağı henüz çok iyi bilinmemektedir. Benzer şekilde, hangi MEV fırsatlarının var olduğu, çoğu kullanıcı etkinliği Ethereum'dan uzağa ve katman 2 toplama ve parçalamalarına taşındığında görülecektir. +Öte yandan, iş ispatından hisse ispatına geçiş ve Ethereum'u toplamaları kullanarak ölçeklendirmeye yönelik süregelen çabalar, MEV görünümünü halen belirgin olmayan şekillerde değiştirmektedir. Garantili blok önericilerinin biraz önceden bilinmesinin, iş ispatındaki olasılıksal modele kıyasla MEV çıkarımının dinamiklerini nasıl değiştirdiği veya [tek gizli lider seçimi](https://ethresear.ch/t/secret-non-single-leader-election/11789) ve [dağıtılmış doğrulayıcı teknolojisi](/staking/dvt/) uygulandığında bunun nasıl kesintiye uğrayacağı henüz tam olarak bilinmemektedir. Benzer şekilde, hangi MEV fırsatlarının var olduğu, çoğu kullanıcı etkinliği Ethereum'dan uzağa ve katman 2 toplama ve parçalamalarına taşındığında görülecektir. -## Ethereum Hisse İspatında (PoS) MEV {#mev-in-ethereum-proof-of-stake} +## Ethereum Hisse İspatı (PoS) Sisteminde MEV {#mev-in-ethereum-proof-of-stake} Açıklandığı gibi, MEV genel kullanıcı deneyimi ve mutabakat katmanı güvenliği üzerinde negatif etkilere sahiptir. Ancak Ethereum'un bir hisse ispatı mutabakatına geçişi ("Birleşim"), MEV ile ilgili yeni riskler ortaya çıkarabilir: ### Doğrulayıcı merkezileşmesi {#validator-centralization} -Birleşim sonrası Ethereum'da, doğrulayıcılar (32 ETH'lik teminat yatırımları yapan) İşaret Zinciri'ne eklenen blokların doğruluğu hakkında mutabakata varır. 32 ETH çoğu kişinin erişebileceği bir şey olmadığı için [bir paydaşlık havuzuna katılmak](/staking/pools/) daha makul bir seçenek olabilir. Buna rağmen, [tekil paydaş](/staking/solo/)ların sağlıklı dağılımı idealdir, çünkü doğrulayıcıların merkezileşmesini hafifletir ve Ethereum'un güvenliğini geliştirir. +Birleşim sonrası Ethereum'da, doğrulayıcılar (32 ETH'lik teminat yatırımları yapan) İşaret Zinciri'ne eklenen blokların doğruluğu hakkında mutabakata varır. 32 ETH birçok kişinin ulaşamayacağı bir miktar olabileceğinden, [bir hisseleme havuzuna katılmak](/staking/pools/) daha uygun bir seçenek olabilir. Bununla birlikte, [tek başına stake edenlerin](/staking/solo/) sağlıklı bir dağılımı idealdir, çünkü bu doğrulayıcıların merkezileşmesini azaltır ve Ethereum'un güvenliğini artırır. -Ancak, MEV çıkarımının doğrulayıcı merkezileşmesini hızlandırabilme kabiliyetine sahip olduğuna inanılmaktadır. Bunun nedeni kısmen şudur; doğrulayıcılar [blok önerdiklerinde madencilerin önceki kazandığından daha az kazanacakları](/roadmap/merge/issuance/#how-the-merge-impacts-ETH-supply) için MEV çıkarımı, Birleşim'den bu yana[ doğrulayıcı kazançlarını büyük ölçüde etkiler](https://github.com/flashbots/eth2-research/blob/main/notebooks/mev-in-eth2/eth2-mev-calc.ipynb). +Ancak, MEV çıkarımının doğrulayıcı merkezileşmesini hızlandırabilme kabiliyetine sahip olduğuna inanılmaktadır. Bunun nedeni kısmen, doğrulayıcıların [blok önermek için](/roadmap/merge/issuance/#how-the-merge-impacts-ETH-supply) madencilerden daha az kazanç elde etmesi ve [The Merge](/roadmap/merge/) sonrasında MEV çıkarımının [doğrulayıcı kazançlarını](https://github.com/flashbots/eth2-research/blob/main/notebooks/mev-in-eth2/eth2-mev-calc.ipynb) büyük ölçüde etkilemesidir. -Daha büyük paydaşlık havuzları muhtemelen MEV fırsatlarını yakalamak için gerekli optimizasyonlara yatırım yapmak adına daha çok kaynağa sahip olacaktır. Bu havuzların çıkardığı MEV arttıkça, MEV çıkarım kabiliyetlerini geliştirmeleri (ve genel kazancı artırmak) için daha çok kaynağa sahip olacaklar ve sonucunda [ölçek ekonomileri](https://www.investopedia.com/terms/e/economiesofscale.asp#) ortaya çıkacaktır. +Daha büyük paydaşlık havuzları muhtemelen MEV fırsatlarını yakalamak için gerekli optimizasyonlara yatırım yapmak adına daha çok kaynağa sahip olacaktır. Bu havuzlar ne kadar çok MEV çıkarırsa, MEV çıkarma yeteneklerini geliştirmek (ve genel geliri artırmak) için o kadar çok kaynağa sahip olurlar ve bu da esasen [ölçek ekonomileri](https://www.investopedia.com/terms/e/economiesofscale.asp#) yaratır. Kullanım için daha az kaynak olduğunda, tekil paydaşlar MEV fırsatlarından kâr elde edemeyebilir. Bu, bağımsız doğrulayıcıların kazançlarını artırmak için güçlü paydaş havuzlarına katılmasına yönelik baskıyı artırarak Ethereum'da merkeziyetsizliği düşürebilir. -### Yetkilendirilmiş bellek havuzları {#permissioned-mempools} +### İzinli bellek havuzları {#permissioned-mempools} -Sandviç ve genelleştirilmiş öncü (frontrunner) saldırılarına karşılık olarak tacirler, işlem gizliliği için doğrulayıcılarla zincir dışında anlaşmalar yapmaya başlayabilir. Tacirler, potansiyel MEV işlemlerini bellek havuzuna göndermek yerine, işlemleri ddoğrudan bunları bloklara işleyen doğrulayıcılara gönderir ve kar paylaşılır. +Sandviç ve önden koşma saldırılarına yanıt olarak, yatırımcılar işlem gizliliği için doğrulayıcılarla zincir dışı anlaşmalar yapmaya başlayabilirler. Tacirler, potansiyel MEV işlemlerini bellek havuzuna göndermek yerine, işlemleri ddoğrudan bunları bloklara işleyen doğrulayıcılara gönderir ve kar paylaşılır. "Karanlık havuzlar" bu anlaşmanın daha büyük versiyonlarıdır ve bunlar belirli ücretler ödemek isteyen kullanıcılara açık, yetkilendirilmiş, yalnızca erişimi olanlara açık bellek havuzları olarak çalışırlar. Bu trend, Ethereum'un izin ve güven gerektirmezliğini azaltır ve potansiyel olarak blokzinciri en yüksek teklif vereni ödüllendirecek bir "kazanmak-için-öde" mekanizmasına dönüştürür. İzin gerektiren bellek havuzları, yukarıda bahsedilen merkezileşme risklerini de arttıracaktır. Birden çok doğrulayıcı çalıştıran büyük havuzlar, tacirlere ve kullanıcılara işlem gizliliği sunmaktan büyük olasılıkla kazanç sağlayacak ve MEV gelirlerini artıracaktır. -Birleşim sonrası Ethereum'da MEV ile ilgili bu problemlerle mücadele etmek, temel bir araştırma alanıdır. Bugüne kadar, MEV'nin Ethereum'un merkeziyetsizliği ve Birleşim sonrasında güvenliği üzerindeki olumsuz etkisini azaltmak için önerilen iki çözüm, **Önerici - İnşacı Ayrımı (PBS)** ve **İnşacı API**'dir. +Birleşim sonrası Ethereum'da MEV ile ilgili bu problemlerle mücadele etmek, temel bir araştırma alanıdır. Bugüne kadar, MEV'nin Ethereum'un merkezsizleşmesi ve The Merge'den sonraki güvenliği üzerindeki olumsuz etkisini azaltmak için önerilen iki çözüm [**Önerici-İnşacı Ayrımı (PBS)**](/roadmap/pbs/) ve [**İnşacı API**](https://github.com/ethereum/builder-specs)'dir. -### Teklifi Yapan-Oluşturucu Ayrımı {#proposer-builder-separation} +### Önerici-İnşacı Ayrımı {#proposer-builder-separation} Hem iş ispatı hem de hisse ispatında bir blok inşa eden düğüm, onu zincire eklenmesi için mutabakata katılan diğer düğümlere önerir. Yeni bir blok başka bir madenci onun üzerine inşa ettiğinde (PoW'da) veya doğrulayıcıların çoğunluğundan tasdik aldığında (PoS'ta) kanonik zincirin parçası olur. -Blok üreticisi ve blok önericisinin rollerinin kombinasyonu, önceden açıklanmış olan MEV ile ilgili sorunların çoğunu ortaya çıkaran şeydir. Örnek olarak mutabakat düğümleri, MEV kazançlarını en üst seviyeye çıkartmak amaçlı zaman hırsızı saldırılarında zincir yeniden düzenlemelerini tetiklemek için teşvik edilir. +Blok üreticisi ve blok önericisinin rollerinin kombinasyonu, önceden açıklanmış olan MEV ile ilgili sorunların çoğunu ortaya çıkaran şeydir. Örneğin, mutabakat düğümleri, MEV kazançlarını en üst düzeye çıkarmak için [zaman haydutu saldırılarında](https://www.mev.wiki/attack-examples/time-bandit-attack) zincir yeniden düzenlemelerini tetiklemeye teşvik edilir. -[Önerici-inşacı ayrımı](https://ethresear.ch/t/proposer-block-builder-separation-friendly-fee-market-designs/9725) (PBS) MEV'nin özellikle fikir birliği katmanındaki etkisini azaltmak için tasarlanmıştır. PBS'nin ana özelliği, blok üreticisi ile blok önericisi kurallarının ayrımıdır. Doğrulayıcılar yine bloklar önermekten ve oylamaktan sorumludur ancak **blok inşacıları** denilen yeni uzman bir varlık sınıfı işlemleri sıralamak ve bloklar inşa etmekle görevlendirilmiştir. +[Önerici-inşacı ayrımı](https://ethresear.ch/t/proposer-block-builder-separation-friendly-fee-market-designs/9725) (PBS), özellikle mutabakat katmanında MEV'in etkisini azaltmak için tasarlanmıştır. PBS'nin ana özelliği, blok üreticisi ile blok önericisi kurallarının ayrımıdır. Doğrulayıcılar hâlâ blok önermekten ve oylamaktan sorumludur, ancak **blok inşacıları** adı verilen yeni bir uzman kuruluş sınıfı, işlemleri sıralamak ve bloklar oluşturmakla görevlidir. Bir blok inşacısı, PBS altında bir işlem kümesi oluşturur ve bu kümenin bir İşaret Zinciri bloğuna dahil edilmesi için bir teklif sunar ("yürütme yükü" olarak). Sıradaki bloğu önermek için seçilen doğrulayıcı sonrasında farklı teklifleri inceler ve en yüksek ücretli kümeyi seçer. PBS temelde inşacıların blok alanı satan doğrulayıcılar ile pazarlık edeceği bir ihale piyasası oluşturur. -Mevcut PBS tasarımları, inşacıların bir bloğun içeriğine (blok başlığı) teklifleri ile beraber kriptografik bir taahhüt paylaştığı bir [taahhüt etme-açığa çıkarma](https://gitcoin.co/blog/commit-reveal-scheme-on-ethereum/) şeması kullanır. Kazanan teklifi kabul ettikten sonra, önerici blok başlığını kapsayan imzalı bir blok önerisi oluşturur. Blok inşacısının imzalı blok önerisini gördükten sonra tam blok gövdesini paylaşması beklenir ve ayrıca kesinleştirilmeden önce doğrulayıcılardan yeterli sayıda [tasdik](/glossary/#attestation) alması gerekir. +Mevcut PBS tasarımları, inşacıların teklifleriyle birlikte bir bloğun içeriğine (blok başlığı) yalnızca kriptografik bir taahhüt yayınladığı bir [taahhüt-açığa çıkarma şeması](https://gitcoin.co/blog/commit-reveal-scheme-on-ethereum/) kullanır. Kazanan teklifi kabul ettikten sonra, önerici blok başlığını kapsayan imzalı bir blok önerisi oluşturur. Blok inşacısının imzalı blok önerisini gördükten sonra tam blok gövdesini yayınlaması beklenir ve ayrıca kesinleşmeden önce doğrulayıcılardan yeterli sayıda [onay](/glossary/#attestation) alması gerekir. #### Önerici-inşacı ayrımı MEV'nin etkisini nasıl hafifletir? {#how-does-pbs-curb-mev-impact} @@ -156,15 +156,15 @@ Protokol içi önerici-inşacı ayrımı, MEV çıkarımını doğrulayıcılar Ancak bu, inşacılar bloklarının doğrulayıcılar tarafından kabul edilmesi için yüksek teklifler vermek zorunda olduğundan doğrulayıcıları MEV ile ilgili gelirlerin tamamen dışında bırakmaz. Buna rağmen, doğrulayıcılar artık doğrudan MEV getirisini optimize etmeye odaklı olmayacağı için zaman hırsızı saldırılarının tehdit düzeyi azalır. -Önerici-inşacı ayrımı ayrıca MEV'nin merkezileşme risklerini de azaltır. Örnek olarak, bir taahhüt etme-açığa çıkarma şemasının kullanımı, inşacıların doğrulayıcılara MEV fırsatını çalmamaları veya diğer inşacılara ifşa etmemeleri için güvenmesi gerekliliğini ortadan kaldırır. Bu, tekil paydaşların MEV'den fayda sağlaması önündeki engeli küçültür; aksi takdirde, inşacılar zincir dışında itibarı olan büyük havuzları tercih etmeye ve onlarla zincir dışı anlaşmalar gerçekleştirmeye yönelirdi. +Önerici-inşacı ayrımı ayrıca MEV'nin merkezileşme risklerini de azaltır. Örnek olarak, bir taahhüt etme-açığa çıkarma şemasının kullanımı, inşacıların doğrulayıcılara MEV fırsatını çalmamaları veya diğer inşacılara ifşa etmemeleri için güvenmesi gerekliliğini ortadan kaldırır. Bu, tek başına stake edenlerin MEV'den faydalanmasının önündeki engeli azaltır, aksi takdirde, inşacılar zincir dışı itibara sahip büyük havuzları tercih etme ve onlarla zincir dışı anlaşmalar yapma eğiliminde olurlardı. Benzer şekilde, ödeme koşulsuz olduğu için doğrulayıcıların da inşacılara blok gövdelerini tutmamaları veya geçersiz bloklar yayımlamamaları için güvenmeye ihtiyaçları yoktur. Önerilen blok kullanılabilir olmasa veya diğer doğrulayıcılar tarafından geçersiz sayılsa bile doğrulayıcının ücreti işlenir. İkinci durumda, blok atılarak blok inşacısının tüm işlem ücretlerini ve MEV getirisini kaybetmesine yol açar. -### Builder API'si {#builder-api} +### İnşacı API'si {#builder-api} -Önerici-inşacı ayrımı MEV'nin etkilerini azaltmayı vaat etse de, bunu uygulamak için mutabakat protokolünün değişmesi gerekir. Özellikle İşaret Zinciri'ndeki [çatallanma seçimi](/developers/docs/consensus-mechanisms/pos/#fork-choice) kuralının güncellenmesi gerekecektir. [İnşacı API](https://github.com/ethereum/builder-specs), daha yüksek güven varsayımlarıyla da olsa önerici-inşacı ayrımına çalışan bir uygulama sunmayı amaçlayan geçici bir çözümdür. +Önerici-inşacı ayrımı MEV'nin etkilerini azaltmayı vaat etse de, bunu uygulamak için mutabakat protokolünün değişmesi gerekir. Spesifik olarak, İşaret Zinciri'ndeki [çatal seçimi](/developers/docs/consensus-mechanisms/pos/#fork-choice) kuralının güncellenmesi gerekir. [İnşacı API'si](https://github.com/ethereum/builder-specs), daha yüksek güven varsayımları olsa da, önerici-inşacı ayrımının çalışan bir uygulamasını sağlamayı amaçlayan geçici bir çözümdür. -İnşacı API, fikir birliği katmanı istemcileri tarafından yürütüm katmanı istemcilerinden yürütme yüklerini istemek amacıyla kullanılan [Motor API](https://github.com/ethereum/execution-apis/blob/main/src/engine/common.md)'nin geliştirilmiş bir versiyonudur. [Dürüst doğrulayıcı spesifikasyonunda](https://github.com/ethereum/consensus-specs/blob/dev/specs/bellatrix/validator.md) özetlendiği gibi, blok önerme görevleri için seçilen doğrulayıcılar, bağlı bir yürütüm istemcisinden önerilen İşaret Zinciri bloğuna ekledikleri bir işlem paketi talep eder. +İnşacı API'si, mutabakat katmanı istemcileri tarafından yürütme katmanı istemcilerinden yürütme yüklerini istemek için kullanılan [Motor API'sinin](https://github.com/ethereum/execution-apis/blob/main/src/engine/common.md) değiştirilmiş bir sürümüdür. [Dürüst doğrulayıcı spesifikasyonunda](https://github.com/ethereum/consensus-specs/blob/dev/specs/bellatrix/validator.md) belirtildiği gibi, blok önerme görevleri için seçilen doğrulayıcılar, bağlı bir yürütme istemcisinden, önerilen İşaret Zinciri bloğuna dahil ettikleri bir işlem paketi talep ederler. İnşacı API, ayrıca doğrulayıcılar ile yürütme katmanı istemcileri arasında bir ara yazılım görevi görür; ancak İşaret Zinciri'ndeki doğrulayıcıların blokları harici varlık almalarına izin verdiği için farklıdır (bir yürütüm istemcisi kullanarak yerel olarak blok oluşturmak yerine). @@ -178,13 +178,14 @@ Benzer şekilde, ödeme koşulsuz olduğu için doğrulayıcıların da inşacı 4. İnşacı API çalıştıran inşacının kör blok önerisini gördüğünde tam yürütme yükü ile cevap vermesi beklenir. Bu, doğrulayıcının ağa yayımlayacağı "imzalı" bir İşaret bloğu oluşturmasını sağlar. -5. İnşacı API kullanan bir doğrulayıcının, blok önerisi ödüllerini kaçırmamak adına blok oluşturucunun hemen yanıt vermemesi durumunda yerel olarak bir blok oluşturması beklenir. Fakat doğrulayıcı, o anda açığa çıkarılan işlemleri veya başka bir kümeyi kullanarak yeni blok oluşturamaz. Çünkü bu durumda, kesme ile cezalandırabilecek bir suç olan _yanıltmaca_ (aynı yuva içinde iki bloğu imzalama) gerçekleşir. +5. İnşacı API kullanan bir doğrulayıcının, blok önerisi ödüllerini kaçırmamak adına blok oluşturucunun hemen yanıt vermemesi durumunda yerel olarak bir blok oluşturması beklenir. Ancak doğrulayıcı, o anda açığa çıkarılan işlemleri veya başka bir seti kullanarak yeni bir blok oluşturamaz çünkü bu, kesme (slashing) ile cezalandırılabilen bir suç olan _yanıltmaca_ (aynı yuvada iki bloğu imzalama) anlamına gelir. -İnşacı API uygulamasının bir örneği, MEV'nin Ethereum üzerindeki olumsuz dışsallıklarını azaltmak için tasarlanan [Flashbotlar açık arttırma mekanizması](https://docs.flashbots.net/Flashbots-auction/overview/) olan [MEV Boost](https://github.com/flashbots/mev-boost)'tur. Flashbot'lar açık artırması, hisse ispatındaki doğrulayıcıların kâr eden bloklar oluşturma işini **araştırmacılar** olarak adlandıran uzmanlaşmış taraflara yaptırabilmesini sağlar. +İnşacı API'sinin bir örnek uygulaması, MEV'nin Ethereum üzerindeki olumsuz dışsallıklarını engellemek için tasarlanmış [Flashbots açık artırma mekanizmasında](https://docs.flashbots.net/Flashbots-auction/overview) bir geliştirme olan [MEV Boost](https://github.com/flashbots/mev-boost)'tur. Flashbots açık artırması, hisse ispatındaki doğrulayıcıların kârlı bloklar oluşturma işini **arayıcılar** adı verilen uzman taraflara yaptırmasına olanak tanır. +![MEV akışını ayrıntılı olarak gösteren bir şema](./mev.png) -Araştırmacılar, kazançlı MEV fırsatları arar ve blok önericilere bloğa dahil edilmek üzere işlem paketlerini [kapalı fiyat teklifi](https://en.wikipedia.org/wiki/First-price_sealed-bid_auction) ile birlikte gönderir. Go-ethereum (Geth) istemcisinin çatallı bir versiyonu olan mev-geth'i çalıştıran doğrulayıcının tek yapması gereken, en fazla kârı sağlayan paketi seçmek ve yeni bloğun bir parçası olacak şekilde eklemektir. Blok önericilerini (doğrulayıcıları) istenmeyen mesaj ve geçersiz işlemlerden korumak için işlem paketleri önericiye ulaşmadan önce doğrulama için **aktarıcılardan** geçer. +Arayıcılar kazançlı MEV fırsatlarını arar ve bloğa dahil edilmesi için [kapalı fiyat teklifi](https://en.wikipedia.org/wiki/First-price_sealed-bid_auction) ile birlikte blok önerenlere işlem paketleri gönderir. Go-ethereum (Geth) istemcisinin çatallı bir versiyonu olan mev-geth'i çalıştıran doğrulayıcının tek yapması gereken, en fazla kârı sağlayan paketi seçmek ve yeni bloğun bir parçası olacak şekilde eklemektir. Blok önerenlerini (doğrulayıcıları) spam ve geçersiz işlemlerden korumak için, işlem paketleri önerene ulaşmadan önce doğrulama için **aktarıcılardan** geçer. -MEV Boost, Ethereum'un hisse ispatına geçişi için tasarlanmış yeni özellikleri olsa da, başlangıçtaki Flashbotlar açık artırmasıyla aynı işleyişi korur. Araştırmacılar hala bloklara eklemek üzere kazançlı MEV işlemleri bulmaktadır. Ancak **inşacılar** olarak adlandırılan yeni bir grup, işlemleri ve paketleri bloklara yerleştirmekten sorumludur. İnşacılar araştırmacıların kapalı fiyat tekliflerini kabul eder ve en kazançlı sıralamayı bulmak için optimizasyon yapar. +MEV Boost, Ethereum'un hisse ispatına geçişi için tasarlanmış yeni özellikleri olsa da, başlangıçtaki Flashbotlar açık artırmasıyla aynı işleyişi korur. Arayıcılar hâlâ bloklara dahil etmek için kârlı MEV işlemleri bulur, ancak **inşacılar** adı verilen yeni bir uzman taraf sınıfı, işlemleri ve paketleri bloklar halinde bir araya getirmekten sorumludur. İnşacılar araştırmacıların kapalı fiyat tekliflerini kabul eder ve en kazançlı sıralamayı bulmak için optimizasyon yapar. Aktarıcı, işlem paketlerini önericiye aktarmadan önce onaylamaktan hala sorumludur. Ancak MEV Boost, inşacılar tarafından gönderilen blok gövdelerini ve doğrulayıcılar tarafından gönderilen blok başlıklarını depolayarak [veri kullanılabilirliği](/developers/docs/data-availability/) sağlamaktan sorumlu **emanetler** sunar. Burada bir aktarıcıya bağlı bir doğrulayıcı, kullanılabilir yürütme yüklerini ister ve en yüksek teklifi + MEV ipuçlarını içeren yük başlığını seçmek için MEV Boost'un sıralama algoritmasını kullanır. @@ -202,19 +203,19 @@ MEV Boost gibi bazı projeler, genelleştirilmiş öncü/sandviç saldırıları ## İlgili kaynaklar {#related-resources} -- [Flashbot belgeleri](https://docs.flashbots.net/) -- [Flashbotlar GitHub](https://github.com/flashbots/pm) -- [mevboost.org](https://www.mevboost.org/)-_ MEV-Boost röle ve blok inşacıları için gerçek zamanlı istatistiklere sahip izleyici_ +- [Flashbots belgeleri](https://docs.flashbots.net/) +- [Flashbots GitHub](https://github.com/flashbots/pm) +- [mevboost.org](https://www.mevboost.org/) - _MEV-Boost röleleri ve blok inşacıları için gerçek zamanlı istatistiklere sahip izleyici_ -## Daha fazla bilgi {#further-reading} +## Daha fazla kaynak {#further-reading} -- [Madenci Çıkarılabilirlik Değeri (MEV) nedir?](https://blog.chain.link/what-is-miner-extractable-value-mev/) +- [Madenci Tarafından Çıkarılabilir Değer (MEV) Nedir?](https://blog.chain.link/what-is-miner-extractable-value-mev/) - [MEV ve Ben](https://www.paradigm.xyz/2021/02/mev-and-me) -- [Ethereum Karanlık bir Ormandır](https://www.paradigm.xyz/2020/08/ethereum-is-a-dark-forest/) +- [Ethereum Karanlık Bir Ormandır](https://www.paradigm.xyz/2020/08/ethereum-is-a-dark-forest/) - [Karanlık Ormandan Kaçış](https://samczsun.com/escaping-the-dark-forest/) -- [Flashbotlar: MEV Krizine Öncülük Etmek](https://medium.com/flashbots/frontrunning-the-mev-crisis-40629a613752) -- [@bertcmiller'ın MEV Yazıları](https://twitter.com/bertcmiller/status/1402665992422047747) -- [MEV-Boost: Birleşime hazır Flashbot'lar Mimarisi](https://ethresear.ch/t/mev-boost-merge-ready-flashbots-architecture/11177) -- [MEV-Boost nedir?](https://www.alchemy.com/overviews/mev-boost) -- [MEV-Boost neden çalıştırılmalı?](https://writings.flashbots.net/writings/why-run-mevboost/) -- [Otostopçunun Ethereum El Kitabı](https://members.delphidigital.io/reports/the-hitchhikers-guide-to-ethereum) +- [Flashbots: MEV Krizinin Önüne Geçmek](https://medium.com/flashbots/frontrunning-the-mev-crisis-40629a613752) +- [@bertcmiller'in MEV Başlıkları](https://twitter.com/bertcmiller/status/1402665992422047747) +- [MEV-Boost: Birleşime Hazır Flashbots Mimarisi](https://ethresear.ch/t/mev-boost-merge-ready-flashbots-architecture/11177) +- [MEV Boost Nedir](https://www.alchemy.com/overviews/mev-boost) +- [Neden mev-boost çalıştırmalısınız?](https://writings.flashbots.net/writings/why-run-mevboost/) +- [Otostopçunun Ethereum Rehberi](https://members.delphidigital.io/reports/the-hitchhikers-guide-to-ethereum) diff --git a/public/content/translations/tr/developers/docs/networking-layer/index.md b/public/content/translations/tr/developers/docs/networking-layer/index.md index 902688e185c..f3d9634e013 100644 --- a/public/content/translations/tr/developers/docs/networking-layer/index.md +++ b/public/content/translations/tr/developers/docs/networking-layer/index.md @@ -1,6 +1,6 @@ --- -title: Ağ katmanı -description: Ethereum ağ katmanına giriş. +title: "Ağ katmanı" +description: "Ethereum ağ katmanına giriş." lang: tr sidebarDepth: 2 --- @@ -11,11 +11,11 @@ Ethereum, standart protokoller kullanarak birbirleriyle iletişim kurabilmesi ge Yürütüm istemcileri, yürütüm katmanı eşler arası ağı üzerinden işlemleri yayarlar. Bu, kimliği doğrulanmış eşler arasında şifrelenmiş iletişimi gerektirir. Blok önermek için bir doğrulayıcı seçildiğinde düğümün yerel işlem havuzundan geçen işlemler, İşaret blokları şeklinde paketlenerek RPC bağlantısı aracılığı ile fikir birliği istemcilerine iletilir. Bunun ardından, fikir birliği istemcileri eşler arası ağlarında İşaret bloklarını yayar. Bu, biri işlemin yayılması için yürütüm istemcilerine, diğeri ise bloğun yayılması için fikir birliği istemcilerine bağlanan iki farklı p2p ağı gerektirir. -## Ön koşullar {#prerequisites} +## Ön Koşullar {#prerequisites} -Ethereum [düğümleri ve istemcileri](/developers/docs/nodes-and-clients/) hakkında biraz bilgi edinmeniz, bu sayfayı anlamanıza yardımcı olacaktır. +Bu sayfayı anlamak için Ethereum [düğümleri ve istemcileri](/developers/docs/nodes-and-clients/) hakkında biraz bilgi sahibi olmanız faydalı olacaktır. -## Yürütüm katmanı {#execution-layer} +## Yürütme Katmanı {#execution-layer} Yürütme katmanının ağ protokolleri iki yığına bölünmüştür: @@ -27,25 +27,25 @@ Her iki yığın paralel çalışır. Keşif yığını, yeni ağ katılımcıla ### Keşif {#discovery} -Keşif, ağdaki diğer düğümleri bulma işlemidir. Bu, küçük bir dizi önyükleme düğümü, anında bulunabilmeleri ve istemciyi eşlere bağlayabilmeleri için (adresleri [sabit kodlanmış](https://github.com/ethereum/go-ethereum/blob/master/params/bootnodes.go) olan düğümler kullanılarak önyüklenir). Bu önyükleme düğümleri yalnızca bir dizi eşe, yeni bir düğüm tanıtmak için var olur - bu onların tek amacıdır, zinciri senkronize etmek gibi normal istemci görevlerine katılmazlar ve yalnızca bir istemci ilk kez çalıştırıldığında kullanılırlar. +Keşif, ağdaki diğer düğümleri bulma işlemidir. Bu, istemciye adresleri [sabit kodlanmış](https://github.com/ethereum/go-ethereum/blob/master/params/bootnodes.go) olan, bu sayede hemen bulunabilen ve istemciyi eşlere bağlayabilen küçük bir önyükleme düğümü (bootnode) seti kullanılarak başlatılır. Bu önyükleme düğümleri yalnızca bir dizi eşe, yeni bir düğüm tanıtmak için var olur - bu onların tek amacıdır, zinciri senkronize etmek gibi normal istemci görevlerine katılmazlar ve yalnızca bir istemci ilk kez çalıştırıldığında kullanılırlar. -Düğüm-önyükleme düğümü etkileşimleri için kullanılan protokol, [Kademlia](https://medium.com/coinmonks/a-brief-overview-of-kademlia-and-its-use-in-various-decentralized-platforms-da08a7f72b8f), düğüm listelerini paylaşmak için [dağıtılmış karma tablosu](https://en.wikipedia.org/wiki/Distributed_hash_table) kullanır. Her düğümün, en yakın eşlerine bağlanmak için gereken bilgileri içeren bu tablonun bir sürümü vardır. Bu 'yakınlık' coğrafi değildir - mesafe, düğüm kimliğinin benzerliği ile tanımlanır. Her düğümün tablosu, bir güvenlik özelliği olarak düzenli olarak yenilenir. Örneğin, [Discv5](https://github.com/ethereum/devp2p/tree/master/discv5)'te, keşif protokolü düğümleri, istemcinin desteklediği alt protokolleri görüntüleyen 'reklamlar' da gönderebilir, bu da eşlerin, her ikisinin de iletişim kurmak için kullanabilecekleri protokoller hakkında pazarlık yapmasına olanak tanır. +Düğüm-önyükleme düğümü etkileşimleri için kullanılan protokol, düğüm listelerini paylaşmak için bir [dağıtılmış karma tablosu](https://en.wikipedia.org/wiki/Distributed_hash_table) kullanan, [Kademlia](https://medium.com/coinmonks/a-brief-overview-of-kademlia-and-its-use-in-various-decentralized-platforms-da08a7f72b8f)'nın değiştirilmiş bir biçimidir. Her düğümün, en yakın eşlerine bağlanmak için gereken bilgileri içeren bu tablonun bir sürümü vardır. Bu 'yakınlık' coğrafi değildir - mesafe, düğüm kimliğinin benzerliği ile tanımlanır. Her düğümün tablosu, bir güvenlik özelliği olarak düzenli olarak yenilenir. Örneğin, [Discv5](https://github.com/ethereum/devp2p/tree/master/discv5) keşif protokolünde düğümler, istemcinin desteklediği alt protokolleri görüntüleyen 'reklamlar' gönderebilir. Bu, eşlerin iletişim kurmak için kullanabilecekleri protokoller üzerinde anlaşmalarına olanak tanır. -Keşif, bir PİNG-PONG oyunuyla başlar. Başarılı bir PING-PONG, yeni düğümü bir önyükleme düğümüne "bağlar". Bir önyükleme düğümünü ağa giren yeni bir düğümün varlığı konusunda uyaran ilk mesaj bir `PING`'dir. Bu `PING`, yeni düğüm, önyükleme düğümü ve bir sona erme zaman damgası hakkında hash edilmiş bilgileri içerir. Başlangıç düğümü `PING`'i alır ve `PING` karmasını içeren bir `PONG` döndürür. `PING` ve `PONG` karma değerleri eşleşirse, yeni düğüm ile önyükleme düğümü arasındaki bağlantı doğrulanır ve "bağlı" oldukları söylenir. +Keşif, bir PİNG-PONG oyunuyla başlar. Başarılı bir PING-PONG, yeni düğümü bir önyükleme düğümüne "bağlar". Ağa giren yeni bir düğümün varlığı konusunda bir önyükleme düğümünü uyaran ilk mesaj bir `PING`'dir. Bu `PING`, yeni düğüm, önyükleme düğümü ve bir son kullanma zaman damgası hakkında hash'lenmiş bilgiler içerir. Önyükleme düğümü `PING`'i alır ve `PING` karmasını içeren bir `PONG` döndürür. `PING` ve `PONG` karmaları eşleşirse, yeni düğüm ile önyükleme düğümü arasındaki bağlantı doğrulanır ve "bağlandıkları" söylenir. -Bağlandıktan sonra, yeni düğüm, önyükleme düğümüne bir `KOMŞUNU BUL` isteği gönderebilir. Önyükleme düğümü tarafından döndürülen veriler, yeni düğümün bağlanabileceği eşlerin bir listesini içerir. Düğümler bağlı değilse, `KOMŞULARI BUL` isteği başarısız olur, bu nedenle yeni düğüm ağa giremez. +Bağlantı kurulduktan sonra yeni düğüm, önyükleme düğümüne bir `FIND-NEIGHBOURS` isteği gönderebilir. Önyükleme düğümü tarafından döndürülen veriler, yeni düğümün bağlanabileceği eşlerin bir listesini içerir. Düğümler arasında bağlantı kurulmamışsa `FIND-NEIGHBOURS` isteği başarısız olur, bu nedenle yeni düğüm ağa giremez. Yeni düğüm, önyükleme düğümünden komşuların bir listesini aldığında, her biri ile bir PING-PONG alışverişi başlatır. Başarılı PING-PONG'lar yeni düğümü, komşularına bağlayarak mesaj alışverişini mümkün kılar. ``` -istemciyi başlat --> önyükleme düğümüne bağlan --> önyükleme düğümüne bağ --> komşuları bul --> komşularla bağ +istemciyi başlat --> önyükleme düğümüne bağlan --> önyükleme düğümüne bağlan --> komşuları bul --> komşulara bağlan ``` -Yürütüm istemcileri şu anda [Discv4](https://github.com/ethereum/devp2p/blob/master/discv4.md) keşif protokolünü kullanıyor ve [Discv5](https://github.com/ethereum/devp2p/tree/master/discv5) protokolüne geçmek için aktif bir çaba söz konusudur. +Yürütme istemcileri şu anda [Discv4](https://github.com/ethereum/devp2p/blob/master/discv4.md) keşif protokolünü kullanıyor ve [Discv5](https://github.com/ethereum/devp2p/tree/master/discv5) protokolüne geçiş için aktif bir çaba var. #### ENR: Ethereum Düğüm Kayıtları {#enr} -[Ethereum Düğüm Kaydı (ENR)](/developers/docs/networking-layer/network-addresses/), üç temel öğeyi içeren bir nesnedir: bir imza (kabul edilmiş kimlik şemasına uygun şekilde yapılmış kayıt içerikleri karması), kayıtta yapılan değişiklikleri takip eden bir sıra numarası ve keyfi anahtar listesi: değer çiftleri. Bu, yeni eşler arasında daha kolay tanımlayıcı bilgi alışverişi sağlayan geleceğe yönelik bir biçimdir ve Ethereum düğümleri için tercih edilen [ağ adresi](/developers/docs/networking-layer/network-addresses) biçimidir. +[Ethereum Düğüm Kaydı (ENR)](/developers/docs/networking-layer/network-addresses/), üç temel öğe içeren bir nesnedir: bir imza (belirlenmiş bir kimlik şemasına göre oluşturulan kayıt içeriğinin karması), kayıttaki değişiklikleri izleyen bir sıra numarası ve isteğe bağlı anahtar:değer çiftlerinden oluşan bir liste. Bu, yeni eşler arasında tanımlayıcı bilgilerin daha kolay alışverişini sağlayan geleceğe dönük bir formattır ve Ethereum düğümleri için tercih edilen [ağ adresi](/developers/docs/networking-layer/network-addresses) formatıdır. #### Keşif neden UDP üzerine kuruludur? {#why-udp} @@ -53,7 +53,7 @@ UDP, herhangi bir hata kontrolünü, başarısız paketlerin yeniden gönderilme ### DevP2P {#devp2p} -DevP2P'nin kendisi, Ethereum'un eşler arası ağı kurmak ve sürdürmek için uyguladığı bir protokol yığınıdır. Yeni düğümler ağa girdikten sonra, etkileşimleri [DevP2P](https://github.com/ethereum/devp2p) yığınındaki protokoller tarafından yönetilir. Bunların tümü TCP'nin üzerinde yer alır ve RLPx aktarım protokolünü, kablo protokolünü ve birkaç alt protokolü içerir. [RLPx](https://github.com/ethereum/devp2p/blob/master/rlpx.md), düğümler arasındaki oturumları başlatmayı, doğrulamayı ve sürdürmeyi yöneten protokoldür. RLPx, düğümler arasında göndermek için verileri minimum bir yapıya kodlamak için alan açısından çok verimli bir yöntem olan RLP'yi (Yinelemeli Uzunluk Öneki) kullanarak mesajları kodlar. +DevP2P'nin kendisi, Ethereum'un eşler arası ağı kurmak ve sürdürmek için uyguladığı bir protokol yığınıdır. Yeni düğümler ağa girdikten sonra, etkileşimleri [DevP2P](https://github.com/ethereum/devp2p) yığınındaki protokoller tarafından yönetilir. Bunların tümü TCP'nin üzerinde yer alır ve RLPx aktarım protokolünü, kablo protokolünü ve birkaç alt protokolü içerir. [RLPx](https://github.com/ethereum/devp2p/blob/master/rlpx.md), düğümler arasındaki oturumları başlatmayı, kimlik doğrulaması yapmayı ve sürdürmeyi yöneten protokoldür. RLPx, düğümler arasında göndermek için verileri minimum bir yapıya kodlamak için alan açısından çok verimli bir yöntem olan RLP'yi (Yinelemeli Uzunluk Öneki) kullanarak mesajları kodlar. İki düğüm arasındaki bir RLPx oturumu, ilk olarak kriptografik el sıkışma ile başlar. Bu, düğümün daha sonra eş tarafından doğrulanan bir yetkilendirme mesajı göndermesini içerir. Başarılı doğrulamadan sonra, eş, başlatıcı düğüme geri dönmek için bir yetkilendirme alındı mesajı oluşturur. Bu, düğümlerin özel ve güvenli bir şekilde iletişim kurmasını sağlayan bir anahtar değişim sürecidir. Başarılı bir kriptografik el sıkışma, daha sonra her iki düğümü de birbirlerine "kablo üzerinden" bir "merhaba" mesajı göndermeleri için tetikler. Kablo protokolü, başarılı bir merhaba mesaj alışverişi ile başlatılır. @@ -69,39 +69,39 @@ Bu, başarılı bir etkileşim için gereken bilgidir, çünkü her iki düğüm Merhaba mesajları ile birlikte, kablo protokolü ayrıca bir eşe bağlantının kapatılacağı konusunda uyarı veren bir "bağlantıyı kes" mesajı da gönderebilir. Kablo protokolü ayrıca, bir oturumu açık tutmak için periyodik olarak gönderilen PING ve PONG mesajlarını da içerir. RLPx ve kablolu protokol değiş tokuşları, bu nedenle, belirli bir alt protokole göre değiş tokuş edilecek faydalı bilgiler için iskele sağlayarak, düğümler arasındaki iletişimin temellerini oluşturur. -### Alt-protokoller {#sub-protocols} +### Alt Protokoller {#sub-protocols} -#### Kablo protokolü {#wire-protocol} +#### Aktarım Protokolü {#wire-protocol} -Eşler bağlandığında ve bir RLPx oturumu başlatıldığında, kablo protokolü eşlerin nasıl iletişim kurduğunu tanımlar. Kablo protokolü başlangıçta üç ana görevi tanımlıyordu: zincir senkronizasyonu, blok yayılımı ve işlem değişimi. Bununla birlikte, Ethereum hisse ispatına geçiş yaptıktan sonra blok yayılımı ve zincir senkronizasyonu, fikir birliği katmanının bir parçası haline geldi. İşlem borsası, hala yürütüm istemcilerinin faaliyet alanındadır. İşlem takası, blok geliştiricilerin bir sonraki bloğa dahil etmek üzere bazılarını seçebilmeleri için düğümler arasında bekleyen işlemlerin takas edilmesini ifade eder. Bu görevlerle ilgili ayrıntılı bilgilere [buradan](https://github.com/ethereum/devp2p/blob/master/caps/eth.md) ulaşabilirsiniz. Bu alt protokolleri destekleyen istemciler, bunları [JSON-RPC](/developers/docs/apis/json-rpc/) aracılığıyla kullanıma sunar. +Eşler bağlandığında ve bir RLPx oturumu başlatıldığında, kablo protokolü eşlerin nasıl iletişim kurduğunu tanımlar. Kablo protokolü başlangıçta üç ana görevi tanımlıyordu: zincir senkronizasyonu, blok yayılımı ve işlem değişimi. Bununla birlikte, Ethereum hisse ispatına geçiş yaptıktan sonra blok yayılımı ve zincir senkronizasyonu, fikir birliği katmanının bir parçası haline geldi. İşlem borsası, hala yürütüm istemcilerinin faaliyet alanındadır. İşlem takası, blok geliştiricilerin bir sonraki bloğa dahil etmek üzere bazılarını seçebilmeleri için düğümler arasında bekleyen işlemlerin takas edilmesini ifade eder. Bu görevler hakkında detaylı bilgiye [buradan](https://github.com/ethereum/devp2p/blob/master/caps/eth.md) ulaşabilirsiniz. Bu alt protokolleri destekleyen istemciler, bunları [JSON-RPC](/developers/docs/apis/json-rpc/) aracılığıyla kullanıma sunar. -#### les (hafif ethereum alt protokolü) {#les} +#### les (hafif Ethereum alt protokolü) {#les} -Bu, hafif istemcileri senkronize etmek için minimum bir protokoldür. Geleneksel olarak bu protokol nadiren kullanılmıştır, çünkü tam düğümlerin hafif istemcilere teşvik olmadan veri sunması gerekir. Yürütme istemcilerinin varsayılan davranışı, hafif istemci verilerini les üzerinden sunmamaktır. Daha fazla bilgi les [spesifikasyonu](https://github.com/ethereum/devp2p/blob/master/caps/les.md)nda mevcuttur. +Bu, hafif istemcileri senkronize etmek için minimum bir protokoldür. Geleneksel olarak bu protokol nadiren kullanılmıştır, çünkü tam düğümlerin hafif istemcilere teşvik olmadan veri sunması gerekir. Yürütme istemcilerinin varsayılan davranışı, hafif istemci verilerini les üzerinden sunmamaktır. Daha fazla bilgiye les [spesifikasyonundan](https://github.com/ethereum/devp2p/blob/master/caps/les.md) ulaşabilirsiniz. #### Snap {#snap} -[Snap protokolü](https://github.com/ethereum/devp2p/blob/master/caps/snap.md#ethereum-snapshot-protocol-snap), eşlere, son durumların anlık görüntülerini değiş tokuş etmek için, eşlerin ara Merkle trie düğümlerini indirmesine gerek kalmadan hesap ve depolama verilerini doğrulamasına izin veren isteğe bağlı bir uzantıdır. +[Snap protokolü](https://github.com/ethereum/devp2p/blob/master/caps/snap.md#ethereum-snapshot-protocol-snap), eşlerin son durumların anlık görüntülerini birbirleriyle paylaşmasına olanak tanıyan isteğe bağlı bir uzantıdır. Bu sayede eşler, ara Merkle trie düğümlerini indirmeye gerek kalmadan hesap ve depolama verilerini doğrulayabilir. #### Wit (tanık protokolü) {#wit} -[Tanık protokolü](https://github.com/ethereum/devp2p/blob/master/caps/wit.md#ethereum-witness-protocol-wit), eşler arasında durum şahitlerinin değiş tokuşunu sağlayan ve istemcileri zincirin ucuna senkronize etmeye yardımcı olan isteğe bağlı bir uzantıdır. +[Tanık protokolü](https://github.com/ethereum/devp2p/blob/master/caps/wit.md#ethereum-witness-protocol-wit), eşler arasında durum tanıklarının alışverişini sağlayan ve istemcilerin zincirin ucuyla senkronize olmasına yardımcı olan isteğe bağlı bir uzantıdır. -#### Fısıltı {#whisper} +#### Whisper {#whisper} Fısıltı, blok zincirine herhangi bir bilgi yazmadan eşler arasında güvenli mesajlaşma sağlamayı amaçlayan bir protokoldü. DevP2P tel protokolünün bir parçasıydı, ancak artık kullanımdan kaldırıldı. Benzer amaçlara sahip başka [ilgili projeler](https://wakunetwork.com/) de mevcuttur. -## Konsensus katmanı {#consensus-layer} +## Mutabakat katmanı {#consensus-layer} Konsensus istemcileri, farklı bir özellik ile ayrı bir eşler arası ağda yer alır. Konsensus istemcilerinin, eşlerinden yeni bloklar alabilmeleri ve blok teklif sahibi olma sırası kendilerine geldiğinde bunları yayınlayabilmeleri için blok dedikodularına katılmaları gerekir. Bu, yürütüm katmanına benzer şekilde ilk olarak bir keşif protokolü gerektirir, böylece bir düğüm eşleri bulabilir ve bloklar, tasdikler vb. alışverişi için güvenli oturumlar kurabilir. ### Keşif {#consensus-discovery} -Fikir birliği istemcileri, yürütüm istemcilerine benzer şekilde eş bulmak için UDP üzerinden [discv5](https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/p2p-interface.md#the-discovery-domain-discv5) kullanır. Discv5'in konsensus katmanı uygulaması, yalnızca discv5'i bir [libP2P](https://libp2p.io/) yığınına bağlayan ve DevP2P'yi kullanımdan kaldıran bir adaptör içermesi bakımından yürütme istemcilerinden farklıdır. Yürütüm katmanının RLPx oturumları, libP2P'nin gürültü güvenli kanal anlaşması lehine kullanımdan kaldırılmıştır. +Yürütme istemcilerine benzer şekilde, mutabakat istemcileri de eşleri bulmak için UDP üzerinden [discv5](https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/p2p-interface.md#the-discovery-domain-discv5) kullanır. discv5'in mutabakat katmanı uygulaması, discv5'i bir [libP2P](https://libp2p.io/) yığınına bağlayan ve DevP2P'yi kullanımdan kaldıran bir adaptör içermesi bakımından yürütme istemcilerininkinden farklıdır. Yürütüm katmanının RLPx oturumları, libP2P'nin gürültü güvenli kanal anlaşması lehine kullanımdan kaldırılmıştır. -### ENRler {#consensus-enr} +### ENR'ler {#consensus-enr} -Konsensüs düğümleri için ENR, düğümün genel anahtarını, IP adresini, UDP ve TCP bağlantı noktalarını ve iki konsensusa özgü alanı içerir: onay alt ağı bit alanı ve `eth2` anahtarı. İlki, düğümlerin belirli tasdik dedikodu alt ağlarına katılan eşler bulmasını kolaylaştırır. `eth2` anahtarı, eşlerin doğru Ethereum'a bağlanmasını sağlayarak, düğümün hangi Ethereum çatalı sürümünü kullandığı hakkında bilgi içerir. +Mutabakat düğümleri için ENR, düğümün açık anahtarını, IP adresini, UDP ve TCP bağlantı noktalarını ve mutabakata özgü iki alanı içerir: tasdik alt ağ bit alanı ve `eth2` anahtarı. İlki, düğümlerin belirli tasdik dedikodu alt ağlarına katılan eşler bulmasını kolaylaştırır. `eth2` anahtarı, düğümün hangi Ethereum çatal sürümünü kullandığı hakkında bilgi içerir ve eşlerin doğru Ethereum ağına bağlanmasını sağlar. ### libP2P {#libp2p} @@ -109,9 +109,9 @@ LibP2P yığını, keşiften sonra tüm iletişimleri destekler. İstemciler, EN ### Gossip {#gossip} -Dedikodu alanı, ağ boyunca hızla yayılması gereken tüm bilgileri içerir. Bu, işaret bloklarını, kanıtları, tasdikleri, çıkışları ve kesmeleri içerir. Bu, libP2P gossipsub v1 kullanılarak iletilir ve alınacak ve iletilecek maksimum dedikodu yükü boyutu da dahil olmak üzere her düğümde yerel olarak depolanan çeşitli meta verilere dayanır. Dedikodu alanı hakkında detaylı bilgiye [buradan](https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/p2p-interface.md#the-gossip-domain-gossipsub) ulaşabilirsiniz. +Dedikodu alanı, ağ boyunca hızla yayılması gereken tüm bilgileri içerir. Bu, işaret bloklarını, kanıtları, tasdikleri, çıkışları ve kesmeleri içerir. Bu, libP2P gossipsub v1 kullanılarak iletilir ve alınacak ve iletilecek maksimum dedikodu yükü boyutu da dahil olmak üzere her düğümde yerel olarak depolanan çeşitli meta verilere dayanır. Gossip alanı hakkında ayrıntılı bilgi [burada](https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/p2p-interface.md#the-gossip-domain-gossipsub) mevcuttur. -### Talep-yanıt {#request-response} +### İstek-Yanıt {#request-response} İstek-yanıt etki alanı, eşlerinden belirli bilgiler isteyen istemciler için protokoller içerir. Örnekler arasında, belirli kök karmalarıyla eşleşen veya bir dizi yuva içinde belirli İşaret blokları talep etmek yer alır. Yanıtlar her zaman hızlı sıkıştırılmış SSZ kodlu baytlar olarak döndürülür. @@ -119,25 +119,25 @@ Dedikodu alanı, ağ boyunca hızla yayılması gereken tüm bilgileri içerir. SSZ, basit serileştirme anlamına gelir. Tüm yapının kodunu çözmek zorunda kalmadan, kodlanmış bir mesajın tek tek parçalarının kodunu çözmeyi kolaylaştıran sabit ofsetler kullanır; bu, kodlanmış mesajlardan belirli bilgi parçalarını verimli bir şekilde alabildiğinden, konsensus istemcisi için çok yararlıdır. Ayrıca, Merkleizasyon için ilgili verimlilik kazanımları ile Merkle protokolleriyle entegre olmak üzere özel olarak tasarlanmıştır. Konsensus katmanındaki tüm karmalar Merkle kökleri olduğundan, bu önemli bir gelişme sağlar. SSZ ayrıca değerlerin benzersiz temsillerini de garanti eder. -## Yürütme ve konsensüs istemcilerini bağlama {#connecting-clients} +## Yürütme ve mutabakat istemcilerini bağlama {#connecting-clients} -Fikir birliği ve yürütüm istemcileri paralel şekilde çalışır. Fikir birliği istemcisinin yürütüm istemcisine talimatlar sağlayabilmesi ve yürütüm istemcisinin, İşaret bloklarına dahil etmek üzere fikir birliği istemcisine işlem paketlerini iletebilmesi için bunların birbirine bağlanması gerekir. İki istemci arasında iletişim, yerel bir RPC bağlantısı kullanılarak sağlanabilir. ["Engine-API"](https://github.com/ethereum/execution-apis/blob/main/src/engine/common.md) olarak bilinen bir API, iki istemci arasında gönderilen talimatları tanımlar. Her iki istemci de tek bir ağ kimliğinin arkasında bulunduğundan, her istemci için ayrı bir anahtar (eth1 anahtarı ve eth2 anahtarı) içeren bir ENR'yi (Ethereum düğüm kaydı) ortak kullanırlar. +Fikir birliği ve yürütüm istemcileri paralel şekilde çalışır. Fikir birliği istemcisinin yürütüm istemcisine talimatlar sağlayabilmesi ve yürütüm istemcisinin, İşaret bloklarına dahil etmek üzere fikir birliği istemcisine işlem paketlerini iletebilmesi için bunların birbirine bağlanması gerekir. İki istemci arasında iletişim, yerel bir RPC bağlantısı kullanılarak sağlanabilir. ['Engine-API'](https://github.com/ethereum/execution-apis/blob/main/src/engine/common.md) olarak bilinen bir API, iki istemci arasında gönderilen talimatları tanımlar. Her iki istemci de tek bir ağ kimliğinin arkasında bulunduğundan, her istemci için ayrı bir anahtar (eth1 anahtarı ve eth2 anahtarı) içeren bir ENR'yi (Ethereum düğüm kaydı) ortak kullanırlar. İlgili ağ yığını parantez içinde olacak şekilde, kontrol akışının bir özeti aşağıda gösterilmiştir. -### Fikir birliği istemcisi blok üreticisi olmadığında: {#when-consensus-client-is-not-block-producer} +### Mutabakat istemcisi blok üreticisi olmadığında: {#when-consensus-client-is-not-block-producer} - Konsensus istemcisi, blok dedikodu protokolü aracılığıyla bir blok alır (konsensus p2p) -- Konsensus istemcisi bloğu önceden doğrular, yani doğru meta verilerle geçerli bir göndericiden gelmesini sağlar +- Mutabakat istemcisi bloğu ön doğrulamadan geçirir, yani bloğun geçerli bir göndericiden doğru meta verilerle geldiğinden emin olur. - Bloktaki işlemler yürütüm katmanına yürütüm yükü olarak gönderilir (yerel RPC bağlantısı) -- Yürütüm katmanı, işlemleri yürütür ve blok başlığındaki durumu doğrular (yani, karma eşleşmesini kontrol eder) +- Yürütme katmanı işlemleri yürütür ve blok başlığındaki durumu doğrular (yani karmaların eşleşip eşleşmediğini kontrol eder). - Yürütüm katmanı, doğrulama verilerini konsensus katmanına geri iletir, blok artık doğrulanmış olarak kabul edilir (yerel RPC bağlantısı) - Konsensus katmanı, kendi blok zincirinin başına blok ekler ve bunu onaylar, onaylamayı ağ üzerinden yayınlar (konsensus p2p) -### Fikir birliği istemcisi blok üreticisi olduğunda: {#when-consensus-client-is-block-producer} +### Mutabakat istemcisi blok üreticisi olduğunda: {#when-consensus-client-is-block-producer} - Konsensus istemcisi, bir sonraki blok üreticisi olduğuna dair bildirim alır (konsensus p2p) -- Konsensus katmanı, yürütüm istemcisinde (yerel RPC) `create block` yöntemini çağırır +- Mutabakat katmanı, yürütme istemcisindeki (yerel RPC) `create block` yöntemini çağırır. - Yürütüm katmanı, işlem dedikodu protokolü tarafından doldurulmuş işlem belleğine erişir (yürütme p2p) - Yürütüm istemcisi, işlemleri bir bloğa toplar, işlemleri yürütür ve bir blok karması oluşturur - Fikir birliği istemcisi, işlemleri ve blok karmasını yürütüm istemcisinden alır ve işaret bloğuna (yerel RPC) ekler @@ -146,10 +146,10 @@ Fikir birliği ve yürütüm istemcileri paralel şekilde çalışır. Fikir bir Blok, yeterli onaylayıcılar tarafından onaylandıktan sonra, zincirin başına eklenir, gerekçelendirilir ve sonunda kesinleştirilir. -![](cons_client_net_layer.png) ![](exe_client_net_layer.png) +![](cons_client_net_layer.png)\n![](exe_client_net_layer.png) -[ethresear.ch](https://ethresear.ch/t/eth1-eth2-client-relationship/7248)'den fikir birliği ve yürütüm istemcileri için ağ katmanı şeması +[ethresear.ch](https://ethresear.ch/t/eth1-eth2-client-relationship/7248) adresinden mutabakat ve yürütme istemcileri için ağ katmanı şeması -## Daha Fazla Okuma {#further-reading} +## Ek Okumalar {#further-reading} -[DevP2P](https://github.com/ethereum/devp2p) [LibP2p](https://github.com/libp2p/specs) [Konsensus katmanı ağ özellikleri](https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/p2p-interface.md#enr-structure) [kademlia'dan discv5'e](https://vac.dev/kademlia-to-discv5) [kademlia belgesi](https://pdos.csail.mit.edu/~petar/papers/maymounkov-kademlia-lncs.pdf) [Ethereum p2p'ye giriş](https://p2p.paris/en/talks/intro-ethereum-networking/) [eth1/eth2 ilişkisi](http://ethresear.ch/t/eth1-eth2-client-relationship/7248) [birleştirme ve eth2 istemci ayrıntıları videosu](https://www.youtube.com/watch?v=zNIrIninMgg) +[DevP2P](https://github.com/ethereum/devp2p)\n[LibP2p](https://github.com/libp2p/specs)\n[Mutabakat katmanı ağ spesifikasyonları](https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/p2p-interface.md#enr-structure)\n[kademlia'dan discv5'e](https://vac.dev/kademlia-to-discv5)\n[kademlia makalesi](https://pdos.csail.mit.edu/~petar/papers/maymounkov-kademlia-lncs.pdf)\n[Ethereum p2p'ye giriş](https://p2p.paris/en/talks/intro-ethereum-networking/)\n[eth1/eth2 ilişkisi](http://ethresear.ch/t/eth1-eth2-client-relationship/7248)\n[Birleşme ve eth2 istemci ayrıntıları videosu](https://www.youtube.com/watch?v=zNIrIninMgg) diff --git a/public/content/translations/tr/developers/docs/networking-layer/network-addresses/index.md b/public/content/translations/tr/developers/docs/networking-layer/network-addresses/index.md index d1894176f71..2e4e84251f8 100644 --- a/public/content/translations/tr/developers/docs/networking-layer/network-addresses/index.md +++ b/public/content/translations/tr/developers/docs/networking-layer/network-addresses/index.md @@ -1,13 +1,13 @@ --- -title: Ağ adresleri -description: Ağ adreslerine giriş. +title: "Ağ adresleri" +description: "Ağ adreslerine giriş." lang: tr sidebarDepth: 2 --- Ethereum düğümleri, eşlere bağlanmak için bazı temel bilgilerle kendilerini tanımlamalıdır. Herhangi bir potansiyel eşin bu bilgiyi yorumlayabilmesini sağlamak için, herhangi bir Ethereum düğümünün anlayabileceği üç standart formattan birinde iletilir: multiaddr, enode veya Ethereum Node Records (ENR'ler). ENR'ler, Ethereum ağ adresleri için geçerli standarttır. -## Ön koşullar {#prerequisites} +## Ön Koşullar {#prerequisites} Bu sayfayı anlamak için Ethereum'un [ağ katmanı](/developers/docs/networking-layer/) hakkında biraz bilgi sahibi olmak gerekir. @@ -23,17 +23,17 @@ Bir Ethereum düğümü için multiaddr, düğüm kimliğini (ortak anahtarları ## Enode {#enode} -Enode, bir URL adres formatı kullanarak bir Ethereum düğümünü tanımlamanın bir yoludur. Onaltılık düğüm kimliği, @ işareti kullanılarak ana bilgisayardan ayrılan URL'nin kullanıcı adı bölümünde kodlanır. Ana bilgisayar adı yalnızca bir IP adresi olarak verilebilir; DNS adlarına izin verilmez. Ana bilgisayar adı bölümündeki bağlantı noktası, TCP dinleme bağlantı noktasıdır. TCP ve UDP (keşif) bağlantı noktaları farklıysa, UDP bağlantı noktası "discport" sorgu parametresi olarak belirtilir +Enode, bir URL adres formatı kullanarak bir Ethereum düğümünü tanımlamanın bir yoludur. Onaltılık düğüm kimliği, @ işareti kullanılarak ana bilgisayardan ayrılan URL'nin kullanıcı adı bölümünde kodlanır. Ana bilgisayar adı yalnızca bir IP adresi olarak verilebilir; DNS adlarına izin verilmez. Ana bilgisayar adı bölümündeki bağlantı noktası, TCP dinleme bağlantı noktasıdır. TCP ve UDP (keşif) bağlantı noktaları farklıysa, UDP bağlantı noktası "discport" sorgu parametresi olarak belirtilir. -Aşağıdaki örnekte, düğüm URL'si, IP adresi `10.3.58.6`, TCP bağlantı noktası `30303` ve UDP keşif bağlantı noktası `30301` olan bir düğümü tanımlar. +Aşağıdaki örnekte düğüm URL'si; IP adresi `10.3.58.6`, TCP bağlantı noktası `30303` ve UDP keşif bağlantı noktası `30301` olan bir düğümü açıklar. `enode://6f8a80d14311c39f35f516fa664deaaaa13e85b2f7493f37f6144d86991ec012937307647bd3b9a82abe2974e1407241d54947bbb39763a4cac9f77166ad92a0@10.3.58.6:30303?discport=30301` ## Ethereum Düğüm Kayıtları (ENR'ler) {#enr} -Ethereum Düğüm Kayıtları (ENR'ler), Ethereum'daki ağ adresleri için standart bir formattır. Çoklu adreslerin ve düğümlerin yerini alırlar. Bunlar özellikle yararlıdır çünkü düğümler arasında daha fazla bilgi alışverişine izin verirler. ENR; bir imza, sıra numarası ve imzaları oluşturup doğrulamak için kullanılan kimlik şemasını detaylandıran alanları içerir. ENR, anahtar/değer çiftleri olarak düzenlenen rastgele verilerle de doldurulabilir. Bu anahtar/değer çiftleri, düğümün IP adresini ve düğümün kullanabileceği alt protokoller hakkındaki bilgileri içerir. Consensus istemcileri, önyükleme düğümlerini tanımlamak için [belirli bir ENR yapısı](https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/p2p-interface.md#enr-structure) kullanır ve ayrıca mevcut Ethereum çatalı ve doğrulama dedikodusu alt ağı hakkında bilgi içeren bir `eth2` alan içerir (bu, düğümü, onayları bir araya toplanmış belirli bir eşler grubuna bağlar). +Ethereum Düğüm Kayıtları (ENR'ler), Ethereum'daki ağ adresleri için standart bir formattır. Multiaddr'lerin ve enode'ların yerini alırlar. Bunlar özellikle yararlıdır çünkü düğümler arasında daha fazla bilgi alışverişine izin verirler. ENR; bir imza, sıra numarası ve imzaları oluşturup doğrulamak için kullanılan kimlik şemasını detaylandıran alanları içerir. ENR, anahtar/değer çiftleri olarak düzenlenen rastgele verilerle de doldurulabilir. Bu anahtar/değer çiftleri, düğümün IP adresini ve düğümün kullanabileceği alt protokoller hakkındaki bilgileri içerir. Mutabakat istemcileri, önyükleme düğümlerini tanımlamak için [belirli bir ENR yapısı](https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/p2p-interface.md#enr-structure) kullanır ve ayrıca mevcut Ethereum çatalı ile tasdik dedikodu alt ağı (bu, düğümü, tasdikleri bir araya toplanmış belirli bir eşler grubuna bağlar) hakkında bilgi içeren bir `eth2` alanı içerir. -## Daha Fazla Okuma {#further-reading} +## Ek Okumalar {#further-reading} - [EIP-778: Ethereum Düğüm Kayıtları (ENR)](https://eips.ethereum.org/EIPS/eip-778) - [LibP2P: Multiaddr-Enode-ENR?!](https://consensys.net/diligence/blog/2020/09/libp2p-multiaddr-enode-enr/) diff --git a/public/content/translations/tr/developers/docs/networking-layer/portal-network/index.md b/public/content/translations/tr/developers/docs/networking-layer/portal-network/index.md index f396c286ea4..a08d5533ce6 100644 --- a/public/content/translations/tr/developers/docs/networking-layer/portal-network/index.md +++ b/public/content/translations/tr/developers/docs/networking-layer/portal-network/index.md @@ -1,6 +1,6 @@ --- -title: Portal Ağı -description: Portal Ağı'na genel bir bakış - Düşük kaynaklı istemcilere destek olmak için tasarlanmış, geliştirme aşamasındaki bir ağ. +title: "Portal Ağı" +description: "Portal Ağı'na genel bir bakış - Düşük kaynaklı istemcilere destek olmak için tasarlanmış, geliştirme aşamasındaki bir ağ." lang: tr --- @@ -12,23 +12,23 @@ Portal Ağı, hafif düğümler için veriye erişilebilirlik problemini, gerekl [Düğümler ve istemciler](/developers/docs/nodes-and-clients/) hakkında daha fazla bilgi -## Portal Ağına neden ihtiyacımız var? {#why-do-we-need-portal-network} +## Portal Ağı'na neden ihtiyacımız var {#why-do-we-need-portal-network} Ethereum düğümleri, ethereum blokzincirlerinde kendi tam veya kısmi kopyalarını saklar. Bu yerel kopya, işlemleri doğrulamak ve düğümün doğru zinciri izlediğinden emin olmak için kullanılır. Yerel olarak depolanan bu veriler, herhangi başka bir oluşuma güvenmeye ihtiyaç duymadan, düğümlerin gelen verilerin doğruluğunu ve geçerliliğini bağımsız olarak doğrulamasına imkan tanır. -Blokzincirin bu yerel kopyası ve ilişkili durum ve makbuz verileri, düğümün sabit diskinde çok fazla yer kaplar. Örneğin bir fikir birliği istemcisiyle eşleştirilmiş [Geth](https://geth.ethereum.org) kullanan bir düğümü çalıştırmak için 2 TB'lık bir sabit disk tavsiye edilir. Geth, yalnızca görece yeni bir blok seti üzerinden zincir verilerini depolayan anlık senkronizasyonu kullanarak genellikle yaklaşık 650 GB disk alanı kaplar ancak bu alan haftada yaklaşık 14 GB artar (düğümü periyodik olarak 650 GB'a indirebilirsiniz). +Blokzincirin bu yerel kopyası ve ilişkili durum ve makbuz verileri, düğümün sabit diskinde çok fazla yer kaplar. Örneğin, bir mutabakat istemcisiyle eşleştirilmiş [Geth](https://geth.ethereum.org) kullanan bir düğümü çalıştırmak için 2 TB'lık bir sabit disk önerilir. Geth, yalnızca görece yeni bir blok seti üzerinden zincir verilerini depolayan anlık senkronizasyonu kullanarak genellikle yaklaşık 650 GB disk alanı kaplar ancak bu alan haftada yaklaşık 14 GB artar (düğümü periyodik olarak 650 GB'a indirebilirsiniz). -Bu, düğümleri çalıştırmanın yüksek maliyetli olduğu anlamına gelir; çünkü Ethereum için büyük bir disk alanı ayrılması gereklidir. Ethereum yol haritasında bu soruna yönelik [tarihin süresi dolması](/roadmap/statelessness/#history-expiry), [durumun süresi dolması](/roadmap/statelessness/#state-expiry) ve [durumsuzluk](/roadmap/statelessness/) gibi birkaç çözüm vardır. Ancak, bunların uygulamaya koyulmasına muhtemelen birkaç yıl daha vardır. Ayrıca, kendi zincir verisini kaydetmeyen ve ihtiyacı olan veriyi tam düğümlerden talep eden [hafif düğümler](/developers/docs/nodes-and-clients/light-clients/) de bulunmaktadır. Ancak bu, hafif düğümlerin dürüst veri sağlayabilmek için tam düğümlere güvenmesi gerektiği anlamına gelir ve hafif düğümlere ihtiyacı olan veriyi sunmak zorunda olan tam düğümlerde gerilim yaratır. +Bu, düğümleri çalıştırmanın yüksek maliyetli olduğu anlamına gelir; çünkü Ethereum için büyük bir disk alanı ayrılması gereklidir. Ethereum yol haritasında, [geçmişin süresinin dolması](/roadmap/statelessness/#history-expiry), [durumun süresinin dolması](/roadmap/statelessness/#state-expiry) ve [durumsuzluk](/roadmap/statelessness/) dahil olmak üzere bu soruna yönelik birkaç çözüm vardır. Ancak, bunların uygulamaya koyulmasına muhtemelen birkaç yıl daha vardır. Ayrıca kendi zincir verisi kopyalarını kaydetmeyen ve ihtiyaç duydukları verileri tam düğümlerden isteyen [hafif düğümler](/developers/docs/nodes-and-clients/light-clients/) de bulunmaktadır. Ancak bu, hafif düğümlerin dürüst veri sağlayabilmek için tam düğümlere güvenmesi gerektiği anlamına gelir ve hafif düğümlere ihtiyacı olan veriyi sunmak zorunda olan tam düğümlerde gerilim yaratır. Portal Ağı, hafif düğümlerin verilerini alırken tam düğümlere güvenmek durumunda kalmasını veya tam düğümlerin üzerindeki iş yükünü önemli ölçüde arttırmasını gerektirmeyen alternatif bir yol sunmayı amaçlar. Bu, Ethereum düğümlerinin ağ genelinde veri paylaşmasına olanak tanıyan yeni bir yolu devreye alarak gerçekleştirilir. ## Portal Ağı nasıl çalışır? {#how-does-portal-network-work} -Ethereum düğümleri, birbirleriyle nasıl iletişim kuracaklarını tanımlayan katı protokollere sahiptir. Yürütüm istemcileri, [DevP2P](/developers/docs/networking-layer/#devp2p) olarak bilinen bir dizi alt protokol kullanarak iletişim kurarken, fikir birliği istemcileri [libP2P](/developers/docs/networking-layer/#libp2p) adlı farklı bir alt protokol yığınını kullanır. Bunlar, düğümler arasında iletilebilecek veri türlerini tanımlar. +Ethereum düğümleri, birbirleriyle nasıl iletişim kuracaklarını tanımlayan katı protokollere sahiptir. Yürütme istemcileri [DevP2P](/developers/docs/networking-layer/#devp2p) olarak bilinen bir dizi alt protokolü kullanarak iletişim kurarken, mutabakat istemcileri [libP2P](/developers/docs/networking-layer/#libp2p) adı verilen farklı bir alt protokol yığını kullanır. Bunlar, düğümler arasında iletilebilecek veri türlerini tanımlar. ![devP2P ve libP2P](portal-network-devp2p-libp2p.png) -Düğümler aynı zamanda, uygulamaların ve cüzdanların Ethereum düğümleri ile bilgi takası yaptığı [JSON-RPC API](/developers/docs/apis/json-rpc/) üzerinden belirli verileri sunabilir. Ancak bunların hiçbiri, hafif istemcilere veri sunmak için ideal protokoller değildir. +Düğümler ayrıca, uygulamaların ve cüzdanların Ethereum düğümleriyle bilgi takası yaptığı [JSON-RPC API](/developers/docs/apis/json-rpc/) aracılığıyla belirli verileri de sunabilir. Ancak bunların hiçbiri, hafif istemcilere veri sunmak için ideal protokoller değildir. Hafif istemciler şu anda DevP2P ya da libP2p üzerinden belirli zincir verilerini talep edemez; çünkü bu protokoller, sadece blokların ve işlemlerin haberleşmesi ve zincir senkronizasyonu için tasarlanmıştır. Hafif istemciler bu bilgileri indirmek istemez; çünkü bu, onları "hafif" olmaktan çıkaracaktır. @@ -36,7 +36,7 @@ JSON-RPC API, hafif istemci veri istekleri için de ideal bir seçim değildir. Portal Ağı'nın amacı, bütün tasarımı yeniden düşünerek mevcut Ethereum istemcilerinin kısıtlanmış tasarımlarının dışında spesifik olarak hafiflik odaklı geliştirme yapmaktır. -Portal Ağı'nın ana fikri, [DHT](https://en.wikipedia.org/wiki/Distributed_hash_table) (Bittorrent ile benzer) kullanarak hafif istemcilerin ihtiyaç duyduğu geçmiş veriler ve mevcut zincirin başının kimliği gibi bilgilerin, DevP2P tarzı hafif bir eşler arası merkezi olmayan ağ sunulmasını sağlayarak mevcut ağ yığınının en iyi parçalarını almaktır. +Portal Ağı'nın temel fikri, hafif istemcilerin ihtiyaç duyduğu geçmiş veriler ve mevcut zincir başının kimliği gibi bilgilerin, [DHT](https://en.wikipedia.org/wiki/Distributed_hash_table) (Bittorrent'e benzer) kullanan hafif, DevP2P tarzı, eşler arası merkeziyetsiz bir ağ aracılığıyla sunulmasını sağlayarak mevcut ağ yığınının en iyi özelliklerini almaktır. Altta yatan fikir, her bir düğüme toplam geçmiş Ethereum verilerinin küçük paarçalarını ve bazı spesifik düğüm sorumluluklarını eklemektir. Ardından istekler, talep edilen spesifik verileri depolayan düğümleri arar, bulur ve bu düğümlerden alır. @@ -48,36 +48,42 @@ Amaç, hafif Portal istemcilerinin oluşturduğu merkeziyetsiz bir ağın şunla - son ve geçmiş zincir verilerini senkronize etmek - durum verilerini almak - işlemleri yayımlamak -- [EVM](/developers/docs/evm/) kullanarak işlemleri yürütmek +- [EVM](/developers/docs/evm/) kullanarak işlemleri yürütme Bu ağ tasarımının faydaları şunlardır: - merkezi sağlayıcılara olan bağımlılığı azaltmak - Internet bant genişliği kullanımını azaltmak - minimize edilmiş veya sıfır senkronizasyon -- Kaynak kısıtlaması olan cihazlara erişim (\<1 GB RAM, \<100 MB disk alanı, 1 CPU) +- Kaynak kısıtlı cihazlardan erişilebilir (\<1 GB RAM, \<100 MB disk alanı, 1 CPU) -Aşağıdaki diyagram, Portal Ağı tarafından sunulabilecek mevcut istemcilerin işlevlerini gösterir ve kullanıcıların çok düşük kaynaklı cihazlardan bu işlevlere erişmesini sağlar. +Aşağıdaki tablo, Portal Ağı tarafından sunulabilen mevcut istemcilerin işlevlerini göstermekte ve kullanıcıların bu işlevlere çok düşük kaynaklı cihazlarda erişmelerini sağlamaktadır. -![portal ağı tablosu](portal-network-table2.png) +### Portal Ağları -## Varsayılan istemci çeşitliliği {#client-diversity-as-default} +| İşaret hafif istemcisi | Durum ağı | İşlem dedikodusu | Geçmiş ağı | +| ---------------------- | ---------------------------- | ------------------- | -------------- | +| Hafif İşaret Zinciri | Hesap ve sözleşme depolaması | Hafif bellek havuzu | Başlıklar | +| Protokol verileri | | | Blok gövdeleri | +| | | | Makbuzlar | -Portal Ağı geliştiricileri aynı zamanda bir tasarım tercihinde bulunarak ilk günden itibaren üç ayrı Portal Ağı istemcisi geliştirme kararı almıştır. +## Varsayılan olarak istemci çeşitliliği {#client-diversity-as-default} + +Portal Ağı geliştiricileri ayrıca, ilk günden itibaren dört ayrı Portal Ağı istemcisi oluşturma yönünde bir tasarım kararı aldılar. Portal Ağı istemcileri: -- [Trin](https://github.com/ethereum/trin): Rust dilinde yazılmıştır -- [Nimbus](https://nimbus.team/docs/fluffy.html): Nim dilinde yazılmıştır -- [Trin](https://github.com/ethereumjs/ultralight): Typerscipt dilinde yazılmıştır -- [Shisui](https://github.com/GrapeBaBa/shisui): Go ile yazılmıştır +- [Trin](https://github.com/ethereum/trin): Rust ile yazılmıştır +- [Fluffy](https://fluffy.guide): Nim ile yazılmıştır +- [Ultralight](https://github.com/ethereumjs/ultralight): Typescript ile yazılmıştır +- [Shisui](https://github.com/zen-eth/shisui): Go ile yazılmıştır Birden fazla bağımsız istemci uygulamasına sahip olmak, Ethereum ağının dayanıklılığını ve merkeziyetsizliğini arttırır. Eğer bir istemci sorun veya kırılganlıklar yaşıyorsa, diğer istemciler düzgün şekilde çalışmaya devam edebilirler, bu da tek başarısızlık noktasını engeller. Ek olarak çeşitli istemci uygulamaları inovasyon ve rekabeti teşvik eder, bu da gelişimi beraberinde getirir ve ekosistemdeki tekdüzelik riskini azaltır. -## Daha fazla bilgi {#futher-reading} +## Daha fazla kaynak {#further-reading} -- [Portal Ağı (Devcon Bogota'daki Piper Merriam)](https://www.youtube.com/watch?v=0stc9jnQLXA). -- [Portal Ağı discord](https://discord.gg/CFFnmE7Hbs) +- [Portal Ağı (Piper Merriam, Devcon Bogota)](https://www.youtube.com/watch?v=0stc9jnQLXA). +- [Portal Ağı discord'u](https://discord.gg/CFFnmE7Hbs) - [Portal Ağı web sitesi](https://www.ethportal.net/) diff --git a/public/content/translations/tr/developers/docs/networks/index.md b/public/content/translations/tr/developers/docs/networks/index.md index b3978990b6e..7d38cd4f050 100644 --- a/public/content/translations/tr/developers/docs/networks/index.md +++ b/public/content/translations/tr/developers/docs/networks/index.md @@ -1,6 +1,6 @@ --- -title: Ağlar -description: Ethereum'un ağlarına ve uygulamanızı test etmek için test ağı ether'inin (ETH) nereden alınacağına genel bir bakış. +title: "Ağlar" +description: "Ethereum'un ağlarına ve uygulamanızı test etmek için test ağı ether'inin (ETH) nereden alınacağına genel bir bakış." lang: tr --- @@ -8,11 +8,11 @@ Ethereum ağları, Ethereum protokolü kullanarak iletişim kuran bağlantılı Ethereum hesabınız farklı ağlarda çalışacaktır, ancak hesap bakiyeniz ve işlem geçmişiniz ana Ethereum ağından taşınmayacaktır. Test amacıyla, hangi ağların mevcut olduğunu ve oynamak için test ağı ETH'sinin nasıl elde edileceğini bilmek yararlıdır. Güvenlik sebeplerinden dolayı test ağlarının ana ağlarda kullanılması veya bunun tam tersi genellikle önerilmez. -## Ön koşullar {#prerequisites} +## Ön Koşullar {#prerequisites} -Farklı ağları okumadan önce [Ethereum'un temellerini](/developers/docs/intro-to-ethereum/) anlamalısınız çünkü test ağları size Ethereum'un ucuz ve güvenli bir versiyonunu sunacaktır. +Farklı ağlar hakkında okumadan önce [Ethereum'un temellerini](/developers/docs/intro-to-ethereum/) anlamalısınız, çünkü test ağları size oynamanız için Ethereum'un ucuz ve güvenli bir sürümünü sunacaktır. -## Genel ağlar {#public-networks} +## Halka açık ağlar {#public-networks} Genel ağlara, internet bağlantısı olan herkes dünyanın her yerinde erişebilir. Herkes halka açık bir blok zincirinde işlemleri okuyabilir veya oluşturabilir ve yürütülen işlemleri doğrulayabilir. Akranlar arasındaki mutabakat, işlemlerin dahil edilmesine ve ağın durumuna karar verir. @@ -34,15 +34,11 @@ Test ağlarındaki ETH'nin gerçek değeri olmamalıdır; ancak nadirleşmiş ve #### Hangi Test Ağını kullanmalıyım? -Mevcut olarak istemci geliştiricilerin sürdürdüğü iki genel test ağı Sepolia ve Hoodi'dir. Sepolia, sözleşme ve uygulama geliştiricilerinin uygulamalarını test etmek için kullandığı bir ağdır. Hoodi ağı, protokol geliştiricilerinin ağ yükseltmelerini test etmelerine ve paydaşların doğrulayıcıları çalıştırmayı test etmelerine olanak sağlar. +İstemci geliştiricilerinin şu anda bakımını yaptığı iki halka açık test ağı Sepolia ve Hoodi'dir. Sepolia, sözleşme ve uygulama geliştiricilerinin uygulamalarını test etmek için kullandığı bir ağdır. Hoodi ağı, protokol geliştiricilerinin ağ yükseltmelerini test etmelerine ve paydaşların çalışan doğrulayıcıları test etmelerine olanak tanır. #### Sepolia {#sepolia} -**Sepolia uygulama geliştirme için önerilen test ağıdır**. Sepolia ağı izinli bir doğrulayıcı seti kullanır. Aslında bu oldukça yenidir, yani durum ve işlem geçmişi oldukça küçüktür. Yani bu, ağın senkronizasyon için hızlı olduğu ve ağın üzerinde düğüm çalıştırmanın düşük depolama alanı gerektirdiği anlamına gelir. Hızlıca düğüm çalıştırmak ve ağ ile doğrudan etkileşime geçmek isteyen kullanıcılar için kullanışlıdır. - -- İstemci ve test ekipleri tarafından kontrol edilen kapalı doğrulayıcı seti -- Yeni test ağı, diğer ağlara kıyasla daha az uygulama içerir -- Hızlı senkronizasyon ve düşük disk alanı gerektiren düğüm çalıştırma süreci +**Sepolia uygulama geliştirme için önerilen test ağıdır**. Sepolia ağı, istemci ve test ekipleri tarafından kontrol edilen izinli bir doğrulayıcı seti kullanır. ##### Kaynaklar @@ -54,20 +50,20 @@ Mevcut olarak istemci geliştiricilerin sürdürdüğü iki genel test ağı Sep ##### Musluklar -- [QuickNode Sepolia Musluğu](https://faucet.quicknode.com/drip) +- [Alchemy Sepolia Musluğu](https://www.alchemy.com/faucets/ethereum-sepolia) +- [Chain Platform Sepolia Musluğu](https://faucet.chainplatform.co/faucets/ethereum-sepolia/) +- [Chainstack Sepolia Musluğu](https://faucet.chainstack.com/sepolia-testnet-faucet) +- [Ethereum Ekosistem Musluğu](https://www.ethereum-ecosystem.com/faucets/ethereum-sepolia) +- [ethfaucet.com Sepolia Musluğu](https://ethfaucet.com/networks/ethereum) +- [Google Cloud Web3 Sepolia Musluğu](https://cloud.google.com/application/web3/faucet/ethereum/sepolia) - [Grabteeth](https://grabteeth.xyz/) -- [İş İspatı Musluğu](https://sepolia-faucet.pk910.de/) -- [Coinbase Cüzdanı Musluğu | Sepolia](https://coinbase.com/faucets/ethereum-sepolia-faucet) -- [Alchemy Sepolia musluğu](https://sepoliafaucet.com/) - [Infura Sepolia Musluğu](https://www.infura.io/faucet) -- [Chainstack Sepolia Musluğu](https://faucet.chainstack.com/sepolia-testnet-faucet) -- [Ethereum Ekosistemi musluğu](https://www.ethereum-ecosystem.com/faucets/ethereum-sepolia) +- [PoW Musluğu](https://sepolia-faucet.pk910.de/) +- [QuickNode Sepolia Musluğu](https://faucet.quicknode.com/ethereum/sepolia) #### Hoodi {#hoodi} -_Not: [Goerli test ağı kullanımdan kaldırılmıştır](https://ethereum-magicians.org/t/proposal-predictable-ethereum-testnet-lifecycle/11575/17) ve Hoodi ile değiştirilmiştir. Lütfen uygulamalarınızı Sepolia'ya taşımayı düşünün._ - -Hoodi doğrulama ve hisselemeyi test etme amaçlı bir test ağıdır. Hoodi ağı, bir test ağı doğrulayıcısı çalıştırmak isteyen kullanıcılara açıktır. Protokol yükseltmelerini ana ağa dağıtılmadan önce test etmek isteyen paydaşlar bundan dolayı Hoodi'yi kullanmalıdır. +Hoodi, doğrulamayı ve hisselemeyi test etmeye yönelik bir test ağıdır. Hoodi ağı, bir test ağı doğrulayıcısı çalıştırmak isteyen kullanıcılara açıktır. Ana ağa dağıtılmadan önce protokol yükseltmelerini test etmek isteyen paydaşlar bu nedenle Hoodi'yi kullanmalıdır. - Açık doğrulayıcı dizisi, paydaşlar ağ yükseltmelerini test edebilirler - Büyük durum, kompleks akıllı sözleşme etkileşimlerini test etmek için kullanışlıdır @@ -77,48 +73,102 @@ Hoodi doğrulama ve hisselemeyi test etme amaçlı bir test ağıdır. Hoodi ağ - [Web sitesi](https://hoodi.ethpandaops.io/) - [GitHub](https://github.com/eth-clients/hoodi) -- [Explorer](https://explorer.hoodi.ethpandaops.io/) -- [Checkpoint Sync](https://checkpoint-sync.hoodi.ethpandaops.io/) +- [Gezgin](https://explorer.hoodi.ethpandaops.io/) +- [Kontrol Noktası Senkronizasyonu](https://checkpoint-sync.hoodi.ethpandaops.io/) +- [Otterscan](https://hoodi.otterscan.io/) +- [Etherscan](https://hoodi.etherscan.io/) ##### Musluklar +- [Chain Platform Hoodi Musluğu](https://faucet.chainplatform.co/faucets/ethereum-hoodi/) - [Hoodi Musluğu](https://hoodi.ethpandaops.io/) +- [PoW Musluğu](https://hoodi-faucet.pk910.de/) + +#### Ephemery {#ephemery} + +Ephemery, her ay tamamen sıfırlanan benzersiz bir test ağı türüdür. Yürütme ve mutabakat durumu her 28 günde bir başlangıç durumuna geri döner, bu da test ağında olan her şeyin geçici olduğu anlamına gelir. Bu, onu kısa süreli testler, hızlı düğüm önyüklemesi ve kalıcılığa ihtiyaç duymayan 'merhaba dünya' türü uygulamalar için ideal kılar. + +- Her zaman yeni durum, doğrulayıcıların ve uygulamaların kısa süreli test edilmesi +- Yalnızca temel sözleşme setini içerir +- Açık doğrulayıcı seti ve büyük miktarda fona kolay erişim +- En düşük düğüm gereksinimleri ve en hızlı senkronizasyon, ortalama <5GB + +##### Kaynaklar + +- [Web sitesi](https://ephemery.dev/) +- [Github](https://github.com/ephemery-testnet/ephemery-resources) +- [Topluluk sohbeti](https://matrix.to/#/#staker-testnet:matrix.org) +- [Blockscout](https://explorer.ephemery.dev/) +- [Otterscan](https://otter.bordel.wtf/) +- [Beacon gezgini](https://beaconlight.ephemery.dev/) +- [Kontrol Noktası Senkronizasyonu](https://checkpoint-sync.ephemery.ethpandaops.io) +- [Launchpad](https://launchpad.ephemery.dev/) + +#### Musluklar + +- [Bordel Musluğu](https://faucet.bordel.wtf/) +- [Pk910 PoW Musluğu](https://ephemery-faucet.pk910.de/) -Hoodi test ağında bir Doğrulayıcı başlatmak için, [Hoodi başlangıç platformunu](https://hoodi.launchpad.ethereum.org/en/) kullanın. +#### Holesky (kullanımdan kaldırıldı) {#holesky} + +Holesky test ağı Eylül 2025 itibarıyla kullanımdan kaldırılmıştır. Hisseleme operatörleri ve altyapı sağlayıcıları bunun yerine doğrulayıcı testi için Hoodi'yi kullanmalıdır. + +- [Holesky Test Ağı Kapatma Duyurusu](https://blog.ethereum.org/2025/09/01/holesky-shutdown-announcement) - _EF Blog, 1 Eylül 2025_ +- [Holesky ve Hoodi Test Ağı Güncellemeleri](https://blog.ethereum.org/en/2025/03/18/hoodi-holesky) - _EF Blog, 18 Mart 2025_ ### Katman 2 test ağları {#layer-2-testnets} -[Katman 2 (L2)](/layer-2/), belirli Ethereum ölçeklendirme çözümlerini tanımlamak için kullanılan toplu bir terimdir. Katman 2, Ethereum'u genişleten ve Ethereum'un güvenlik garantilerini devralan ayrı bir blok zincirdir. Katman 2 test ağları genellikle genel Ethereum test ağlarına sıkı sıkıya bağlıdır. +[Katman 2 (L2)](/layer-2/), belirli bir Ethereum ölçeklendirme çözümleri setini tanımlamak için kullanılan kolektif bir terimdir. Katman 2, Ethereum'u genişleten ve Ethereum'un güvenlik garantilerini devralan ayrı bir blok zincirdir. Katman 2 test ağları genellikle genel Ethereum test ağlarına sıkı sıkıya bağlıdır. #### Arbitrum Sepolia {#arbitrum-sepolia} [Arbitrum](https://arbitrum.io/) için bir test ağı. +##### Kaynaklar + +- [Etherscan](https://sepolia.arbiscan.io/) +- [Blockscout](https://sepolia-explorer.arbitrum.io/) + ##### Musluklar -- [Chainlink musluğu](https://faucets.chain.link/arbitrum-sepolia) -- [Alchemy musluğu](https://www.alchemy.com/faucets/arbitrum-sepolia) +- [Alchemy Arbitrum Sepolia Musluğu](https://www.alchemy.com/faucets/arbitrum-sepolia) +- [Chainlink Arbitrum Sepolia musluğu](https://faucets.chain.link/arbitrum-sepolia) +- [ethfaucet.com Arbitrum Sepolia Musluğu](https://ethfaucet.com/networks/arbitrum) +- [QuickNode Arbitrum Sepolia Musluğu](https://faucet.quicknode.com/arbitrum/sepolia) #### Optimistic Sepolia {#optimistic-sepolia} -[Optimism](https://www.optimism.io/) için test ağı. +[Optimism](https://www.optimism.io/) için bir test ağı. + +##### Kaynaklar + +- [Etherscan](https://sepolia-optimistic.etherscan.io/) +- [Blockscout](https://optimism-sepolia.blockscout.com/) ##### Musluklar -- [Chainlink musluğu](https://faucets.chain.link/optimism-sepolia) -- [Alchemy musluğu](https://www.alchemy.com/faucets/optimism-sepolia) +- [Alchemy Musluğu](https://www.alchemy.com/faucets/optimism-sepolia) +- [Chainlink Musluğu](https://faucets.chain.link/optimism-sepolia) +- [ethfaucet.com Optimism Sepolia Musluğu](https://ethfaucet.com/networks/optimism) +- [Test Ağı Musluğu](https://docs.optimism.io/builders/tools/build/faucets) #### Starknet Sepolia {#starknet-sepolia} -[Starknet](https://www.starknet.io) için test ağı. +[Starknet](https://www.starknet.io) için bir test ağı. + +##### Kaynaklar + +- [Starkscan](https://sepolia.starkscan.co/) ##### Musluklar -- [Alchemy musluğu](https://www.alchemy.com/faucets/starknet-sepolia) +- [Alchemy Musluğu](https://www.alchemy.com/faucets/starknet-sepolia) +- [Blast Starknet Sepolia Musluğu](https://blastapi.io/faucets/starknet-sepolia-eth) +- [Starknet Musluğu](https://starknet-faucet.vercel.app/) ## Özel ağlar {#private-networks} -Bir Ethereum ağı, düğümleri genel bir ağa (yani Ana Ağ veya bir test ağı) bağlı değilse özel bir ağ değildir. Bu bağlamda özel, korumalı veya güvenli olmaktan ziyade yalnızca ayrılmış veya izole anlamına gelir. +Bir Ethereum ağı, düğümleri halka açık bir ağa (yani Ana Ağ veya bir test ağı) bağlı değilse özel bir ağdır. Bu bağlamda özel, korumalı veya güvenli olmaktan ziyade yalnızca ayrılmış veya izole anlamına gelir. ### Geliştirme ağları {#development-networks} @@ -132,12 +182,35 @@ Mutabakat süreci, güvenilen önceden tanımlanmış bir dizi düğüm tarafın Genel bir Ethereum ağı genel internete benziyorsa, bir konsorsiyum ağı özel bir intranet gibidir. +## Ethereum test ağlarına neden metro istasyonlarının adları veriliyor? {#why-naming} + +Birçok Ethereum test ağı, adını gerçek dünyadaki metro veya tren istasyonlarından alır. Bu adlandırma geleneği erken başlamıştır ve katkıda bulunanların yaşadığı veya çalıştığı küresel şehirleri yansıtır. Sembolik, akılda kalıcı ve pratiktir. Test ağlarının Ethereum ana ağından izole edilmesi gibi, metro hatları da yüzey trafiğinden ayrı olarak çalışır. + +### Yaygın olarak kullanılan ve eski test ağları {#common-and-legacy-testnets} + +- **Sepolia** - Yunanistan'ın Atina kentinde metro bağlantılı bir mahalle. Şu anda akıllı sözleşme ve dApp testi için kullanılmaktadır. +- **Hoodi** - Adını Hindistan'ın Bengaluru kentindeki Hoodi metro istasyonundan almıştır. Doğrulayıcı ve protokol yükseltme testi için kullanılır. +- **Goerli** _(kullanımdan kaldırıldı)_ - Adını Almanya'nın Berlin kentindeki Görlitzer Bahnhof'tan almıştır. +- **Rinkeby** _(kullanımdan kaldırıldı)_ - Adını Stockholm'de metro istasyonu olan bir banliyöden almıştır. +- **Ropsten** _(kullanımdan kaldırıldı)_ - Stockholm'de bir bölgeye ve eski feribot/metro terminaline atıfta bulunur. +- **Kovan** _(kullanımdan kaldırıldı)_ - Adını Singapur'daki bir MRT istasyonundan almıştır. +- **Morden** _(kullanımdan kaldırıldı)_ - Adını Londra Metrosu'ndaki bir istasyondan almıştır. Ethereum'un ilk halka açık test ağı. + +### Diğer özel test ağları {#other-testnets} + +Bazı test ağları kısa süreli veya yükseltmeye özel testler için oluşturulmuştur ve metro temalı olmak zorunda değildir: + +- **Holesky** _(kullanımdan kaldırıldı)_ - Adını Prag'daki Holešovice istasyonundan almıştır. Doğrulayıcı testi için kullanılmıştır; 2025'te kullanımdan kaldırılmıştır. +- **Kiln**, **Zhejiang**, **Shandong**, **Prater**, **Pyrmont**, **Olympic** _(tümü kullanımdan kaldırıldı)_ ve **Ephemery** - Birleşim, Shanghai gibi yükseltme simülasyonları veya doğrulayıcı deneyleri için özel olarak oluşturulmuştur. Bazı isimler metro tabanlı olmaktan çok bölgesel veya tematiktir. + +Metro istasyonu adlarını kullanmak, geliştiricilerin sayısal zincir kimliklerine güvenmek zorunda kalmadan test ağlarını hızlı bir şekilde tanımlamasına ve hatırlamasına yardımcı olur. Aynı zamanda Ethereum'un kültürünü de yansıtır: pratik, küresel ve insan merkezli. + ## İlgili araçlar {#related-tools} -- [Chainlist](https://chainlist.org/) _Cüzdanları ve sağlayıcıları uygun Zincir ve Ağ Kimliklerine bağlamaya yarayan bir EVM ağları listesi_ -- [EVM Tabanlı Zincirler](https://github.com/ethereum-lists/chains) _Chainlist'i destekleyen zincir üst verisinin GitHub deposu_ +- [Chainlist](https://chainlist.org/) _cüzdanları ve sağlayıcıları uygun Zincir Kimliğine ve Ağ Kimliğine bağlamak için kullanılan EVM ağları listesi_ +- [EVM tabanlı Zincirler](https://github.com/ethereum-lists/chains) _Chainlist'i güçlendiren zincir meta verilerinin GitHub deposu_ -## Daha fazla bilgi {#further-reading} +## Daha fazla kaynak {#further-reading} -- [Öneri: Tahmin Edilebilir Ethereum Test Ağı Yaşam Döngüsü](https://ethereum-magicians.org/t/proposal-predictable-ethereum-testnet-lifecycle/11575/17) -- [Ethereum Test Ağlarının Gelişimi](https://etherworld.co/2022/08/19/the-evolution-of-ethereum-testnet/) +- [Öneri: Öngörülebilir Ethereum Test Ağı Yaşam Döngüsü](https://ethereum-magicians.org/t/proposal-predictable-ethereum-testnet-lifecycle/11575/17) +- [Ethereum Test Ağlarının Evrimi](https://etherworld.co/2022/08/19/the-evolution-of-ethereum-testnet/) diff --git a/public/content/translations/tr/developers/docs/nodes-and-clients/archive-nodes/index.md b/public/content/translations/tr/developers/docs/nodes-and-clients/archive-nodes/index.md index d37b9a48152..b1aa8c6f1bf 100644 --- a/public/content/translations/tr/developers/docs/nodes-and-clients/archive-nodes/index.md +++ b/public/content/translations/tr/developers/docs/nodes-and-clients/archive-nodes/index.md @@ -1,29 +1,29 @@ --- -title: Ethereum Arşiv Düğümü -description: Arşiv düğümlerine genel bakış +title: "Ethereum Arşiv Düğümü" +description: "Arşiv düğümlerine genel bakış" lang: tr sidebarDepth: 2 --- Bir arşiv düğümü, tüm geçmiş durumların arşivini oluşturacak şekilde inşa edilmiş bir ethereum istemcisi örneğidir. Berlirli kullanım durumlarında kullanışlı bir araçtır, ancak çalıştırmak tam bir düğümü çalıştırmaktan daha zor olabilir. -## Ön koşullar {#prerequisites} +## Ön Koşullar {#prerequisites} -[Ethereum düğümünü](/developers/docs/nodes-and-clients/), [mimarisini](/developers/docs/nodes-and-clients/node-architecture/), [senkronizasyon stratejilerini](/developers/docs/nodes-and-clients/#sync-modes), [çalıştırma](/developers/docs/nodes-and-clients/run-a-node/) uygulamalarını ve [kullanımını](/developers/docs/apis/json-rpc/) anlamalısınız. +Bir [Ethereum düğümü](/developers/docs/nodes-and-clients/) kavramını, [mimarisi](/developers/docs/nodes-and-clients/node-architecture/), [senkronizasyon stratejileri](/developers/docs/nodes-and-clients/#sync-modes), [çalıştırma](/developers/docs/nodes-and-clients/run-a-node/) ve [kullanma](/developers/docs/apis/json-rpc/) pratiklerini anlamalısınız. ## Arşiv düğümü nedir -Arşiv düğümünün önemini kavramak için, "durum" kavramını zihninizde netleştirin Ethereum _işlem tabanlı bir durum makinesi_ olarak adlandırılabilir. Durumlarını değiştiren hesaplar ve uygulamaların işlemlerini yürütmeyi içerir. Tüm hesaplar ve sözleşmeler hakkında bilgi içeren global veriler durum adı verilen trie veritabanında saklanır. Bu, yürütüm katmanı (EL) istemcisi tarafından işlenir ve şunları içerir: +Arşiv düğümünün önemini kavramak için, "durum" kavramını zihninizde netleştirin Ethereum, _işlem tabanlı durum makinesi_ olarak adlandırılabilir. Durumlarını değiştiren hesaplar ve uygulamaların işlemlerini yürütmeyi içerir. Tüm hesaplar ve sözleşmeler hakkında bilgi içeren global veriler durum adı verilen trie veritabanında saklanır. Bu, yürütüm katmanı (EL) istemcisi tarafından işlenir ve şunları içerir: - Hesap bakiyeleri ve nonce'ler - Sözleşme kodu ve depolama -- Mutabakat ile ilgili veriler, örn. Hisseleme Mevduat Sözleşmesi +- Mutabakatla ilgili veriler, örn. Hisseleme Mevduat Sözleşmesi -Ethereum istemcileri, ağ ile etkileşime girmek, yeni bloklar üretmek ve oluşturmak için, en güncel değişiklikleri (zinricin ucunu) ve dolayısıyla mevcut durumu takip etmelidir. Tam düğüm olarak ayarlanmış yürütüm katmanı istemcileri ağın durumunu doğrular ve takip eder fakat yalnızca birkaç geçmiş durumu önbellekte tutar. Örneğin durum sondaki 128 bloka bağlıdır, böylece yeni zincir düzenlemeleri işlenebilir ve son verilere hızlı erişim sağlanabilir. Son durum, istemcilerin gelen işlemleri doğrulaması ve ağı kullanması için gereken şeydir. +Ethereum istemcileri, ağ ile etkileşime girmek, yeni bloklar üretmek ve oluşturmak için, en güncel değişiklikleri (zinricin ucunu) ve dolayısıyla mevcut durumu takip etmelidir. Tam düğüm olarak yapılandırılmış bir yürütme katmanı istemcisi, ağın en son durumunu doğrular ve takip eder, ancak yalnızca geçmişteki birkaç durumu, örn. son 128 blokla ilişkili durumu önbelleğe alır; böylece zincir yeniden düzenlemelerini işleyebilir ve son verilere hızlı erişim sağlayabilir. Son durum, istemcilerin gelen işlemleri doğrulaması ve ağı kullanması için gereken şeydir. Durumu, bloklardaki anlık bir ağ görüntüsü olarak ve arşivi ise geçmişin tekrarı gibi düşünebilirsiniz. -Daha eski durumlar, ağın çalışması için gerekli olmadığından ve zamanı geçmiş verilerin tutulması istemci için gereksiz ve yararsız olacağından güvenli bir şekilde kaldırılabilir. Belli bir blok öncesine ait bloklar (ör. baştan 128 blok gerisi) verimli bir şekilde atılır. Tam düğümler sadece eski blok zincir verilerini (blokları ve işemleri) ve ara sıra geçmiş görüntüleri tutar böylece istendiğinde eski durumları yeniden yaratabilir. Bunu eski işlemleri EVM'de (Ethereum Sanal Makinesi'nde) tekrar gerçekleştirerek yaparlar ama bu, istenen durum en yakındaki geçmiş görüntüden uzaksa hesaplama açısından maliyetli olabilir. +Daha eski durumlar, ağın çalışması için gerekli olmadığından ve zamanı geçmiş verilerin tutulması istemci için gereksiz ve yararsız olacağından güvenli bir şekilde kaldırılabilir. Yakın zamandaki bir bloktan (örn. tepeden 128 blok öncesi) önce var olan durumlar etkili bir şekilde atılır. Tam düğümler sadece eski blok zincir verilerini (blokları ve işemleri) ve ara sıra geçmiş görüntüleri tutar böylece istendiğinde eski durumları yeniden yaratabilir. Bunu eski işlemleri EVM'de (Ethereum Sanal Makinesi'nde) tekrar gerçekleştirerek yaparlar ama bu, istenen durum en yakındaki geçmiş görüntüden uzaksa hesaplama açısından maliyetli olabilir. Ancak bu, tam düğümde eski bir duruma erişmenin yüksek düzeyde hesaplama gerektirdiğini gösterir. İstemcinin tüm işlemleri tekrardan gerçekleştirmesi ve eski bir durumu başlangıç blokundan itibaren hesaplaması gerekebilir. Arşiv düğümleri bu sorunu, en yeni durumlar yerine her blok oluşturulduktan sonra oluşan durumların hepsini depolayarak çözer. Bu daha yüksek saklama alanı gerektiren bir seçimdir. @@ -35,10 +35,10 @@ Ancak bu, tam düğümde eski bir duruma erişmenin yüksek düzeyde hesaplama g Durum arşivinin en büyük avantajı, geçmiş durumlarla ilgili sorulara hızlı erişimidir. Örneğin arşiv düğümü aşağıdaki gibi sonuçlar döndürür: -- _0x1337... hesabının blok 15537393'teki ETH bakiyesi neydi?_ +- _0x1337... nolu hesabın ETH bakiyesi neydi... 15537393 numaralı blokta?_ - _Blok 1920000'daki sözleşme 0x'in token 0x bakiyesi nedir?_ -Yukarıda açıklandığı gibi, tam düğümler bu verileri EVM (Ethereum Sanal Makinesi) uygulaması ile üretir ve bu CPU ve zaman gerektirir. Arşiv düğümleri bunlara disk üzerinden erişir ve anında yanıt verir. Bu altyapının belirli bölümleri için kullanışlıdır, örneğin: +Yukarıda açıklandığı gibi, tam düğümler bu verileri EVM (Ethereum Sanal Makinesi) uygulaması ile üretir ve bu CPU ve zaman gerektirir. Arşiv düğümleri bunlara disk üzerinden erişir ve anında yanıt verir. Bu, altyapının belirli bölümleri için kullanışlı bir özelliktir, örneğin: - Blok arayıcıları gibi servis sağlayıcılar - Araştırmacılar @@ -46,35 +46,36 @@ Yukarıda açıklandığı gibi, tam düğümler bu verileri EVM (Ethereum Sanal - Merkezisyetsiz uygulama geliştiricileri - Denetim ve uyum -Eski verilere ulaşmayı sağlayan bazı ücretsiz [hizmetler](/developers/docs/nodes-and-clients/nodes-as-a-service/) vardır. Arşiv düğümlerini çalıştırmak daha maliyetli olduğu için bu hizmetlere erişim genellikle sınırlıdır ve sürekli değildir. Eğer projeniz geçmiş verilere sürekli erişim gerektiriyorsa, kendiniz bir tane çalıştırmayı düşünmelisiniz. +Geçmiş verilere erişim sağlayan çeşitli ücretsiz [hizmetler](/developers/docs/nodes-and-clients/nodes-as-a-service/) de vardır. Arşiv düğümlerini çalıştırmak daha maliyetli olduğu için bu hizmetlere erişim genellikle sınırlıdır ve sürekli değildir. Eğer projeniz geçmiş verilere sürekli erişim gerektiriyorsa, kendiniz bir tane çalıştırmayı düşünmelisiniz. ## Uygulamalar ve kullanim Bu bağlamda arşiv düğümleri, durum veritabanı işlerken ve JSON-RPC uç noktaları sağlarken kullanıcılara bakan yürütüm katmanı tarafından sağlanan veri anlamına gelir. Yapılandırma seçenekleri, senkronizasyon süresi ve veritabanı boyutu istemciye göre değişebilir. Detaylar için lütfen istemci tarafından sağlanan dökümanları referans alın. -Kendi arşiv düğümünüzü başlatmadan önce, istemciler arasındaki farklar hakkında bilgi sahibi olun, özellikle çeşitli [donanım gereklilikleri](/developers/docs/nodes-and-clients/run-a-node/#requirements) hakkında. Pek çok istemci bu özellik için optimize edilmemiştir ve arşivleri 12 TB'den daha fazla alan gerektirir. Buna karşın Erigon gibi uygulamalar aynı veriyi 3 TB altında saklayabilir. Dolayısıyla bu uygulamalar arşiv düğümü çalıştırmanın en verimli yolu haline gelir. +Kendi arşiv düğümünüzü başlatmadan önce, istemciler arasındaki farklar ve özellikle çeşitli [donanım gereksinimleri](/developers/docs/nodes-and-clients/run-a-node/#requirements) hakkında bilgi edinin. Pek çok istemci bu özellik için optimize edilmemiştir ve arşivleri 12 TB'den daha fazla alan gerektirir. Buna karşın Erigon gibi uygulamalar aynı veriyi 3 TB altında saklayabilir. Dolayısıyla bu uygulamalar arşiv düğümü çalıştırmanın en verimli yolu haline gelir. ## Tavsiye edilen uygulamalar -[Bir düğümü çalıştırmaya yönelik genel tavsiyeler](/developers/docs/nodes-and-clients/run-a-node/) dışında, bir arşiv düğümü donanım ve bakım açısından daha fazla şey gerektirebilir. Erigon'un [ana özellikleri](https://github.com/ledgerwatch/erigon#key-features) düşünüldüğünde en pratik bakış açısı [Erigon](/developers/docs/nodes-and-clients/#erigon) istemci ugulamasının kullanılmasıdır. +[Bir düğüm çalıştırmaya yönelik genel önerilerin](/developers/docs/nodes-and-clients/run-a-node/) yanı sıra, bir arşiv düğümü donanım ve bakım açısından daha zorlayıcı olabilir. Erigon'un [temel özellikleri](https://github.com/ledgerwatch/erigon#key-features) göz önüne alındığında, en pratik yaklaşım [Erigon](/developers/docs/nodes-and-clients/#erigon) istemci uygulamasını kullanmaktır. ### Donanım -Belirli bir mod için donanım gereksinimlerini müşteri dökümanlarında doğruladığınızdan her zaman emin olun. Arşiv düğümleri için en büyük gereklilik disk alanıdır. İstemciye bağlı olarak 3 TB ile 12 TB arasında değişir. Daha büyük miktardaki veriler için HDD daha iyi bir çözüm olarak düşünülse bile, senkronize etmek ve zincirin başını sürekli güncellemek SSD sürücülerini gerektirir. [SATA](https://www.cleverfiles.com/help/sata-hard-drive.html) sürücüleri yeterlidi fakat güvenilir kalitede, en az [TLC'de](https://blog.synology.com/tlc-vs-qlc-ssds-what-are-the-differences) olmalıdırlar. Diskler yeterli yuvaya sahip bir masaüstü bilgisayara veya sunucuya yerleştirilebilir. Bunun gibi özel cihazlar, yüksek çalışma süresi gerektiren düğümleri çalıştırmak için idealdir. Bir dizüstü bilgisayarda çalıştırmak tamamıyla mümkün, ancak taşıması ek bir maliyete tabi olacaktır. +Belirli bir mod için donanım gereksinimlerini müşteri dökümanlarında doğruladığınızdan her zaman emin olun. +Arşiv düğümleri için en büyük gereklilik disk alanıdır. İstemciye bağlı olarak 3 TB ile 12 TB arasında değişir. Daha büyük miktardaki veriler için HDD daha iyi bir çözüm olarak düşünülse bile, senkronize etmek ve zincirin başını sürekli güncellemek SSD sürücülerini gerektirir. [SATA](https://www.cleverfiles.com/help/sata-hard-drive.html) sürücüler yeterince iyidir ancak en az [TLC](https://blog.synology.com/tlc-vs-qlc-ssds-what-are-the-differences) olmak üzere güvenilir kalitede olmalıdır. Diskler yeterli yuvaya sahip bir masaüstü bilgisayara veya sunucuya yerleştirilebilir. Bunun gibi özel cihazlar, yüksek çalışma süresi gerektiren düğümleri çalıştırmak için idealdir. Bir dizüstü bilgisayarda çalıştırmak tamamıyla mümkün, ancak taşıması ek bir maliyete tabi olacaktır. -Tüm veri bir hacme sığmalıdır, bu yüzden diskler bağlı olmalıdır, örneğin [RAID0](https://en.wikipedia.org/wiki/Standard_RAID_levels#RAID_0) veya LVM ile. Verilerin herhangi bir düşük seviyeli hata olmadan doğru bir şekilde diske yazılmasını sağlayan "Yazma sırasında kopyalama" özelliğini desteklediği için [ZFS](https://en.wikipedia.org/wiki/ZFS) kullanmayı da düşünmek faydalı olabilir. +Tüm verilerin tek bir birime sığması gerekir, bu nedenle disklerin, örn. [RAID0](https://en.wikipedia.org/wiki/Standard_RAID_levels#RAID_0) veya LVM ile birleştirilmesi gerekir. Verilerin düşük seviyeli hatalar olmadan diske doğru bir şekilde yazılmasını sağlayan "Yazma sırasında kopyalama" özelliğini desteklediği için [ZFS](https://en.wikipedia.org/wiki/ZFS) kullanmayı düşünmek de faydalı olabilir. Kazara gerçekleşebilecek veritabanı bozulmalarını daha kararlı ve güvenli bir şekilde önlemek için, özellikle profesyonel kurulumlarda sisteminiz destekliyorsa [ECC memory](https://en.wikipedia.org/wiki/ECC_memory) kullanmayı düşünebilirsiniz. RAM boyutunun genellikle bir tam düğümle aynı olması tavsiye edilir, ancak daha fazla RAM senkronizasyonu hızlandırmaya yardımcı olabilir. İlk senronizasyon sırasında arşiv modundaki istemciler başlangıç blokundan itibaren tüm işlemleri yeniden gerçekleştirir. Yürütme hızı çoğunlukla CPU tarafından sınırlanır, bu nedenle daha hızlı bir CPU, ilk senkronizasyon süresine yardımcı olabilir. Ortalama bir tüketici bilgisayarında, ilk senkronizasyon bir aya yakın sürebilir. -## Daha fazla bilgi {#further-reading} +## Daha fazla kaynak {#further-reading} -- [Ethereum Tam Düğümü - Arşiv Düğümü](https://www.quicknode.com/guides/infrastructure/ethereum-full-node-vs-archive-node) - _QuickNode, Eylül 2022_ -- [Kendi Ethereum Arşiv Düğümünü İnşa Et](https://tjayrush.medium.com/building-your-own-ethereum-archive-node-72c014affc09) - _Thomas Jay Rush, Ağustos 2021_ -- [Erigon, Erigon'un RPC (Uzaktan Prosedür Çağrısı) ve TrueBlocks (scrape ve API) hizmet olarak nasıl kurulur](https://magnushansson.xyz/blog_posts/crypto_defi/2022-01-10-Erigon-Trueblocks) _– Magnus Hansson, Eylül 2022'de güncellendi_ +- [Ethereum Tam Düğümü ve Arşiv Düğümü](https://www.quicknode.com/guides/infrastructure/ethereum-full-node-vs-archive-node) - _QuickNode, Eylül 2022_ +- [Kendi Ethereum Arşiv Düğümünüzü Oluşturma](https://tjayrush.medium.com/building-your-own-ethereum-archive-node-72c014affc09) - _Thomas Jay Rush, Ağustos 2021_ +- [Erigon, Erigon RPC ve TrueBlocks'un (scrape ve API) hizmet olarak nasıl kurulacağı](https://magnushansson.xyz/blog_posts/crypto_defi/2022-01-10-Erigon-Trueblocks) _– Magnus Hansson, Eylül 2022'de güncellendi_ -## İlgili konular {#related-topics} +## Alakalı başlıklar {#related-topics} -- [ Düğümler ve İstemciler](/developers/docs/nodes-and-clients/) +- [Düğümler ve istemciler](/developers/docs/nodes-and-clients/) - [Bir düğüm çalıştırma](/developers/docs/nodes-and-clients/run-a-node/) diff --git a/public/content/translations/tr/developers/docs/nodes-and-clients/bootnodes/index.md b/public/content/translations/tr/developers/docs/nodes-and-clients/bootnodes/index.md index d6cc59ef459..3d06b9f534c 100644 --- a/public/content/translations/tr/developers/docs/nodes-and-clients/bootnodes/index.md +++ b/public/content/translations/tr/developers/docs/nodes-and-clients/bootnodes/index.md @@ -1,31 +1,31 @@ --- -title: EthereumEthereum Başlangıç Düğümüne Giriş -description: Başlangıç düğümlerini anlamak için ihtiyacın olan temel bilgiler +title: "EthereumEthereum Başlangıç Düğümüne Giriş" +description: "Başlangıç düğümlerini anlamak için ihtiyacın olan temel bilgiler" lang: tr --- Yeni bir düğüm Ethereum ağına katıldığında, yeni düğümler keşfetmek için halihazırda ağda bulunan düğümlerle bağlantı kurmaya ihtiyaç duyar. Ethereum ağındaki bu giriş noktaları başlangıç düğümü olarak adlandırılır. İstemciler genellikle kodlanmış bir başlangıç düğümleri listesi içerir. Bu başlangıç düğümleri tipik olarak Ethereum Foundation geliştirici takımı ya da istemci takımı tarafından çalıştırılır. Başlangıç düğümlerinin statik düğümler ile aynı olmadığını unutmayın. Statik düğümler tekrar tekrar çağırılırken, başlangıç düğümleri yalnızca, bağlantı için yeterli düğüm olmadığında ve bir düğümün yeni bağlantılar başlatması gerektiğinde çağırılır. -## Bir başlangıc düğümüne bağlanmak {#connect-to-a-bootnode} +## Bir bootnode'a bağlanın {#connect-to-a-bootnode} -Çoğu istemci yerleşik bir başlangıç düğümü listesine sahiptir, ancak siz ayrıca kendi başlangıç düğümünüzü çalıştırmak isteyebilirsiniz ya da istemcinin kodlanmış listesinden bir düğümü kullanmak istemeyebilirsiniz. Böyle bir durumda, istemcinize başlarken bunu belirtebilirsiniz (Geth için bir örnek: lütfen istemci dokümanlarınızı kontrol edin): +Çoğu istemcinin yerleşik bir bootnode listesi vardır, ancak kendi bootnode'unuzu çalıştırmak veya istemcinin sabit kodlanmış listesinde olmayan birini kullanmak da isteyebilirsiniz. Böyle bir durumda, istemcinize başlarken bunu belirtebilirsiniz (Geth için bir örnek: lütfen istemci dokümanlarınızı kontrol edin): ``` geth --bootnodes "enode://@:" ``` -## Bir başlangıç düğümü çalıştırın {#run-a-bootnode} +## Bir bootnode çalıştırın {#run-a-bootnode} -Başlangıç düğümleri, NAT'nin ([Ağ Adres Çevirisi](https://www.geeksforgeeks.org/network-address-translation-nat/)) arkasında bulunmayan tam düğümlerdir. Her tam düğüm halka açık olduğu taktirde, bir başlangıç düğümü gibi hareket edebilir. +Bootnode'lar, bir NAT'ın ([Ağ Adresi Çevirisi](https://www.geeksforgeeks.org/network-address-translation-nat/)) arkasında olmayan tam düğümlerdir. Her tam düğüm halka açık olduğu taktirde, bir başlangıç düğümü gibi hareket edebilir. -Bir düğümü başlattığınızda, başkalarının düğümünüzle bağlantı kurabilmesi için [enode](/developers/docs/networking-layer/network-addresses/#enode), olarak adlandırılan (Ethereum ağında düğümlerin birbirleriyle iletişim kurmak için kullandıkları kimlik bilgisi) bu genel kimlik bilgisini kaydetmelidir. +Bir düğüm başlattığınızda, başkalarının düğümünüze bağlanmak için kullanabileceği, herkese açık bir tanımlayıcı olan [enode](/developers/docs/networking-layer/network-addresses/#enode) kimliğiniz kaydedilmelidir. Enode genellikle her yeniden başlatmada yeniden oluşur, bu yüzden kendi başlangıç düğümünüz için kalıcı bir enode oluşturmak üzere istemci dokümanlarınıza baktığınızdan emin olun. Iyi bir başlangıç düğümü olmak için, kendisine bağlanabilecek maksimum eş düğüm sayısını arttırmak iyi bir fikirdir. Çok sayıda eş düğüm ile başlangıç düğümünü çalıştırmak, bant genişliği gereksinimini önemli ölçüde arttırır. -## Mevcut başlangıç düğümleri {#available-bootnodes} +## Mevcut bootnode'lar {#available-bootnodes} -Go-ethereum içindeki yerleşik başlangıç düğümleriinin bir listesine [buradan](https://github.com/ethereum/go-ethereum/blob/master/params/bootnodes.go#L23) ulaşılabilir. Bu başlangıç düğümleri, Ethereum Foundation ve go-ethereum ekibi tarafından korunur. +go-ethereum'daki yerleşik bootnode'ların listesini [burada](https://github.com/ethereum/go-ethereum/blob/master/params/bootnodes.go#L23) bulabilirsiniz. Bu başlangıç düğümleri, Ethereum Foundation ve go-ethereum ekibi tarafından korunur. Gönüllüler tarafından tutulan başka başlangıç düğümü listeleri de mevcuttur. Lütfen en az bir resmi başlangıç düğümüne sahip olduğunuzdan emin olun, aksi tadirde "tutulma" saldırısına maruz kalabilirsiniz. diff --git a/public/content/translations/tr/developers/docs/nodes-and-clients/client-diversity/index.md b/public/content/translations/tr/developers/docs/nodes-and-clients/client-diversity/index.md index 821d91a463a..6e08773ea8b 100644 --- a/public/content/translations/tr/developers/docs/nodes-and-clients/client-diversity/index.md +++ b/public/content/translations/tr/developers/docs/nodes-and-clients/client-diversity/index.md @@ -1,19 +1,19 @@ --- -title: İstemci çeşitliliği -description: Ethereum istemci çeşitliliğinin önemine dair üst düzey bir açıklama. +title: "İstemci çeşitliliği" +description: "Ethereum istemci çeşitliliğinin önemine dair üst düzey bir açıklama." lang: tr sidebarDepth: 2 --- Ethereum düğümünün davranışı, çalıştırdığı istemci yazılımı tarafından kontrol edilir. Her biri farklı dillerde ayrı takımlar tarafından geliştirilen ve sürdürülen birden çok kullanılabilir seviyede Ethereum istemcisi bulunmaktadır. İstemciler, istemcilerin birbiriyle kesintisiz biçimde iletişim kuracağı, aynı fonksiyonelliğe sahip olacağı ve eş değer bir kullanıcı deneyimi sunacağı ortak özellikler üzerine kurulmuştur. Ancak, şu anda düğümler arasında istemcilerin dağıtımı ağ güçlendirmenin tam potansiyeline erişmesi için yeterince eşit değildir. İdeal olarak kullanıcılar ağa olabildiğince istemci çeşitliliği getirmek için farklı istemciler arasında aşağı yukarı eşit olarak dağılırlar. -## Ön koşullar {#prerequisites} +## Ön Koşullar {#prerequisites} -Düğümlerin ve istemcilerin ne olduğu konusunda henüz bir fikriniz yoksa, [düğümler ve istemciler](/developers/docs/nodes-and-clients/) kısmına bakın. [Yürütme](/glossary/#execution-layer) ve [mutabakat](/glossary/#consensus-layer) katmanları sözlükte tanımlanmıştır. +Düğümlerin ve istemcilerin ne olduğunu henüz anlamadıysanız, [düğümler ve istemciler](/developers/docs/nodes-and-clients/) sayfasına göz atın. [Yürütme](/glossary/#execution-layer) ve [mutabakat](/glossary/#consensus-layer) katmanları sözlükte tanımlanmıştır. ## Neden birden fazla istemci var? {#why-multiple-clients} -Birden fazla, bağımsız geliştirilen ve sürdürülen istemci bulunmaktadır çünkü istemci çeşitliliği ağı saldırılara ve hatalara karşı daha dayanıklı hale getirir. Birden fazla istemci Ethereum'a özel bir güçtür - diğer blok zincirler tek bir istemcinin yanılmazlığına güvenir. Ancak, sadece birden fazla istemci olması yetmez, topluluk tarafından benimsenmiş ve toplam aktif düğümlerin onların arasında neredeyse eş olarak dağıtılmış olması gerekir. +Birden fazla, bağımsız geliştirilen ve sürdürülen istemci bulunmaktadır çünkü istemci çeşitliliği ağı saldırılara ve hatalara karşı daha dayanıklı hale getirir. Birden fazla istemci Ethereum'a özel bir güçtür - diğer blok zincirler tek bir istemcinin yanılmazlığına güvenir. Ancak, yalnızca birden fazla istemcinin mevcut olması yeterli değildir, bunların topluluk tarafından benimsenmesi ve toplam aktif düğümlerin aralarında nispeten eşit bir şekilde dağıtılması gerekir. ## İstemci çeşitliliği neden önemli? {#client-diversity-importance} @@ -25,85 +25,108 @@ Tekil bir istemcideki hata Ethereum düğümlerinin azınlık bir kısmını tem ### Saldırılara karşı dayanıklılık {#resilience} -İstemci çeşitliliği saldırılara karşı da dayanıklılık sağlar. Örneğin, [spesifik bir istemciyi](https://twitter.com/vdWijden/status/1437712249926393858) zincirin özel bir dalına doğru kandıran bir saldırının başarılı olma ihtimali düşüktür çünkü diğer istemcilerin aynı şekilde saldırılabilir olması muhtemel değildir ve normal zincir bozulmamış şekilde durur. Düşük istemci çeşitliliği, baskın istemciye yönelik bir saldırıyla ilişkilendirilen riski arttırır. İstemci çeşitliliği, ağdaki kötü niyetli saldırılara karşı önemli bir savunma olduğunu zaten kanıtlamıştır, örneğin 2016'daki Şanghay hizmet reddi saldırısı, saldırganların baskın istemciyi (Geth) blok başına on binlerce kez yavaş bir disk girdi/çıktı işlemi yürütmesi için kandırabilmeleri nedeniyle mümkün oldu. Çünkü açığı paylaşmayan alternatif istemciler de çevrimiçiydi, Geth'teki açık kapatılırken Ethereum saldırıya karşı koymayı ve çalışmaya devam etmeyi başarmıştı. +İstemci çeşitliliği saldırılara karşı da dayanıklılık sağlar. Örneğin, zincirin belirli bir dalında [belirli bir istemciyi tuzağa düşüren](https://twitter.com/vdWijden/status/1437712249926393858) bir saldırının başarılı olma olasılığı düşüktür çünkü diğer istemcilerin aynı şekilde istismar edilmesi olası değildir ve kanonik zincir bozulmadan kalır. Düşük istemci çeşitliliği, baskın istemciye yönelik bir saldırıyla ilişkilendirilen riski arttırır. İstemci çeşitliliğinin ağdaki kötü niyetli saldırılara karşı önemli bir savunma olduğu kanıtlanmıştır. Örneğin, 2016'daki Şanghay hizmet reddi saldırısı, saldırganların baskın istemciyi (Geth) blok başına on binlerce kez yavaş bir disk G/Ç işlemi yürütmeye yönlendirebilmesi nedeniyle mümkün olmuştur. Çünkü açığı paylaşmayan alternatif istemciler de çevrimiçiydi, Geth'teki açık kapatılırken Ethereum saldırıya karşı koymayı ve çalışmaya devam etmeyi başarmıştı. -### Hisse kanıtı nihayeti {#finality} +### Hisse ispatı kesinliği {#finality} Ethereum düğümlerinin %33'ünden fazlasına sahip olan bir fikir birliği katmanındaki bir açık fikir birliği katmanının kesinleşmesini engelleyebilirdi, yani kullanıcılar işlemlerin bir noktada geri alınmayacağına veya değiştirilmeyeceğine güvenemezdi. Bu özellikle DeFi gibi Ethereum üzerinde inşa edilmiş birçok uygulama için bayağı sıkıntılı olurdu. - Daha kötüsü, üçte ikilik bir çoğunluğa sahip olan bir istemcideki kritik bir hata zincirin hatalı biçimde ayrılmasına ve kesinleşmesine yol açabilirdi, bu da doğrulayıcıların büyük bir kısmının geçersiz bir zincirde takılı kalmasına sebep olurdu. Eğer doğru zincire geri katılmak isterlerse, bu doğrulayıcılar ya cezalandırma ile ya da yavaş ve pahalı bir gönüllü çekilme ve yeniden aktifleştirme ile karşı karşıya kalırlardı. Bir kesintinin büyüklüğü maksimum olarak üçte ikilik bir çoğunluk cezalandırılacak şekilde (32 ETH) sorunlu düğümlerin sayısı ile ölçeklendirilir. + Daha da kötüsü, üçte iki çoğunluğa sahip bir istemcideki kritik bir hata, zincirin yanlış bir şekilde bölünmesine ve kesinleşmesine neden olarak çok sayıda doğrulayıcının geçersiz bir zincirde takılıp kalmasına yol açabilir. Eğer doğru zincire geri katılmak isterlerse, bu doğrulayıcılar ya cezalandırma ile ya da yavaş ve pahalı bir gönüllü çekilme ve yeniden aktifleştirme ile karşı karşıya kalırlardı. Bir kesintinin büyüklüğü maksimum olarak üçte ikilik bir çoğunluk cezalandırılacak şekilde (32 ETH) sorunlu düğümlerin sayısı ile ölçeklendirilir. Bunlar muhtemel olmayan senaryolar olsa da, Ethereum ekosistemi istemcilerin aktif düğümler arasındaki dağıtımını eşitleyerek riski azaltabilir. İdeal olarak, hiçbir fikir birliği istemcisi, toplam düğümlerin %33'lük bir kısmına sahip olamaz. -### Ortak sorumluluk {#responsibility} +### Paylaşılan sorumluluk {#responsibility} Çoğunluk istemciye sahip olmanın bir insan maliyeti de vardır. Küçük bir geliştirme ekibine aşırı baskı ve sorumluluk yükler. İstemci çeşitliliği ne kadar azsa, çoğunluk istemciyi koruyan geliştiricilerin sorumluluk yükü o kadar büyük olur. Bu sorumluluğu birden fazla ekibe yaymak, hem Ethereum'un düğüm ağının hem de insan ağının durumu için için iyidir. ## Mevcut istemci çeşitliliği {#current-client-diversity} -![İstemci çeşitliliğini gösteren pasta grafiği](./client-diversity.png) _[ethernodes.org](https://ethernodes.org) ve [clientdiversity.org](https://clientdiversity.org/) diyagram verisi_ +### Yürütme İstemcileri {#execution-clients-breakdown} -Yukarıdaki iki pasta grafiği yürütüm ve fikir birliği katmanları için mevcut istemci çeşitliliğini resmetmektedir (yazıldığı Ocak 2022 esnasında). Yürütüm katmanı büyük oranda [Geth](https://geth.ethereum.org/) tarafından domine edilmiştir, uzak ikinci sırada [Open Ethereum](https://openethereum.github.io/) gelir, [Erigon](https://github.com/ledgerwatch/erigon) üçüncü ve [Nethermind](https://nethermind.io/) dördüncüdür, diğer istemciler de ağın %1'den azını kapsar. Fikir birliği katmanında en yaygın kullanılan istemci - [Prysm](https://prysmaticlabs.com/#projects) - Geth kadar baskın olmasa da yine de ağın %60'tan fazlasını temsil eder. [Lighthouse](https://lighthouse.sigmaprime.io/) ve [Teku](https://consensys.net/knowledge-base/ethereum-2/teku/) sırasıyla 20% ve 14% civarını kapsar ve diğer istemciler nadiren kullanılır. + -Yürütüm katmanı verileri, 23 Ocak 2022 tarihinde [Ethernodes](https://ethernodes.org)'tan alınmıştır. Fikir birliği istemcileri hakkındaki veriler [Micheal Sproul](https://github.com/sigp/blockprint)'dan alınmıştır. Fikir birliği istemcisi verilerinin elde edilmesi daha zordur çünkü fikir birliği katmanı müşterileri her zaman onları tanımlamak için kullanılabilecek açık izlere sahip değildir. Veri bazen azınlık istemcilerin bazılarını karıştıran bir sınıflandırma algoritması tarafından oluşturulmuştur (daha fazla ayrıntı için [buraya](https://twitter.com/sproulM_/status/1440512518242197516) bakın). Yukarıdaki diyagramda, bu karışık sınıflandırmalar bir ya/veya etiketiyle işlem görmüştür (ör. Nimbus/Teku). Yine de, ağın çoğunluğunun Prysm çalıştırdığı açıktır. Veri belirli bir blok dizisinin anlık çekimidir (bu durumda 2048001 ila 2164916 arası yuvalardaki İşaret blokları) ve Prysm'in baskınlığı bazen %68'i geçecek şekilde daha yüksek olmuştur. Sadece anlık çekimler olmasına rağmen, diyagramdaki değerler mevcut istemci çeşitliliği durumu hakkında iyi bir genel algı sağlamaktadır. +### Mutabakat İstemcileri {#consensus-clients-breakdown} -Fikir birliği katmanı için güncel istemci çeşitliliği verileri artık [clientdiversity.org](https://clientdiversity.org/) adresinde mevcuttur. + -## Yürütüm katmanı {#execution-layer} +Bu diyagram güncelliğini yitirmiş olabilir — güncel bilgiler için [ethernodes.org](https://ethernodes.org) ve [clientdiversity.org](https://clientdiversity.org) adreslerine gidin. -Şimdiye kadar, istemci çeşitliliği etrafındaki konuşmalar esas olarak fikir birliği katmanına odaklandı. Ancak, yürütüm istemcisi [Geth](https://geth.ethereum.org) şu anda tüm düğümlerin yaklaşık %85'ini oluşturmaktadır. Bu yüzde, fikir birliği istemcileri için olduğu gibi aynı nedenlerle sorunludur. Örneğin, Geth'de işlemlerin ele alınmasını veya yürütme yüklerinin oluşturulmasını etkileyen bir hata fikir birliği istemcilerinin sıkıntılı veya hatalı işlemleri sonlandırmasına yol açabilir. Bundan dolayı, Ethereum daha eşit bir yürütüm katmanı dağılımı ile, ideal olarak hiçbir istemcinin ağın %33'ünden fazlasını temsil etmediği bir durum ile daha sağlıklı olurdu. +Yukarıdaki iki pasta grafiği, yürütme ve mutabakat katmanları için mevcut istemci çeşitliliğinin anlık görüntülerini göstermektedir (yazıldığı tarih itibarıyla Ekim 2025). İstemci çeşitliliği yıllar içinde gelişti ve yürütme katmanı [Geth](https://geth.ethereum.org/)'in hakimiyetinde bir azalma gördü; [Nethermind](https://www.nethermind.io/nethermind-client) ikinci, [Besu](https://besu.hyperledger.org/) üçüncü ve [Erigon](https://github.com/ledgerwatch/erigon) dördüncü sırada yer alırken, diğer istemciler ağın %3'ünden daha azını oluşturuyor. Mutabakat katmanında en sık kullanılan istemci olan [Lighthouse](https://lighthouse.sigmaprime.io/), en çok kullanılan ikinci istemciye oldukça yakındır. [Prysm](https://prysmaticlabs.com/#projects) ve [Teku](https://consensys.net/knowledge-base/ethereum-2/teku/) sırasıyla ~%31 ve ~%14'lük bir paya sahiptir ve diğer istemciler nadiren kullanılmaktadır. -## Azınlık istemcisi kullanın {#use-minority-client} +Yürütme katmanı verileri 26 Ekim 2025 tarihinde [supermajority.info](https://supermajority.info/) adresinden alınmıştır. Mutabakat istemcileri için veriler [Michael Sproul](https://github.com/sigp/blockprint) adresinden alınmıştır. Fikir birliği istemcisi verilerinin elde edilmesi daha zordur çünkü fikir birliği katmanı müşterileri her zaman onları tanımlamak için kullanılabilecek açık izlere sahip değildir. Veriler, bazen azınlık istemcilerden bazılarını karıştıran bir sınıflandırma algoritması kullanılarak oluşturulmuştur (daha fazla ayrıntı için [buraya](https://twitter.com/sproulM_/status/1440512518242197516) bakın). Yukarıdaki şemada bu belirsiz sınıflandırmalar ya/ya da etiketi ile ele alınmıştır (ör. Nimbus/Teku). Yine de, ağın çoğunluğunun Prysm çalıştırdığı açıktır. Sadece anlık çekimler olmasına rağmen, diyagramdaki değerler mevcut istemci çeşitliliği durumu hakkında iyi bir genel algı sağlamaktadır. -İstemci çeşitliliğini ele almak, azınlık istemcileri seçmek için bireysel kullanıcılardan daha fazlasını gerektirir - madencilik/doğrulayıcı havuzları ve büyük dapp'ler ve borsalar gibi kurumların da istemcileri değiştirmesini gerektirir. Ancak tüm kullanıcılar tüm mevcut Ethereum yazılımlarının kullanımını normalleştirerek mevcut eşitsizliği ortadan kaldırmaya katkı sağlayabilirler. Birleşimden sonra, tüm düğüm operatörlerinin, bir yürütüm istemcisi ve bir fikir birliği istemcisi çalıştırmaları gerekecektir. Aşağıda önerilen istemci kombinasyonlarını seçmek, istemci çeşitliliğini artırmaya yardımcı olacaktır. +Mutabakat katmanı için güncel istemci çeşitliliği verileri artık [clientdiversity.org](https://clientdiversity.org/) adresinde mevcuttur. -### Yürütüm istemcileri {#execution-clients} +## Yürütme katmanı {#execution-layer} -[Besu](https://www.hyperledger.org/use/besu) +Şimdiye kadar, istemci çeşitliliği etrafındaki konuşmalar esas olarak fikir birliği katmanına odaklandı. Ancak, yürütme istemcisi [Geth](https://geth.ethereum.org) şu anda tüm düğümlerin yaklaşık %85'ini oluşturmaktadır. Bu yüzde, fikir birliği istemcileri için olduğu gibi aynı nedenlerle sorunludur. Örneğin, Geth'de işlemlerin ele alınmasını veya yürütme yüklerinin oluşturulmasını etkileyen bir hata fikir birliği istemcilerinin sıkıntılı veya hatalı işlemleri sonlandırmasına yol açabilir. Bundan dolayı, Ethereum daha eşit bir yürütüm katmanı dağılımı ile, ideal olarak hiçbir istemcinin ağın %33'ünden fazlasını temsil etmediği bir durum ile daha sağlıklı olurdu. -[Nethermind](https://downloads.nethermind.io/) +## Bir azınlık istemcisi kullanın {#use-minority-client} -[Erigon](https://github.com/ledgerwatch/erigon) +İstemci çeşitliliğini ele almak, bireysel kullanıcıların azınlık istemcileri seçmesinden daha fazlasını gerektirir; doğrulayıcı havuzlarının ve büyük merkeziyetsiz uygulamalar ve borsalar gibi kurumların da istemcileri değiştirmesini gerektirir. Ancak tüm kullanıcılar tüm mevcut Ethereum yazılımlarının kullanımını normalleştirerek mevcut eşitsizliği ortadan kaldırmaya katkı sağlayabilirler. Birleşimden sonra, tüm düğüm operatörlerinin, bir yürütüm istemcisi ve bir fikir birliği istemcisi çalıştırmaları gerekecektir. Aşağıda önerilen istemci kombinasyonlarını seçmek, istemci çeşitliliğini artırmaya yardımcı olacaktır. -[Go-Ethereum](https://geth.ethereum.org/) +### Yürütüm İstemcileri {#execution-clients} -### Mutabakat istemcileri {#consensus-clients} +- [Besu](https://www.hyperledger.org/use/besu) +- [Nethermind](https://downloads.nethermind.io/) +- [Erigon](https://github.com/ledgerwatch/erigon) +- [Go-Ethereum](https://geth.ethereum.org/) +- [Reth](https://reth.rs/) -[Nimbus](https://nimbus.team/) +### Mutabakat İstemcileri {#consensus-clients} -[Lighthouse](https://github.com/sigp/lighthouse) +- [Nimbus](https://nimbus.team/) +- [Lighthouse](https://github.com/sigp/lighthouse) +- [Teku](https://consensys.io/teku) +- [Lodestar](https://github.com/ChainSafe/lodestar) +- [Prysm](https://prysm.offchainlabs.com/docs/) +- [Grandine](https://docs.grandine.io/) -[Teku](https://consensys.net/knowledge-base/ethereum-2/teku/) +Teknik kullanıcılar azınlık istemcileri için daha fazla öğretici ve doküman yazarak ve düğüm yöneten yakınlarını baskın istemcilerden ayrılmaya yönlendirerek bu süreci hızlandırmaya yardımcı olabilirler. Bir azınlık mutabakat istemcisine geçiş kılavuzları [clientdiversity.org](https://clientdiversity.org/) adresinde mevcuttur. -[Lodestar](https://github.com/ChainSafe/lodestar) - -[Prysm](https://prysm.offchainlabs.com/docs/) - -Teknik kullanıcılar azınlık istemcileri için daha fazla öğretici ve doküman yazarak ve düğüm yöneten yakınlarını baskın istemcilerden ayrılmaya yönlendirerek bu süreci hızlandırmaya yardımcı olabilirler. Bir azınlık fikir birliği katmanına geçiş için kılavuzlar [clientdiversity.org](https://clientdiversity.org/) adresinde mevcuttur. - -## İstemci çeşitliliği gösterge panelleri {#client-diversity-dashboards} +## İstemci çeşitliliği panoları {#client-diversity-dashboards} Birden fazla gösterge paneli yürütüm ve fikir birliği katmanları için gerçek zamanlı istemci çeşitliliği istatisikleri verir. **Fikir birliği katmanı:** - [Rated.network](https://www.rated.network/) -- [clientdiversity.org](https://clientdiversity.org/) **Yürütüm katmanı:** +- [clientdiversity.org](https://clientdiversity.org/) + +**Yürütme katmanı:** - [supermajority.info](https://supermajority.info//) - [Ethernodes](https://ethernodes.org/) -## Daha fazla okuma {#further-reading} +## Daha fazla kaynak {#further-reading} -- [Ethereum'un fikir birliği katmanında istemci çeşitliliği](https://mirror.xyz/jmcook.eth/S7ONEka_0RgtKTZ3-dakPmAHQNPvuj15nh0YGKPFriA) -- [Ethereum Birleşimi: Çoğunluk istemcisini sorumluluğunu alarak çalıştırın!](https://dankradfeist.de/ethereum/2022/03/24/run-the-majority-client-at-your-own-peril.html) – _Dankrad Fiest, 24 Mart 2022_ +- [Ethereum'un mutabakat katmanında istemci çeşitliliği](https://mirror.xyz/jmcook.eth/S7ONEka_0RgtKTZ3-dakPmAHQNPvuj15nh0YGKPFriA) +- [Ethereum Merge: Çoğunluk istemcisini kendi sorumluluğunuzda çalıştırın!](https://dankradfeist.de/ethereum/2022/03/24/run-the-majority-client-at-your-own-peril.html) – _Dankrad Fiest, 24 Mart 2022_ - [İstemci çeşitliliğinin önemi](https://our.status.im/the-importance-of-client-diversity/) - [Ethereum düğüm hizmetleri listesi](https://ethereumnodes.com/) - [İstemci çeşitliliği sorununun "Beş Nedeni"](https://notes.ethereum.org/@afhGjrKfTKmksTOtqhB9RQ/BJGj7uh08) -- [Ethereum Çeşitliliği ve Bunun İçin Nasıl Çözüm Buluruz (YouTube)](https://www.youtube.com/watch?v=1hZgCaiqwfU) +- [Ethereum Çeşitliliği ve Nasıl Çözüleceği (YouTube)](https://www.youtube.com/watch?v=1hZgCaiqwfU) - [clientdiversity.org](https://clientdiversity.org/) -## İlgili konular {#related-topics} +## Alakalı başlıklar {#related-topics} - [Bir Ethereum düğümü çalıştırın](/run-a-node/) - [Düğümler ve istemciler](/developers/docs/nodes-and-clients/) diff --git a/public/content/translations/tr/developers/docs/nodes-and-clients/index.md b/public/content/translations/tr/developers/docs/nodes-and-clients/index.md index b0753441fad..1b7fff1b4d8 100644 --- a/public/content/translations/tr/developers/docs/nodes-and-clients/index.md +++ b/public/content/translations/tr/developers/docs/nodes-and-clients/index.md @@ -1,17 +1,17 @@ --- -title: Düğümler ve istemciler -description: Ethereum düğümlerine ve istemci yazılımına genel bakış, ayrıca bir düğümün nasıl kurulacağı ve bunu neden yapmanız gerektiğine dair bilgi. +title: "Düğümler ve istemciler" +description: "Ethereum düğümlerine ve istemci yazılımına genel bakış, ayrıca bir düğümün nasıl kurulacağı ve bunu neden yapmanız gerektiğine dair bilgi." lang: tr sidebarDepth: 2 --- Ethereum, blokları ve işlem verilerini doğrulayabilen yazılım çalıştıran dağıtılmış bir bilgisayar ağıdır (düğümler olarak bilinir). Bilgisayarınızı bir Ethereum düğümüne dönüştürmek için bilgisayarınızda yazılım çalıştırılması gerekir. Bir düğüm oluşturmak için gerekli olan iki ayrı yazılım parçası ('istemci' olarak bilinir) vardır. -## Ön koşullar {#prerequisites} +## Ön Koşullar {#prerequisites} -Daha derine dalmadan ve kendi Ethereum istemci örneğinizi çalıştırmadan önce, eşler arası ağ kavramını ve [EVM'nin temellerini](/developers/docs/evm/) anlamalısınız. [Ethereum'a giriş](/developers/docs/intro-to-ethereum/) yazımıza bir göz atın. +Daha derine inmeden ve kendi Ethereum istemci örneğinizi çalıştırmadan önce, eşler arası ağ kavramını ve [EVM'nin temellerini](/developers/docs/evm/) anlamalısınız. [Ethereum'a giriş](/developers/docs/intro-to-ethereum/) sayfamıza bir göz atın. -Eğer düğümler konusunda acemiyseniz, ilk olarak [bir Ethereum düğümü çalıştırmak üzerine](/run-a-node) kullanıcı dostu öğreticimize göz atmanızı öneririz. +Düğümler konusuna yeniyseniz, öncelikle [bir Ethereum düğümü çalıştırma](/run-a-node) hakkındaki kullanıcı dostu tanıtımımıza göz atmanızı öneririz. ## Düğümler ve istemciler nedir? {#what-are-nodes-and-clients} @@ -20,40 +20,44 @@ Düğüm, Ehereum yazılımını çalıştırmakta olan bilgisayarlara bağlı v - Yürütüm İstemcisi (Yürütüm Motoru, EL istemcisi ya da eski adıyla Eth1 istemcisi olarak da bilinir) ağda yayınlanan yeni işlemleri takip eder, bunları Ethereum Sanal Makinesinde çalıştırır ve son durumlarıyla tüm güncel Ethereum verilerinin veritabanını tutar. - Fikir Birliği İstemcisi (İşaret Düğümü, CL istemcisi ya da eski adıyla Eth2 istemcisi olarak da bilinir), ağın yürütüm istemcisinden gelen doğrulanmış veriler üzerinde anlaşmaya varmasını sağlayan hisse ispatı mutabakat algoritmasını uygular. Ayrıca yazılımın, düğümün ağı güvende tutma sürecine katılmasını sağlayan, fikir birliği istemcisine eklenebilecek ve "doğrulayıcı" olarak bilinen üçüncü bir parçası daha vardır. -Bu istemciler Ethereum zincirinin başını takip ederler ve kullanıcıların Ethereum ağıyla etkileşime geçmelerini sağlarlar. Çoklu yazılım parçalarının birlikte çalışmasıyla oluşan modüler tasarıma [kapsüllenmiş karışıklık](https://vitalik.eth.limo/general/2022/02/28/complexity.html) adı verilir. Bu yaklaşım [Birleşim](/roadmap/merge)'i sorunsuz bir şekilde uygulamaya geçirmeyi kolaylaştırdı, istemci yazılımını yönetmeyi ve geliştirmeyi kolayşatırdı ve de bireysel istemcilerinin tekrar kullanılabilmesini sağladı, örnek olarak [katman 2 ekosistemi](/layer-2/) verilebilir. +Bu istemciler Ethereum zincirinin başını takip ederler ve kullanıcıların Ethereum ağıyla etkileşime geçmelerini sağlarlar. Birlikte çalışan birden fazla yazılım parçasının olduğu modüler tasarıma [kapsüllenmiş karmaşıklık](https://vitalik.eth.limo/general/2022/02/28/complexity.html) denir. Bu yaklaşım, [Birleşim'i](/roadmap/merge) sorunsuz bir şekilde gerçekleştirmeyi kolaylaştırdı, istemci yazılımının bakımını ve geliştirilmesini kolaylaştırıyor ve örneğin [katman 2 ekosisteminde](/layer-2/) bireysel istemcilerin yeniden kullanılmasına olanak tanıyor. -![Birleştirilmiş yürütüm ve fikir birliği istemcileri](./eth1eth2client.png) Birleştirilmiş yürütüm ve fikir birliği istemcisinin basitleştirilmiş diyagramı. +![Birleşik yürütme ve fikir birliği istemcileri](./eth1eth2client.png) +Birleştirilmiş bir yürütme ve fikir birliği istemcisinin basitleştirilmiş şeması. ### İstemci çeşitliliği {#client-diversity} -Hem [yürütüm istemcileri](/developers/docs/nodes-and-clients/#execution-clients) hem de [fikir birliği istemcileri](/developers/docs/nodes-and-clients/#consensus-clients) farklı takımlar tarafından geliştirilen çeşitli programlama dillerinde mevcuttur. +Hem [yürütüm istemcileri](/developers/docs/nodes-and-clients/#execution-clients) hem de [fikir birliği istemcileri](/developers/docs/nodes-and-clients/#consensus-clients), farklı ekipler tarafından geliştirilen çeşitli programlama dillerinde mevcuttur. -Birden fazla istemci uygulaması, tek bir kod tabanına olan bağlılığı azaltarak ağı daha güçlü hale getirebilir. İdeal hedef, ağa herhangi bir istemci hakim olmadan çeşitlilik elde etmek ve böylece potansiyel tek hata noktasını ortadan kaldırmaktır. Dillerin çeşitliliği ayrıca daha geniş bir geliştirici topluluğunu davet eder ve tercih ettikleri dilde entegrasyonlar oluşturmalarına olanak sağlar. +Birden fazla istemci uygulaması, tek bir kod tabanına olan bağlılığı azaltarak ağı daha güçlü hale getirebilir. İdeal hedef, ağa herhangi bir istemci hakim olmadan çeşitlilik elde etmek ve böylece potansiyel tek hata noktasını ortadan kaldırmaktır. +Dillerin çeşitliliği ayrıca daha geniş bir geliştirici topluluğunu davet eder ve tercih ettikleri dilde entegrasyonlar oluşturmalarına olanak sağlar. -[İstemci çeşitleri](/developers/docs/nodes-and-clients/client-diversity/) hakkında daha fazla bilgi edinin. +[İstemci çeşitliliği](/developers/docs/nodes-and-clients/client-diversity/) hakkında daha fazla bilgi edinin. Tek bir özelliğe uymaları bu uygulamaların ortak noktalarıdır. Özellikler, Ethereum ağının ve blok zincirinin nasıl çalıştığını belirler. Her teknik detay belirlenmiştir ve özellikler şu şekilde bulunabilir: -- Başlangıçta, [Ethereum Sarı Kağıdı](https://ethereum.github.io/yellowpaper/paper.pdf) -- [Yürütme özellikleri](https://github.com/ethereum/execution-specs/) -- [Mutabakat özellikleri](https://github.com/ethereum/consensus-specs) +- Aslen, [Ethereum Sarı Kitabı](https://ethereum.github.io/yellowpaper/paper.pdf) +- [Yürütme spesifikasyonları](https://github.com/ethereum/execution-specs/) +- [Mutabakat spesifikasyonları](https://github.com/ethereum/consensus-specs) - Çeşitli [ağ yükseltmelerinde](/ethereum-forks/) uygulanan [EIP'ler](https://eips.ethereum.org/) -### Ağdaki düğümleri izlemek {#network-overview} +### Ağdaki düğümleri izleme {#network-overview} Çoklu iz sürücüler Ehereum ağında bulunan düğümlerle ilgili gerçek zamanlı taslaklar sunarlar. Merkeziyetsiz ağların doğası gereği, bu programların ağ ile ilgili kısıtlı bir perspektif sağlayabileceğine ve yanlış sonuçlar içeren raporlar verebileceğine de dikkat edin. -- [Düğümlerin haritası](https://etherscan.io/nodetracker), Etherscan -- [Ethernodes](https://ethernodes.org/), Bitfly -- [Nodewatch](https://www.nodewatch.io/), Chainsafe. Sürünen mutabakat düğümleri +- Etherscan tarafından [Düğüm haritası](https://etherscan.io/nodetracker) +- Bitfly tarafından [Ethernodes](https://ethernodes.org/) +- Chainsafe tarafından [Nodewatch](https://www.nodewatch.io/), mutabakat düğümlerini tarar +- [Monitoreth](https://monitoreth.io/) - MigaLabs tarafından, dağıtılmış bir ağ izleme aracı +- [Haftalık Ağ Sağlık Raporları](https://probelab.io) - ProbeLab tarafından, [Nebula crawler](https://github.com/dennis-tra/nebula) ve diğer araçlar kullanılarak ## Düğüm türleri {#node-types} -[Kendi düğümünüzü çalıştırmak](/developers/docs/nodes-and-clients/run-a-node/) istiyorsanız, farklı şekilde veri tüketen farklı düğüm türleri olduğunu bilmeniz gerekir. İstemciler üç farklı düğüm türünü çalıştırabilir: hafif, tam ve arşiv. Daha hızlı senkronizasyon süresi sağlayan farklı senkronizasyon strateji seçenekleri de vardır. Senkronizasyon, Ethereum'un durumu hakkında en güncel bilgileri ne kadar hızlı alabileceğini ifade eder. +Kendi [düğümünüzü çalıştırmak](/developers/docs/nodes-and-clients/run-a-node/) istiyorsanız, verileri farklı şekilde tüketen farklı düğüm türleri olduğunu anlamalısınız. İstemciler üç farklı düğüm türünü çalıştırabilir: hafif, tam ve arşiv. Daha hızlı senkronizasyon süresi sağlayan farklı senkronizasyon strateji seçenekleri de vardır. Senkronizasyon, Ethereum'un durumu hakkında en güncel bilgileri ne kadar hızlı alabileceğini ifade eder. ### Tam düğüm {#full-node} -Tam düğümler blok zincirin blok-blok doğrulamasını yaparlar, bu her blok için blok gövdesini ve durum verisini yüklemeyi ve onaylamayı kapsar. Tam düğümün farklı sınıfları vardır - bazıları başlangıç blokundan başlar ve tüm blok zincir tarihindeki her bir bloku onaylar. Diğerleri onaylamalarına geçerli olduklarına güvendikleri daha eski bir bloktan başlarlar (ör:Geth'in "snap sync"i). Onaylamanın nerede başladığı fark etmeksizin, tam düğümler sadece yakın geçmişteki ve alakalı verinin yerel bir kopasını tutarlar (bu sıklıkla son 128 blok olur), bu da eski verinin disk alanından tasarruf edebilmek için silinmesine yol açar. Daha eski veri gerektiğinde yeniden oluşturulabilir. +Tam düğümler blok zincirin blok-blok doğrulamasını yaparlar, bu her blok için blok gövdesini ve durum verisini yüklemeyi ve onaylamayı kapsar. Farklı tam düğüm sınıfları vardır - bazıları başlangıç blokundan başlar ve blokzincirinin tüm geçmişindeki her bir bloğu doğrular. Diğerleri doğrulamalarına, geçerli olduğuna güvendikleri daha yeni bir bloktan başlarlar (ör. Geth'in 'snap sync'i). Doğrulamanın nerede başladığına bakılmaksızın, tam düğümler yalnızca nispeten yeni verilerin (genellikle en son 128 blok) yerel bir kopyasını tutar ve disk alanından tasarruf etmek için eski verilerin silinmesine izin verir. Daha eski veri gerektiğinde yeniden oluşturulabilir. - Tam blok zincir verilerini depolar (ancak bu periyodik olarak budanır, bu nedenle tam bir düğüm tüm durum verilerini başlangıç zincirine geri depolamaz) - Blok doğrulamaya katılır, tüm blokları ve durumları doğrular. @@ -64,7 +68,7 @@ Tam düğümler blok zincirin blok-blok doğrulamasını yaparlar, bu her blok i Arşiv düğümleri Başlangıçtan itibaren her bloku onaylayan ve yüklenmiş hiçbir veriyi silmeyen tam düğümlerdir. -- Tam düğümde tutulan her şeyi depolar ve geçmiş durumların bir arşivini oluşturur. 4.000.000 numaralı bloktaki bir hesap bakiyesi gibi bir şeyi sorgulamak veya izleme kullanarak madencilik yapmadan kendi işlem kümenizi basit ve güvenilir bir şekilde test etmek istiyorsanız bu gereklidir. +- Tam düğümde tutulan her şeyi depolar ve geçmiş durumların bir arşivini oluşturur. #4.000.000 blokundaki bir hesap bakiyesi gibi bir şeyi sorgulamak ya da yalnızca izleme kullanarak kendi işlem setinizi doğrulamadan güvenilir bir şekilde test etmek istiyorsanız gereklidir. - Bu veri, arşiv düğümlerini ortalama kullanıcılar için daha az çekici hale getiren ancak blok arayıcıları, cüzdan satıcıları ve zincir analizi gibi hizmetler için kullanışlı olabilen terabayt birimlerini temsil eder. İstemcileri arşiv dışındaki herhangi bir modda senkronize etmek, budanmış blok zincir verileriyle sonuçlanacaktır. Bu, tüm geçmiş durumların bir arşivinin olmadığı ancak tam düğümün, talep üzerine bunları oluşturabileceği anlamına gelir. @@ -73,37 +77,38 @@ Arşiv düğümleri Başlangıçtan itibaren her bloku onaylayan ve yüklenmiş ### Hafif düğüm {#light-node} -Her bloku indirmek yerine, hafif düğümler sadece blok başlıklarını indirir. Bu başlıklar blokların içeriği hakkında özet bilgiler içerir. Hafif düğümün ihtiyaç duyduğu diğer bilgiler bir tam düğümden istenir. Hafif düğümü, daha sonra blok başlıklarındaki durum köklerine karşı aldıkları verileri bağımsız olarak doğrulayabilir. Hafif düğümler, kullanıcıların tam düğümleri çalıştırmak için gereken güçlü donanım veya yüksek bant genişliği olmadan Ethereum ağına katılmalarını sağlar. Nihayetinde, hafif düğümler cep telefonlarında veya yerleşik cihazlarda çalışabilir. Hafif düğümler mutabakata katılmazlar (yani madenciler/doğrulayıcılar olamazlar), ancak Ethereum blok zincirine bir tam düğümle aynı işlevsellik ve güvenlik garantisiyle erişebilirler. +Her bloku indirmek yerine, hafif düğümler sadece blok başlıklarını indirir. Bu başlıklar blokların içeriği hakkında özet bilgiler içerir. Hafif düğümün ihtiyaç duyduğu diğer bilgiler bir tam düğümden istenir. Hafif düğümü, daha sonra blok başlıklarındaki durum köklerine karşı aldıkları verileri bağımsız olarak doğrulayabilir. Hafif düğümler, kullanıcıların tam düğümleri çalıştırmak için gereken güçlü donanım veya yüksek bant genişliği olmadan Ethereum ağına katılmalarını sağlar. Nihayetinde, hafif düğümler cep telefonlarında veya yerleşik cihazlarda çalışabilir. Hafif düğümler mutabakata katılmazlar (yani doğrulayıcı olamazlar), ancak Ethereum blokzincirine tam bir düğümle aynı işlevsellik ve güvenlik garantileriyle erişebilirler. -Hafif istemciler, Ethereum için aktif bir geliştirme alanıdır ve yakında fikir birliği katmanı ve yürütme katmanı için yeni hafif istemciler görmeyi bekliyoruz. Ayrıca, [dedikodu ağı](https://www.ethportal.net/) üzerinden hafif istemci verileri sağlamanın olası yolları da vardır. Bu avantajlıdır çünkü dedikodu ağı, istekleri yerine getirmek için tam düğümler gerektirmeden, bir hafif düğümler ağını destekleyebilir. +Hafif istemciler, Ethereum için aktif bir geliştirme alanıdır ve yakında fikir birliği katmanı ve yürütme katmanı için yeni hafif istemciler görmeyi bekliyoruz. +[Dedikodu ağı](https://www.ethportal.net/) üzerinden hafif istemci verileri sağlamak için potansiyel yollar da vardır. Bu avantajlıdır çünkü dedikodu ağı, istekleri yerine getirmek için tam düğümler gerektirmeden, bir hafif düğümler ağını destekleyebilir. -Ethereum henüz büyük bir hafif düğüm popülasyonunu desteklemiyor, ancak hafif düğüm desteği, yakın gelecekte hızla gelişmesi beklenen bir alandır. Özellikle, [Nimbus](https://nimbus.team/), [Helios](https://github.com/a16z/helios), ve [LodeStar](https://lodestar.chainsafe.io/) gibi istemciler şu anda ağırlıklı olarak hafif istemciler üzerine odaklanıyor. +Ethereum henüz büyük bir hafif düğüm popülasyonunu desteklemiyor, ancak hafif düğüm desteği, yakın gelecekte hızla gelişmesi beklenen bir alandır. Özellikle, [Nimbus](https://nimbus.team/), [Helios](https://github.com/a16z/helios) ve [LodeStar](https://lodestar.chainsafe.io/) gibi istemciler şu anda büyük ölçüde hafif düğümlere odaklanmıştır. ## Neden bir Ethereum düğümü çalıştırmalıyım? {#why-should-i-run-an-ethereum-node} Bir düğüm çalıştırmak, ağı daha sağlam ve merkezi olmayan bir şekilde tutarak desteklerken, Ethereum'u doğrudan, güvenmek zorunda kalmadan ve özel olarak kullanmanıza olanak tanır. -### Size faydaları {#benefits-to-you} +### Size sağladığı faydalar {#benefits-to-you} Kendi düğümünüzü çalıştırmak, Ethereum'u özel, kendine yeten ve güvenilir bir şekilde kullanmanıza olanak sağlar. Verileri istemcinizle kendiniz doğrulayabileceğiniz için ağa güvenmeniz gerekmez. "Güvenme, doğrula." popüler bir blok zincir deyimidir. - Düğümünüz, tüm işlemleri ve blokları mutabakat kurallarına karşı kendi başına doğrular. Yani ağdaki diğer düğümlere bağlı olmanız veya onlara tamamen güvenmeniz gerekmez. -- Kendi düğümünüzle bir Ethereum cüzdanı kullanabilirsiniz. Merkeziyetsiz uygulamaları daha güvenli ve özel olarak kullanabileceksiniz çünkü adreslerinizi ve bakiyelerinizi mali araçlara sızdırmak zorunda kalmayacaksınız. Her şey sizin kendi istemcinizle kontrol edilebilir. [MetaMask](https://metamask.io), [Frame](https://frame.sh/) ve [birçok farklı cüzdan](/wallets/find-wallet/) size düğümünüzü kullanmalarını sağlayacak olan RPC-içe aktarmasını sunuyor. +- Kendi düğümünüzle bir Ethereum cüzdanı kullanabilirsiniz. Merkeziyetsiz uygulamaları daha güvenli ve özel olarak kullanabileceksiniz çünkü adreslerinizi ve bakiyelerinizi mali araçlara sızdırmak zorunda kalmayacaksınız. Her şey sizin kendi istemcinizle kontrol edilebilir. [MetaMask](https://metamask.io), [Frame](https://frame.sh/) ve [diğer birçok cüzdan](/wallets/find-wallet/), RPC içe aktarma özelliği sunarak düğümünüzü kullanmalarına olanak tanır. - Ethereum verilerine bağlı diğer servisleri çalıştırabilir ve barındırabilirsiniz. Örneğin, bu bir İşaret Zinciri doğrulayıcısı, Katman 2 benzeri yazılımı, altyapı, blok arayıcıları, ödeme işlemcileri olabilir. -- Kendi özelleştirilmiş [RPC uç noktalarınızı](/developers/docs/apis/json-rpc/) sağlayabilirsiniz. Hatta, büyük merkezi sağlayıcılardan kaçınmalarına yardım etmek için bu uç noktaları herkese açık olarak sunabilirsiniz. -- **Süreçler Arası İletişimi (IPC)** kullanarak düğümünüze bağlanabilir veya programınızı bir eklenti olarak yüklemek için düğümü yeniden yazabilirsiniz. Örneğin bu, web3 kütüphaneleri kullanılarak birçok veri işlenirken veya işlemlerinizi olabildiğince hızlı bir şekilde değiştirmeniz gerektiğinde (ör. öncülük etme) bayağı yardımcı olan düşük bir gecikme süresi sunar. +- Kendi özel [RPC uç noktalarınızı](/developers/docs/apis/json-rpc/) sağlayabilirsiniz. Hatta, büyük merkezi sağlayıcılardan kaçınmalarına yardım etmek için bu uç noktaları herkese açık olarak sunabilirsiniz. +- **Süreçler Arası İletişim (IPC)** kullanarak düğümünüze bağlanabilir veya programınızı bir eklenti olarak yüklemek için düğümü yeniden yazabilirsiniz. Bu, örneğin, web3 kütüphanelerini kullanarak çok fazla veri işlerken veya işlemlerinizi olabildiğince hızlı bir şekilde değiştirmeniz gerektiğinde (yani frontrunning) çok yardımcı olan düşük gecikme süresi sağlar. - Ağı güvenli hale getirmek ve ödüller kazanmak için direkt olarak ETH hisseleyebilirsiniz. Başlamak için [solo hisselemeye](/staking/solo/) bakın. -![Uygulamanız ve düğümleriniz aracılığıyla Ethereum'a erişim](./nodes.png) +![Uygulamanız ve düğümleriniz aracılığıyla Ethereum'a nasıl erişirsiniz](./nodes.png) -### Ağ avantajları {#network-benefits} +### Ağın faydaları {#network-benefits} Ethereum'un iyi durumu, güvenliği ve operasyonel esnekliği için çeşitli düğümler bulunması önemlidir. - Tam düğümler mutabakat kurallarını uygular, böylece onları takip etmeyen blokları kabul etmeleri için kandırılamazlar. Bu, ağda ekstra güvenlik sağlar çünkü eğer bütün düğümler, tam doğrulama yapmayan hafif düğümler olsaydı, doğrulayıcılar ağa saldırabilirdi. -- [Hisse ispatının](/developers/docs/consensus-mechanisms/pos/#what-is-pos) kripto-ekonomik savunmalarını aşan bir saldırı durumunda, sosyal toparlanma dürüst zinciri izlemeyi seçen tam düğümler tarafından gerçekleştirilebilir. +- [Hisse ispatının](/developers/docs/consensus-mechanisms/pos/#what-is-pos) kripto-ekonomik savunmalarını aşan bir saldırı durumunda, dürüst zinciri takip etmeyi seçen tam düğümler tarafından bir sosyal kurtarma gerçekleştirilebilir. - Ağdaki daha fazla düğüm, sansüre dayanıklı ve güvenilir bir sistem sağlayan, merkeziyetsizliğin nihai hedefi olan daha çeşitli ve dirençli bir ağ ile sonuçlanır. -- Tam düğümler, buna bağlı hafif istemciler için blok zincir verilerine erişim sağlarlar. Hafif düğümler tüm blok zinciri saklamazlar, bunun yerine verileri [blok başlıklarındaki durum kökleri](/developers/docs/blocks/#block-anatomy) aracılığıyla doğrularlar. İhtiyaç duymaları halinde tam düğümlerden daha fazla bilgi talep edebilirler. +- Tam düğümler, buna bağlı hafif istemciler için blok zincir verilerine erişim sağlarlar. Hafif düğümler tüm blokzincirini saklamaz, bunun yerine verileri [blok başlıklarındaki durum kökleri](/developers/docs/blocks/#block-anatomy) aracılığıyla doğrularlar. İhtiyaç duymaları halinde tam düğümlerden daha fazla bilgi talep edebilirler. Eğer bir tam düğüm çalıştırıyorsanız, bir doğrulayıcı çalıştırmıyor olsanız da tüm Ethereum ağı bundan faydalanır. @@ -111,34 +116,34 @@ Eğer bir tam düğüm çalıştırıyorsanız, bir doğrulayıcı çalıştırm Kendi Ethereum istemcinizi çalıştırmayı mı düşünüyorsunuz? -Daha acemi dostu bir giriş istiyorsanız, daha fazlasını öğrenmek için [bir düğüm çalıştır](/run-a-node) sayfamızı ziyaret edin. +Başlangıç seviyesi için uygun bir giriş için daha fazla bilgi edinmek üzere [düğüm çalıştırma](/run-a-node) sayfamızı ziyaret edin. -Eğer daha çok teknik bir kullanıcıysanız, [kendi düğümünüzü nasıl çalıştıracağınıza](/developers/docs/nodes-and-clients/run-a-node/) dair daha fazla detay ve seçeneğe yönelin. +Daha teknik bir kullanıcıysanız, [kendi düğümünüzü nasıl kuracağınıza](/developers/docs/nodes-and-clients/run-a-node/) ilişkin daha fazla ayrıntı ve seçeneğe göz atın. ## Alternatifler {#alternatives} -Kendi düğümünüzü kurmak size zaman ve kaynak kaybettirebilir ama her zaman kendi örneğinizi çalıştırmanıza gerek yoktur. Böyle bir durumda, bir üçüncü taraf API sağlayıcısı kullanabilirsiniz. Bu hizmetlerin kullanımına ilişkin genel bakış için [hizmet olarak düğümler](/developers/docs/nodes-and-clients/nodes-as-a-service/) makalesine bakın. +Kendi düğümünüzü kurmak size zaman ve kaynak kaybettirebilir ama her zaman kendi örneğinizi çalıştırmanıza gerek yoktur. Böyle bir durumda, bir üçüncü taraf API sağlayıcısı kullanabilirsiniz. Bu hizmetleri kullanmaya genel bir bakış için [hizmet olarak düğümler](/developers/docs/nodes-and-clients/nodes-as-a-service/) bölümüne bakın. Eğer birisi topluluğunuzda genel API bulunduran bir Ethereum düğümü çalıştırırsa, cüzdanlarınızı Özel RPC aracılığıyla topluluk düğümüne işaret edebilir ve rasgele güvenilir üçüncü bir tarafla olacağından çok daha fazla gizlilik elde edebilirsiniz. Öte yandan, bir istemci çalıştırırsanız bu istemciyi, ihtiyacı olabilecek arkadaşlarınızla paylaşabilirsiniz. -## Yürütme istemcileri {#execution-clients} +## Yürütüm İstemcileri {#execution-clients} -Ethereum topluluğu, farklı programlama dilleri kullanan, farklı ekipler tarafından geliştirilen birden çok, açık kaynaklı yürütüm istemcisini (eskiden "Eth1 istemcileri" veya yalnızca "Ethereum istemcileri" olarak biliniyordu) yürütür. Bu, ağı daha güçlü ve [çeşitli](/developers/docs/nodes-and-clients/client-diversity/) hale getirir. İdeal hedef, herhangi bir istemcinin çoğunluk sağlamadığı bir çeşitlilik elde ederek tüm tek başarısızlık noktalarını azaltmaktır. +Ethereum topluluğu, farklı programlama dilleri kullanan, farklı ekipler tarafından geliştirilen birden çok, açık kaynaklı yürütüm istemcisini (eskiden "Eth1 istemcileri" veya yalnızca "Ethereum istemcileri" olarak biliniyordu) yürütür. Bu, ağı daha güçlü ve daha [çeşitli](/developers/docs/nodes-and-clients/client-diversity/) hale getirir. İdeal hedef, herhangi bir istemcinin çoğunluk sağlamadığı bir çeşitlilik elde ederek tüm tek başarısızlık noktalarını azaltmaktır. -Bu tablo, farklı istemcileri özetlemektedir. Hepsi [istemci testlerini](https://github.com/ethereum/tests) başarıyla geçer ve ağ yükseltmeleriyle güncel kalmak için aktif olarak bakıma tabi tutulur. +Bu tablo, farklı istemcileri özetlemektedir. Hepsi [istemci testlerini](https://github.com/ethereum/tests) geçer ve ağ yükseltmeleriyle güncel kalmak için aktif olarak bakımları yapılır. -| İstemci | Dil | İşletim sistemleri | Ağlar | Senkronizasyon stratejileri | Durum budaması | -| ------------------------------------------------------------------------ | ---------- | --------------------- | ------------------------ | ------------------------------------------------------------- | --------------- | -| [Geth](https://geth.ethereum.org/) | Go | Linux, Windows, macOS | Ana Ağ, Sepolia, Holesky | [Snap](#snap-sync), [Full](#full-sync) | Archive, Pruned | -| [Nethermind](https://www.nethermind.io/) | C#, .NET | Linux, Windows, macOS | Ana Ağ, Sepolia, Holesky | [Snap](#snap-sync) (hizmet olmadan), Fast, [Full](#full-sync) | Archive, Pruned | -| [Besu](https://besu.hyperledger.org/en/stable/) | Java | Linux, Windows, macOS | Ana Ağ, Sepolia, Holesky | [Snap](#snap-sync), [Fast](#fast-sync), [Full](#full-sync) | Archive, Pruned | -| [Erigon](https://github.com/ledgerwatch/erigon) | Go | Linux, Windows, macOS | Ana Ağ, Sepolia, Holesky | [Full](#full-sync) | Archive, Pruned | -| [Reth](https://reth.rs/) | Rust | Linux, Windows, macOS | Ana Ağ, Sepolia, Holesky | [Full](#full-sync) | Archive, Pruned | -| [EthereumJS](https://github.com/ethereumjs/ethereumjs-monorepo) _(beta)_ | TypeScript | Linux, Windows, macOS | Sepolia, Holesky | [Full](#full-sync) | Pruned | +| İstemci | Dil | İşletim sistemleri | Ağlar | Senkronizasyon stratejileri | Durum budaması | +| ------------------------------------------------------------------------------------------- | ------------------------ | --------------------- | ---------------------- | --------------------------------------------------------------------------- | --------------- | +| [Geth](https://geth.ethereum.org/) | Go | Linux, Windows, macOS | Ana ağ, Sepolia, Hoodi | [Anlık](#snap-sync), [Tam](#full-sync) | Archive, Pruned | +| [Nethermind](https://www.nethermind.io/) | C#, .NET | Linux, Windows, macOS | Ana ağ, Sepolia, Hoodi | [Anlık](#snap-sync) (sunmadan), Hızlı, [Tam](#full-sync) | Archive, Pruned | +| [Besu](https://besu.hyperledger.org/en/stable/) | Java | Linux, Windows, macOS | Ana ağ, Sepolia, Hoodi | [Anlık](#snap-sync), [Hızlı](#fast-sync), [Tam](#full-sync) | Archive, Pruned | +| [Erigon](https://github.com/ledgerwatch/erigon) | Go | Linux, Windows, macOS | Ana ağ, Sepolia, Hoodi | [Tam](#full-sync) | Archive, Pruned | +| [Reth](https://reth.rs/) | Rust | Linux, Windows, macOS | Ana ağ, Sepolia, Hoodi | [Tam](#full-sync) | Archive, Pruned | +| [EthereumJS](https://github.com/ethereumjs/ethereumjs-monorepo) _(beta)_ | TypeScript | Linux, Windows, macOS | Sepolia, Hoodi | [Tam](#full-sync) | Pruned | -Desteklenen ağlar hakkında daha fazla bilgi için [Ethereum ağları](/developers/docs/networks/) hakkında bilgi edinin. +Desteklenen ağlar hakkında daha fazla bilgi için [Ethereum ağları](/developers/docs/networks/) bölümünü okuyun. Her istemcinin benzersiz kullanım durumları ve avantajları vardır, bu nedenle kendi tercihlerinize göre birini seçmelisiniz. Çeşitlilik, uygulamaların farklı özelliklere ve kullanıcı kitlelerine odaklanmasına olanak tanır. Özelliklere, desteğe, programlama diline veya lisanslara göre bir istemci seçmek isteyebilirsiniz. @@ -146,7 +151,7 @@ Her istemcinin benzersiz kullanım durumları ve avantajları vardır, bu nedenl Hyperledger Besu, genel ve izin verilen ağlar için kurumsal düzeyde bir Ethereum istemcisidir. Kapsamlı izleme özelliğinden GraphQL'yi takip etmeye kadar tüm Ethereum Ana Ağ özelliklerini çalıştırır ve hem açık topluluk kanallarında hem de işletmeler için ticari SLA'lar aracılığıyla ConsenSys tarafından desteklenir. Java ile yazılmıştır ve Apache 2.0 lisanslıdır. -Besu'nun kapsamlı [dokümanları](https://besu.hyperledger.org/en/stable/) size tüm özellikleri ve kurulum detayları hakkında yol gösterecektir. +Besu'nun kapsamlı [belgeleri](https://besu.hyperledger.org/en/stable/), özellikleri ve kurulumları hakkındaki tüm ayrıntılarda size yol gösterecektir. ### Erigon {#erigon} @@ -156,7 +161,7 @@ Eskiden Turbo-Geth olarak bilinen Ergion, hız ve disk alanı verimliliğine yö Go Ethereum (kısaca Geth), Ethereum protokolünün orijinal uygulamalarından biridir. Şu anda, kullanıcılar ve geliştiriciler için en büyük kullanıcı tabanına ve en çeşitli araçlara sahip en yaygın istemcidir. Go ile yazılmıştır, tamamen açık kaynak kodludur ve GNU LGPL v3 altında lisanslanmıştır. -Geth hakkında kendi [dökümanları ile](https://geth.ethereum.org/docs/) daha fazlasını öğrenin. +Geth hakkında daha fazla bilgiyi [belgelerinde](https://geth.ethereum.org/docs/) bulabilirsiniz. ### Nethermind {#nethermind} @@ -166,7 +171,7 @@ Nethermind, C# .NET teknoloji yığınıyla oluşturulmuş bir Ethereum uygulama - durum erişimi - Prometheus/Grafana gösterge panelleri, sıralı kurumsal kayıt desteği, JSON-RPC izleme ve analiz eklentileri gibi ağ iletişimi ve zengin özellikler. -Nethermind ayrıca premium kullanıcılar için [ayrıntılı dokümanlar](https://docs.nethermind.io), güçlü geliştirici desteği, çevrimiçi bir topluluk ve 7/24 desteğe de sahiptir. +Nethermind ayrıca [ayrıntılı belgelere](https://docs.nethermind.io), güçlü geliştirici desteğine, bir çevrimiçi topluluğa ve premium kullanıcılar için 7/24 desteğe sahiptir. ### Reth {#reth} @@ -174,7 +179,7 @@ Reth (Rust Ethereum'un kısaltması) kullanıcı dostu, yüksek derecede modüle Reth, üretime hazırdır ve hisseleme veya yüksek çalışma süresi gerektiren hizmetler gibi kritik görev ortamlarında kullanıma uygundur. RPC, MEV, indeksleme, simülasyonlar ve P2P aktiviteler gibi yüksek performans ve büyük marjların gerektiği kullanım durumlarında iyi performans gösterir. -Daha fazla bilgi edinmek için [Reth Kitabına](https://reth.rs/) veya [Reth GitHub deposuna](https://github.com/paradigmxyz/reth?tab=readme-ov-file#reth) göz atın. +[Reth Kitabı](https://reth.rs/) veya [Reth GitHub reposuna](https://github.com/paradigmxyz/reth?tab=readme-ov-file#reth) göz atarak daha fazla bilgi edinin. ### Geliştirme aşamasında {#execution-in-development} @@ -184,51 +189,58 @@ Bu istemciler hala geliştirme sürecinin erken aşamalarındadır ve henüz ür EthereumJS Yürütüm İstemcisi (EthereumJS), TypeScript'te yazılmıştır ve Blok, İşlem ve Merkle-Patricia Ağacı sınıfları tarafından temsil edilen temel Ethereum ilkeleri ve Ethereum Sanal Makinesi'nin (EVM) bir uygulaması, bir blokzincir sınıfı ve DevP2P ağ yığınını içeren temel istemci bileşenleri de dahil olmak üzere bir dizi paketten oluşur. -[Dokümanları](https://github.com/ethereumjs/ethereumjs-monorepo/tree/master) okuyarak daha fazla bilgi edinin +[Belgelerini](https://github.com/ethereumjs/ethereumjs-monorepo/tree/master) okuyarak hakkında daha fazla bilgi edinin -## Mutabakat istemcileri {#consensus-clients} +## Mutabakat İstemcileri {#consensus-clients} -[Mutabakat yükseltmelerini](/roadmap/beacon-chain/) desteklemek için birden fazla fikir birliği istemcisi (eskiden "Eth2" istemcisi olarak biliniyordu) vardır. Çatal seçimi algoritması gibi mutabakat ile ilgili tüm akışlardan, doğrulamaları işlemekten ve [hisse ispatı](/developers/docs/consensus-mechanisms/pos) ödül ve cezalarını yönetmekten sorumludurlar. +[Mutabakat yükseltmelerini](/roadmap/beacon-chain/) desteklemek için birden fazla fikir birliği istemcisi (daha önce 'Eth2' istemcileri olarak biliniyordu) bulunmaktadır. Çatal seçim algoritması, tasdiklerin işlenmesi ve [hisse ispatı](/developers/docs/consensus-mechanisms/pos) ödül ve cezalarının yönetimi dahil olmak üzere mutabakatla ilgili tüm mantıktan sorumludurlar. -| İstemci | Dil | İşletim sistemleri | Ağlar | -| ------------------------------------------------------------- | ---------- | --------------------- | ------------------------------------------------------------------------- | -| [Lighthouse](https://lighthouse.sigmaprime.io/) | Rust | Linux, Windows, macOS | İşaret Zinciri, Gnosis, Goerli, Pyrmont, Sepolia, Ropsten ve daha fazlası | -| [Lodestar](https://lodestar.chainsafe.io/) | TypeScript | Linux, Windows, macOS | İşaret Zinciri, Goerli, Sepolia, Ropsten ve daha fazlası | -| [Nimbus](https://nimbus.team/) | Nim | Linux, Windows, macOS | İşaret Zinciri, Goerli, Sepolia, Ropsten ve daha fazlası | -| [Prysm](https://prysm.offchainlabs.com/docs/) | Başla | Linux, Windows, macOS | İşaret Zinciri, Gnosis, Goerli, Pyrmont, Sepolia, Ropsten ve daha fazlası | -| [Teku](https://consensys.net/knowledge-base/ethereum-2/teku/) | Java | Linux, Windows, macOS | İşaret Zinciri, Gnosis, Goerli, Sepolia, Ropsten ve daha fazlası | +| İstemci | Dil | İşletim sistemleri | Ağlar | +| ------------------------------------------------------------- | ---------- | --------------------- | --------------------------------------------------------------- | +| [Lighthouse](https://lighthouse.sigmaprime.io/) | Rust | Linux, Windows, macOS | İşaret Zinciri, Hoodi, Pyrmont, Sepolia ve daha fazlası | +| [Lodestar](https://lodestar.chainsafe.io/) | TypeScript | Linux, Windows, macOS | İşaret Zinciri, Hoodi, Sepolia ve daha fazlası | +| [Nimbus](https://nimbus.team/) | Nim | Linux, Windows, macOS | İşaret Zinciri, Hoodi, Sepolia ve daha fazlası | +| [Prysm](https://prysm.offchainlabs.com/docs/) | Go | Linux, Windows, macOS | İşaret Zinciri, Gnosis, Hoodi, Pyrmont, Sepolia ve daha fazlası | +| [Teku](https://consensys.net/knowledge-base/ethereum-2/teku/) | Java | Linux, Windows, macOS | İşaret Zinciri, Gnosis, Hoodi, Sepolia ve daha fazlası | +| [Grandine](https://docs.grandine.io/) | Rust | Linux, Windows, macOS | İşaret Zinciri, Hoodi, Sepolia ve daha fazlası | ### Lighthouse {#lighthouse} Lighthouse, Rust ile yazılmış olan, Apache-2.0 lisansı altında bir fikir birliği istemcisi uygulamasıdır. Sigma Prime tarafından sürdürülmektedir ve İşaret Zinciri'nin başlangıcından beri stabil ve kullanıma hazırdır. Birçok kuruluş, hisseleme havuzu ve kişi tarafından güvenilmektedir. Masaüstü PC'lerden karmaşık otomatikleştirilmiş dağıtımlara kadar geniş bir ortam yelpazesinde güvenli, performanslı ve birlikte çalışabilir olmayı hedefler. -Dokümanlara [Lighthouse Book](https://lighthouse-book.sigmaprime.io/)'tan ulaşılabilir +Belgeleri [Lighthouse Kitabı](https://lighthouse-book.sigmaprime.io/) içinde bulabilirsiniz ### Lodestar {#lodestar} Lodestar, Typescript ile yazılan, LGPL-3.0 lisansının altında kullanıma hazır bir fikir birliği istemcisidir. ChainSafe System tarafından sürdürülmektedir ve solo paydaşlar, geliştiriciler ve araştırmacılar için fikir birliği istemcilerinin en yenisidir. Lodestar, Ethereum protokollerinin JavaScript uygulamalarından güç alan bir işaret düğümü ve doğrulayıcı istemcisinden oluşur. Lodestar, hafif istemciler ile Ethereum kullanılabilirliğini geliştirmeyi, erişilebilirliği daha büyük bir geliştirici grubuna genişletmeyi ve ekosistem çeşitliliğine daha fazla katkı sağlamayı hedefler. -Daha fazla bilgiye [Lodestar web sitesinden](https://lodestar.chainsafe.io/) ulaşılabilir +Daha fazla bilgi [Lodestar web sitesinde](https://lodestar.chainsafe.io/) bulunabilir ### Nimbus {#nimbus} Nimbus, Nim ile yazılmış olan, Apache-2.0 lisansı altında bir fikir birliği istemcisi uygulamasıdır. Solo paydaşlar ve hisseleme havuzları tarafından kullanılan kullanıma hazır bir istemcidir. Nimbus, kaynak verimliliği için tasarlanmıştır ve istikrardan veya ödül performansından taviz vermeden kaynak açısından sınırlı cihazlar ve kuruluş altyapılarında eşit kolaylıkla çalıştırılır. Daha hafif bir kaynak ayak izi, istemcinin ağ stres altında olduğunda daha büyük bir güvenlik toleransı olduğu anlamına gelir. -[Nimbus dokümanlarında](https://nimbus.guide/) daha fazlasını öğrenin +[Nimbus belgelerinde](https://nimbus.guide/) daha fazlasını öğrenin ### Prysm {#prysm} Prysm, Go ile yazılmış, GPL-3.0 lisansının altında tam teşekküllü açık kaynak bir fikir birliği istemcisidir. İsteğe bağlı bir web uygulaması arayüzüne sahiptir ve kullanıcı deneyimine, dokümanlara ve hem evdeki hisseleme hem de kurumsal kullanıcılar için yapılandırılabilirliğe öncelik verir. -Daha fazlasını öğrenmek için [Prysm dokümanlarını](https://prysm.offchainlabs.com/docs/) ziyaret edin. +Daha fazla bilgi edinmek için [Prysm belgelerini](https://prysm.offchainlabs.com/docs/) ziyaret edin. ### Teku {#teku} Teku, ilk İşaret Zinciri başlangıç istemcilerinden biridir. Ana hedeflerin (güvenlik, sağlamlık, istikrar, kullanılabilirlik, performans) yanında, Teku özel olarak bazı fikir birliği istemci standartlarına uymayı da hedeflemektedir. -Teku aşırı esnek dağıtım seçenekleri sunar. İşaret düğümü ve doğrulayıcı istemcisi beraber tek bir süreç olarak çalıştırılabilir, bu da solo paydaşlar için gayet uygundur veya karmaşık hisseleme işlemleri için düğümler ayrı biçimde çalıştırılabilir. Ek olarak, Teku imza anahtarı güvenliği ve kesinti koruması için [Web3Signer](https://github.com/ConsenSys/web3signer/) ile tamamen uyumludur. +Teku aşırı esnek dağıtım seçenekleri sunar. İşaret düğümü ve doğrulayıcı istemcisi beraber tek bir süreç olarak çalıştırılabilir, bu da solo paydaşlar için gayet uygundur veya karmaşık hisseleme işlemleri için düğümler ayrı biçimde çalıştırılabilir. Ayrıca Teku, imzalama anahtarı güvenliği ve slashing koruması için [Web3Signer](https://github.com/ConsenSys/web3signer/) ile tamamen birlikte çalışabilir. -Teku Java ile yazılmıştır ve Apache 2.0 lisanslıdır. ConsenSys'te aynı zamanda Besu ve Web3Signer için sorumlu olan Protokoller ekibi tarafından geliştirilmiştir. Daha fazlasını [Teku dökümanlarından](https://docs.teku.consensys.net/en/latest/) öğrenin. +Teku Java ile yazılmıştır ve Apache 2.0 lisanslıdır. ConsenSys'te aynı zamanda Besu ve Web3Signer için sorumlu olan Protokoller ekibi tarafından geliştirilmiştir. [Teku belgelerinde](https://docs.teku.consensys.net/en/latest/) daha fazlasını öğrenin. + +### Grandine {#grandine} + +Grandine, GPL-3.0 lisansı altında Rust ile yazılmış bir mutabakat istemcisi uygulamasıdır. Grandine Core Ekibi tarafından korunur ve hızlı, yüksek performanslı ve hafiftir. Raspberry Pi gibi düşük kaynaklı cihazlarda çalışan solo paydaşlardan on binlerce doğrulayıcı çalıştıran büyük kurumsal paydaşlara kadar geniş bir yelpazeye uyar. + +Belgeleri [Grandine Kitabı'nda](https://docs.grandine.io/) bulabilirsiniz ## Senkronizasyon modları {#sync-modes} @@ -236,7 +248,7 @@ Ağdaki mevcut verileri takip etmek ve doğrulamak için Ethereum istemcisinin e Senkronizasyon modları, çeşitli değiş tokuşlarla bu sürece farklı yaklaşımları temsil eder. İstemciler, senkronizasyon algoritmalarının uygulanmasında da farklılık gösterir. Uygulamaya ilişkin ayrıntılar için her zaman seçtiğiniz istemcinin resmi belgelerine bakın. -### Yürütüm katmanı senkronizasyon modları {#execution-layer-sync-modes} +### Yürütme katmanı senkronizasyon modları {#execution-layer-sync-modes} Yürütüm katmanı, blokzincirin durumunu yeniden yürütmekten güvenilir bir kontrol noktasından yalnızca zincirin ucuyla sekronize etmeye kadar farklı kullanım durumlarına uyan farklı modlarla çalıştırılabilir. @@ -247,7 +259,7 @@ Tam senkronizasyon, tüm blokları (başlıklar ve blok gövdeleri dahil) indiri - Her işlemi doğrulayarak güven ihtiyacını en aza indirir ve en yüksek güvenliği sunar. - Artan sayıda işlemle, tüm işlemlerin işlenmesi günler ila haftalar alabilir. -[Arşiv düğümleri](#archive-node), her bloktaki her işlemde yapılan durum değişikliklerinin eksiksiz bir geçmişini oluşturmak (ve saklamak) amacıyla tam bir senkronizasyon gerçekleştirir. +[Arşiv düğümleri](#archive-node), her bloktaki her işlem tarafından yapılan durum değişikliklerinin tam bir geçmişini oluşturmak (ve korumak) için tam bir senkronizasyon gerçekleştirir. #### Hızlı senkronizasyon {#fast-sync} @@ -256,14 +268,14 @@ Tam senkronizasyonla aynı şekilde, hızlı senkronizasyon da tüm blokları in - Hızlı senkronizasyon stratejisi. - Bant genişliği kullanımını destekleyerek işlem talebini azaltır. -#### Snap senkronizasyonu {#snap-sync} +#### Anlık senkronizasyon {#snap-sync} Snap senkronizasyonları aynı zamanda zinciri her seferinde bir blok olacak şekilde doğrular. Ancak bir snap senkronizasyonu, başlangıç bloğundan başlamak yerine, gerçek blokzincirin bir parçası olduğu bilinen daha yeni bir "güvenilir" kontrol noktasından başlar. Düğüm belli bir yaştan daha yaşlı olan veriyi silerken periyodik kontrol noktaları kaydeder. Bu snap görüntüleri, veriyi sonsuza kadar depolamak yerine gerektiğinde durum verisini yeniden oluşturmak için kullanılır. - Ethereum Ana Ağında güncel olarak varsayılan olan en hızlı senkronizasyon stratejisi. - Güvenlikten ödün vermeden çok fazla disk kullanımı ve ağ bant genişliği tasarrufu sağlar. -[Snap senkronizasyonu hakkında daha fazla bilgi](https://github.com/ethereum/devp2p/blob/master/caps/snap.md). +[Anlık senkronizasyon hakkında daha fazlası](https://github.com/ethereum/devp2p/blob/master/caps/snap.md). #### Hafif senkronizasyon {#light-sync} @@ -272,36 +284,36 @@ Hafif istemci modu, tüm blok başlıklarını indirir, verileri bloklar ve baz - Geliştiricilere ve mutabakat mekanizmasına güvenerek, yalnızca en son durumu alır. - İstemci, birkaç dakika içinde mevcut ağ durumuyla kullanıma hazırdır. -**NB** Hafif senkronizasyon henüz hisse ispatı Ethereum ile birlikte çalışmamaktadır - hafif sekronizasyonun yeni versiyonları yakında çıkarılacaktır! +**Not** Hafif senkronizasyon henüz hisse ispatı Ethereum ile çalışmıyor - hafif senkronizasyonun yeni sürümleri yakında yayınlanacak! [Hafif istemciler hakkında daha fazlası](/developers/docs/nodes-and-clients/light-clients/) ### Fikir birliği katmanı senkronizasyon modları {#consensus-layer-sync-modes} -#### Optimistik senkronizasyon {#optimistic-sync} +#### İyimser senkronizasyon {#optimistic-sync} -Optimistik senkronizasyon kayıt ile ve geriye dönük uyumlu olması için tasarlanan bir birleşim sonrası senkronizasyon stratejisidir, bu da yürütme düğümlerinin yerleşmiş yöntemlerle senkronize edilmesini sağlar. Yürütme motoru _optimistik olarak_ işaret bloklarını tamamen doğrulamadan alabilir, son başı bulabilir ve yukardaki yöntemlerle zinciri senkronize etmeye başlayabilir. Sonrasında, yürütüm istemcisi yetiştiğinde, İşaret Zinciri'ndeki işlemlerin geçerliliğiyle ilgili olarak fikir birliği istemcisini bilgilendirecektir. +Optimistik senkronizasyon kayıt ile ve geriye dönük uyumlu olması için tasarlanan bir birleşim sonrası senkronizasyon stratejisidir, bu da yürütme düğümlerinin yerleşmiş yöntemlerle senkronize edilmesini sağlar. Yürütme motoru, işaret bloklarını tam olarak doğrulamadan _iyimser bir şekilde_ içe aktarabilir, en son başı bulabilir ve ardından yukarıdaki yöntemlerle zinciri senkronize etmeye başlayabilir. Sonrasında, yürütüm istemcisi yetiştiğinde, İşaret Zinciri'ndeki işlemlerin geçerliliğiyle ilgili olarak fikir birliği istemcisini bilgilendirecektir. -[Optimistik senkronizasyon hakkında daha fazlası](https://github.com/ethereum/consensus-specs/blob/dev/sync/optimistic.md) +[İyimser senkronizasyon hakkında daha fazlası](https://github.com/ethereum/consensus-specs/blob/dev/sync/optimistic.md) #### Kontrol noktası senkronizasyonu {#checkpoint-sync} -Aynı zamanda zayıf öznellik senkronizasyonu olarak da bilinen kontrol noktası senkronizasyonu, bir İşaret Zincirinin senkronize edilmesine yönelik üstün bir kullanıcı deneyimi sağlar. İşaret Zincirinin senkronizasyonunu başlangıç yerine yakın tarihli bir zayıf öznellikten başlatan [zayıf öznellik](/developers/docs/consensus-mechanisms/pos/weak-subjectivity/) varsayımlarını temel alır. Kontrol noktası senkronizasyonu, başlangıç senkronizasyon zamanını [başlangıçtan](/glossary/#genesis-block) senkronize etmeye benzer güven varsayımları ile büyük oranda hızlandırır. +Aynı zamanda zayıf öznellik senkronizasyonu olarak da bilinen kontrol noktası senkronizasyonu, bir İşaret Zincirinin senkronize edilmesine yönelik üstün bir kullanıcı deneyimi sağlar. İşaret Zinciri'ni başlangıç yerine yakın tarihli bir zayıf öznellik kontrol noktasından senkronize etmeyi sağlayan [zayıf öznellik](/developers/docs/consensus-mechanisms/pos/weak-subjectivity/) varsayımlarına dayanır. Kontrol noktası senkronizasyonları, [başlangıçtan](/glossary/#genesis-block) senkronize etmeye benzer güven varsayımlarıyla ilk senkronizasyon süresini önemli ölçüde hızlandırır. Pratikte, bu düğümünüzün yakın tarihli kesinleştirilmiş durumları indirmek için uzak bir servise bağlandığı anlamına gelir ve o noktadan sonra veri doğrulamaya devam eder. Verileri sağlayan üçüncü taraf güvenilirdir ve dikkatlice seçilmelidir. [Kontrol noktası senkronizasyonu](https://notes.ethereum.org/@djrtwo/ws-sync-in-practice) hakkında daha fazlası -## Daha fazla bilgi {#further-reading} +## Daha fazla kaynak {#further-reading} -- [Ethereum 101 - 2. Bölüm - Düğümleri Anlamak](https://kauri.io/ethereum-101-part-2-understanding-nodes/48d5098292fd4f11b251d1b1814f0bba/a) _– Wil Barnes, 13 Şubat 2019_ -- [Ethereum Tam Düğümlerini Çalıştırmak: Pek Motivasyonu Olmayanlar İçin Kılavuz](https://medium.com/@JustinMLeroux/running-ethereum-full-nodes-a-guide-for-the-barely-motivated-a8a13e7a0d31) _– Justin Leroux, 7 Kasım 2019_ +- [Ethereum 101 - Bölüm 2 - Düğümleri Anlamak](https://kauri.io/ethereum-101-part-2-understanding-nodes/48d5098292fd4f11b251d1b1814f0bba/a) _– Wil Barnes, 13 Şubat 2019_ +- [Ethereum Tam Düğümlerini Çalıştırma: Yeterince Motive Olmayanlar İçin Bir Rehber](https://medium.com/@JustinMLeroux/running-ethereum-full-nodes-a-guide-for-the-barely-motivated-a8a13e7a0d31) _– Justin Leroux, 7 Kasım 2019_ -## İlgili konular {#related-topics} +## Alakalı başlıklar {#related-topics} - [Bloklar](/developers/docs/blocks/) - [Ağlar](/developers/docs/networks/) ## İlgili öğreticiler {#related-tutorials} -- [Raspberry Pi 4'ünüzü, sadece MicroSD kartı flaşlayarak doğrulayıcı düğüme dönüştürün - Kurulum kılavuzu](/developers/tutorials/run-node-raspberry-pi/) _- Raspberry Pi 4'ünüzü flaşlayın, bir ethernet kablosu takın, SSD diskini bağlayın ve Raspberry Pi 4'ü yürütüm katmanını (Ana ağ) ve/veya fikir birliği katmanını (İşaret zinciri/doğrulayıcı) çalıştıran tam bir Ethereum düğümüne dönüştürmek için cihazı çalıştırın._ +- [Raspberry Pi 4'ünüzü yalnızca MicroSD kartı flaşlayarak bir doğrulayıcı düğüme dönüştürün – Kurulum kılavuzu](/developers/tutorials/run-node-raspberry-pi/) _– Raspberry Pi 4'ünüzü, yürütme katmanını (Ana ağ) ve/veya fikir birliği katmanını (İşaret Zinciri/doğrulayıcı) çalıştıran tam bir Ethereum düğümüne dönüştürmek için Raspberry Pi 4'ünüzü flaşlayın, bir ethernet kablosu takın, SSD diskini bağlayın ve cihazı çalıştırın._ diff --git a/public/content/translations/tr/developers/docs/nodes-and-clients/light-clients/index.md b/public/content/translations/tr/developers/docs/nodes-and-clients/light-clients/index.md index 5e35a84ff1d..c68c7ee8a35 100644 --- a/public/content/translations/tr/developers/docs/nodes-and-clients/light-clients/index.md +++ b/public/content/translations/tr/developers/docs/nodes-and-clients/light-clients/index.md @@ -1,6 +1,6 @@ --- title: Hafif istemciler -description: Ethereum hafif istemcilerine giriş. +description: "Ethereum hafif istemcilerine giriş." lang: tr --- @@ -12,7 +12,7 @@ Hafif düğüm, açık istemci yazılımını çalıştıran bir düğümdür. B ## Hafif istemciler nasıl çalışır? {#how-do-light-clients-work} -Ethereum'un hisse ispatı temelli mutabakat mekanizması kullanmaya başlamasıyla beraber özellikle hafif istemcileri desteklemek için yeni bir altyapı tanıtıldı. Çalışma şekli ise; **sekronizasyon kurulu** olarak hareket etmeleri için her 1,1 günde bir 512 doğrulayıcıdan oluşan bir alt kümeyi rastgele seçmektir. Sekronizasyon kurulu son blokların başlıklarını imzalar. Her blok başlığı, senkronizasyon kurulundaki doğrulayıcıların toplu imzasını ve hangi doğrulayıcıların imzalayıp imzalamadığını gösteren bir "bit alanı" içerir. Her başlık ayrıca bir sonraki blokun imzalanmasına katılması beklenen doğrulayıcıların bir listesini de içerir. Yani hafif bir istemcinin, senkronizasyon kurulunun aldıkları verileri imzaladığını hızlı bir şekilde görebileceği ve ayrıca senkronizasyon kurulunun doğru olup olmadığını; kendilerine beklemeleri söylenenden önceki aldıkları blok ile karşılaştırarak kontrol edebileceği anlamına gelir. Bu şekilde hafif istemci, blokun kendisini indirmeden sadece özet bilgilerini içeren blok başlıklarını indirerek Ethereum bloku hakkındaki bilgilerini güncellemeye devam edebilir. +Ethereum'un hisse ispatı temelli mutabakat mekanizması kullanmaya başlamasıyla beraber özellikle hafif istemcileri desteklemek için yeni bir altyapı tanıtıldı. Çalışma şekli, her 1,1 günde bir **senkronizasyon komitesi** olarak görev yapmak üzere 512 doğrulayıcıdan oluşan bir alt kümenin rastgele seçilmesidir. Sekronizasyon kurulu son blokların başlıklarını imzalar. Her blok başlığı, senkronizasyon komitesindeki doğrulayıcıların toplu imzasını ve hangi doğrulayıcıların imzalayıp imzalamadığını gösteren bir "bit alanı" içerir. Her başlık ayrıca bir sonraki blokun imzalanmasına katılması beklenen doğrulayıcıların bir listesini de içerir. Yani hafif bir istemcinin, senkronizasyon kurulunun aldıkları verileri imzaladığını hızlı bir şekilde görebileceği ve ayrıca senkronizasyon kurulunun doğru olup olmadığını; kendilerine beklemeleri söylenenden önceki aldıkları blok ile karşılaştırarak kontrol edebileceği anlamına gelir. Bu şekilde hafif istemci, blokun kendisini indirmeden sadece özet bilgilerini içeren blok başlıklarını indirerek Ethereum bloku hakkındaki bilgilerini güncellemeye devam edebilir. Yürütüm katmanında ise hafif düğümler için bir tane bile özellik yoktur. Hafif bir yürütüm istemcisinin kapsamı, tüm EVM ve ağ kurma fonsiyonuna sahip tam bir düğümün "hafif modu"nu kapsayacak kadar değişkenlik gösterebilir, ancak alakalı veriyi yüklemeden ve sadece blok başlarını onaylayabilecek şekilde. Yahut, Ethereum ile etkileşime girmek için bir RPC sağlayıcısına gelen taleplere fazlasıyla bağlı olan sadeleştirilmiş bir istemci olabilir. @@ -32,7 +32,7 @@ Hafif istemcinin birincil faydası; önemsiz bir donanım gereksinimi ile Ethere Ethereum düğümlerini çok küçük depolama, bellek ve işlem gücü olan cihazlarda yürütebilmek hafif istemcilerle açılan ana yenlilk alanlarından biridir. Günümüzde Ethereum düğümleri çok fazla işlem kaynağı gerektirirken; hafif istemciler tarayıcılara gömülebilir, cep telefonlarında ya da belki de akıllı saatler gibi daha küçük cihazlarda çalıştırılabilir. Bu da gömülü istemcilere sahip Ethereum cüzdanlarının bir cep telefonunda çalışabileceği anlamına gelir. Yani mobil cüzdanlar merkezi veri sağlayıcılarına veri için ihtiyaç duymaları gerekmediğinden daha merkeziyetsiz hale gelebilirler. -Bunun bir uzantısı ise **nesnelerin interneti (IoT)** cihazlarını etkinleştirmektir. Bir hafif istemci, senkronizasyon kurullarının sağladığı tüm güvenlik garantileriyle birlikte, IoT ağında bazı eylemleri tetikleyerek, bazı token bakiyelerinin veya değiştirilemez token'ların (NFT) sahipliğini hızlıca kanıtlamak için kullanılabilir. Kiralama servisinin değiştirilemez NFT'sine sahip olup olmadığınızı hızlı bir şekilde doğrulayacak ve sahipseniz bisikleti kullanmanız için bir tanesinin kilidini açacak gömülü hafif istemcili bir uygulama kullanan bir [bisiklet kiralama servisi](https://youtu.be/ZHNrAXf3RDE?t=929) düşünün. +Bunun bir uzantısı da **Nesnelerin İnterneti (IoT)** cihazlarını etkinleştirmektir. Bir hafif istemci, senkronizasyon kurullarının sağladığı tüm güvenlik garantileriyle birlikte, IoT ağında bazı eylemleri tetikleyerek, bazı token bakiyelerinin veya değiştirilemez token'ların (NFT) sahipliğini hızlıca kanıtlamak için kullanılabilir. Gömülü hafif istemciye sahip bir uygulama kullanan bir [bisiklet kiralama hizmeti](https://youtu.be/ZHNrAXf3RDE?t=929) düşünün. Bu uygulama, kiralama hizmetinin NFT'sine sahip olup olmadığınızı hızla doğrular ve eğer sahipseniz, binip gitmeniz için bir bisikletin kilidini açar! Ethereum toplamaları da hafif istemcilerden yararlanacaktır. Toplamaların en büyük sorunlarından biri, Ethereum Ana Ağı'ndan toplamaya fon aktarımı sağlayan köprüleri hedef alan saldırılardır. Toplamaların bir kullanıcının köprüye para yatırıp yatırmadığını tespit etmek için kullandığı kahinler bir zayıflıktır. Eğer bir kahin kötü veri aktarırsa, toplamayı yanıltıp köprüye fon aktarıldığını düşündürerek fonların yanlış bir şekilde serbest bırakılmasına sebep olabilir. Toplamada gömülü bir hafif istemci, kötü niyetli kahinlere karşı koruma sağlayabilir çünkü köprüye gidecek olan fonlar, herhangi bir token'ı serbest bırakmadan önce toplama tarafından doğrulanabilecek bir kanıt ile birlikte gelebilir. Aynı konsept diğer zincirler arası köprülere de uygulanabilir. @@ -42,20 +42,20 @@ Hafif istemciler ayrıca Ethereum cüzdanlarına yapılacak yükseltmelerde de k Bu geliştirme süreci içinde birkaç hafif istemci vardır, bunlar yürütme, mutabakat ve ikisinin birleşiminden oluşan yürütüm/fikir birliği istemcilerini kapsar. Bunlar, bu sayfayı yazarken güncel olarak bildiğimiz hafif istemci uygulamalarıdır: -- [Lodestar](https://github.com/ChainSafe/lodestar/tree/unstable/packages/light-client): Typescript'te hafif fikir birliği istemcisi -- [Helios](https://github.com/a16z/helios): Rust'ta hafif yürütüm ve fikir birliği istemcisi birleşimi -- [Geth](https://github.com/ethereum/go-ethereum/tree/master/light): Go'da (hâlâ geliştirme sürecinde) yürütüm istemcisi için hafif mod -- [Nimbus](https://nimbus.guide/el-light-client.html): Nim'de bulunan hafif fikir birliği istemcisi +- [Lodestar](https://github.com/ChainSafe/lodestar/tree/unstable/packages/light-client): TypeScript ile yazılmış mutabakat hafif istemcisi +- [Helios](https://github.com/a16z/helios): Rust ile yazılmış birleşik yürütme ve mutabakat hafif istemcisi +- [Geth](https://github.com/ethereum/go-ethereum/tree/master/beacon/light): Go dilinde yürütme istemcisi için hafif mod (geliştirilmekte) +- [Nimbus](https://nimbus.guide/el-light-client.html): Nim ile yazılmış mutabakat hafif istemcisi Bildiğimiz kadarıyla bunların hiçbiri henüz üretime hazır değil. -Ayrıca hafif istemcilerin Ethereum verisine erişebilme yollarını geliştirmek için yapılan oldukça fazla iş var. Şu anda, hafif istemciler tam düğümlere bir istemci/sunucu modeli kullanılarak gönderilen RPC taleplerine dayanmakta, ancak gelecekte veri bu amaca yönelik bir ağ ["Portal Network"](https://www.ethportal.net/) kullanılarak daha merkeziyetsiz bir yöntemle talep edilebilir ve bu da hafif istemcilere veriyi eşler arası bir dedikodu protokolü kullanarak sunabilir. +Ayrıca hafif istemcilerin Ethereum verisine erişebilme yollarını geliştirmek için yapılan oldukça fazla iş var. Şu anda hafif istemciler, bir istemci/sunucu modeli kullanarak tam düğümlere yapılan RPC isteklerine güvenir, ancak gelecekte veriler, [Portal Network](https://www.ethportal.net/) gibi özel bir ağ kullanılarak daha merkeziyetsiz bir şekilde talep edilebilir. Bu ağ, verileri hafif istemcilere eşler arası bir dedikodu protokolü kullanarak sunabilir. -[Yol haritasında bulunan](/roadmap/) [Verkle Ağaçları](/roadmap/verkle-trees/) ve [durumsuzluk](/roadmap/statelessness/) gibi bazı öğeler ise eninde sonunda hafif istemcilerin güvenlik garantisini tam düğümlere verilen güvenlik garantisiyle eşitleyecek. +[Yol haritası](/roadmap/)ndaki [Verkle ağaçları](/roadmap/verkle-trees/) ve [durumsuzluk](/roadmap/statelessness/) gibi diğer öğeler, zamanla hafif istemcilerin güvenlik garantilerini tam istemcilerinkine eşdeğer hale getirecektir. -## Daha fazla bilgi {#further-reading} +## Daha fazla kaynak {#further-reading} -- [Geth hafif istemcileri üzerine, Zsolt Felfodhi](https://www.youtube.com/watch?v=EPZeFXau-RE) -- [Hafif istemci ağları kurma üzerine, Etan Kissling](https://www.youtube.com/watch?v=85MeiMA4dD8) -- [Birleşim'den sonraki hafif istemciler üzerine, Etan Kissling](https://www.youtube.com/watch?v=ZHNrAXf3RDE) -- [Piper Merriam: Fonksiyonel hafif istemcilere giden dönemeçli yol](https://snakecharmers.ethereum.org/the-winding-road-to-functional-light-clients/) +- [Zsolt Felfodhi, Geth hafif istemcileri üzerine](https://www.youtube.com/watch?v=EPZeFXau-RE) +- [Etan Kissling, hafif istemci ağ iletişimi üzerine](https://www.youtube.com/watch?v=85MeiMA4dD8) +- [Etan Kissling, Birleşim sonrası hafif istemciler üzerine](https://www.youtube.com/watch?v=ZHNrAXf3RDE) +- [Piper Merriam: İşlevsel hafif istemcilere giden dolambaçlı yol](https://snakecharmers.ethereum.org/the-winding-road-to-functional-light-clients/) diff --git a/public/content/translations/tr/developers/docs/nodes-and-clients/node-architecture/index.md b/public/content/translations/tr/developers/docs/nodes-and-clients/node-architecture/index.md index d8e98303b85..ab3c8fd4572 100644 --- a/public/content/translations/tr/developers/docs/nodes-and-clients/node-architecture/index.md +++ b/public/content/translations/tr/developers/docs/nodes-and-clients/node-architecture/index.md @@ -1,26 +1,28 @@ --- -title: Düğüm mimarisi -description: Ethereum düğümlerinin nasıl oluşturulduğuna giriş. +title: "Düğüm mimarisi" +description: "Ethereum düğümlerinin nasıl oluşturulduğuna giriş." lang: tr --- -Bir Ethereum düğümü iki istemciden oluşur: bir [yürütüm istemcisi](/developers/docs/nodes-and-clients/#execution-clients) ve bir [fikir birliği istemcisi](/developers/docs/nodes-and-clients/#consensus-clients). +Bir Ethereum düğümü iki istemciden oluşur: bir [yürütüm istemcisi](/developers/docs/nodes-and-clients/#execution-clients) ve bir [mutabakat istemcisi](/developers/docs/nodes-and-clients/#consensus-clients). Bir düğümün yeni bir blok önerebilmesi için bir [doğrulayıcı istemcisi](#validators) de çalıştırması gerekir. -Ethereum [iş ispatı](/developers/docs/consensus-mechanisms/pow/) kullanırken, bir Ethereum düğümünü çalıştırmak için tek bir yürütüm istemcisi yeterliydi. Ancak, [hisse ispatının](/developers/docs/consensus-mechanisms/pow/) uygulanmasından beri, yürütüm istemcisinin [fikir birliği istemcisi](/developers/docs/nodes-and-clients/#consensus-clients) denilen başka bir yazılım parçası ile birlikte kullanılması gerekmekte. +Ethereum [iş ispatı](/developers/docs/consensus-mechanisms/pow/) kullanırken, tam bir Ethereum düğümünü çalıştırmak için bir yürütüm istemcisi yeterliydi. Ancak, [hisse ispatı](/developers/docs/consensus-mechanisms/pow/) uygulamasından bu yana, yürütüm istemcisinin [mutabakat istemcisi](/developers/docs/nodes-and-clients/#consensus-clients) adı verilen başka bir yazılımla birlikte kullanılması gerekir. Aşağıdaki şema iki Ethereum istemcisi arasındaki ilişkiyi göstermekte. İki istemci kendilerine ait ilgili eşler arası (P2P) ağlarına bağlanır. Yürütüm istemcileri P2P ağı üzerinden işlem "dedikodu"su yaparken, ayrı P2P ağlarına ihtiyaç duyulur ve bu yerel işlem havuzlarını yönetmelerine olanak sağlar. Bu süreçte de fikir birliği istemcileri P2P ağı üzerinden blok dedikodularını yaparlar ve bu da mutabakatın ve zincir büyümesinin önünü açar. ![](node-architecture-text-background.png) -Bu çift istemcili yapının çalışması için, fikir birliği istemcilerinin yürütüm istemcisine işlem paketlerini iletebilmesi gerekir. İstemcinin herhangi bir Ethereum kuralını çiğnemediğinden ve Ethereum'un durumu için önerilen güncellemenin doğru olduğundan emin olmanın yolu işlemleri yerel olarak yürütmektir. Benzer olarak, düğüm bir blok üreticisi olmak için seçildiğinde, fikir birliği istemcisi yeni bloka dahil etmek ve küresel durumu güncellemek için Geth üzerinden işlem paketleri talep edebilmelidir. İstemciler arası gerçekleşen bu iletişim [motor API](https://github.com/ethereum/execution-apis/blob/main/src/engine/common.md)'sını kullanan yerel bir RPC bağlantısı tarafından sağlanır. +_Yürütüm istemcisi için Erigon, Nethermind ve Besu dahil olmak üzere çeşitli seçenekler vardır_. + +Bu iki istemcili yapının çalışması için, mutabakat istemcilerinin yürütüm istemcisine işlem demetlerini aktarması gerekir. Yürütüm istemcisi, işlemlerin herhangi bir Ethereum kuralını ihlal etmediğini ve Ethereum’un durumuna yönelik önerilen güncellemenin doğru olduğunu doğrulamak için işlemleri yerel olarak yürütür. Bir düğüm blok üreticisi olarak seçildiğinde, mutabakat istemcisi örneği, yeni bloka dahil etmek ve küresel durumu güncellemek üzere yürütmek için yürütüm istemcisinden işlem demetleri talep eder. Mutabakat istemcisi, [Motor API'sini](https://github.com/ethereum/execution-apis/blob/main/src/engine/common.md) kullanarak yerel bir RPC bağlantısı aracılığıyla yürütüm istemcisini yönlendirir. ## Yürütüm istemcisi ne yapar? {#execution-client} -Yürütüm istemcisi, işlem işleme, işlem dedikodusu, durum yönetimi ve Ethereum Sanal Makinesi'nin ([EVM](/developers/docs/evm/)) desteklenmesinden sorumludur. Ancak blok inşası, blok dedikodusu ve mutabakat mantığının idaresinden sorumlu **değildir**. Bunlar, fikir birliği istemcisinin sorumluluğundadır. +Yürütüm istemcisi, durum yönetimi ve Ethereum Sanal Makinesi'ni ([EVM](/developers/docs/evm/)) desteklemenin yanı sıra işlem doğrulama, işleme ve dedikodudan sorumludur. Blok oluşturma, blok dedikodusu yapma veya mutabakat mantığını yönetmekten sorumlu **değildir**. Bunlar, fikir birliği istemcisinin sorumluluğundadır. -Yürütüm istemcisi, işlem listesi, güncellenmiş durum ağacı ve diğer yürütümle ilgili veriler gibi yürütüm yüklerini oluşturur. Fikir birliği istemcileri, her bloktaki yürütme yüklerini içerir. Yürütüm istemcisi, geçerli olduklarından emin olmak için yeni bloklarda işlemlerin yeniden yürütülmesinden sorumludur. İşlemleri yürütme, yürütüm istemcisinin [Ethereum Sanal Makinesi (EVM)](/developers/docs/evm) olarak bilinen gömülü bilgisayarından yapılır. +Yürütüm istemcisi, işlem listesi, güncellenmiş durum ağacı ve diğer yürütümle ilgili veriler gibi yürütüm yüklerini oluşturur. Fikir birliği istemcileri, her bloktaki yürütme yüklerini içerir. Yürütüm istemcisi, geçerli olduklarından emin olmak için yeni bloklarda işlemlerin yeniden yürütülmesinden sorumludur. İşlemlerin yürütülmesi, yürütüm istemcisinin [Ethereum Sanal Makinesi (EVM)](/developers/docs/evm) olarak bilinen gömülü bilgisayarında yapılır. -Yürütüm istemcisi ayrıca Ethereum'a [RPC yöntemleri](/developers/docs/apis/json-rpc) aracılığıyla kullanıcıların Ethereum blok zincirini sorgulamasını, işlemleri göndermelerini ve akıllı sözleşmeler dağıtmalarını sağlayan bir arayüz sunar. RPC çağrılarının bir [Web3js](https://docs.web3js.org/)veya [Web3py](https://web3py.readthedocs.io/en/v5/) kütüphanesi ya da tarayıcı cüzdanı gibi bir kullanıcı arayüzü tarafından işlenmesi yaygın bir durumdur. +Yürütüm istemcisi ayrıca, kullanıcıların Ethereum blok zincirini sorgulamasını, işlem göndermesini ve akıllı sözleşmeleri dağıtmasını sağlayan [RPC yöntemleri](/developers/docs/apis/json-rpc) aracılığıyla Ethereum'a bir kullanıcı arayüzü sunar. RPC çağrılarının [Web3js](https://docs.web3js.org/), [Web3py](https://web3py.readthedocs.io/en/v5/) gibi bir kütüphane veya tarayıcı cüzdanı gibi bir kullanıcı arayüzü tarafından işlenmesi yaygındır. Özetle, yürütüm istemcisi: @@ -35,22 +37,22 @@ Yürütüm istemcisi tasdikleme sürecine ya da blok önerilerine katılmaz, bu ## Doğrulayıcılar {#validators} -Düğüm operatörleri mevduat sözleşmesine 32 ETH yatırırken kendi fikir birliği istemcilerine doğrulayıcı ekleyebilirler. Doğrulayıcı istemcisi fikir birliği istemcisi ile paketlenmiş şekilde gelir ve istenen herhangi bir zamanda bir düğüme eklenebilir. Doğrulayıcı, tastikleri ve blok önerilerini işler. Bir düğümün duruma göre ödülleri almasını, cezalar sebebiyle ETH kaybetmesini ya da cezalandırılmasını sağlarlar. Doğrulayıcı yazılımını çalıştırmak ayrıca bir düğümün yeni blok önermesi için seçilmesine uygun hale getirir. +Hisseleme ve doğrulayıcı yazılımını çalıştırmak, bir düğümü yeni bir blok önermek üzere seçilmeye uygun hale getirir. Düğüm operatörleri mevduat sözleşmesine 32 ETH yatırırken kendi fikir birliği istemcilerine doğrulayıcı ekleyebilirler. Doğrulayıcı istemcisi fikir birliği istemcisi ile paketlenmiş şekilde gelir ve istenen herhangi bir zamanda bir düğüme eklenebilir. Doğrulayıcı, tastikleri ve blok önerilerini işler. Ayrıca bir düğümün cezalar veya kesintiler yoluyla ödül biriktirmesini veya ETH kaybetmesini sağlar. [Hisseleme hakkında daha fazlası](/staking/). -## Düğüm karşılaştırmasının bileşenleri {#node-comparison} +## Düğüm karşılaştırması bileşenleri {#node-comparison} -| Yürütüm İstemcisi | Fikir Birliği İstemcisi | Doğrulayıcı | -| ---------------------------------------------------------------- | ---------------------------------------------------------------------- | -------------------------------- | -| P2P Ağı üzerinden işlem "dedikodu"sunu yapar | Kendi P2P ağı üzerinden blokların "dedikodu"sunu ve tastiklerini yapar | Blok önerir | -| İşlemleri yürütür/yeniden yürütür | Çatal seçim algoritmasını çalıştırır | Ödülleri ve cezaları pay eder | -| Gelen durum değişikliklerini onaylar | Zincirin başını takip eder | Tasdikleri yapar | -| Durum ve makbuz denemelerini yönetir | İşaret durumunu yönetir (mutabakat ve yürütme bilgilerine sahiptir) | Hisselenmesi için 32 ETH gerekir | -| Yürütme yükünü oluşturur | RanDAO'da birikmiş rastlantısallığı takip eder | Cezalandırılabilir | -| Ethereum ile etkileşimde olan JSON-RPC API'larını ortaya çıkarır | Gerekçeyi ve sonuçlandırmayı takip eder | | +| Yürütüm İstemcisi | Fikir Birliği İstemcisi | Doğrulayıcı | +| ---------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------- | +| P2P ağı üzerinden işlemlerin dedikodusunu yapar. | Kendi P2P ağı üzerinden blokların ve tasdiklerin dedikodusunu yapar. | Blok önerir | +| İşlemleri yürütür/yeniden yürütür | Çatal seçim algoritmasını çalıştırır | Ödülleri ve cezaları pay eder | +| Gelen durum değişikliklerini onaylar | Zincirin başını takip eder | Tasdikleri yapar | +| Durum ve makbuz denemelerini yönetir | İşaret durumunu yönetir (mutabakat ve yürütme bilgilerine sahiptir) | Hisselenmesi için 32 ETH gerekir | +| Yürütme yükünü oluşturur | RANDAO'da (doğrulayıcı seçimi ve diğer mutabakat işlemleri için doğrulanabilir rastgelelik sağlayan bir algoritma) biriken rastgeleliği takip eder. | Cezalandırılabilir | +| Ethereum ile etkileşimde olan JSON-RPC API'larını ortaya çıkarır | Gerekçeyi ve sonuçlandırmayı takip eder | | -## Daha fazla bilgi {#further-reading} +## Daha fazla kaynak {#further-reading} - [Hisse ispatı](/developers/docs/consensus-mechanisms/pos) - [Blok önerisi](/developers/docs/consensus-mechanisms/pos/block-proposal) diff --git a/public/content/translations/tr/developers/docs/nodes-and-clients/nodes-as-a-service/index.md b/public/content/translations/tr/developers/docs/nodes-and-clients/nodes-as-a-service/index.md index bd04bf27460..46e4ddfeea5 100644 --- a/public/content/translations/tr/developers/docs/nodes-and-clients/nodes-as-a-service/index.md +++ b/public/content/translations/tr/developers/docs/nodes-and-clients/nodes-as-a-service/index.md @@ -1,23 +1,23 @@ --- -title: Hizmet olarak düğümler -description: Düğüm hizmetleri, bunların artıları ve eksileri ve popüler sağlayıcılara giriş düzeyinde bir genel bakış. +title: "Hizmet olarak düğümler" +description: "Düğüm hizmetleri, bunların artıları ve eksileri ve popüler sağlayıcılara giriş düzeyinde bir genel bakış." lang: tr sidebarDepth: 2 --- ## Giriş {#Introduction} -Kendi [Ethereum düğümünüzü](/developers/docs/nodes-and-clients/#what-are-nodes-and-clients) çalıştırmak, özellikle başlarken veya hızlı ölçeklendirme yaparken zor olabilir. Sizin için optimize edilmiş düğüm altyapılarını çalıştıran [bir dizi hizmet](#popular-node-services) vardır, böylece bunun yerine uygulamanızı veya ürününüzü geliştirmeye odaklanabilirsiniz. Düğüm hizmetlerinin nasıl çalıştığını, bunları kullanmanın artılarını ve eksilerini açıklayacağız ve başlamakla ilgileniyorsanız sağlayıcıları listeleyeceğiz. +Kendi [Ethereum düğümünüzü](/developers/docs/nodes-and-clients/#what-are-nodes-and-clients) çalıştırmak, özellikle başlarken veya hızlı ölçeklendirme yaparken zorlayıcı olabilir. Sizin için optimize edilmiş düğüm altyapılarını çalıştıran bir [dizi hizmet](#popular-node-services) vardır, böylece bunun yerine uygulamanızı veya ürününüzü geliştirmeye odaklanabilirsiniz. Düğüm hizmetlerinin nasıl çalıştığını, bunları kullanmanın artılarını ve eksilerini açıklayacağız ve başlamakla ilgileniyorsanız sağlayıcıları listeleyeceğiz. ## Ön Koşullar {#prerequisites} -Düğümlerin ve istemcilerin ne olduğu konusunda henüz bir fikriniz yoksa, [Düğümler ve istemciler](/developers/docs/nodes-and-clients/) kısmına göz atın. +Düğümlerin ve istemcilerin ne olduğu hakkında bir fikriniz yoksa [Düğümler ve istemciler](/developers/docs/nodes-and-clients/) sayfasını inceleyin. -## Hissedarlar {#stakoooooooooooooors} +## Paydaşlar {#stakoooooooooooooors} -Solo paydaşlar üçüncü taraf sağlayıcıları kullanmak yerine kendi altyapı sistemlerini çalıştırmalıdır. Yani bunun anlamı yürütüm istemcisi ile birleştirilmiş fikir birliği istemcisini çalıştırmaktır. [Birleşim'den](/roadmap/merge) önce sadece mutabakat istemcisini çalıştırıp merkezi bir sağlayıcı kullanarak yürütüm istemcisi kullanmak mümkündü. Ancak artık bu mümkün değil, solo paydaş iki istemciyi birlikte çalıştırmak zorundadır. Yalnız bu süreci kolaylaştırmak için bazı hizmetler var. +Solo paydaşlar üçüncü taraf sağlayıcıları kullanmak yerine kendi altyapı sistemlerini çalıştırmalıdır. Yani bunun anlamı yürütüm istemcisi ile birleştirilmiş fikir birliği istemcisini çalıştırmaktır. [Birleşim](/roadmap/merge) öncesinde, yalnızca bir mutabakat istemcisi çalıştırmak ve yürütme verileri için merkezi bir sağlayıcı kullanmak mümkündü; bu artık mümkün değil - tek başına bir paydaş her iki istemciyi de çalıştırmalıdır. Yalnız bu süreci kolaylaştırmak için bazı hizmetler var. -[Çalışan bir düğüm hakkında daha fazlasını okuyun](/developers/docs/nodes-and-clients/run-a-node/). +[Bir düğüm çalıştırma hakkında daha fazlasını okuyun](/developers/docs/nodes-and-clients/run-a-node/). Aşağıda açıklanan servisler hisselenmeyen düğümler içindir. @@ -25,34 +25,34 @@ Aşağıda açıklanan servisler hisselenmeyen düğümler içindir. Düğüm hizmeti sağlayıcıları, siz uğraşmayın diye sahne arkasında sizin için dağıtılmış düğüm istemcileri çalıştırır. -Bu hizmetler tipik olarak blok zincire yazmak ve blok zincirden okumak için kullanabileceğiniz bir API anahtarı sağlar. Bunlar genellikle Ana Ağa ek olarak [Ethereum test ağlarına](/developers/docs/networks/#ethereum-testnets) erişim içerir. +Bu hizmetler tipik olarak blok zincire yazmak ve blok zincirden okumak için kullanabileceğiniz bir API anahtarı sağlar. Genellikle Ana ağa ek olarak [Ethereum test ağlarına](/developers/docs/networks/#ethereum-testnets) erişimi de içerirler. Bazı hizmetler, sizin için yönettikleri kendi özel düğümünüzü sunarken, diğerleri etkinliği düğümler arasında dağıtmak için yük dengeleyicileri kullanır. Neredeyse tüm düğüm hizmetlerini entegre etmek aşırı derecede kolaydır: Kendi kendine barındırılan düğümünüzü değiştirmek veya hizmetler arasında geçiş yapmak için tek satırlık kod değişiklikleri yeterli olabilir. -Çoğu zaman düğüm hizmetleri çeşitli [düğüm istemcileri](/developers/docs/nodes-and-clients/#execution-clients) ve [düğüm türleri](/developers/docs/nodes-and-clients/#node-types) çalıştırarak tek bir API'da istemciye özel yöntemlere ek olarak tam düğümlere ve arşiv düğümlerine erişmenize olanak tanır. +Düğüm hizmetleri genellikle çeşitli [düğüm istemcileri](/developers/docs/nodes-and-clients/#execution-clients) ve [türleri](/developers/docs/nodes-and-clients/#node-types) çalıştırarak, tek bir API'de istemciye özel yöntemlerin yanı sıra tam ve arşiv düğümlerine erişmenizi sağlar. Düğüm hizmetlerinin özel anahtarlarınızı veya bilgilerinizi saklamadığını ve saklamaması gerektiğini unutmamak önemlidir. -## Bir düğüm hizmeti kullanmanın faydaları nelerdir? {#benefits-of-using-a-node-service} +## Bir düğüm hizmeti kullanmanın faydaları nelerdir? Bir düğüm hizmeti kullanmanın avantajları {#benefits-of-using-a-node-service} Bir düğüm hizmeti kullanmanın asıl faydası, düğümlere bakım yapmak ve yönetmek için mühendislik zamanı harcamanın gerekmemesidir. Bu, altyapı bakımı konusunda endişelenmek yerine ürününüzü oluşturmaya odaklanmanıza olanak tanır. Kendi düğümlerinizi çalıştırmak, depolamadan bant genişliğine ve mühendisliğe harcanan değerli zamana kadar çok pahalıya mal olabilir. Ölçeklendirirken daha fazla düğüm başlatmak, düğümleri en son sürümlere yükseltmek ve durum tutarlılığını sağlamak gibi şeyler, istediğiniz web3 ürününde kaynak oluşturma ve harcama konusundan sizi uzaklaştırabilir. -## Bir Düğüm Hizmeti kullanmanın eksileri nelerdir? {#cons-of-using-a-node-service} +## Bir Düğüm Hizmeti kullanmanın eksileri nelerdir? Bir düğüm hizmeti kullanmanın dezavantajları {#cons-of-using-a-node-service} Bir düğüm hizmeti kullanarak, ürününüzün altyapı yönünü merkezileştirirsiniz. Bu nedenle, merkeziyetsizliğe son derecede önem veren projeler, üçüncü bir tarafa dış kaynak sağlamak yerine kendi kendini barındıran düğümleri tercih edebilir. -[Kendi düğümünüzü çalıştırmanın faydaları](/developers/docs/nodes-and-clients/#benefits-to-you) hakkında daha fazlasını okuyun. +[Kendi düğümünüzü çalıştırmanın avantajları](/developers/docs/nodes-and-clients/#benefits-to-you) hakkında daha fazlasını okuyun. ## Popüler düğüm hizmetleri {#popular-node-services} İşte en popüler Ethereum düğüm sağlayıcılarından bazılarının bir listesi, eksik olanları eklemekten çekinmeyin! Her düğüm hizmeti, ücretsiz veya ücretli katmanlara ek olarak farklı avantajlar ve özellikler sunar, bir karar vermeden önce hangisinin ihtiyaçlarınıza en uygun olduğunu araştırmalısınız. - [**Alchemy**](https://alchemy.com/) - - [Belgeler](https://docs.alchemyapi.io/) + - [Belgeler](https://www.alchemy.com/docs/) - Özellikler - Aylık 300 milyon işlem birimiyle en büyük ücretsiz katman (~30 milyon getLatestBlock isteği) - Polygon, Starknet, Optimism, Arbitrum için çoklu zincir desteği @@ -64,7 +64,20 @@ Bir düğüm hizmeti kullanarak, ürününüzün altyapı yönünü merkezileşt - Entegre test ağı musluk erişimi - 18 bin kullanıcılı aktif Discord kurucu topluluğu -- [**Düğüm ile İlgili Her Şey**](https://allthatnode.com/) +- [**Allnodes**](https://www.allnodes.com/) + - [Belgeler](https://docs.allnodes.com/) + - Özellikler + - Allnodes portföy sayfasında oluşturulan PublicNode jetonu ile oran sınırı yoktur. + - [PublicNode](https://www.publicnode.com) üzerinde gizlilik odaklı ücretsiz rpc uç noktaları (100+ blokzincir) + - 90'dan fazla blokzincir için oran sınırlaması olmayan adanmış düğümler + - 30'dan fazla blokzincir için adanmış arşiv düğümleri + - 3 bölgede mevcuttur (ABD, AB, Asya) + - [PublicNode](https://www.publicnode.com/snapshots) üzerinde 100'den fazla blokzincir için anlık görüntüler + - %99,90-%99,98 çalışma süresi SLA'sı ile 7/24 teknik destek (plana bağlıdır). + - Saat başına ödeme fiyatlandırması + - Kredi Kartı, PayPal veya Kripto ile ödeme yapın + +- [**All That Node**](https://allthatnode.com/) - [Belgeler](https://docs.allthatnode.com/) - Özellikler - Ücretsiz katman ile günde 50.000 istek @@ -77,7 +90,7 @@ Bir düğüm hizmeti kullanarak, ürününüzün altyapı yönünü merkezileşt - İzleme/Hata Ayıklama API'si desteklenir - Otomatik güncellemeler -- [**Amazon Yönetimli Blokzincir**](https://aws.amazon.com/managed-blockchain/) +- [**Amazon Managed Blockchain**](https://aws.amazon.com/managed-blockchain/) - [Belgeler](https://aws.amazon.com/managed-blockchain/resources/) - Özellikler - Tamamen yönetilen Ethereum düğümleri @@ -94,9 +107,9 @@ Bir düğüm hizmeti kullanarak, ürününüzün altyapı yönünü merkezileşt - En yakındaki kullanılabilir düğüme hızlı ve güvenli bir geçit oluşturmak için yük dengeleme ve düğüm sağlığı takibi - WSS uç noktası ve sınırsız oran limitleri sağlayan Premium katman - Kırktan fazla zincir için tek tıkla tam düğüm ve doğrulayıcı düğüm kurulumu - - Kullandıkça ölçeklendirin + - Kullandıkça ölçeklendir - Analitik araçları - - Gösterge paneli + - Gösterge Paneli - RPC, HTTPS ve WSS uç noktaları - Doğrudan destek @@ -125,7 +138,7 @@ Bir düğüm hizmeti kullanarak, ürününüzün altyapı yönünü merkezileşt - [**BlockPI**](https://blockpi.io/) - [Belgeler](https://docs.blockpi.io/) - Özellikler - - Güçlü ve dağıtılmış düğüm yapısı + - Sağlam ve dağıtılmış düğüm yapısı - 40 HTTPS ve WSS uç noktasına kadar - Ücretsiz kayıt paketi ve aylık paket - İzleme yöntemi + Arşiv veri desteği @@ -148,28 +161,28 @@ Bir düğüm hizmeti kullanarak, ürününüzün altyapı yönünü merkezileşt - Özellikler - Ücretsiz paylaşılan düğümler - Paylaşılan arşiv düğümleri - - GraphQL desteği + - GraphQL destek - RPC ve WSS uç noktaları - - Özel tam düğümler ve arşiv düğümleri + - İthaf olunmuş tam ve arşiv düğümleri - Özel dağıtımlar için hızlı eşitleme süresi - - Bulutunuzu getirin + - Bulutunu getir - Saat başına ödeme fiyatlandırması - Doğrudan 7/24 destek -- [**DRPC**](https://drpc.org/) - - [Belgeler](https://docs.drpc.org/) - - Özellikler - - Merkeziyetsiz RPC düğümleri - - 15'ten fazla Düğüm sağlayıcısı - - Düğüm dengeleme - - Ücretsiz katmanda aylık sınırsız işlem birimi - - Veri doğrulama - - Özel uç noktalar - - HTTP ve WSS uç noktaları - - Sınırsız anahtarlar (ücretsiz ve ücretli kademe) - - Esnek geri atım seçenekleri - - [Genel Uç Nokta](https://eth.drpc.org) - - Ücretsiz paylaşımlı arşiv düğümleri +- [**dRPC**](https://drpc.org/) + - [Belgeler](https://drpc.org/docs) + - NodeCloud: 10 $'dan (USD) başlayan tak ve çalıştır RPC altyapısı—tam hız, sınırsız + - NodeCloud özellikleri: + - 185 ağ için API desteği + - 40'tan fazla sağlayıcıdan oluşan dağıtılmış havuz + - Dokuz (9) coğrafi küme ile küresel kapsama alanı + - Yapay zeka destekli yük dengeleme sistemi + - Kullandığın kadar öde sabit fiyatlandırma—fiyat artışı yok, süre sonu yok, taahhüt yok + - Sınırsız anahtar, ayrıntılı anahtar ayarları, ekip rolleri, ön uç koruması + - Yöntem başına 20 işlem birimi (CU) sabit ücretli yöntemler + - [Genel uç nokta zincir listesi](https://drpc.org/chainlist) + - [Fiyatlandırma hesaplayıcısı](https://drpc.org/pricing#calculator) + - NodeCore: tam kontrol isteyen kuruluşlar için açık kaynaklı yığın - [**GetBlock**](https://getblock.io/) - [Belgeler](https://getblock.io/docs/get-started/authentication-with-api-key/) @@ -185,12 +198,12 @@ Bir düğüm hizmeti kullanarak, ürününüzün altyapı yönünü merkezileşt - [**InfStones**](https://infstones.com/) - Özellikler - - Ücretsiz katman seçeneği - - Kullandıkça ölçeklendirin + - Ücretsiz seviye seçeneği + - Kullandıkça ölçeklendir - Analitik - - Gösterge paneli + - Gösterge Paneli - Benzersiz API uç noktaları - - Özel tam düğümler + - Adanmış tam düğümler - Özel dağıtımlar için hızlı eşitleme süresi - Doğrudan 7/24 destek - 50'den fazla blok zincir düğümüne erişim @@ -198,34 +211,34 @@ Bir düğüm hizmeti kullanarak, ürününüzün altyapı yönünü merkezileşt - [**Infura**](https://infura.io/) - [Belgeler](https://infura.io/docs) - Özellikler - - Ücretsiz katman seçeneği - - Kullandıkça ölçeklendirin + - Ücretsiz seviye seçeneği + - Kullandıkça ölçeklendir - Ücretli arşiv verileri - Doğrudan Destek - - Gösterge paneli + - Gösterge Paneli - [**Kaleido**](https://kaleido.io/) - [Belgeler](https://docs.kaleido.io/) - Özellikler - Ücretsiz başlangıç ​​katmanı - Tek tıklamayla Ethereum düğümü dağıtımı - - Özelleştirilebilir istemciler ve algoritmalar (Geth, Quorum & Besu || PoA, IBFT & Raft) + - Özelleştirilebilir istemciler ve algoritmalar (Geth, Quorum ve Besu || PoA, IBFT ve Raft) - 500'den fazla yönetimsel ve servis API'sı - Ethereum işlem arzı için RESTful arayüzü (Apache Kafka destekli) - Olay gönderimi için dışa yayınlar (Apache Kafka destekli) - - Yan ve "zincir dışındaki" servislerin derin koleksiyonu (ör. iki taraflı şifrelenmiş mesaj iletimi) + - "Zincir dışı" ve yan hizmetlerin derin koleksiyonu (örneğin, ikili şifreli mesajlaşma aktarımı) - Yönetişim ve rol tabanlı erişim kontrolü ile kolay ağ katılımı - Hem yöneticiler hem uç kullanıcılar için çok yönlü kullanıcı yönetimi - Yüksek derecede ölçeklenebilir, esnek, işletme sınıfı altyapı - Bulut HSM özel anahtar yönetimi - Ethereum Ana Ağ Bağlama - ISO 27k ve SOC 2, Tip 2 sertifikasyonları - - Dinamik çalışma zamanı yapılandırması (ör. bulut entegrasyonları ekleme, düğüm girdilerini değiştirme vb.) + - Dinamik çalışma zamanı yapılandırması (örneğin, bulut entegrasyonları ekleme, düğüm girişlerini değiştirme vb.) - Çoklu bulut, çoklu bölge ve hibrit dağıtım düzenlemeleri için destek - Basit saatlik SaaS tabanlı ücretlendirme - SLA'lar ve 7/24 destek -- [**Lava Ağı**](https://www.lavanet.xyz/) +- [**Lava Network**](https://www.lavanet.xyz/) - [Belgeler](https://docs.lavanet.xyz/) - Özellikler - Ücretsiz Test Ağı Kullanımı @@ -241,12 +254,12 @@ Bir düğüm hizmeti kullanarak, ürününüzün altyapı yönünü merkezileşt - [Belgeler](https://docs.moralis.io/) - Özellikler - Ücretsiz paylaşılan düğümler - - Ücretsiz paylaşımlı arşiv düğümleri + - Ücretsiz paylaşılan arşiv düğümleri - Gizlilik odaklı (kayıt politikası yok) - Çapraz zincir desteği - - Kullandıkça ölçeklendirin - - Gösterge paneli - - Benzersiz Ethereum SDK'si + - Kullandıkça ölçeklendir + - Gösterge Paneli + - Benzersiz Ethereum SDK'sı - Benzersiz API uç noktaları - Doğrudan teknik destek @@ -258,7 +271,7 @@ Bir düğüm hizmeti kullanarak, ürününüzün altyapı yönünü merkezileşt - Çoklu zincir desteği - Ücretsiz başlayın -- [**NOWNode'lar**](https://nownodes.io/) +- [**NOWNodes**](https://nownodes.io/) - [Belgeler](https://documenter.getpostman.com/view/13630829/TVmFkLwy) - Özellikler - 50'den fazla blok zincir düğümüne erişim @@ -269,18 +282,18 @@ Bir düğüm hizmeti kullanarak, ürününüzün altyapı yönünü merkezileşt - Kişisel Hesap Yöneticisi - Paylaşılan, arşivlenen, yedeklenen ve özel düğümler -- [**Pocket Ağı**](https://www.pokt.network/) +- [**Pocket Network**](https://www.pokt.network/) - [Belgeler](https://docs.pokt.network/home/) - Özellikler - - Merkeziyetsiz RPC Protokolü ve Pazar + - Merkeziyetsiz RPC Protokolü ve Pazar Yeri - Günlük 1 Milyon Talep Bulunan Ücretsiz Katman (uç nokta başına maks. 2) - [Genel Uç Noktalar](https://docs.pokt.network/developers/public-endpoints) - Pre-Stake+ Programı (günde 1 milyondan fazla talebe ihtiyacınız varsa) - 15'ten Fazla Blok Zinciri Desteklenir - Uygulamalara hizmet ederek POKT kazanan 6400'den fazla Düğüm - - Arşiv Düğümü, İzlemeli Arşiv Düğümü ve Test Ağı Düğümü Desteği + - Arşiv Düğümü, İzlemeli Arşiv Düğümü ve Test Ağı Düğüm Desteği - Ethereum Ana Ağ Düğümü İstemci Çeşitliliği - - Tek Başarısızlık Noktası Yok + - Tek Hata Noktası Yok - Sıfır Kesinti Süresi - Uygun Maliyetli Sıfıra Yakın Tokenomik (ağ bant genişliği için bir kez POKT hisseleyin) - Aylık batık maliyet yok, altyapınızı bir varlığa dönüştürün @@ -288,15 +301,15 @@ Bir düğüm hizmeti kullanarak, ürününüzün altyapı yönünü merkezileşt - Gün başına istek sayısını ve saat başına düğüm sayısını, sonsuz olarak ölçeklendirin - En özel, sansüre dirençli seçenek - Uygulamalı geliştirici desteği - - [Pocket Portal](https://bit.ly/ETHorg_POKTportal) gösterge paneli ve analizleri + - [Pocket Portal](https://bit.ly/ETHorg_POKTportal) panosu ve analizleri - [**QuickNode**](https://www.quicknode.com) - [Belgeler](https://www.quicknode.com/docs/) - Özellikler - - 7/24 teknik destek ve Discord topluluğu + - 7/24 teknik destek ve geliştirici Discord topluluğu - Coğrafi dengeli, çoklu bulut/metal, düşük gecikmeli ağ - Çoklu zincir desteği (Optimism, Arbitrum, Polygon ve diğer 11) - - Hız ve kararlılık için orta katmanlar (çağrı yönlendirme, önbellek, endeksleme) + - Hız ve kararlılık için ara katmanlar (çağrı yönlendirme, önbellek, dizinleme) - Web kancaları aracılığıyla akıllı sözleşme izleme - Sezgisel gösterge paneli, analiz paketi, RPC oluşturucu - Gelişmiş güvenlik özellikleri (JWT, maskeleme, beyaz liste) @@ -307,14 +320,14 @@ Bir düğüm hizmeti kullanarak, ürününüzün altyapı yönünü merkezileşt - [**Rivet**](https://rivet.cloud/) - [Belgeler](https://rivet.readthedocs.io/en/latest/) - Özellikler - - Ücretsiz katman seçeneği - - Kullandıkça ölçeklendirin + - Ücretsiz seviye seçeneği + - Kullandıkça ölçeklendir - [**SenseiNode**](https://senseinode.com) - [Belgeler](https://docs.senseinode.com/) - Özellikler - Özel ve Paylaşım düğümleri - - Gösterge paneli + - Gösterge Paneli - Latin Amerika'daki farklı konumlarda birden fazla barındırma sağlayıcısında AWS'yi barındırma - Prysm ve Lighthouse istemcileri @@ -322,13 +335,13 @@ Bir düğüm hizmeti kullanarak, ürününüzün altyapı yönünü merkezileşt - [Belgeler](https://docs.settlemint.com/) - Özellikler - Ücretsiz deneme - - Kullandıkça ölçeklendirin - - GraphQL desteği + - Kullandıkça ölçeklendir + - GraphQL destek - RPC ve WSS uç noktaları - - Özel tam düğümler - - Bulutunuzu getirin + - Adanmış tam düğümler + - Bulutunu getir - Analitik araçları - - Gösterge paneli + - Gösterge Paneli - Saat başına ödeme fiyatlandırması - Doğrudan destek @@ -350,7 +363,7 @@ Bir düğüm hizmeti kullanarak, ürününüzün altyapı yönünü merkezileşt - [**Tokenview**](https://services.tokenview.io/) - [Belgeler](https://services.tokenview.io/docs?type=nodeService) - Özellikler - - 7/24 teknik destek ve Telegram geliştiriciler topluluğu + - 7/24 teknik destek ve Geliştirici Telegram topluluğu - Çoklu zincir desteği (Bitcoin, Ethereum, Tron, BNB Smart Chain, Ethereum Classic) - Hem RPC hem WSS uç noktaları kullanıma açıktır - Arşiv veri API'sına sınırsız erişim @@ -384,23 +397,22 @@ Bir düğüm hizmeti kullanarak, ürününüzün altyapı yönünü merkezileşt - [Belgeler](https://www.zeeve.io/docs/) - Özellikler - Blok zincir ağları ve düğümleri için dağıtım, izleme ve yönetim sağlayan kuruluş seviyesi kod gerektirmeyen bir otomasyon platformu - - 30'dan fazla Desteklenen Protokol, Entegreasyon ve daha fazlasını eklemek + - 30'dan fazla Desteklenen Protokol ve Entegrasyonlar ve daha fazlası ekleniyor - Merkeziyetsiz depolama, merkeziyetsiz kimlik ve Blok Zincir Cüzdanı veri API'ları gibi gerçek hayatta kullanım alanları olan değer atfedilmiş web3 altyapı servisleri - 7/24 destek sunarak ve proaktif izleme yaparak düğümlerin iyi durumundan sürekli emin olma. - RPC uç noktaları API'lere kimlik doğrulamalı erişim, sezgisel gösterge paneli ve analizlerle zahmetsiz bir yönetim sunar. - Hem yönetilen bulut servisi sağlarken hem de kendi bulut servisinizi seçme şansı tanır; bunun için AWS, Azure, Google Cloud ve Digital Ocean gibi bütün büyük bulut sağlayıcılarını destekler. - Kullanıcınıza en yakın düğümü sürekli hedef alabilmek için her seferinde akıllı yönlendirmeyi kullanıyoruz - -## Daha fazla okuma {#further-reading} +## Daha fazla kaynak {#further-reading} - [Ethereum düğüm hizmetleri listesi](https://ethereumnodes.com/) -## İlgili konular {#related-topics} +## Alakalı başlıklar {#related-topics} -- [ Düğümler ve İstemciler](/developers/docs/nodes-and-clients/) +- [Düğümler ve istemciler](/developers/docs/nodes-and-clients/) ## İlgili öğreticiler {#related-tutorials} -- [Alchemy kullanarak Ethereum geliştirmeye başlangıç](/developers/tutorials/getting-started-with-ethereum-development-using-alchemy/) -- [Web3 ve Alchemy kullanarak işlem gönderme kılavuzu](/developers/tutorials/sending-transactions-using-web3-and-alchemy/) +- [Alchemy kullanarak Ethereum geliştirmeye başlama](/developers/tutorials/getting-started-with-ethereum-development-using-alchemy/) +- [web3 ve Alchemy kullanarak işlem gönderme kılavuzu](/developers/tutorials/sending-transactions-using-web3-and-alchemy/) diff --git a/public/content/translations/tr/developers/docs/nodes-and-clients/run-a-node/index.md b/public/content/translations/tr/developers/docs/nodes-and-clients/run-a-node/index.md index bc0bcc09305..833c4f597a2 100644 --- a/public/content/translations/tr/developers/docs/nodes-and-clients/run-a-node/index.md +++ b/public/content/translations/tr/developers/docs/nodes-and-clients/run-a-node/index.md @@ -1,19 +1,19 @@ --- -title: Kendi Ethereum düğümünüzü başlatın -description: Kendi Ethereum istemcinizi çalıştırmaya genel bir giriş. +title: "Kendi Ethereum düğümünüzü başlatın" +description: "Kendi Ethereum istemcinizi çalıştırmaya genel bir giriş." lang: tr sidebarDepth: 2 --- Kendi düğümünüzü çalıştırmak size birçok fayda sağlar, yeni fırsatlar oluşturur ve ekosistemi desteklemeye yardımcı olur. Bu sayfa size kendi düğümünüzü başlatmanız ve Ethereum işlem doğrulamalarına katılmanız için rehber olacaktır. -[Birleşimden](/roadmap/merge) sonra, bir Ethereum düğümünü çalıştırmak için iki istemcinin gerektiğini unutmayın. Bunlardan biri **yürütüm katmanı (EL)** istemcisi, diğeri ise **fikir birliği katmanı (CL)** istemcisidir. Bu sayfa, bir Ethereum düğümünü çalıştırmak için, bu iki istemcinin nasıl kurulacağını, yapılandırılacağını ve bağlanacağını gösterecektir. +[Birleşim](/roadmap/merge) sonrasında bir Ethereum düğümü çalıştırmak için iki istemcinin gerekli olduğunu unutmayın; bir **yürütme katmanı (EL)** istemcisi ve bir **mutabakat katmanı (CL)** istemcisi. Bu sayfa, bir Ethereum düğümünü çalıştırmak için, bu iki istemcinin nasıl kurulacağını, yapılandırılacağını ve bağlanacağını gösterecektir. ## Ön Koşullar {#prerequisites} -Bir Ethereum düğümünün ne olduğunu ve neden bir istemci çalıştırmak isteyebileceğinizi anlamalısınız. Bunlar, [Düğümler ve istemciler](/developers/docs/nodes-and-clients/) bölümünde anlatılmıştır. +Bir Ethereum düğümünün ne olduğunu ve neden bir istemci çalıştırmak isteyebileceğinizi anlamalısınız. Bu konu [Düğümler ve istemciler](/developers/docs/nodes-and-clients/) bölümünde ele alınmaktadır. -Eğer düğüm çalıştırma konusunda acemiyseniz veya daha az teknik bir yol arıyorsanız, ilk olarak [bir Ethereum düğümü çalıştırmak üzerine](/run-a-node) kullanıcı dostu öğreticimize göz atmanızı öneririz. +Bir düğüm çalıştırma konusuna yeniyseniz veya daha az teknik bir yol arıyorsanız, öncelikle [bir Ethereum düğümü çalıştırma](/run-a-node) hakkındaki kullanıcı dostu tanıtımımıza göz atmanızı öneririz. ## Bir yaklaşım seçme {#choosing-approach} @@ -21,13 +21,13 @@ Düğümünüzü başlatmak için atmanız gereken ilk adım bir yaklaşım seç Bu sayfa, size bu seçimlerde rehberlik edecek ve Ethereum oluşumunuzu çalıştırmak için en uygun yolu bulmanıza yardım edecektir. -İstemci uygulamalarından seçim yapmak için, tüm Ana Ağ'a hazır [yürütüm istemcilerini](/developers/docs/nodes-and-clients/#execution-clients), [fikir birliği](/developers/docs/nodes-and-clients/#consensus-clients) istemcilerini görün ve [istemci çeşitliliği](/developers/docs/nodes-and-clients/client-diversity) hakkında bilgi edinin. +İstemci uygulamaları arasından seçim yapmak için mevcut tüm Ana Ağa hazır [yürütme istemcilerine](/developers/docs/nodes-and-clients/#execution-clients) ve [mutabakat istemcilerine](/developers/docs/nodes-and-clients/#consensus-clients) bakın ve [istemci çeşitliliği](/developers/docs/nodes-and-clients/client-diversity) hakkında bilgi edinin. -İstemcinin [gereksinimlerini](#requirements) göz önünde bulundurarak, yazılımı kendi [donanımınızda mı yoksa bulutta mı](#local-vs-cloud) çalıştıracağınıza karar verin. +İstemcilerin [gereksinimlerini](#requirements) göz önünde bulundurarak yazılımı kendi [donanımınızda mı yoksa bulutta mı](#local-vs-cloud) çalıştıracağınıza karar verin. -Ortamı hazırladıktan sonra, seçilmiş istemcileri ya [acemi dostu bir arayüzle](#automatized-setup) ya da gelişmiş seçeneklere sahip bir terminalle [manuel](#manual-setup) bir şekilde kurun. +Ortamı hazırladıktan sonra, seçilen istemcileri ya [başlangıç seviyesi dostu bir arayüzle](#automatized-setup) ya da gelişmiş seçeneklere sahip bir terminal kullanarak [manuel olarak](#manual-setup) kurun. -Düğüm çalışırken ve senkronize olurken bunu [kullanabilirsiniz](#using-the-node) ama [bakımına](#operating-the-node) dikkat ettiğinizden emin olun. +Düğüm çalışır ve senkronize olurken, [onu kullanmaya](#using-the-node) hazırsınız demektir, ancak [bakımını](#operating-the-node) gözden kaçırmadığınızdan emin olun. ![İstemci kurulumu](./diagram.png) @@ -35,7 +35,8 @@ Düğüm çalışırken ve senkronize olurken bunu [kullanabilirsiniz](#using-th #### Yerel veya bulut {#local-vs-cloud} -Ethereum istemcileri, tüketici sınıfı bilgisayarlarda çalışabilirler ve madencilik makineleri gibi özel bir donanım gerektirmezler. Bu sebeple, düğümü ihtiyaçlarınıza göre dağıtmak için çeşitli seçenekleriniz vardır. Basitleştirmek gerekirse, fiziksel bir makine üzerinde ve bir bulut sunucusunda çalışan bir düğümü düşünelim: +Ethereum istemcileri, tüketici sınıfı bilgisayarlarda çalışabilirler ve madencilik makineleri gibi özel bir donanım gerektirmezler. Bu sebeple, düğümü ihtiyaçlarınıza göre dağıtmak için çeşitli seçenekleriniz vardır. +Basitleştirmek gerekirse, fiziksel bir makine üzerinde ve bir bulut sunucusunda çalışan bir düğümü düşünelim: - Bulut - Sağlayıcılar yüksek sunucu hizmet zamanı ve statik halka açık IP adresleri sunarlar @@ -48,11 +49,11 @@ Ethereum istemcileri, tüketici sınıfı bilgisayarlarda çalışabilirler ve m - Önceden yapılandırılmış makine alma seçeneği - Makineyi fiziksel olarak hazırlamanız, bakımını yapmanız ve potansiyel makine ve ağ arızalarını gidermeniz gerekir -İki seçenek de yukarıda özetlendiği gibi farklı avantajlara sahiptir. Eğer bir bulut çözümü arıyorsanız, birçok geleneksel bulut bilişim sağlayıcısının yanı sıra ayrıca düğüm dağıtımına odaklı hizmetler bulunmaktadır. Barınımlı düğümler hakkında daha fazla seçenek için [bir servis olarak düğümleri](/developers/docs/nodes-and-clients/nodes-as-a-service/) inceleyin. +İki seçenek de yukarıda özetlendiği gibi farklı avantajlara sahiptir. Eğer bir bulut çözümü arıyorsanız, birçok geleneksel bulut bilişim sağlayıcısının yanı sıra ayrıca düğüm dağıtımına odaklı hizmetler bulunmaktadır. Barındırılan düğümler hakkında daha fazla seçenek için [hizmet olarak düğümlere](/developers/docs/nodes-and-clients/nodes-as-a-service/) göz atın. #### Donanım {#hardware} -Ancak sansüre dirençli bir merkeziyetsiz ağ, bulut sağlayıcılarına bağımlı olmamalıdır. Bunun yerine, düğümünüzü kendi yerel donanımınızda çalıştırmanız ekosistem için daha faydalıdır. [Tahminler](https://www.ethernodes.org/network-types), düğümlerin büyük bir kısmının bulutta çalıştığını gösteriyor ve bu da tek hata noktası yaratabilir. +Ancak sansüre dirençli bir merkeziyetsiz ağ, bulut sağlayıcılarına bağımlı olmamalıdır. Bunun yerine, düğümünüzü kendi yerel donanımınızda çalıştırmanız ekosistem için daha faydalıdır. [Tahminler](https://www.ethernodes.org/networkType/cl/Hosting) düğümlerin büyük bir bölümünün bulutta çalıştığını ve bunun tek bir hata noktası haline gelebileceğini göstermektedir. Ethereum istemcileri bilgisayarınızda, dizüstü bilgisayarınızda, sunucunuzda ve hatta tek kartlı bir bilgisayarda bile çalışabilir. İstemcileri kendi bilgisayarınızda çalıştırmak mümkün olsa da sadece düğümünüz için bir makineye sahip olmak, birincil bilgisayarınızın üzerindeki etkiyi azaltırken düğümün performansını ve güvenliğini de önemli ölçüde iyileştirebilir. @@ -64,11 +65,11 @@ Donanım gereksinimleri istemciye göre farklılık gösterir, ancak düğümün Herhangi bir istemciyi kurmadan önce, lütfen bilgisayarınızın onu çalıştırmak için yeterli kaynaklara sahip olduğundan emin olun. Minimum ve önerilen gereksinimleri aşağıda bulabilirsiniz. -Donanımınız için darboğaz çoğunlukla disk alanı olacaktır. Ethereum blok zinciri senkronizasyonunda girdi/çıktı yoğunluğu vardır ve çok fazla alan gerektirir. Senkronizasyon sonrasında bile yüzlerce GB boş alanı kalacak bir **katı hal sürücüsü (SSD)** kullanmak en iyisidir. +Donanımınız için darboğaz çoğunlukla disk alanı olacaktır. Ethereum blok zinciri senkronizasyonunda girdi/çıktı yoğunluğu vardır ve çok fazla alan gerektirir. Senkronizasyondan sonra bile yüzlerce GB boş alana sahip bir **katı hal sürücüsüne (SSD)** sahip olmak en iyisidir. -Veritabanının boyutu ve ilk senkronizasyon hızı, seçilmiş istemciye, yapılandırmasına ve [senkronizasyon stratejisine](/developers/docs/nodes-and-clients/#sync-modes) bağlıdır. +Veritabanının boyutu ve ilk senkronizasyonun hızı, seçilen istemciye, yapılandırmasına ve [senkronizasyon stratejisine](/developers/docs/nodes-and-clients/#sync-modes) bağlıdır. -Ayrıca internet bağlantınızın bir [bant genişliği sınırı](https://wikipedia.org/wiki/Data_cap) tarafından sınırlandırılmadığından da emin olun. Başlangıç senkronizasyonu ve ağa yayınlanan veri, kotanızı aşabileceği için sınırsız bağlantı kullanmanız önerilir. +Ayrıca internet bağlantınızın bir [bant genişliği sınırı](https://wikipedia.org/wiki/Data_cap) ile kısıtlanmadığından emin olun. Başlangıç senkronizasyonu ve ağa yayınlanan veri, kotanızı aşabileceği için sınırsız bağlantı kullanmanız önerilir. ##### İşletim sistemi @@ -90,19 +91,19 @@ Tüm istemciler ana işletim sistemlerini destekler: Linux, MacOS, Windows. Bu, Seçtiğiniz senkronizasyon modu ve istemci alan gereksinimlerini etkileyecektir, ancak her bir istemci için ihtiyaç duyacağınız disk alanını aşağıda tahmin ettik. -| İstemci | Disk boyutu (anlık senkronizasyon) | Disk boyutu (tam arşiv) | -| ---------- | ---------------------------------- | ----------------------- | -| Besu | 800GB+ | 12TB+ | -| Erigon | Yok | 2.5TB+ | -| Geth | 500GB+ | 12TB+ | -| Nethermind | 500GB+ | 12TB+ | -| Reth | Yok | 2,2 TB veya fazlası | +| İstemci | Disk boyutu (anlık senkronizasyon) | Disk boyutu (full archive) | +| ---------- | ----------------------------------------------------- | --------------------------------------------- | +| Besu | 800GB+ | 12TB+ | +| Erigon | Yok | 2.5TB+ | +| Geth | 500GB+ | 12TB+ | +| Nethermind | 500GB+ | 12TB+ | +| Reth | Yok | 2,2 TB veya fazlası | - Not: Erigon ve Reth anlık senkronizasyon sunmaz, ancak tam temizleme mümkündür ( Erigon için ~2TB, Reth için ~1,2TB) -Fikir birliği istemcileri için, alan gereksinimi ayrıca istemci uygulaması ve açık olan özelliklere (ör. doğrulayıcı kesici) de bağlıdır ancak genel olarak işaret verisi için gereken ilave bir 200 GB ekleyin. Büyük bir doğrulayıcı sayısı ile bant genişliği yükü de artmaktadır. [Bu analizde fikir birliği istemcileri gereksinimleri hakkında detaylar](https://mirror.xyz/0x934e6B4D7eee305F8C9C42b46D6EEA09CcFd5EDc/b69LBy8p5UhcGJqUAmT22dpvdkU-Pulg2inrhoS9Mbc) bulabilirsiniz. +Mutabakat istemcileri için alan gereksinimi, istemci uygulamasına ve etkinleştirilmiş özelliklere (ör. doğrulayıcı slasher) de bağlıdır, ancak genel olarak işaret zinciri verileri için gereken ek 200 GB'ı hesaba katın. Büyük bir doğrulayıcı sayısı ile bant genişliği yükü de artmaktadır. [Bu analizde mutabakat istemcisi gereksinimleri hakkındaki ayrıntıları](https://mirror.xyz/0x934e6B4D7eee305F8C9C42b46D6EEA09CcFd5EDc/b69LBy8p5UhcGJqUAmT22dpvdkU-Pulg2inrhoS9Mbc) bulabilirsiniz. -#### Tak-çalıştır çözümler {#plug-and-play} +#### Tak ve çalıştır çözümleri {#plug-and-play} Kendi donanımınızla bir düğüm çalıştırmak için en kolay seçenek tak-çalıştır kutular kullanmaktır. Satıcılardan önceden yapılandırılmış makineler en basit deneyimi sunar: sipariş et, bağla, çalıştır. Her şey önceden yapılandırılmıştır, açık bir kılavuz ve yazılım gözlemlemek ve kontrol etmek için bir kontrol paneli ile otomatik olarak çalışır. @@ -111,11 +112,11 @@ Kendi donanımınızla bir düğüm çalıştırmak için en kolay seçenek tak- #### Tek kartlı bir bilgisayarda Ethereum {#ethereum-on-a-single-board-computer} -Ethereum düğümünü çalıştırmanın kolay ve ucuz bir yolu, ARM mimarisine sahip olan Raspberry Pi bile olsa tek kartlı bir bilgisayar kullanmaktır. [ARM'de Ethereum](https://ethereum-on-arm-documentation.readthedocs.io/en/latest/) Raspberry Pi ve diğer ARM cihazları için birden fazla yürütme ve fikir birliği istemcisinin çalıştırması kolay görüntüler sağlar. +Ethereum düğümünü çalıştırmanın kolay ve ucuz bir yolu, ARM mimarisine sahip olan Raspberry Pi bile olsa tek kartlı bir bilgisayar kullanmaktır. [Ethereum on ARM](https://ethereum-on-arm-documentation.readthedocs.io/en/latest/), Raspberry Pi ve diğer ARM kartları için birden fazla yürütme ve mutabakat istemcisinin çalıştırılması kolay görüntülerini sağlar. Bunlar gibi küçük, ucuz ve verimli cihazlar evde düğüm çalıştırmak için idealdir fakat sınırlı performansları olduğunu aklınızda tutun. -## Düğümü başlatmak {#spinning-up-node} +## Düğümü başlatma {#spinning-up-node} Asıl istemci kurulumu otomatik başlatıcılarla veya istemci yazılımını direkt şekilde ayarlayarak tamamlanabilir. @@ -127,10 +128,11 @@ Birden fazla kullanıcı dostu proje, istemci kurulum deneyimini geliştirmeyi h Aşağıda birkaç tıklamayla istemci kurmanıza ve yönetmenize yardımcı olacak birkaç proje bulunmaktadır: -- [DappNode](https://docs.dappnode.io/docs/user/getting-started/choose-your-path) - DappNode sadece bir satıcıdan gelecek bir makine ile gelmez. Yazılım, asıl düğüm başlatıcısı ve birçok özelliği olan kontrol merkezi herhangi bir donanımda kullanılabilir. -- [eth-docker](https://eth-docker.net/) - Basit ve güvenli kilitlemeye odaklı, Docker ile otomatik kurulum, temel terminal ve Docker bilgisi gerektirir, biraz daha gelişmiş kullanıcılara önerilir. -- [Stereum](https://stereum.net/ethereum-node-setup/) - Uzak bir sunucuya SSH bağlantısı aracılığıyla istemci kurulumu için GUI kurulum kılavuzu, kontrol merkezi ve daha birçok özelliği bulunan bir başlatıcı. -- [NiceNode](https://www.nicenode.xyz/) - Bilgisayarınızda bir düğüm çalıştırmak için basit bir kullanıcı deneyimi olan başlatıcı. Sadece istemciler seçin ve birkaç tıkta bunları başlatın. Hâlâ geliştirilmektedir. +- [DappNode](https://docs.dappnode.io/docs/user/getting-started/choose-your-path) - DappNode yalnızca bir satıcıdan alınan bir makineyle gelmez. Yazılım, asıl düğüm başlatıcısı ve birçok özelliği olan kontrol merkezi herhangi bir donanımda kullanılabilir. +- [EthPillar](https://www.coincashew.com/coins/overview-eth/ethpillar) - Tam bir düğüm kurmanın en hızlı ve en kolay yolu. Tek satırlık kurulum aracı ve düğüm yönetimi TUI'si. Ücretsiz. Açık kaynak. Solo staker'lar tarafından Ethereum için kamu malları. ARM64 ve AMD64 desteği. +- [eth-docker](https://eth-docker.net/) - Kolay ve güvenli staking'e odaklanan, Docker kullanan otomatik kurulum. Temel terminal ve Docker bilgisi gerektirir, biraz daha ileri düzey kullanıcılara tavsiye edilir. +- [Stereum](https://stereum-dev.github.io/ethereum-node-web-docs) - Uzak bir sunucuya SSH bağlantısı aracılığıyla istemcileri kurmak için bir GUI kurulum kılavuzu, kontrol merkezi ve diğer birçok özelliğe sahip bir başlatıcı. +- [NiceNode](https://www.nicenode.xyz/) - Bilgisayarınızda bir düğüm çalıştırmak için basit bir kullanıcı deneyimine sahip başlatıcı. Sadece istemciler seçin ve birkaç tıkta bunları başlatın. Hâlâ geliştirilmektedir. - [Sedge](https://docs.sedge.nethermind.io/docs/intro) - CLI sihirbazını kullanarak otomatik olarak bir Docker yapılandırması oluşturan düğüm kurulum aracı. Nethermind tarafından Go ile yazılmıştır. ### Manuel istemci kurulumu {#manual-setup} @@ -141,7 +143,7 @@ Diğer bir seçenek ise istemci yazılımını manuel olarak indirmek, doğrulam #### İstemci yazılımını edinme {#getting-the-client} -İlk olarak tercih ettiğiniz [yürütüm istemcisi](/developers/docs/nodes-and-clients/#execution-clients) ve [fikir birliği istemcisi](/developers/docs/nodes-and-clients/#consensus-clients) yazılımını elde etmeniz gerekir. +Öncelikle, tercih ettiğiniz [yürütme istemcisi](/developers/docs/nodes-and-clients/#execution-clients) ve [mutabakat istemcisi](/developers/docs/nodes-and-clients/#consensus-clients) yazılımını edinmeniz gerekir. İşletim sisteminize ve mimarinize uyan bir yürütülebilir uygulama veya bir kurulum paketi indirmeniz yeterlidir. Her zaman indirilen paketlerin imzalarını ve denetim toplamlarını doğrulayın. Bazı istemciler ayrıca daha kolay kurulum ve güncellemeler için depolar veya Docker görüntüleri sağlar. Tüm istemciler açık kaynaklıdır, yani bunları kaynağından da inşa edebilirsiniz. Bu daha gelişmiş bir yöntemdir, ancak bazı durumlarda gerekli olabilir. @@ -157,25 +159,25 @@ Her bir istemcinin kurulumu için yönergeler yukarıdaki istemci listelerinde b - [Nethermind](https://downloads.nethermind.io/) - [Reth](https://reth.rs/installation/installation.html) -Ayrıca istemci çeşitliliğinin [yürütüm katmanında bir sorun](/developers/docs/nodes-and-clients/client-diversity/#execution-layer) olduğundan da bahsetmeye değer. Okurların azınlık bir yürütüm istemcisi çalıştırması önerilir. +Ayrıca istemci çeşitliliğinin [yürütme katmanında bir sorun](/developers/docs/nodes-and-clients/client-diversity/#execution-layer) olduğunu da belirtmek gerekir. Okurların azınlık bir yürütüm istemcisi çalıştırması önerilir. ##### Mutabakat istemcileri - [Lighthouse](https://github.com/sigp/lighthouse/releases/latest) -- [Lodestar](https://chainsafe.github.io/lodestar/run/getting-started/installation#build-from-source/) (Önceden inşa edilmiş bir kütüphane sağlamaz, ya kaynağından derlenir ya da bir Docker görüntüsü) +- [Lodestar](https://chainsafe.github.io/lodestar/run/getting-started/installation#build-from-source/) (Önceden oluşturulmuş bir ikili dosya sağlamaz, yalnızca bir Docker görüntüsü sunar veya kaynaktan oluşturulması gerekir) - [Nimbus](https://github.com/status-im/nimbus-eth2/releases/latest) - [Prysm](https://github.com/prysmaticlabs/prysm/releases/latest) - [Teku](https://github.com/ConsenSys/teku/releases) -[İstemci çeşitliliği](/developers/docs/nodes-and-clients/client-diversity/) doğrulayıcılar çalıştıran fikir birliği düğümleri için önemlidir. Eğer doğrulayıcıların çoğunluğu tek bir istemci uygulaması kullanıyorsa, ağ güvenliği risk altındadır. Bundan dolayı azınlık bir istemci seçiminin düşünülmesi önerilir. +[İstemci çeşitliliği](/developers/docs/nodes-and-clients/client-diversity/), doğrulayıcıları çalıştıran mutabakat düğümleri için kritik öneme sahiptir. Eğer doğrulayıcıların çoğunluğu tek bir istemci uygulaması kullanıyorsa, ağ güvenliği risk altındadır. Bundan dolayı azınlık bir istemci seçiminin düşünülmesi önerilir. -[Güncel ağ istemci kullanımını görün](https://clientdiversity.org/) ve [istemci çeşitliliği](/developers/docs/nodes-and-clients/client-diversity) hakkında dahasını öğrenin. +[En son ağ istemcisi kullanımını görün](https://clientdiversity.org/) ve [istemci çeşitliliği](/developers/docs/nodes-and-clients/client-diversity) hakkında daha fazla bilgi edinin. ##### Yazılımı doğrulamak İnternetten yazılım indirirken, bütünlüğünün doğrulanması önerilir. Bu adım zorunlu değildir ancak özellikle Ethereum istemcisi gibi önemli bir altyapı parçası için potansiyel saldırı vektörleri ve onlardan nasıl kaçınılacağıyla ilgili farkındalık sahibi olmak önemlidir. Eğer önceden inşa edilmiş bir dosya indirdiyseniz, ona güvenmeniz gerekir ve bir saldırganın çalıştırılabilir dosyayı zararlı bir versiyonuyla değiştirebileceği riskini göze alırsınız. -Geliştiriciler yayınlanmış dosyaları kendi PGP anahtarları ile imzalarlar böylece tam olarak onların oluşturduğu yazılımı çalıştırdığınızı kriptografik olarak doğrulayabilirsiniz. Geliştiriciler tarafından kullanılan herkese açık anahtarları elde etmeniz gerekir, bunlar da istemci yayım sayfalarında veya dokümanlarda bulunur. İstemci yayımını ve imzasını indirdikten sonra örneğin [GnuPG](https://gnupg.org/download/index.html) gibi bir PGP uygulamasını onları doğrulamak için kullanabilirsiniz. [Linux](https://www.tecmint.com/verify-pgp-signature-downloaded-software/) veya [Windows/MacOS](https://freedom.press/training/verifying-open-source-software/) üzerinde `gpg` kullanarak açık kaynak yazılım doğrulama üzerine bir öğreticiye bakın. +Geliştiriciler yayınlanmış dosyaları kendi PGP anahtarları ile imzalarlar böylece tam olarak onların oluşturduğu yazılımı çalıştırdığınızı kriptografik olarak doğrulayabilirsiniz. Geliştiriciler tarafından kullanılan herkese açık anahtarları elde etmeniz gerekir, bunlar da istemci yayım sayfalarında veya dokümanlarda bulunur. İstemci sürümünü ve imzasını indirdikten sonra, bunları kolayca doğrulamak için [GnuPG](https://gnupg.org/download/index.html) gibi bir PGP uygulaması kullanabilirsiniz. [Linux](https://www.tecmint.com/verify-pgp-signature-downloaded-software/) veya [Windows/MacOS](https://freedom.press/training/verifying-open-source-software/) üzerinde `gpg` kullanarak açık kaynaklı yazılımları doğrulama üzerine bir eğitime göz atın. Başka bir doğrulama yöntemi ise geliştiriciler tarafından sağlanan karmanın, yani eşsiz kriptografik bir parmak izinin, indirdiğiniz yazılımınki ile uyup uymadığından emin olmaktır. Bu PGP kullanmaktan bile daha kolaydır ve bazı istemciler sadece bu seçeneği sunar. Sadece karma fonksiyonunu indirilen yazılım üzerinde çalıştırın ve sürüm notu sayfasındaki ile karşılaştırın. Örneğin: @@ -189,15 +191,15 @@ sha256sum teku-22.6.1.tar.gz İstemci yazılımını indirdikten, kurduktan veya derledikten sonra, çalıştırmaya hazırsınız. Bu sadece yeterli yapılandırma ile yürütülebileceği anlamına gelir. İstemciler birçok özelliği etkinleştirebilen zengin yapılandırma seçenekleri sunarlar. -Hadi istemci performansını ve veri kullanımını büyük oranda etkileyen seçeneklerle başlayalım. [Senkronizasyon modları](/developers/docs/nodes-and-clients/#sync-modes) farklı blok zinciri verileri indirme ve doğrulama yöntemlerini temsil eder. Düğümü başlatmadan önce, hangi ağı ve senkronizasyon modunu kullanacağınıza karar vermelisiniz. Göz önünde bulundurulması gereken en önemli şeyler ise disk alanı ve istemcinin ihtiyaç duyacağı senkronizasyon süresidir. Hangi senkronizasyon modunun varsayılan olduğunu belirlemek için istemcinin dokümanlarına dikkat edin. Eğer size uymazsa, güvenlik düzeyine, mevcut veriye ve maliyete göre başka birini seçin. Senkronizasyon algoritmasının yanı sıra, farklı türdeki eski verilerin budanmasını da ayarlayabilirsiniz. Budama, örneğin son bloklardan erişilemeyen durum ağaç düğümlerini kaldırma gibi eski verilerin silinmesini sağlar. +Hadi istemci performansını ve veri kullanımını büyük oranda etkileyen seçeneklerle başlayalım. [Senkronizasyon modları](/developers/docs/nodes-and-clients/#sync-modes), blok zinciri verilerini indirmenin ve doğrulamanın farklı yöntemlerini temsil eder. Düğümü başlatmadan önce, hangi ağı ve senkronizasyon modunu kullanacağınıza karar vermelisiniz. Göz önünde bulundurulması gereken en önemli şeyler ise disk alanı ve istemcinin ihtiyaç duyacağı senkronizasyon süresidir. Hangi senkronizasyon modunun varsayılan olduğunu belirlemek için istemcinin dokümanlarına dikkat edin. Eğer size uymazsa, güvenlik düzeyine, mevcut veriye ve maliyete göre başka birini seçin. Senkronizasyon algoritmasının yanı sıra, farklı türdeki eski verilerin budanmasını da ayarlayabilirsiniz. Budama, güncel olmayan verilerin silinmesini, yani son bloklardan ulaşılamayan durum trie düğümlerinin kaldırılmasını sağlar. -Bazı diğer yapılandırma seçenekleri, örnek verecek olursak bir ağ seçmek - Ana Ağ veya test ağları, RPC veya WebSockets için HTTP uç noktalarını etkinleştirmek ve benzeridir. Tüm özellikler ve seçenekleri istemcinin dokümanlarında bulabilirsiniz. İstemciyi uyumlu bayraklarla çalıştırarak direkt olarak CLI'de veya yapılandırma dosyasında çeşitli istemci yapılandırmaları belirlenebilir. Her istemci biraz farklıdır; lütfen her zaman yapılandırma seçenekleri hakkında detaylar için resmi dokümanlara veya yardım sayfasına başvurun. +Diğer temel yapılandırma seçenekleri, örneğin bir ağ seçme (Ana Ağ veya test ağları), RPC veya WebSockets için HTTP uç noktasını etkinleştirme vb.'dir. Tüm özellikler ve seçenekleri istemcinin dokümanlarında bulabilirsiniz. İstemciyi uyumlu bayraklarla çalıştırarak direkt olarak CLI'de veya yapılandırma dosyasında çeşitli istemci yapılandırmaları belirlenebilir. Her istemci biraz farklıdır; lütfen her zaman yapılandırma seçenekleri hakkında detaylar için resmi dokümanlara veya yardım sayfasına başvurun. -Test etmek amaçlı olarak, istemciyi test ağlarından birinde çalıştırmayı tercih edebilirsiniz. [Desteklenen ağları gözden geçirin](/developers/docs/nodes-and-clients/#execution-clients). +Test etmek amaçlı olarak, istemciyi test ağlarından birinde çalıştırmayı tercih edebilirsiniz. [Desteklenen ağlara genel bakışı görün](/developers/docs/nodes-and-clients/#execution-clients). Yürütüm istemcilerinin basit yapılandırma ile çalıştırılma örnekleri sıradaki bölümde görülebilir. -#### Yürütüm istemcisini başlatmak {#starting-the-execution-client} +#### Yürütme istemcisini başlatma {#starting-the-execution-client} Ethereum istemci yazılımını başlatmadan önce, ortamınızın hazır olduğuna dair son bir kontrol yapın. Örneğin, şunlara emin olun: @@ -211,7 +213,7 @@ Her şeyin doğru çalıştığından emin olmak için önce istemcinizi bir tes Başlangıçta, varsayılan olmayan tüm istemci ayarlarını bildirmeniz gerekir. Tercih yapılandırmalarınızı duyurmak için bayrakları veya yapılandırma dosyasını kullanabilirsiniz. Her bir istemcinin özellik listesi ve yapılandırma söz dizimi farklılık gösterir. Detaylar için istemcinizin dokümanlara bakın. -Yürütüm ve fikir birliği istemcileri [Motor API](https://github.com/ethereum/execution-apis/tree/main/src/engine)'da belirtilen doğrulanmış bir uç noktası aracılığıyla iletişim kurarlar. Bir fikir birliği istemcisine bağlanmak için yürütüm istemcisinin bilinen bir yolda bir [`jwtsecret`](https://jwt.io/) oluşturması gerekir. Güvenlik ve istikrar sebeplerinden dolayı, istemciler aynı makinede çalışmalıdır ve iki istemci de bu yolu aralarında yerel bir RPC bağlantısını doğrulamak için kullanıldığından bilmelidir. Yürütüm istemcisi ayrıca kimliği doğrulanmış API'lar için bir dinleme bağlantı noktası tanımlamalıdır. +Yürütme ve mutabakat istemcileri, [Motor API'sinde](https://github.com/ethereum/execution-apis/tree/main/src/engine) belirtilen kimliği doğrulanmış bir uç nokta aracılığıyla iletişim kurar. Bir mutabakat istemcisine bağlanmak için yürütme istemcisinin bilinen bir yolda bir [`jwtsecret`](https://jwt.io/) oluşturması gerekir. Güvenlik ve istikrar sebeplerinden dolayı, istemciler aynı makinede çalışmalıdır ve iki istemci de bu yolu aralarında yerel bir RPC bağlantısını doğrulamak için kullanıldığından bilmelidir. Yürütüm istemcisi ayrıca kimliği doğrulanmış API'lar için bir dinleme bağlantı noktası tanımlamalıdır. Bu token istemci yazılmı tarafından otomatik olarak oluşturulur ama bazı durumlar kendiniz yapmanız gerekebilir. [OpenSSL](https://www.openssl.org/) kullanarak oluşturabilirsiniz: @@ -219,26 +221,26 @@ Bu token istemci yazılmı tarafından otomatik olarak oluşturulur ama bazı du openssl rand -hex 32 > jwtsecret ``` -#### Bir yürütüm istemcisi çalıştırmak {#running-an-execution-client} +#### Bir yürütme istemcisini çalıştırma {#running-an-execution-client} Bu bölüm size yürütüm istemcileri başlatmada rehberlik edecektir. Sadece istemciyi şu ayarlarla başlatacak temel bir yapılandırma örneği olarak görev yapmaktadır: - Bağlanılacak ağı belirler, bizim örneklerimizde Ana ağ - - Kurulumunuzun ön hazırlığı için [test ağlarından birini](/developers/docs/networks/) seçebilirsiniz + - Bunun yerine, kurulumunuzun ön testi için [test ağlarından birini](/developers/docs/networks/) seçebilirsiniz - Blok zincir dahil tüm verinin depolanacağı veri klasörünü belirtir - - Yolu gerçek bir versiyonu ile değiştirdiğinizden emin olun, örneğin harici diskinize işaret edecek şekilde + - Yolu, örneğin harici sürücünüze işaret eden gerçek bir yolla değiştirdiğinizden emin olun - İstemci ile iletişim için arayüzleri aktif eder - Fikir birliği istemcisiyle iletişim için JSON-RPC ve Engine API'si içerir -- Doğrulanmış API için `jwtsecret` yolunu belirler - - Örnek yolu istemciler tarafından erişilebilecek gerçek bir versiyonu ile değiştirdiğinizden emin olun, ör. `/tmp/jwtsecret` +- Kimliği doğrulanmış API için `jwtsecret` yolunu tanımlar + - Örnek yolu, istemciler tarafından erişilebilen gerçek bir yolla, ör. `/tmp/jwtsecret` ile değiştirdiğinizden emin olun Bunun temel bir örnek olduğunu aklınızda tutun, diğer tüm ayarlar varsayılana ayarlı olacaktır. Varsayılan değerler, ayarlar ve özellikleri öğrenmek için her bir istemcinin dokümasyonlarına dikkat edin. Gözlem, doğrulayıcı çalıştırmak ve benzeri gibi daha fazla özellik için spesifik istemcinin dokümanlarına başvurun. -> Örneklerdeki ters eğik çizgilerin `\` sadece biçimlendirme amaçlı olduğunu unutmayın, yapılandırma bayrakları tek bir satırda belirlenebilir. +> Örneklerdeki ters eğik çizgilerin (``) yalnızca biçimlendirme amaçlı olduğunu unutmayın; yapılandırma bayrakları tek bir satırda tanımlanabilir. ##### Besu'yu Çalıştırmak -Bu örnek Besu'yu Ana Ağda başlatır, blokzincir verisini varsayılan biçimde `/data/ethereum` lokasyonunda tutar, JSON RPC ve Motor RPC'yi fikir birliği istemcisini bağlamak için etkinleştirir. Motor API `jwtsecret` ile doğrulanmıştır ve sadece `localhost` tarafından gelen çağrılara izin verilir. +Bu örnek, Besu'yu Ana Ağ'da başlatır, blok zinciri verilerini `/data/ethereum` adresinde varsayılan biçimde depolar, JSON-RPC'yi ve mutabakat istemcisini bağlamak için Motor RPC'sini etkinleştirir. Motor API'si `jwtsecret` jetonu ile doğrulanır ve yalnızca `localhost`'tan gelen çağrılara izin verilir. ```sh besu --network=mainnet \ @@ -256,11 +258,11 @@ Besu aynı zamanda birtakım sorular soran ve yapılandırma dosyasını oluştu besu --Xlauncher ``` -[Besu'nun dokümanlarını](https://besu.hyperledger.org/public-networks/get-started/start-node/) daha fazla seçenek ve yapılandırma detayları içerir. +[Besu'nun belgeleri](https://besu.hyperledger.org/public-networks/get-started/start-node/) ek seçenekler ve yapılandırma ayrıntıları içerir. ##### Erigon'u Çalıştırmak -Bu örnek Erigon'u Ana Ağda başlatır, blokzincir verisini `/data/ethereum` lokasyonunda depolar, JSON RPC'yi etkinleştirir, hangi isim alanlarına izin verildiğini belirler ve `jwtsecret` yolu tarafından belirlenen fikir birliği istemcisinin bağlanması için doğrulamayı etkinleştirir. +Bu örnek Erigon'u Ana Ağ'da başlatır, blok zinciri verilerini `/data/ethereum` adresinde depolar, JSON-RPC'yi etkinleştirir, hangi ad alanlarına izin verildiğini tanımlar ve `jwtsecret` yolu ile tanımlanan mutabakat istemcisine bağlanmak için kimlik doğrulamasını etkinleştirir. ```sh erigon --chain mainnet \ @@ -269,11 +271,11 @@ erigon --chain mainnet \ --authrpc.jwtsecret=/path/to/jwtsecret ``` -Erigon varsayılan olarak 8 GB bir HDD ile tam senkronizasyon gerçekleştirir, bu da 2 TB'den fazla arşiv verisi ortaya çıkartır. `datadir` yolunun yeterli alanı olan bir diske işaret ettiğinden emin olun veya farklı veri türlerini kesebilecek `--prune` bayrağını inceleyin. Daha fazlasını öğrenmek için Erigon'un `--help` komutuna bakın. +Erigon varsayılan olarak 8 GB bir HDD ile tam senkronizasyon gerçekleştirir, bu da 2 TB'den fazla arşiv verisi ortaya çıkartır. `datadir`'in yeterli boş alana sahip bir diske işaret ettiğinden emin olun veya farklı türde verileri kırpabilen `--prune` bayrağına bakın. Daha fazla bilgi edinmek için Erigon'un `--help` komutunu kontrol edin. ##### Geth'i Çalıştırmak -Bu örnek Geth'i Ana Ağda başlatır, blokzincir verisini `/data/ethereum` lokasyonunda depolar, JSON RPC'yi etkinleştirir ve hangi isim alanlarına izin verildiğini belirler. Aynı zamanda `jwtsecret` yolu gereken bağlanan fikir birliği istemcisi için doğrulamayı ve hangi bağlantılara izin verildiğini belirlemeyi etkinleştirir, bizim örneğimizde bu sadece `localhost` tarafından gelenlerdir. +Bu örnek Geth'i Ana Ağ'da başlatır, blok zinciri verilerini `/data/ethereum` adresinde depolar, JSON-RPC'yi etkinleştirir ve hangi ad alanlarına izin verildiğini tanımlar. Ayrıca, `jwtsecret` yolunu gerektiren mutabakat istemcisine bağlanmak için kimlik doğrulamasını ve hangi bağlantılara izin verildiğini tanımlayan seçeneği de etkinleştirir; bizim örneğimizde yalnızca `localhost`'tan gelen bağlantılara izin verilir. ```sh geth --mainnet \ @@ -284,7 +286,7 @@ geth --mainnet \ --authrpc.jwtsecret=/path/to/jwtsecret ``` -[Daha fazla yapılandırma seçeneği için dokümanlara](https://geth.ethereum.org/docs/fundamentals/command-line-options) bakın ve [Geth'i bir fiklir birliği istemcisi ile çalıştırma](https://geth.ethereum.org/docs/getting-started/consensus-clients) üzerine daha fazlasını öğrenin. +[Tüm yapılandırma seçenekleri için belgelere](https://geth.ethereum.org/docs/fundamentals/command-line-options) göz atın ve [Geth'i bir mutabakat istemcisiyle çalıştırma](https://geth.ethereum.org/docs/getting-started/consensus-clients) hakkında daha fazla bilgi edinin. ##### Nethermind'ı Çalıştırmak @@ -296,13 +298,13 @@ Nethermind.Runner --config mainnet \ --JsonRpc.JwtSecretFile=/path/to/jwtsecret ``` -Nethermind dokümanları Nethermind'ı bir fikir birliği istemcisi ile çalıştırmak üzerine [tam bir kılavuz](https://docs.nethermind.io/get-started/running-node/) sunar. +Nethermind belgeleri, Nethermind'i mutabakat istemcisiyle çalıştırma hakkında [eksiksiz bir kılavuz](https://docs.nethermind.io/get-started/running-node/) sunar. Bir yürütüm istemcisi çekirdek fonksiyonlarını ve seçili uç noktalarını başlatacak ve eşleri aramaya başlayacaktır. İstemci, eşlerini başarılı bir şekilde bulduktan sonra senkronizasyonu başlatır. Yürütüm istemcisi fikir birliği istemcisinden bir bağlantı bekleyecektir. İstemci mevcut duruma başarılı şekilde senkronize edildiğinde mevcut blok zincir verisi mevcut olacaktır. ##### Reth'i Çalıştırma -Bu örnek Reth'i Ana Ağda, varsayılan depolama lokasyonunu kullanarak başlatır. `jwtsecret` yoluyla tanımlanan fikir birliği istemcisine bağlanmak için JSON-RPC ve Engine RPC kimlik doğrulamasını etkinleştirir ve yalnızca `localhost`'tan yapılan çağrılara izin verir. +Bu örnek Reth'i Ana Ağda, varsayılan depolama lokasyonunu kullanarak başlatır. `jwtsecret` yolu ile tanımlanan mutabakat istemcisine bağlanmak için JSON-RPC ve Motor RPC kimlik doğrulamasını etkinleştirir, yalnızca `localhost`'tan gelen çağrılara izin verilir. ```sh reth node \ @@ -311,23 +313,23 @@ reth node \ --authrpc.port 8551 ``` -Varsayılan veri dizinlerine dair daha fazla bilgi edinmek için [Reth'i Yapılandırma](https://reth.rs/run/config.html?highlight=data%20directory#configuring-reth) bölümüne bakın. [Reth dokümanları](https://reth.rs/run/mainnet.html), ek seçenekleri ve yapılandırma ayrıntılarını içerir. +Varsayılan veri dizinleri hakkında daha fazla bilgi edinmek için [Reth'i Yapılandırma](https://reth.rs/run/config.html?highlight=data%20directory#configuring-reth) bölümüne bakın. [Reth'in belgeleri](https://reth.rs/run/mainnet.html) ek seçenekler ve yapılandırma ayrıntıları içerir. -#### Fikir birliği istemcisini başlatmak {#starting-the-consensus-client} +#### Mutabakat istemcisini başlatma {#starting-the-consensus-client} Fikir birliği istemcisi yürütüm istemcisi ile yerel bir RPC bağlantısı kurmak için doğru bir port yapılandırması ile başlatılmalıdır. Fikir birliği istemcilerinin bir yapılandırma argümanı olarak açık yürütüm istemcisi portu ile çalıştırılmaları gerekir. -Fikir birliği istemcisi ayrıca aralarındaki RPC bağlantısını doğrulamak için yürütüm istemcisinin `jwt-secret` yoluna ihtiyaç duyar. Yukarıdaki yürütüm örneklerine benzer şekilde, her fikir birliği istemcisinn jwt token dosya yolunu argüman olarak alan bir yapılandırma bayrağı bulunur. Bu, yürütüm istemcisine sağlanan `jwtsecret` yolu ile tutarlı olmalıdır. +Mutabakat istemcisinin, aralarındaki RPC bağlantısının kimliğini doğrulamak için yürütme istemcisinin `jwt-secret` yoluna da ihtiyacı vardır. Yukarıdaki yürütüm örneklerine benzer şekilde, her fikir birliği istemcisinn jwt token dosya yolunu argüman olarak alan bir yapılandırma bayrağı bulunur. Bu, yürütme istemcisine sağlanan `jwtsecret` yolu ile tutarlı olmalıdır. -Bir doğrulayıcı çalıştırmayı planlıyorsanız, alıcının Ethereum adresini belirten bir yapılandırma bayrağı eklediğinizden emin olun. Bu doğrulayıcınızın ether ödüllerinin birikeceği yerdir. Her fikir birliği istemcisi, ör. `--suggested-fee-recipient=0xabcd1` gibi argüman olarak Ethereum adresi alan bir seçeneğe sahiptir. +Bir doğrulayıcı çalıştırmayı planlıyorsanız, alıcının Ethereum adresini belirten bir yapılandırma bayrağı eklediğinizden emin olun. Bu doğrulayıcınızın ether ödüllerinin birikeceği yerdir. Her mutabakat istemcisinin, argüman olarak bir Ethereum adresi alan `--suggested-fee-recipient=0xabcd1` gibi bir seçeneği vardır. -Bir test ağı üzerinde İşaret Düğümü başlatırken, [kontrol noktası senkronizasyonu](https://notes.ethereum.org/@launchpad/checkpoint-sync) için herkese açık bir uç noktası kullanarak senkronizasyon süresinden önemli oranda zaman kazanabilirsiniz. +Bir test ağında bir İşaret Düğümü başlatırken, [Kontrol noktası senkronizasyonu](https://notes.ethereum.org/@launchpad/checkpoint-sync) için genel bir uç nokta kullanarak önemli ölçüde senkronizasyon süresinden tasarruf edebilirsiniz. -#### Bir fikir birliği istemcisi çalıştırmak {#running-a-consensus-client} +#### Bir mutabakat istemcisini çalıştırma {#running-a-consensus-client} ##### Lighthouse'u Çalıştırmak -Lighthouse'u çalıştırmadan önce, nasıl kurulacağı ve yapılandırılacağıyla ilgili dahasını [Lighthouse Kitabı](https://lighthouse-book.sigmaprime.io/installation.html)'ndan öğrenin. +Lighthouse'ı çalıştırmadan önce, [Lighthouse Kitabı'nda](https://lighthouse-book.sigmaprime.io/installation.html) nasıl kurulacağı ve yapılandırılacağı hakkında daha fazla bilgi edinin. ```sh lighthouse beacon_node \ @@ -340,11 +342,11 @@ lighthouse beacon_node \ ##### Lodestar'ı Çalıştırmak -Lodestar yazılımını derleyerek veya Docker görüntüsünü indirerek kurun. Dahasını [dokümanlarda](https://chainsafe.github.io/lodestar/) ve daha detaylı [kurulum rehberinde](https://hackmd.io/@philknows/rk5cDvKmK) öğrenin. +Lodestar yazılımını derleyerek veya Docker görüntüsünü indirerek kurun. [Belgelerde](https://chainsafe.github.io/lodestar/) ve daha kapsamlı [kurulum kılavuzunda](https://hackmd.io/@philknows/rk5cDvKmK) daha fazla bilgi edinin. ```sh lodestar beacon \ - --rootDir="/data/ethereum" \ + --dataDir="/data/ethereum" \ --network=mainnet \ --eth1.enabled=true \ --execution.urls="http://127.0.0.1:8551" \ @@ -353,7 +355,8 @@ lodestar beacon \ ##### Nimbus'u Çalıştırmak -Nimbus hem yürütüm hem de fikir birliği istemcileriyle gelir. En makul hesaplama gücüne sahip olan çeşitli cihazlarda bile çalıştırılabilir. [Nimbus'un kendisini ve bağımlılıklarını indirdikten](https://nimbus.guide/quick-start.html) sonra, fiklir birliği istemcisini çalıştırabilirsiniz: +Nimbus hem yürütüm hem de fikir birliği istemcileriyle gelir. En makul hesaplama gücüne sahip olan çeşitli cihazlarda bile çalıştırılabilir. +[Bağımlılıkları ve Nimbus'un kendisini kurduktan sonra](https://nimbus.guide/quick-start.html), mutabakat istemcisini çalıştırabilirsiniz: ```sh nimbus_beacon_node \ @@ -365,7 +368,7 @@ nimbus_beacon_node \ ##### Prysm'i Çalıştırmak -Prysm kolay otomatik kurulum sağlayan bir betikle gelir. Detaylar [Prysm dokümanlarında](https://prysm.offchainlabs.com/docs/install-prysm/install-with-script/) bulunabilir. +Prysm kolay otomatik kurulum sağlayan bir betikle gelir. Ayrıntılar [Prysm belgelerinde](https://prysm.offchainlabs.com/docs/install-prysm/install-with-script/) bulunabilir. ```sh ./prysm.sh beacon-chain \ @@ -384,51 +387,51 @@ teku --network mainnet \ --ee-jwt-secret-file "/path/to/jwtsecret" ``` -Bir fikir birliği istemcisi yatırım sözleşmesini okumak ve doğrulayıcıları tespit etmek için yürütüm istemcisine bağlandığında, aynı zamanda diğer İşaret Düğümü eşlerine bağlanır ve başlangıçtan itibaren mutabakat yuvalarını senkronize etmeye başlar. İşaret Düğümü mevcut döneme ulaştığında, İşaret API doğrulayıcınız için kullanılabilir hale gelir. [İşaret Düğümü API'ları](https://eth2docs.vercel.app/) hakkında dahasını öğrenin. +Bir fikir birliği istemcisi yatırım sözleşmesini okumak ve doğrulayıcıları tespit etmek için yürütüm istemcisine bağlandığında, aynı zamanda diğer İşaret Düğümü eşlerine bağlanır ve başlangıçtan itibaren mutabakat yuvalarını senkronize etmeye başlar. İşaret Düğümü mevcut döneme ulaştığında, İşaret API doğrulayıcınız için kullanılabilir hale gelir. [İşaret Düğümü API'leri](https://eth2docs.vercel.app/) hakkında daha fazla bilgi edinin. -### Doğrulayılar Eklemek {#adding-validators} +### Doğrulayıcı Ekleme {#adding-validators} Bir fikir birliği istemcisi, doğrulayıcıların bağlanması için bir İşaret Düğümü işlevi görür. Her fikir birliği istemcisinin ilgili dokümanlarında detaylı şekilde açıklanan kendi doğrulayıcı yazılımı bulunur. -Kendi doğrulayıcınızı çalıştırmak Ethereum ağını desteklemek için en etkili ve güven gerektirmeyen yöntem olan [solo hisseleme](/staking/solo/) ön ayak olur. Ancak bunun için 32 ETH'lik bir yatırım gerekir. Kendi düğümünüzde daha az bir miktarlar doğrulayıcı çalıştırmak için, [Rocket Pool](https://rocketpool.net/node-operators) gibi izin gerektirmeyen düğüm operatörleri olan merkeziyetsiz bir havuz ilginizi çekebilir. +Kendi doğrulayıcınızı çalıştırmak, Ethereum ağını desteklemenin en etkili ve güven gerektirmeyen yöntemi olan [solo staking'e](/staking/solo/) olanak tanır. Ancak bunun için 32 ETH'lik bir yatırım gerekir. Kendi düğümünüzde daha küçük bir miktarla bir doğrulayıcı çalıştırmak için, [Rocket Pool](https://rocketpool.net/node-operators) gibi izinsiz düğüm operatörlerine sahip merkeziyetsiz bir havuz ilginizi çekebilir. -Hisseleme ve doğrulayıcı anahtar üretmeye başlamanın en kolay yolu, kurulumunuzu [Holesky'de düğüm çalıştırarak](https://holesky.launchpad.ethereum.org/) test etmenize izin veren [Holesky Test Ağı Hisseleme Başlama Noktası](https://notes.ethereum.org/@launchpad/holesky)'dır. Ana ağ için hazır olduğunuzda, [Ana Ağ Hisseleme Başlama Noktasını](https://launchpad.ethereum.org/) kullanarak bu adımları tekrarlayabilirsiniz. +Staking ve doğrulayıcı anahtar üretimine başlamanın en kolay yolu, [Hoodi üzerinde düğümler çalıştırarak](https://notes.ethereum.org/@launchpad/hoodi) kurulumunuzu test etmenize olanak tanıyan [Hoodi Test Ağı Staking Başlatma Paneli'ni](https://hoodi.launchpad.ethereum.org/) kullanmaktır. Ana Ağ için hazır olduğunuzda, [Ana Ağ Staking Başlatma Paneli'ni](https://launchpad.ethereum.org/) kullanarak bu adımları tekrarlayabilirsiniz. -Hisseleme seçeneklerine genel bir bakış için [hisseleme sayfasını](/staking) ziyaret edin. +Staking seçeneklerine genel bir bakış için [staking sayfasına](/staking) göz atın. -### Düğümü kullanmak {#using-the-node} +### Düğümü kullanma {#using-the-node} -Yürütüm istemcileri, işlemleri göndermek, etkileşim kurmak veya Ethereum ağında akıllı sözleşmeleri çeşitli şekillerde dağıtmak için kullanabileceğiniz [RPC API uç noktaları](/developers/docs/apis/json-rpc/) sunar: +Yürütme istemcileri, Ethereum ağında çeşitli yollarla işlem göndermek, akıllı sözleşmelerle etkileşim kurmak veya onları dağıtmak için kullanabileceğiniz [RPC API uç noktaları](/developers/docs/apis/json-rpc/) sunar: -- Bunları uyumlu bir protokolle manuel olarak çağırmak (ör. `curl` kullanarak) -- Sağlanan bir konsolu eklemek (ör. `geth attach`) -- Bunları örnek olarak [web3.py](https://web3py.readthedocs.io/en/stable/overview.html#overview), [ethers](https://github.com/ethers-io/ethers.js/) gibi web3 kütüphanelerini kullanarak uygulamalara eklemek +- Uygun bir protokolle manuel olarak çağırma (ör. `curl` kullanarak) +- Sağlanan bir konsolu ekleme (ör. `geth attach`) +- [web3.py](https://web3py.readthedocs.io/en/stable/overview.html#overview), [ethers](https://github.com/ethers-io/ethers.js/) gibi web3 kütüphanelerini kullanarak uygulamalarda uygulama -Farklı istemciler, RPC uç noktalarının farklı uygulamalarına sahiptir. Ancak her istemciyle kullanabileceğiniz standart bir JSON-RPC bulunmaktadır. Genel bir bakış için [JSON-RPC dokümanlarını](/developers/docs/apis/json-rpc/) okuyun. Ethereum ağından bilgiye ihtiyaç duyan uygulamalar bu RPC'yi kullanabilir. Örnek olarak, popüler cüzdan MetaMask büyük gizlilik ve güvenlik faydaları olan [kendi RPC uç noktanıza bağlanmanıza](https://metamask.zendesk.com/hc/en-us/articles/360015290012-Using-a-Local-Node) olanak verir. +Farklı istemciler, RPC uç noktalarının farklı uygulamalarına sahiptir. Ancak her istemciyle kullanabileceğiniz standart bir JSON-RPC bulunmaktadır. Genel bir bakış için [JSON-RPC belgelerini okuyun](/developers/docs/apis/json-rpc/). Ethereum ağından bilgiye ihtiyaç duyan uygulamalar bu RPC'yi kullanabilir. Örneğin, popüler cüzdan MetaMask, güçlü gizlilik ve güvenlik avantajlarına sahip [kendi RPC uç noktanıza bağlanmanıza](https://metamask.zendesk.com/hc/en-us/articles/360015290012-Using-a-Local-Node) olanak tanır. -Fikir birliği istemcilerinin tümü, fikir birliği istemcisinin durumunu kontrol etmek veya blokları ve mutabakat verilerini indirmek için kullanılabilecek bir [İşaret API'sı](https://ethereum.github.io/beacon-APIs) sunar. Bunu [Curl](https://curl.se) gibi araçları kullanıp istek göndererek yapar. Bununla ilgili daha fazla bilgiye, her bir fikir birliği istemcisinin dökümanlarından ulaşılabilir. +Tüm mutabakat istemcileri, [Curl](https://curl.se) gibi araçları kullanarak istek göndererek mutabakat istemcisinin durumunu kontrol etmek veya blokları ve mutabakat verilerini indirmek için kullanılabilecek bir [İşaret API'si](https://ethereum.github.io/beacon-APIs) sunar. Bununla ilgili daha fazla bilgiye, her bir fikir birliği istemcisinin dökümanlarından ulaşılabilir. #### RPC'ye ulaşma {#reaching-rpc} -Yürütüm istemcisi JSON RPC'si için varsayılan port `8545`'tir, ancak yapılandırmada yerel uç noktalarının portlarını değiştirebilirsiniz. Varsayılan olarak, RPC arayüzüne sadece bilgisayarınızın yerel sunucusundan erişilebilir. Eğer bunu uzaktan erişilebilir hale getirmek istiyorsanız, adresi `0.0.0.0` yaparak genel duruma getirebilirsiniz. Bu, onu yerel ağ ve genel IP adresleri üzerinden erişilebilir hale getirecektir. Çoğu durumda yönlendiricinizde port yönlendirmeyi de kurmanız gerekecektir. +Yürütme istemcisi JSON-RPC için varsayılan bağlantı noktası `8545`'tir ancak yerel uç noktaların bağlantı noktalarını yapılandırmada değiştirebilirsiniz. Varsayılan olarak, RPC arayüzüne sadece bilgisayarınızın yerel sunucusundan erişilebilir. Uzaktan erişilebilir hale getirmek için adresi `0.0.0.0` olarak değiştirerek herkese açık hale getirmek isteyebilirsiniz. Bu, onu yerel ağ ve genel IP adresleri üzerinden erişilebilir hale getirecektir. Çoğu durumda yönlendiricinizde port yönlendirmeyi de kurmanız gerekecektir. İnternete port açmaya dikkatle yaklaşın çünkü bu internetteki herhangi birinin düğümünüzü kontrol etmesine izin verecektir. Kötü amaçlı aktörler, sisteminizi çökertmek için düğümünüze erişim sağlayabilirler veya istemcinizi cüzdan olarak kullanıyorsanız paranızı çalabilirler. Bu engeli aşmanın bir yolu ise potansiyel olarak zararlı olan RPC yöntemlerinin değiştirilebilmesini engellemektir. Örneğin, Geth ile değiştirilebilir yöntemleri bir bayrakla bildirebilirsiniz: `--http.api web3,eth,txpool`. -RPC arayüzüne erişim, sınır katman API'larının geliştirmesi veya Nginx gibi web sunucusu uygulamaları ve onların istemcinizin yerel adres ve portuna bağlanması ile genişletilebilir. Orta bir katman kullanmak ayrıca geliştiricilerin RPC arayüzüne güvenli `https` bağlantıları için sertifika kurma kabiliyetini de sağlayabilir. +RPC arayüzüne erişim, sınır katman API'larının geliştirmesi veya Nginx gibi web sunucusu uygulamaları ve onların istemcinizin yerel adres ve portuna bağlanması ile genişletilebilir. Bir ara katmandan yararlanmak, geliştiricilere RPC arayüzüne güvenli `https` bağlantıları için bir sertifika kurma olanağı da sağlayabilir. -Bir web sunucusu, proxy veya dışa bakan bir Rest API ayarlamak düğümünüzün RPC uç noktasına erişim sağlamak için tek yol değildir. Herkese açık şekilde erişilebilir bir uç noktası kurmanın gizlilik sağlayan diğer bir yolu ise düğümü kendi [Tor](https://www.torproject.org/) onion servisiniz üzerinde çalıştırmaktır. Bu, genel statik bir IP adresi veya açık portlar olmadan yerel ağınızın dışında RPC'ye erişmenizi sağlayacaktır. Ancak bu yapılandırmanın kullanılması RPC uç noktasının sadece tüm uygulamalar tarafından desteklenmeyen Tor ağı aracılığıyla erişilebilir olmasına yol açacaktır ve bağlantı sorunlarına sebep olabilir. +Bir web sunucusu, proxy veya dışa bakan bir Rest API ayarlamak düğümünüzün RPC uç noktasına erişim sağlamak için tek yol değildir. Herkese açık bir uç nokta kurmanın gizliliği koruyan başka bir yolu da düğümü kendi [Tor](https://www.torproject.org/) onion hizmetinizde barındırmaktır. Bu, genel statik bir IP adresi veya açık portlar olmadan yerel ağınızın dışında RPC'ye erişmenizi sağlayacaktır. Ancak bu yapılandırmanın kullanılması RPC uç noktasının sadece tüm uygulamalar tarafından desteklenmeyen Tor ağı aracılığıyla erişilebilir olmasına yol açacaktır ve bağlantı sorunlarına sebep olabilir. -Bunu yapmak için, kendi [onion servisinizi](https://community.torproject.org/onion-services/) kurmanız gerekir. Kendiniz barındırmak için onion servisi kurulumu üzerine [dokümanlara](https://community.torproject.org/onion-services/setup/) inceleyin. Onu RPC portuna proxy'si olan bir web sunucusu ile veya direkt olarak RPC'ye işaret ettirebilirsiniz. +Bunu yapmak için kendi [onion hizmetinizi](https://community.torproject.org/onion-services/) oluşturmanız gerekir. Kendi hizmetinizi barındırmak için onion hizmeti kurulumu hakkındaki [belgelere](https://community.torproject.org/onion-services/setup/) göz atın. Onu RPC portuna proxy'si olan bir web sunucusu ile veya direkt olarak RPC'ye işaret ettirebilirsiniz. -Sonuncu ve iç ağlara erişim sağlamak için en popüler yollardan biri ise VPN bağlantısıdır. Kullanım alanınıza ve düğümünüze ihtiyaç duyan kullanıcı niceliğine göre, güvenli VPN bağlantısı bir seçenek olabilir. [OpenVPN](https://openvpn.net/) endüstri standardı olan SSL/TLS protokolünü kullanan ve OSI katman 2 veya 3 güvenli ağ eklentisini kullanan tam teşekkülü bir SSL VPN'dir; sertifikalar, akıllı kartlar ve/veya kullanıcı adı/şifre bilgileri ile esnek istemci doğrulama yöntemlerini destekler ve VPN sanal arayüzüne uygulanan savunma duvarı kurallarına göre kullanıcı veya gruba özel erişim kontrol politikaları sağlar. +Sonuncu ve iç ağlara erişim sağlamak için en popüler yollardan biri ise VPN bağlantısıdır. Kullanım alanınıza ve düğümünüze ihtiyaç duyan kullanıcı niceliğine göre, güvenli VPN bağlantısı bir seçenek olabilir. [OpenVPN](https://openvpn.net/), endüstri standardı SSL/TLS protokolünü kullanarak OSI katman 2 veya 3 güvenli ağ uzantısını uygulayan, sertifikalara, akıllı kartlara ve/veya kullanıcı adı/parola kimlik bilgilerine dayalı esnek istemci kimlik doğrulama yöntemlerini destekleyen ve VPN sanal arayüzüne uygulanan güvenlik duvarı kurallarını kullanarak kullanıcıya veya gruba özel erişim kontrolü politikalarına izin veren tam özellikli bir SSL VPN'dir. -### Düğümü çalıştırma {#operating-the-node} +### Düğümü işletme {#operating-the-node} Düğümünüzün düzgün çalıştığından emin olmak için onu düzenli olarak izlemelisiniz. Zaman zaman bakım yapmanız gerekebilir. -#### Bir düğümü çevrimiçi tutmak {#keeping-node-online} +#### Bir düğümü çevrimiçi tutma {#keeping-node-online} Düğümünüzün her zaman çevrimiçi olması gerekmez, ancak ağ ile senkronize durumda olması için onu olabildiğince çevrimiçi tutmalısınız. Yeniden başlatmak için kapatabilirsiniz ama şunu unutmayın: @@ -436,45 +439,46 @@ Düğümünüzün her zaman çevrimiçi olması gerekmez, ancak ağ ile senkroni - Zorla kapatmalar veritabanına hasar verebilir, bu da tüm düğümü yeniden senkronize etmenizi gerektirir. - İstemcinizin ağ ile senkronizasyonu bozulacaktır ve yeniden başlattığınızda tekrar senkronize etmeniz gerekecektir. Düğüm kapatıldığı son yerden senkronize olmaya başlasa da, çevrim dışı olduğu süreye göre süreç zaman alabilir. -_Bu, fikir birliği katmanı doğrulayıcı düğümleri için geçerli değildir._ Düğümünüzü çevrimdışı yapmak ona bağlı olan tüm servisleri etkiler. Eğer _hisseleme_ amacıyla bir düğüm çalıştırıyorsanız kesinti süresini olabildiğince azaltmalısınız. +_Bu, mutabakat katmanı doğrulayıcı düğümleri için geçerli değildir._ Düğümünüzü çevrimdışı bırakmak, ona bağlı tüm hizmetleri etkileyecektir. _Staking_ amacıyla bir düğüm çalıştırıyorsanız, kesinti süresini mümkün olduğunca en aza indirmeye çalışmalısınız. #### İstemci hizmetleri oluşturma {#creating-client-services} -İstemcilerinizi başlangıçta otomatik olarak çalıştırmak için bir hizmet oluşturmayı düşünün. Örneğin Linux sunucularında en iyi pratik, ör. `systemd` ile istemciyi düzgün bir yapılandırmayla, sınırlı izinleri olan bir kullanıcı altında ve otomatik başlatan bir servis oluşturmak olurdu. +İstemcilerinizi başlangıçta otomatik olarak çalıştırmak için bir hizmet oluşturmayı düşünün. Örneğin, Linux sunucularında, istemciyi uygun yapılandırmayla, sınırlı ayrıcalıklara sahip bir kullanıcı altında yürüten ve otomatik olarak yeniden başlatan, `systemd` gibi bir hizmet oluşturmak iyi bir uygulamadır. -#### İstemcileri güncellemek {#updating-clients} +#### İstemcileri güncelleme {#updating-clients} -İstemci yazılımınızı en son güvenlik yamaları, özellikler ve [EIP'ler](/eips/) ile güncel tutmalısınız. Özellikle [sert çatallanmalardan](/ethereum-forks/) önce, doğru istemci sürümlerini çalıştırdığınızdan emin olun. +İstemci yazılımınızı en son güvenlik yamaları, özellikler ve [EIP'ler](/eips/) ile güncel tutmanız gerekir. Özellikle [sert çatallardan](/ethereum-forks/) önce, doğru istemci sürümlerini çalıştırdığınızdan emin olun. -> Önemli ağ güncellemelerinden önce, EF [blogunda](https://blog.ethereum.org) bir gönderi yayınlar. Düğümünüz güncellemeye ihtiyaç duyduğunda postanıza bir bildirim almak için [bu duyurulara abone olabilirsiniz](https://blog.ethereum.org/category/protocol#subscribe). +> Önemli ağ güncellemelerinden önce EF, [blogunda](https://blog.ethereum.org) bir gönderi yayınlar. Düğümünüzün bir güncellemeye ihtiyacı olduğunda e-postanıza bir bildirim almak için [bu duyurulara abone olabilirsiniz](https://blog.ethereum.org/category/protocol#subscribe). İstemcileri güncellemek çok basittir. Her istemcinin dokümanlarında belirli yönergeler vardır, ancak süreç genellikle en güncel sürümü indirmek ve istemciyi yeni çalıştırılabilir dosya ile yeniden başlatmaktır. İstemci kaldığı yerden ancak uygulanan güncellemelerle devam etmelidir. Her istemci uygulamasının, eşler arası protokolde kullanılan insan tarafından okunabilir bir sürüm dizesi vardır, ancak buna komut satırından da erişilebilir. Bu sürüm dizesi, kullanıcıların doğru sürümü çalıştırıp çalıştırmadıklarını kontrol etmelerini sağlar ve belirli istemcilerin ağ üzerindeki dağılımını ölçmekle ilgilenen blok arayıcılarına ve diğer analitik araçlara izin verir. Sürüm dizileri hakkında daha fazla bilgi için lütfen bireysel istemci dokümanlarına bakın. -#### Ek hizmetler çalıştırma {#running-additional-services} +#### Ek hizmetleri çalıştırma {#running-additional-services} -Kendi düğümünüzü çalıştırmak Ethereum istemci RPC'sine doğrudan erişim gerektiren hizmetleri kullanmanızı sağlar. Bunlar [Katman 2 çözümleri](/developers/docs/scaling/#layer-2-scaling), cüzdan arka uçları, blok arayıcıları, geliştirici araçları ve diğer Ethereum altyapıları gibi Ethereum üzerinde inşa edilmiş servislerdir. +Kendi düğümünüzü çalıştırmak Ethereum istemci RPC'sine doğrudan erişim gerektiren hizmetleri kullanmanızı sağlar. Bunlar, [katman 2 çözümleri](/developers/docs/scaling/#layer-2-scaling), cüzdanlar için arka uç, blok gezginleri, geliştirici araçları ve diğer Ethereum altyapısı gibi Ethereum üzerine kurulmuş hizmetlerdir. #### Düğümü izleme {#monitoring-the-node} -Düğümünüzü düzgün şekilde gözlemlemek istiyorsanız, metrik toplamayı gözden geçirin. İstemciler, düğümünüz hakkında kapsamlı veri alabilmeniz için metrik uç noktaları sunar. [Grafana](https://grafana.com/) gibi uygulamalarda görselleştirmelere ve tablolara dökebileceğiniz veri tabanları oluşturmak için [InfluxDB](https://www.influxdata.com/get-influxdb/) veya [Prometheus](https://prometheus.io/) gibi araçlar kullanın. Bu yazılımları kullanmak için birçok farklı kurulum ve düğümünüzle ağı tamamen görselleştirebilmek için farklı Grafana gösterge panelleri bulunmaktadır. Örnek olarak, [Geth'i gözlemleme hakkındaki öğreticiye](/developers/tutorials/monitoring-geth-with-influxdb-and-grafana/) bakın. +Düğümünüzü düzgün şekilde gözlemlemek istiyorsanız, metrik toplamayı gözden geçirin. İstemciler, düğümünüz hakkında kapsamlı veri alabilmeniz için metrik uç noktaları sunar. [Grafana](https://grafana.com/) gibi yazılımlarda görselleştirmelere ve grafiklere dönüştürebileceğiniz veritabanları oluşturmak için [InfluxDB](https://www.influxdata.com/get-influxdb/) veya [Prometheus](https://prometheus.io/) gibi araçları kullanın. Bu yazılımları kullanmak için birçok farklı kurulum ve düğümünüzle ağı tamamen görselleştirebilmek için farklı Grafana gösterge panelleri bulunmaktadır. Örneğin, [Geth'i izleme eğitimine](/developers/tutorials/monitoring-geth-with-influxdb-and-grafana/) göz atın. -Gözetlemenize dahil olarak, makinenizin performansına da dikkat etmeyi unutmayın. Düğümünüzün başlangıç senkronizasyonu esnasında istemci yazılımı CPU ve RAM üzerinde ağırlık yapabilir. Grafana'ya ek olarak, işletim sisteminizin sunduğu `htop` veya `uptime` gibi araçları da kullanabilirsiniz. +Gözetlemenize dahil olarak, makinenizin performansına da dikkat etmeyi unutmayın. Düğümünüzün başlangıç senkronizasyonu esnasında istemci yazılımı CPU ve RAM üzerinde ağırlık yapabilir. Grafana'ya ek olarak, bunu yapmak için işletim sisteminizin sunduğu `htop` veya `uptime` gibi araçları kullanabilirsiniz. -## Daha fazla bilgi {#further-reading} +## Daha fazla kaynak {#further-reading} -- [Ethereum Hisseleme Kılavuzları](https://github.com/SomerEsat/ethereum-staking-guides) - _Somer Esat, sık güncellenir_ -- [Kılavuz | Ana ağda Ethereum hisselemek için bir doğrulayıcı nasıl kurulur](https://www.coincashew.com/coins/overview-eth/guide-or-how-to-setup-a-validator-on-eth2-mainnet) _– CoinCashew, düzenli güncellenir_ -- [Test ağlarında doğrulayıcı çalıştırma üzerine ETHStaker kılavuzları](https://github.com/remyroy/ethstaker#guides) – _ETHStaker, düzenli güncellenir_ -- [Düğüm operatörleri için Birleşim SSS](https://notes.ethereum.org/@launchpad/node-faq-merge) - _Temmuz 2022_ -- [Tam doğrulanmış bir Ethereum düğümü olmak için gereken donanımın analizi](https://medium.com/coinmonks/analyzing-the-hardware-requirements-to-be-an-ethereum-full-validated-node-dc064f167902) _– Albert Palau, 24 Eylül 2018_ -- [Ethereum Tam Düğümlerini Çalıştırmak: Pek Motivasyonu Olmayanlar İçin Kılavuz](https://medium.com/@JustinMLeroux/running-ethereum-full-nodes-a-guide-for-the-barely-motivated-a8a13e7a0d31) _– Justin Leroux, 7 Kasım 2019_ -- [Ethereum Ana Ağı'nda Hyperledger Besu Düğümünü Çalıştırma: Faydaları, Gereksinimleri ve Kurulum](https://pegasys.tech/running-a-hyperledger-besu-node-on-the-ethereum-mainnet-benefits-requirements-and-setup/) _– Felipe Faraggi, 7 Mayıs 2020_ -- [İzleme Yığını ile Nethermind Ethereum İstemcisini Dağıtma](https://medium.com/nethermind-eth/deploying-nethermind-ethereum-client-with-monitoring-stack-55ce1622edbd) _– Nethermind.eth, 8 Temmuz 2020_ +- [Ethereum Staking Kılavuzları](https://github.com/SomerEsat/ethereum-staking-guides) - _Somer Esat, sık sık güncellenir_ +- [Kılavuz | Ana ağda Ethereum staking için bir doğrulayıcı nasıl kurulur](https://www.coincashew.com/coins/overview-eth/guide-or-how-to-setup-a-validator-on-eth2-mainnet) _– CoinCashew, sık sık güncellenir_ +- [Test ağlarında doğrulayıcıları çalıştırmaya ilişkin ETHStaker kılavuzları](https://github.com/remyroy/ethstaker#guides) – _ETHStaker, düzenli olarak güncellenir_ +- [Ethereum Düğümleri için Örnek AWS Blockchain Düğüm Çalıştırıcı uygulaması](https://aws-samples.github.io/aws-blockchain-node-runners/docs/Blueprints/Ethereum) - _AWS, sık sık güncellenir_ +- [Düğüm operatörleri için Birleşim SSS'si](https://notes.ethereum.org/@launchpad/node-faq-merge) - _Temmuz 2022_ +- [Tam bir Ethereum onaylanmış düğümü olmak için donanım gereksinimlerini analiz etme](https://medium.com/coinmonks/analyzing-the-hardware-requirements-to-be-an-ethereum-full-validated-node-dc064f167902) _– Albert Palau, 24 Eylül 2018_ +- [Ethereum Tam Düğümlerini Çalıştırma: Yeterince Motive Olmayanlar İçin Bir Rehber](https://medium.com/@JustinMLeroux/running-ethereum-full-nodes-a-guide-for-the-barely-motivated-a8a13e7a0d31) _– Justin Leroux, 7 Kasım 2019_ +- [Ethereum Ana Ağı'nda Hyperledger Besu Düğümü Çalıştırma: Avantajlar, Gereksinimler ve Kurulum](https://pegasys.tech/running-a-hyperledger-besu-node-on-the-ethereum-mainnet-benefits-requirements-and-setup/) _– Felipe Faraggi, 7 Mayıs 2020_ +- [Nethermind Ethereum İstemcisini İzleme Yığını ile Dağıtma](https://medium.com/nethermind-eth/deploying-nethermind-ethereum-client-with-monitoring-stack-55ce1622edbd) _– Nethermind.eth, 8 Temmuz 2020_ -## İlgili konular {#related-topics} +## Alakalı başlıklar {#related-topics} -- [ Düğümler ve İstemciler](/developers/docs/nodes-and-clients/) +- [Düğümler ve istemciler](/developers/docs/nodes-and-clients/) - [Bloklar](/developers/docs/blocks/) - [Ağlar](/developers/docs/networks/) diff --git a/public/content/translations/tr/developers/docs/oracles/index.md b/public/content/translations/tr/developers/docs/oracles/index.md index f26eeb69466..bb452068e2f 100644 --- a/public/content/translations/tr/developers/docs/oracles/index.md +++ b/public/content/translations/tr/developers/docs/oracles/index.md @@ -1,6 +1,6 @@ --- -title: Oracles -description: Kâhinler, Ethereum akıllı sözleşmelerine gerçek dünya verilerine erişim olanağı sunarak daha fazla kullanım alanının ve kullanıcılar için daha büyük değerlerin kilidini açar. +title: "Kâhinler" +description: "Kâhinler, Ethereum akıllı sözleşmelerine gerçek dünya verilerine erişim olanağı sunarak daha fazla kullanım alanının ve kullanıcılar için daha büyük değerlerin kilidini açar." lang: tr --- @@ -8,43 +8,43 @@ Kâhinler, zincir dışındaki veri kaynaklarını akıllı sözleşmeler için Akıllı sözleşmelere zincir dışındaki verileri kullanarak yürütme olanağı tanımak, merkeziyetsiz uygulamaların fayda ve değerini artırır. Örneğin zincir üstü tahmin piyasaları, kullanıcı tahminlerini doğrulamak için kullandıkları sonuçlar hakkında bilgi sağlamak için kâhinlere güvenir. Alice'in, bir sonraki ABD başkanının kim olacağına dair 20 ETH bahis oynadığını varsayalım. Bu durumda, tahmin piyasası merkeziyetsiz uygulamasının seçim sonuçlarını onaylamak ve Alice'in ödeme almak için uygun olup olmadığını belirleyebilmek için bir kâhine ihtiyacı vardır. -## Ön koşullar {#prerequisites} +## Ön Koşullar {#prerequisites} -Bu sayfa, okuyucunun [düğümler](/developers/docs/nodes-and-clients/), [mutabakat mekanizmaları](/developers/docs/consensus-mechanisms/) ve [Ethereum Sanal Makinesi](/developers/docs/evm/) dahil olmak üzere Ethereum'un temellerine aşina olduğunu varsayar. Ayrıca [akıllı sözleşmelere](/developers/docs/smart-contracts/), [akıllı sözleşme anatomisine](/developers/docs/smart-contracts/anatomy/) ve özellikle de [olaylara](/glossary/#events) hakim olmalısınız. +Bu sayfa, okuyucunun [düğümler](/developers/docs/nodes-and-clients/), [mutabakat mekanizmaları](/developers/docs/consensus-mechanisms/) ve [EVM](/developers/docs/evm/) dahil olmak üzere Ethereum'un temellerine aşina olduğunu varsayar. Ayrıca [akıllı sözleşmeler](/developers/docs/smart-contracts/) ve [akıllı sözleşme anatomisi](/developers/docs/smart-contracts/anatomy/) hakkında, özellikle de [olaylar](/glossary/#events) konusunda iyi bir anlayışa sahip olmalısınız. ## Blokzincir kâhini nedir? {#what-is-a-blockchain-oracle} Kâhinler; harici bilgileri (yani zincir dışında depolanan bilgiler) tedarik eden, doğrulayan ve blokzincirde çalışan akıllı sözleşmelere ileten uygulamalardır. Kâhinler, zincir dışındaki verileri "çekip" Ethereum'da yayınlamanın yanı sıra, blokzincirden harici sistemlere bilgi de "gönderebilir"; örneğin kullanıcı bir Ethereum işlemi aracılığıyla bir ücret gönderdiğinde bir akıllı kilidi açabilir. -Kâhin olmadan, akıllı sözleşmeler sadece zincir üstündeki verilerle sınırlı kalır. +Bir kâhin olmadan, bir akıllı sözleşme tamamen zincir üstü verilerle sınırlı kalırdı. -Kâhinler, veri kaynağına ( bir veya birden fazla kaynak) güven modellerine (merkezi ya da merkeziyetsiz) ve sistem mimarisine (hemen-okuma, yayımlama-abone olma ve istek-yanıt) göre farklılık gösterir. Ayrıca kâhinleri zincir üstündeki sözleşmeler (girdi kâhinleri) tarafından kullanılmak üzere harici veri alıp almadıklarına, blokzincirden zincir dışındaki uygulamalara (çıkış kâhinleri) bilgi gönderip göndermemelerine veya zincir dışında hesaplama gerçekleştirip gerçekleştirmemelerine (hesaplama kâhinleri) dayalı olarak da birbirinden ayırabiliriz. +Kâhinler, veri kaynağına ( bir veya birden fazla kaynak) güven modellerine (merkezi ya da merkeziyetsiz) ve sistem mimarisine (hemen-okuma, yayımlama-abone olma ve istek-yanıt) göre farklılık gösterir. Ayrıca kâhinleri, zincir üstü sözleşmeler tarafından kullanılmak üzere harici veri alıp almadıklarına (girdi kâhinleri), blokzincirden zincir dışı uygulamalara bilgi gönderip göndermediklerine (çıktı kâhinleri) veya zincir dışında hesaplama görevleri gerçekleştirip gerçekleştirmediklerine (hesaplama kâhinleri) göre de ayırt edebiliriz. ## Akıllı sözleşmelerin neden kâhinlere ihtiyacı vardır? {#why-do-smart-contracts-need-oracles} -Birçok geliştirici, akıllı sözleşmeleri blokzincir üzerinde spesifik adreslerde çalışan kodlar olarak görür. Ancak, [akıllı sözleşmelere ilişkin daha genel bir görüş](/smart-contracts/) belirli koşullar yerine getirildiğinde taraflar arasındaki anlaşmaları yürürlüğe koyabilen, kendi kendini yürüten yazılım programları olduğu şeklindedir - dolayısıyla "akıllı sözleşmeler" terimi de buradan gelir. +Birçok geliştirici, akıllı sözleşmeleri blokzincir üzerinde spesifik adreslerde çalışan kodlar olarak görür. Ancak, [akıllı sözleşmelere ilişkin daha genel bir görüş](/smart-contracts/), belirli koşullar karşılandığında taraflar arasındaki anlaşmaları uygulayabilen kendi kendini yürüten yazılım programları olmalarıdır - dolayısıyla "akıllı sözleşmeler" terimi de buradan gelir. -Ancak akıllı sözleşmelerin insanlar arasında anlaşmaları yürürlüğe koymak amacıyla kullanımı, Ethereum'un belirleyici olduğu göz önüne alındığında oldukça karmaşıktır. Bir [belirleyici sistem](https://en.wikipedia.org/wiki/Deterministic_algorithm) başlangıç durumu ve belirli bir girdi verildiğinde her zaman aynı sonuçları üreten sistemdir, yani girdilerden çıktıları hesaplama sürecinde rastgelelik veya değişkenlik yoktur. +Ancak akıllı sözleşmelerin insanlar arasında anlaşmaları yürürlüğe koymak amacıyla kullanımı, Ethereum'un belirleyici olduğu göz önüne alındığında oldukça karmaşıktır. [Deterministik bir sistem](https://en.wikipedia.org/wiki/Deterministic_algorithm), belirli bir başlangıç durumu ve belirli bir girdi verildiğinde her zaman aynı sonuçları üreten bir sistemdir; yani, girdilerden çıktıları hesaplama sürecinde hiçbir rastgelelik veya varyasyon yoktur. -Belirleyici yürütme elde etmek için blokzincir, düğümleri _sadece_ blokzincir üzerinde depolanan verileri kullanarak basit ikili (doğru/yanlış) sorularda mutabakata varmakla sınırlandırır. Bu soruların örnekleri aşağıdaki gibidir: +Deterministik yürütmeyi sağlamak için, blokzincirler düğümleri _yalnızca_ blokzincirin kendisinde depolanan verileri kullanarak basit ikili (doğru/yanlış) sorular üzerinde mutabakata varmakla sınırlar. Bu soruların örnekleri aşağıdaki gibidir: - ''Hesap sahibi (açık anahtar ile kimliği belirlenen) bu işlemi eşlenmiş özel anahtar ile imzaladı mı?'' - ''Bu hesap, işlemi karşılayabilmek için yeterli fona sahip mi?'' - ''Bu işlem, bu akıllı sözleşme bağlamında geçerli mi?'' vb. -Blokzincir bilgiyi dış kaynaklardan (yani gerçek dünyadan) edinmişse belirleyiciliğe ulaşmak, blokzincirin durumundaki değişikliklerin doğruluğu üzerinde düğümlerin hemfikir olmasını engelleyeceğinden imkânsız hale gelecektir. Örnek olarak, geleneksel fiyat API'sinden şu anki ETH-USD takas fiyatına dayalı bir işlemi yürüten bir akıllı sözleşmeyi ele alalım. Bu rakam, büyük olasılıkla sık sık değişecektir (API'nin kullanım dışı kalması veya saldırıya uğraması ihtimalini de unutmamak gerekir) ve dolayısıyla aynı sözleşme kodunu çalıştıran düğümler farklı sonuçlara ulaşacaktır. +Blokzincir bilgiyi dış kaynaklardan (örneğin gerçek dünyadan) edinmişse belirleyiciliğe ulaşmak, blok zincir durumundaki değişikliklerin doğruluğu üzerinde düğümlerin hemfikir olmasını engelleyeceğinden imkansız hale gelecektir. Örnek olarak, geleneksel fiyat API'sinden şu anki ETH-USD takas fiyatına dayalı bir işlemi yürüten bir akıllı sözleşmeyi ele alalım. Bu rakam, büyük olasılıkla sık sık değişecektir (API'nin kullanım dışı kalması veya saldırıya uğraması ihtimalini de unutmamak gerekir) ve dolayısıyla aynı sözleşme kodunu çalıştıran düğümler farklı sonuçlara ulaşacaktır. İşlem yürüten dünya çapında binlerce düğüme sahip Ethereum gibi açık bir blokzincir için belirleyicilik hayati önemdedir. Doğruluk kaynağı olarak hizmet eden merkezi bir otorite olmadığında, düğümler aynı işlemleri uyguladıktan sonra aynı duruma ulaşmak için mekanizmalara ihtiyaç duyar. Düğüm A'nın bir akıllı sözleşme kodunu yürütüp sonuç olarak "3" aldığı, ancak aynı işlemi yürüten düğüm B'nin "7" aldığı bir durum, mutabakatın çözülmesine ve Ethereum'un merkezi olmayan bir hesaplama platformu olarak değerini yitirmesine neden olabilir. -Bu senaryo, harici kaynaklardan bilgi çeken blokzincirler tasarlama sorununa da işaret etmektedir. Ancak kâhinler bu sorunu, bilgiyi zincir dışındaki kaynaklardan alıp akıllı sözleşmelerin tüketmesi için blokzincirde depolayarak çözer. Zincir üstünde depolanan bilgi değiştirilemez ve açıkça erişilebilir olduğundan Ethereum düğümleri, mutabakatı bozmadan durum değişimlerini işlemek için içeri aktarılmış zincir dışı verileri güvenilir şekilde kullanabilir. +Bu senaryo, harici kaynaklardan bilgi çeken blokzincirler tasarlama sorununa da işaret etmektedir. Ancak kâhinler, zincir dışı kaynaklardan bilgi alıp akıllı sözleşmelerin kullanması için blokzincirde depolayarak bu sorunu çözerler. Zincir üstünde depolanan bilgiler değiştirilemez ve halka açık olduğundan, Ethereum düğümleri, kâhin tarafından içe aktarılan zincir dışı verileri, mutabakatı bozmadan durum değişikliklerini hesaplamak için güvenle kullanabilir. -Bunu yapmak için kâhin, tipik olarak zincir üstünde yürütülen bir akıllı sözleşmeden ve bazı zincir dışı unsurlardan oluşturulur. Zincir üstündeki sözleşme, diğer akıllı sözleşmelerden veri istekleri alır ve zincir dışındaki bileşene (kâhin düğümü olarak isimlendirilir) aktarır. Bu kâhin düğümü, veri kaynaklarını sorgulayabilir (örneğin uygulama programlama arayüzleri (API) kullanarak) ve istenen verileri akıllı sözleşmenin deposunda saklamak için işlemler gönderebilir. +Bunu yapmak için bir kâhin, tipik olarak zincir üstünde çalışan bir akıllı sözleşmeden ve bazı zincir dışı bileşenlerden oluşur. Zincir üstü sözleşme, diğer akıllı sözleşmelerden veri talepleri alır ve bu talepleri zincir dışı bileşene (kâhin düğümü olarak adlandırılır) iletir. Bu kâhin düğümü, veri kaynaklarını sorgulayabilir (örneğin uygulama programlama arayüzleri (API) kullanarak) ve istenen verileri akıllı sözleşmenin deposunda saklamak için işlemler gönderebilir. -Bir blokzincir kâhini, temel olarak blokzincir ile dış çevre arasındaki bilgi açığını ''hibrid akıllı sözleşmeler'' oluşturarak kapatır. Hibrit akıllı sözleşme, zincir üstünde sözleşme kodu ile zincir dışında altyapıların bir kombinasyonuna dayanarak işleyen bir sözleşmedir. Merkeziyetsiz tahmin piyasaları, hibrit akıllı sözleşmelerin harika bir örneğidir. Diğer örnekler arasında, bir kâhin kümesinin belirli bir hava olayının gerçekleştiğine karar vermesi durumunda ödeme yapan mahsul sigortası akıllı sözleşmeleri sayılabilir. +Bir blokzincir kâhini, temel olarak blokzincir ile dış çevre arasındaki bilgi açığını ''hibrid akıllı sözleşmeler'' oluşturarak kapatır. Hibrit bir akıllı sözleşme, zincir üstü sözleşme kodu ve zincir dışı altyapının bir birleşimine dayalı olarak çalışan bir sözleşmedir. Merkeziyetsiz tahmin piyasaları, hibrit akıllı sözleşmelerin harika bir örneğidir. Diğer örnekler arasında, bir kâhin kümesinin belirli bir hava olayının gerçekleştiğine karar vermesi durumunda ödeme yapan mahsul sigortası akıllı sözleşmeleri sayılabilir. -## Kâhin sorunu nedir? {#the-oracle-problem} +## Kâhin sorunu nedir? Kâhin sorunu {#the-oracle-problem} -Kâhinler önemli bir sorunu çözer ancak bazı komplikasyonları da beraberinde getirir, ör.: +Kâhinler önemli bir sorunu çözer ancak bazı komplikasyonları da beraberinde getirir, ör.,: - İçeriye aktarılan bilginin doğru kaynaktan alınıp alınmadığını ya da bu bilgi üzerinde oynanıp oynanmadığını nasıl doğrularız? @@ -54,19 +54,19 @@ Kâhinler önemli bir sorunu çözer ancak bazı komplikasyonları da beraberind Farklı kâhinler, kâhin problemine daha sonra inceleyeceğimiz farklı çözümler sunar. Kâhinler genellikle aşağıdaki zorlukların üstesinden ne kadar iyi gelebildiklerine göre değerlendirilir: -1. **Doğruluk**: Bir kâhin, akıllı sözleşmelerin geçersiz zincir dışı verilere dayanarak durum değişikliklerini tetiklemesine neden olmamalıdır. Kâhin, verinin _gerçekliğini_ ve _bütünlüğünü_ garanti etmek zorundadır. Gerçeklik, verinin doğru kaynaktan alınması anlamına gelirken; bütünlük ise verilerin zincir üstünde gönderilmeden önce bozulmadan kaldığı (yani değiştirilmediği) anlamına gelir. +1. **Doğruluk**: Bir kâhin, akıllı sözleşmelerin geçersiz zincir dışı verilere dayanarak durum değişikliklerini tetiklemesine neden olmamalıdır. Bir kâhin, verilerin _özgünlüğünü_ ve _bütünlüğünü_ garanti etmelidir. Özgünlük, verilerin doğru kaynaktan alındığı anlamına gelirken, bütünlük verilerin zincir üstüne gönderilmeden önce bozulmadan kaldığı (yani değiştirilmediği) anlamına gelir. -2. **Kullanılabilirlik**: Bir kâhin, akıllı sözleşmelerin eylem yürütmelerini ve durum değişliklerini tetiklemelerini engellememeli veya geciktirmemelidir. Bu, bir kâhinden gelen verilerin kesintiye uğramadan _istek üzerine_ erişilebilir olması gerektiğini ifade eder. +2. **Kullanılabilirlik**: Bir kâhin, akıllı sözleşmelerin eylemleri yürütmesini ve durum değişikliklerini tetiklemesini geciktirmemeli veya engellememelidir. Bu, bir kâhin'den gelen verilerin kesintisiz olarak _talep üzerine mevcut olması_ gerektiği anlamına gelir. -3. **Teşvik uyumluluğu**: Bir kâhin, zincir dışı veri sağlayıcılarını akıllı sözleşmelere doğru bilgi göndermeye teşvik etmelidir. Teşvik uyumluluğu, _dayandırılabilirlik_ ve _hesap verebilirlik_ unsurlarını içerir. Dayandırılabilirlik, harici bir bilgi parçasını sağlayıcısıyla ilişkilendirmeye olanak tanırken hesap verebilirlik, veri sağlayıcılarını verdikleri bilgiye bağlar; böylece sağladıkları bilginin kalitesine göre ödüllendirilebilecekleri veya cezalandırılabilecekleri bir yapı oluşturur. +3. **Teşvik uyumluluğu**: Bir kâhin, zincir dışı veri sağlayıcılarını akıllı sözleşmelere doğru bilgi göndermeleri için teşvik etmelidir. Teşvik uyumluluğu, _atfedilebilirlik_ ve _hesap verebilirlik_ içerir. Dayandırılabilirlik, harici bir bilgi parçasını sağlayıcısıyla ilişkilendirmeye olanak tanırken hesap verebilirlik, veri sağlayıcılarını verdikleri bilgiye bağlar; böylece sağladıkları bilginin kalitesine göre ödüllendirilebilecekleri veya cezalandırılabilecekleri bir yapı oluşturur. -## Blokzincir kâhin hizmeti nasıl çalışır? {#how-does-a-blockchain-oracle-service-work} +## Blokzincir kâhin hizmeti nasıl çalışır? Bir blokzincir kâhin hizmeti nasıl çalışır? {#how-does-a-blockchain-oracle-service-work} ### Kullanıcılar {#users} Kullanıcılar, belirli aksiyonları tamamlayabilmek için blokzincir dışı bilgiye ihtiyaç duyan varlıklardır (örneğin akıllı sözleşmeler). Bir kâhin hizmetinin temel iş akışı, kullanıcının kâhin sözleşmesine veri isteği göndermesiyle başlar. Veri istekleri genellikle aşağıdaki soruların bazılarını veya tamamını cevaplar: -1. İstenen bilgi için zincir dışı düğümler hangi kaynaklara danışabilir? +1. Zincir dışı düğümler, istenen bilgi için hangi kaynaklara danışabilir? 2. Raporlayıcılar, veri kaynaklarından gelen veriyi nasıl işler ve kullanışlı veri noktalarını nasıl çıkartır? @@ -78,39 +78,39 @@ Kullanıcılar, belirli aksiyonları tamamlayabilmek için blokzincir dışı bi ### Kâhin sözleşmesi {#oracle-contract} -Kahin sözleşmesi, kahin hizmetinin zincir üstündeki bileşenidir. Diğer sözleşmelerden gelen veri taleplerini dinler, veri sorgularını kâhin düğümlerine iletir ve döndürülen verileri istemci sözleşmelerinde yayınlar. Bu sözleşme, talep eden sözleşmeye gönderilecek toplu bir değer üretmek üzere döndürülen veri noktaları üzerinde bazı hesaplamalar da gerçekleştirebilir. +Kâhin sözleşmesi, kâhin hizmetinin zincir üstü bileşenidir. Diğer sözleşmelerden gelen veri taleplerini dinler, veri sorgularını kâhin düğümlerine iletir ve döndürülen verileri istemci sözleşmelerinde yayınlar. Bu sözleşme, talep eden sözleşmeye gönderilecek toplu bir değer üretmek üzere döndürülen veri noktaları üzerinde bazı hesaplamalar da gerçekleştirebilir. -Kâhin sözleşmesi, müşteri sözleşmelerinin veri isteği yaparken çağırdığı bazı fonksiyonları açığa çıkarır. Yeni bir sorgulama alındığında akıllı sözleşme, veri isteğinin detaylarını içeren bir [günlük olayı](/developers/docs/smart-contracts/anatomy/#events-and-logs) yayar. Bu, günlüğe abone olmuş zincir dışındaki düğümleri (genellikle JSON-RPC `eth_subscribe` komutu gibi bir komut kullanarak) bilgilendirir ve ardından bu düğümler günlük olayında tanımlanan verileri alır. +Kâhin sözleşmesi, müşteri sözleşmelerinin veri isteği yaparken çağırdığı bazı fonksiyonları açığa çıkarır. Yeni bir sorgu aldığında, akıllı sözleşme veri talebinin ayrıntılarını içeren bir [günlük olayı](/developers/docs/smart-contracts/anatomy/#events-and-logs) yayınlar. Bu, günlüğe abone olan zincir dışı düğümleri (genellikle JSON-RPC `eth_subscribe` komutu gibi bir şey kullanarak) bilgilendirir ve bu düğümler günlük olayında tanımlanan verileri almaya devam eder. -Aşağıda, Pedro Costa tarafından hazırlanmış [örnek kâhin sözleşmesini](https://medium.com/@pedrodc/implementing-a-blockchain-oracle-on-ethereum-cedc7e26b49e) bulabilirsiniz. Bu, diğer akıllı sözleşmelerin istekleri doğrultusunda zincir dışı API'leri sorgulayan ve istenen bilgiyi blokzincir üzerinde depolayan basit bir kâhin hizmetidir: +Aşağıda Pedro Costa'ya ait bir [örnek kâhin sözleşmesi](https://medium.com/@pedrodc/implementing-a-blockchain-oracle-on-ethereum-cedc7e26b49e) bulunmaktadır. Bu, diğer akıllı sözleşmelerin talebi üzerine zincir dışı API'leri sorgulayabilen ve istenen bilgileri blokzincirde depolayabilen basit bir kâhin hizmetidir: ```solidity pragma solidity >=0.4.21 <0.6.0; contract Oracle { - Request[] requests; //list of requests made to the contract - uint currentId = 0; //increasing request id - uint minQuorum = 2; //minimum number of responses to receive before declaring final result - uint totalOracleCount = 3; // Hardcoded oracle count + Request[] requests; //sözleşmeye yapılan isteklerin listesi + uint currentId = 0; //artan istek kimliği + uint minQuorum = 2; //nihai sonucu ilan etmeden önce alınacak minimum yanıt sayısı + uint totalOracleCount = 3; // Sabit kodlanmış kâhin sayısı - // defines a general api request + // genel bir api isteği tanımlar struct Request { - uint id; //request id - string urlToQuery; //API url - string attributeToFetch; //json attribute (key) to retrieve in the response - string agreedValue; //value from key - mapping(uint => string) answers; //answers provided by the oracles - mapping(address => uint) quorum; //oracles which will query the answer (1=oracle hasn't voted, 2=oracle has voted) + uint id; //istek kimliği + string urlToQuery; //API url'si + string attributeToFetch; //yanıtta alınacak json özniteliği (anahtar) + string agreedValue; //anahtardan gelen değer + mapping(uint => string) answers; //kâhinler tarafından sağlanan cevaplar + mapping(address => uint) quorum; //cevabı sorgulayacak kâhinler (1=kâhin oy kullanmadı, 2=kâhin oy kullandı) } - //event that triggers oracle outside of the blockchain + //blokzincir dışındaki kâhini tetikleyen olay event NewRequest ( uint id, string urlToQuery, string attributeToFetch ); - //triggered when there's a consensus on the final result + //nihai sonuç üzerinde bir mutabakat olduğunda tetiklenir event UpdatedRequest ( uint id, string urlToQuery, @@ -127,23 +127,23 @@ contract Oracle { uint length = requests.push(Request(currentId, _urlToQuery, _attributeToFetch, "")); Request storage r = requests[length-1]; - // Hardcoded oracles address + // Sabit kodlanmış kâhin adresleri r.quorum[address(0x6c2339b46F41a06f09CA0051ddAD54D1e582bA77)] = 1; r.quorum[address(0xb5346CF224c02186606e5f89EACC21eC25398077)] = 1; r.quorum[address(0xa2997F1CA363D11a0a35bB1Ac0Ff7849bc13e914)] = 1; - // launch an event to be detected by oracle outside of blockchain + // blokzincir dışındaki kâhin tarafından tespit edilecek bir olay başlat emit NewRequest ( currentId, _urlToQuery, _attributeToFetch ); - // increase request id + // istek kimliğini artır currentId++; } - //called by the oracle to record its answer + //cevabını kaydetmek için kâhin tarafından çağrılır function updateRequest ( uint _id, string memory _valueRetrieved @@ -151,18 +151,18 @@ contract Oracle { Request storage currRequest = requests[_id]; - //check if oracle is in the list of trusted oracles - //and if the oracle hasn't voted yet + //kâhinin güvenilir kâhinler listesinde olup olmadığını kontrol et + //ve kâhinin henüz oy kullanıp kullanmadığını kontrol et if(currRequest.quorum[address(msg.sender)] == 1){ - //marking that this address has voted + //bu adresin oy kullandığını işaretle currRequest.quorum[msg.sender] = 2; - //iterate through "array" of answers until a position if free and save the retrieved value + //bir pozisyon boşalana kadar cevaplar "dizisi" boyunca yinele ve alınan değeri kaydet uint tmpI = 0; bool found = false; while(!found) { - //find first empty slot + //ilk boş yuvayı bul if(bytes(currRequest.answers[tmpI]).length == 0){ found = true; currRequest.answers[tmpI] = _valueRetrieved; @@ -172,8 +172,8 @@ contract Oracle { uint currentQuorum = 0; - //iterate through oracle list and check if enough oracles(minimum quorum) - //have voted the same answer as the current one + //kâhin listesini yinele ve yeterli sayıda kâhinin (minimum yeter sayı) + //mevcut cevapla aynı yönde oy kullanıp kullanmadığını kontrol et for(uint i = 0; i < totalOracleCount; i++){ bytes memory a = bytes(currRequest.answers[i]); bytes memory b = bytes(_valueRetrieved); @@ -198,17 +198,17 @@ contract Oracle { ### Kâhin düğümleri {#oracle-nodes} -Kâhin düğümü, kâhin hizmetlerinin zincir dışındaki bileşenidir. Bilgileri, üçüncü taraf sunucularda barındırılan API'ler gibi harici kaynaklardan çıkarır ve akıllı sözleşmeler tarafından tüketilmek üzere üstüne yerleştirir. Kâhin düğümleri, zincir üstündeki kâhin sözleşmelerinden gelen olayları dinler ve günlükte açıklanan görevi tamamlama aşamasına geçer. +Kâhin düğümü, kâhin hizmetinin zincir dışı bileşenidir. Üçüncü taraf sunucularda barındırılan API'ler gibi harici kaynaklardan bilgi ayıklar ve akıllı sözleşmelerin kullanması için zincir üstüne koyar. Kâhin düğümleri, zincir üstü kâhin sözleşmesinden gelen olayları dinler ve günlükte açıklanan görevi tamamlamaya devam eder. -Kâhin düğümleri için yaygın bir görev; bir API hizmetine [HTTP GET](https://www.w3schools.com/tags/ref_httpmethods.asp) isteği yollaması, ilgili veriyi çekmek için yanıtı ayrıştırması, blokzincir tarafından okunabilir bir çıktı haline getirmesi ve kâhin sözleşmesi yürütmesine ekleyerek zincir üstünde yollamasıdır. Kâhin düğümü ayrıca, daha sonra keşfedeceğimiz ''özgünlük kanıtları'' kullanılarak kaydedilmiş bilginin bütünlüğünü ve doğruluğunu sorgulamak için gerekli olabilir. +Kâhin düğümleri için yaygın bir görev, bir API hizmetine [HTTP GET](https://www.w3schools.com/tags/ref_httpmethods.asp) isteği göndermek, ilgili verileri ayıklamak için yanıtı ayrıştırmak, blokzincir tarafından okunabilir bir çıktıya biçimlendirmek ve kâhin sözleşmesine yapılan bir işleme dahil ederek zincir üstüne göndermektir. Kâhin düğümü ayrıca, daha sonra keşfedeceğimiz ''özgünlük kanıtları'' kullanılarak kaydedilmiş bilginin bütünlüğünü ve doğruluğunu sorgulamak için gerekli olabilir. -Hesaplama kâhinleri ayrıca, gaz masrafı ve blok hacim sınırlamaları göz önüne alındığında zincir üstünde yürütmesi kullanışsız olacak hesaplama görevlerinin yerine getirilmesi için zincir dışındaki düğümleri de kullanır. Örneğin kâhin düğümü, kanıtlanabilir rastgele bir figürü (örneğin blokzincir tabanlı oyunlar için) oluşturmakla görevlendirilebilir. +Hesaplamalı kâhinler ayrıca, gaz maliyetleri ve blok boyutu sınırları göz önüne alındığında zincir üstünde yürütülmesi pratik olmayan hesaplama görevlerini gerçekleştirmek için zincir dışı düğümlere güvenir. Örneğin kâhin düğümü, kanıtlanabilir rastgele bir figürü (örneğin blokzincir tabanlı oyunlar için) oluşturmakla görevlendirilebilir. -## Kâhin tasarım kalıpları {#oracle-design-patterns} +## Kâhin tasarım desenleri {#oracle-design-patterns} -Kâhinler, _anında okuma_, _yayımlama-abonelik_ ve _istek-yanıt_ gibi farklı türlerde olur; bunların ikincisi ve üçüncüsü Ethereum akıllı sözleşmeleri arasında en popüler olanlarıdır. Burada yayınlama-abone olma ve istek-yanıt modellerini kısaca açıklıyoruz. +Kâhinler, _anında okuma_, _yayınla-abone ol_ ve _istek-yanıt_ dahil olmak üzere farklı türlerde gelir; son ikisi Ethereum akıllı sözleşmeleri arasında en popüler olanlardır. Burada yayınlama-abone olma ve istek-yanıt modellerini kısaca açıklıyoruz. -### Yayımlama-abonelik kâhinleri {#publish-subscribe-oracles} +### Yayınla-abone ol kâhinleri {#publish-subscribe-oracles} Bu tip kâhinler, diğer sözleşmelerin bilgi edinmek için düzenli olarak okuyabileceği bir "veri akışı" ortaya koyar. Bu durumdaki verinin sık sık değişmesi beklenir, bu nedenle istemci sözleşmelerinin, kâhinin depolamasındaki verilerde yapılacak güncellemelerini dinlemesi gerekir. ETH-USD'nin güncel fiyat bilgisini kullanıcılara sunan bir kâhin buna bir örnek teşkil eder. @@ -216,31 +216,31 @@ Bu tip kâhinler, diğer sözleşmelerin bilgi edinmek için düzenli olarak oku Bir istek-yanıt kurulumu, istemci sözleşmesinin yayımlama-abonelik kâhini tarafından sağlanmış olan veri dışındaki keyfi verileri de talep edebilmesini sağlar. İstek-yanıt kâhinleri, veri kümesinin akıllı sözleşmenin depolama alanında saklanamayacak kadar büyük olduğu ve/veya kullanıcıların herhangi bir anda verilerin yalnızca küçük bir kısmına ihtiyaç duyacağı durumlar için ideal seçenektir. -Yayımlama-abonelik modellerinden daha karmaşık olsa da, istek-yanıt kâhinleri basitçe önceki bölümde anlattığımız şeydir. Kâhinin veri taleplerini alan ve işlenmeleri için zincir dışında bir düğüme gönderen bir zincir üstü bileşeni olacaktır. +Yayımlama-abonelik modellerinden daha karmaşık olsa da, istek-yanıt kâhinleri basitçe önceki bölümde anlattığımız şeydir. Kâhinin, bir veri talebi alan ve işlenmesi için zincir dışı bir düğüme ileten bir zincir üstü bileşeni olacaktır. -Veri sorgulamaları başlatan kullanıcılar, zincir dışı kaynaktan bilgi alma maliyetini karşılamak zorundadır. Ayrıca istemci sözleşmesinin, kâhin sözleşmesinin istekte belirtilen geri çağırma fonksiyonu aracılığıyla gelen cevabı döndürmesiyle ortaya çıkan gaz maliyetlerini de karşılaması gerekecektir. +Veri sorgularını başlatan kullanıcılar, zincir dışı kaynaktan bilgi almanın maliyetini karşılamalıdır. Ayrıca istemci sözleşmesinin, kâhin sözleşmesinin istekte belirtilen geri çağırma fonksiyonu aracılığıyla gelen cevabı döndürmesiyle ortaya çıkan gaz maliyetlerini de karşılaması gerekecektir. -## Merkezi ile merkeziyetsiz kâhinler karşılaştırması {#types-of-oracles} +## Merkezi ve merkeziyetsiz kâhinler {#types-of-oracles} ### Merkezi kâhinler {#centralized-oracles} -Merkezi kâhin, zincir dışı bilgiyi toplamaktan ve kâhinin sözleşme verilerini talebe göre güncellemekten sorumlu olan tek bir varlık tarafından kontrol edilir. Merkezi kâhinler tek bir doğruluk kaynağına dayandıkları için verimlidir. Sahipli veri kümelerinin doğrudan sahipleri tarafından geniş çapta kabul gören bir imza ile yayımlandığı durumlarda daha iyi işlev görebilirler. Ancak, bunların olumsuz yanları da vardır: +Merkezi bir kâhin, zincir dışı bilgileri toplamaktan ve talep edildiğinde kâhin sözleşmesinin verilerini güncellemekten sorumlu tek bir kuruluş tarafından kontrol edilir. Merkezi kâhinler tek bir doğruluk kaynağına dayandıkları için verimlidir. Sahipli veri kümelerinin doğrudan sahipleri tarafından geniş çapta kabul gören bir imza ile yayımlandığı durumlarda daha iyi işlev görebilirler. Ancak, bunların olumsuz yanları da vardır: #### Düşük doğruluk garantileri {#low-correctness-guarantees} Merkezi kâhinler söz konusu olduğunda sağlanan bilginin doğru olup olmadığını onaylamanın bir yolu yoktur. "İtibarlı" sağlayıcılar bile hile yapabilir veya saldırıya uğrayabilir. Kâhin yozlaşmış bir hale gelirse, akıllı sözleşmeler kötü veriler üzerinde çalışacaktır. -#### Yetersiz kullanılabilirlik {#poor-availability} +#### Zayıf kullanılabilirlik {#poor-availability} -Merkezi kâhinler zincir dışı verilerin diğer akıllı sözleşmeler için erişilebilir kılınmasını her zaman garanti etmez. Sağlayıcı servisi kapatmaya karar verirse ya da bir hacker kâhinin zincir dışı bileşenini ele geçirirse, akıllı sözleşmeniz bir hizmet reddi saldırısına (DoS) maruz kalma riski altında olur. +Merkezi kâhinlerin, zincir dışı verileri diğer akıllı sözleşmeler için her zaman kullanılabilir kılacağı garanti edilmez. Sağlayıcı hizmeti kapatmaya karar verirse veya bir bilgisayar korsanı kâhinin zincir dışı bileşenini ele geçirirse akıllı sözleşmeniz hizmet reddi (DoS) saldırısı riskiyle karşı karşıya kalır. #### Zayıf teşvik uyumluluğu {#poor-incentive-compatibility} Merkezi kâhinler genellikle kötü tasarlanmıştır veya veri sağlayıcının doğru/değiştirilmemiş bilgi göndermesi için var olmayan teşviklere sahiptir. Bir kâhine doğruluk için ödeme yapmanız dürüstlüğü garanti etmez. Bu problem, akıllı sözleşmelerin kontrolünde bulunan değer arttıkça daha da büyür. -### Merkezi olmayan kâhinler {#decentralized-oracles} +### Merkeziyetsiz kâhinler {#decentralized-oracles} -Merkezi olmayan kâhinler, tek başarısızlık noktalarını ortadan kaldırarak merkezi kâhinlerin tabi olduğu sınırlamaların üstesinden gelmek için tasarlanmıştır. Merkezi olmayan bir kâhin hizmeti, zincir dışı verileri bir akıllı sözleşmeye göndermeden önce üzerinde mutabakat sağlayan eşler arası bir ağdaki birden çok katılımcıyı içerir. +Merkezi olmayan kâhinler, tek başarısızlık noktalarını ortadan kaldırarak merkezi kâhinlerin tabi olduğu sınırlamaların üstesinden gelmek için tasarlanmıştır. Merkeziyetsiz bir kâhin hizmeti, bir akıllı sözleşmeye göndermeden önce zincir dışı veriler üzerinde mutabakat oluşturan, eşler arası bir ağdaki birden fazla katılımcıdan oluşur. Merkezi olmayan bir kâhin (ideal olarak) izin ve güven gerektirmez olmalı ve merkezi bir tarafın idaresine dayalı olmamalıdır; gerçekte, kâhinler arasında merkeziyetsizlik bir spektrumun farklı bölgelerindedir. Herkesin katılabileceği yarı merkeziyetsiz kâhin ağları olsa da, bu ağlarda düğümleri geçmiş performansa göre onaylayan ve kaldıran bir "sahip" vardır. Tamamen merkeziyetsiz kâhin ağları da mevcuttur: bunlar genellikle bağımsız blokzincirler olarak çalışır ve düğümleri koordine etmek ve kötü davranışları cezalandırmak için tanımlanmış mutabakat mekanizmalarına sahiptir. @@ -248,7 +248,7 @@ Merkezi olmayan kâhinleri kullanmak aşağıdaki faydaları beraberinde getirir ### Yüksek doğruluk garantileri {#high-correctness-guarantees} -Merkezi olmayan kâhinler, veri doğruluğunu farklı yaklaşımlar kullanarak elde etmeye çalışır. Buna, geri döndürülen bilginin özgünlüğünü ve bütünlüğünü tasdikleyecek kanıtlar kullanmak ve birden çok şahsın zincir dışı verinin doğruluğu üzerinde anlaşmasını şart koşmak dahildir. +Merkezi olmayan kâhinler, veri doğruluğunu farklı yaklaşımlar kullanarak elde etmeye çalışır. Bu, döndürülen bilgilerin özgünlüğünü ve bütünlüğünü tasdik eden kanıtların kullanılmasını ve birden fazla kuruluşun zincir dışı verilerin geçerliliği konusunda toplu olarak anlaşmasını gerektirmeyi içerir. #### Özgünlük kanıtları {#authenticity-proofs} @@ -256,17 +256,17 @@ Merkezi olmayan kâhinler, veri doğruluğunu farklı yaklaşımlar kullanarak e Özgünlük kanıtlarının örnekleri şunlardır: -**Taşıma Katmanı Güvenliği (TLS) kanıtları**: Kâhin düğümleri genelde dış kaynaklardan Taşıma Katmanı Güvenliği (TLS) protokolü tabanlı bir güvenli HTTP bağlantısı kullanarak veri alır. Bazı merkeziyetsiz kâhinler TLS oturumlarını doğrulamak (yani bir düğüm ile spesifik bir sunucu arasındaki bilgi aktarımını onaylamak) için özgünlük kanıtları kullanır ve oturumun içerikleriyle oynanmadığını onaylar. +**Aktarım Katmanı Güvenliği (TLS) kanıtları**: Kâhin düğümleri, genellikle harici kaynaklardan Aktarım Katmanı Güvenliği (TLS) protokolüne dayalı güvenli bir HTTP bağlantısı kullanarak veri alır. Bazı merkeziyetsiz kâhinler TLS oturumlarını doğrulamak (yani bir düğüm ile spesifik bir sunucu arasındaki bilgi aktarımını onaylamak) için özgünlük kanıtları kullanır ve oturumun içerikleriyle oynanmadığını onaylar. -**Güvenilir Yürütme Ortamı (TEE) tasdikleri**: [Güvenilir yürütme ortamı](https://en.wikipedia.org/wiki/Trusted_execution_environment) (TEE), barındığı sistemin operasyonel süreçlerinden izole edilmiş kum havuzu tabanlı bir bilgi işlem ortamıdır. TEE'ler bilgi işlem ortamında depolanan/kullanılan herhangi bir uygulama kodunun veya verinin bütünlüğünü, gizliliğini ve değiştirilemezliğini sağlar. Kullanıcılar ayrıca bir uygulamanın güvenilir yürütme ortamının içinde çalıştığını kanıtlayan bir tasdik oluşturabilirler. +**Güvenilir Yürütme Ortamı (TEE) tasdikleri**: Bir [güvenilir yürütme ortamı](https://en.wikipedia.org/wiki/Trusted_execution_environment) (TEE), ana bilgisayar sisteminin operasyonel süreçlerinden yalıtılmış, sanal alanlı bir hesaplama ortamıdır. TEE'ler bilgi işlem ortamında depolanan/kullanılan herhangi bir uygulama kodunun veya verinin bütünlüğünü, gizliliğini ve değiştirilemezliğini sağlar. Kullanıcılar ayrıca bir uygulamanın güvenilir yürütme ortamının içinde çalıştığını kanıtlayan bir tasdik oluşturabilirler. Merkezi olmayan kâhinlerin belirli sınıfları, kâhin düğümü operatörlerinin TEE tasdikleri sağlamasını gerektirir. Bu, bir kullanıcı için düğüm operatörünün kâhin istemcisinin bir örneğini güvenilir yürütme ortamında çalıştırdığını doğrular. TEE'ler dış süreçlerin bir uygulamanın kodunu ve verilerini değiştirmesini veya okumasını önler; dolayısıyla bu tasdikler, kâhin düğümünün bilgiyi bütün ve gizli tuttuğunu kanıtlar. -#### Bilginin mutabakata dayalı olarak doğrulanması {#consensus-based-validation-of-information} +#### Bilginin mutabakat tabanlı doğrulanması {#consensus-based-validation-of-information} -Merkezi kâhinler akıllı sözleşmelere veri sağlarken tek bir doğruluk kaynağına güvenirler, bu da isabetsiz bilgilerin yayınlanma ihtimalini ortaya çıkarır. Merkezi olmayan kâhinler bu sorunu zincir dışı bilgiyi sorgulamak için birden fazla kâhin düğümüne dayanarak çözerler. Merkezi olmayan kâhinler, birden fazla kaynaktan alınan verileri karşılaştırarak zincir üzerindeki sözleşmelere geçersiz bilgiler sağlanma riskini düşürür. +Merkezi kâhinler akıllı sözleşmelere veri sağlarken tek bir doğruluk kaynağına güvenirler, bu da isabetsiz bilgilerin yayınlanma ihtimalini ortaya çıkarır. Merkeziyetsiz kâhinler, zincir dışı bilgileri sorgulamak için birden fazla kâhin düğümüne dayanarak bu sorunu çözerler. Merkeziyetsiz kâhinler, birden fazla kaynaktan gelen verileri karşılaştırarak zincir üstü sözleşmelere geçersiz bilgi aktarma riskini azaltır. -Ancak merkezi olmayan kâhinler, birden fazla zincir dışı kaynaktan alınan bilgilerdeki uyumsuzlukların üstesinden gelmek zorundadır. Bilgideki farklılıkları minimize etmek ve kâhin sözleşmesine aktarılan verinin kâhin düğümlerinin müşterek fikrini yansıtmasını sağlamak için merkezi olmayan kâhinler şu mekanizmaları kullanır: +Ancak merkeziyetsiz kâhinler, birden fazla zincir dışı kaynaktan alınan bilgilerdeki tutarsızlıklarla başa çıkmak zorundadır. Bilgideki farklılıkları minimize etmek ve kâhin sözleşmesine aktarılan verinin kâhin düğümlerinin müşterek fikrini yansıtmasını sağlamak için merkezi olmayan kâhinler şu mekanizmaları kullanır: ##### Verilerin doğruluğu üzerine oylama/hisseleme @@ -274,49 +274,49 @@ Bazı merkezi olmayan kâhin ağları, ağın yerel jetonlarını kullanarak kat Çoğunluk cevabından sapan cevaplara sahip olan düğümler, jetonları daha doğru değerler sağlayanlara dağıtılarak cezalandırılır. Düğümleri veri sağlamadan önce bir bono sağlamaya zorlamak, gelirleri en yüksek seviyeye çıkarmaya çalışan rasyonel ekonomik aktörler olarak varsayıldıkları için dürüst cevapları teşvik eder. -Hisseleme/oylama, merkeziyetsiz kâhinleri kötü niyetli kişilerin mutabakat sistemini kandırmak için birden fazla kimlik oluşturduğu [Sybil saldırılarından](/glossary/#sybil-attack) da korur. Ancak hisseleme, "avantacılığı" (başkalarından bilgi kopyalayan kâhin düğümlerini) ve "tembel doğrulamayı" (kendileri bilgiyi doğrulamadan çoğunluğu takip eden kâhin düğümlerini) önleyemez. +Hisseleme/oylama, merkeziyetsiz kâhinleri, kötü niyetli aktörlerin mutabakat sistemini manipüle etmek için birden fazla kimlik oluşturduğu [Sybil saldırılarından](/glossary/#sybil-attack) da korur. Ancak hisseleme, "avantacılığı" (başkalarından bilgi kopyalayan kâhin düğümlerini) ve "tembel doğrulamayı" (kendileri bilgiyi doğrulamadan çoğunluğu takip eden kâhin düğümlerini) önleyemez. ##### Schelling noktası mekanizmaları -[Schelling noktası](https://en.wikipedia.org/wiki/Focal_point_(game_theory)), bir sorunla ilgili olarak birden çok varlığın iletişim yokluğunda her zaman ortak bir çözüme varacağını varsayan bir oyun teorisi konseptidir. Schelling noktası mekanizmaları, merkezi olmayan kâhin ağlarında genellikle düğümlerin veri isteklerine verilen cevaplarda mutabakata ulaşmasını sağlamak için kullanılır. +[Schelling noktası](https://en.wikipedia.org/wiki/Focal_point_\(game_theory\)), birden fazla varlığın herhangi bir iletişim olmadığında bir soruna yönelik ortak bir çözümü her zaman varsayılan olarak seçeceğini varsayan bir oyun teorisi kavramıdır. Schelling noktası mekanizmaları, merkezi olmayan kâhin ağlarında genellikle düğümlerin veri isteklerine verilen cevaplarda mutabakata ulaşmasını sağlamak için kullanılır. -Bunun için ilk fikirlerden biri, katılımcıların bir yatırma ile beraber "sayıl" sorulara (cevapları büyüklük ile açıklanan sorular, örn. "ETH'nin fiyatı nedir?") cevaplar gönderdiği önerilen bir veri akışı olan [SchellingCoin](https://blog.ethereum.org/2014/03/28/schellingcoin-a-minimal-trust-universal-data-feed/) olmuştur. 25. ile 75. [yüzdelikler](https://en.wikipedia.org/wiki/Percentile) arasında değerler sağlayan kullanıcılar ödüllendirilirken, değerleri ortalama değerden büyük ölçüde sapanlar ise cezalandırılır. +Bunun için ilk fikirlerden biri, katılımcıların bir teminatla birlikte "skaler" sorulara (cevapları büyüklükle tanımlanan sorular, örneğin, "ETH'nin fiyatı nedir?") yanıtlar gönderdiği önerilen bir veri akışı olan [SchellingCoin](https://blog.ethereum.org/2014/03/28/schellingcoin-a-minimal-trust-universal-data-feed/) idi. 25. ve 75. [yüzdelik dilim](https://en.wikipedia.org/wiki/Percentile) arasında değerler sağlayan kullanıcılar ödüllendirilirken, değerleri medyan değerden büyük ölçüde sapanlar cezalandırılır. -SchellingCoin günümüzde var olmasa da, çok sayıda merkezi olmayan kâhin, özellikle [Maker Protokolü Kâhinleri](https://docs.makerdao.com/smart-contract-modules/oracle-module) schelling noktası mekanizmasını kâhin verilerinin doğruluğunu artırmak amacıyla kullanır. Her Maker Kâhini teminat varlıkları için piyasa fiyatlarını bildiren bir zincir dışı P2P düğümleri ağından ("aktarıcılar" ile "akışlar") ve sağlanan tüm değerlerin ortalamasını hesaplayan bir zincir üzeri "Ortalayıcı" sözleşmesinden oluşur. Belirtilen gecikme süresi bittikten sonra bu ortalama değer, ilgili varlık için yeni referans değeri olur. +SchellingCoin bugün mevcut olmasa da, bir dizi merkeziyetsiz kâhin — özellikle [Maker Protokolü'nün Kâhinleri](https://docs.makerdao.com/smart-contract-modules/oracle-module) — kâhin verilerinin doğruluğunu artırmak için schelling noktası mekanizmasını kullanır. Her bir Maker Kâhini, teminat varlıkları için piyasa fiyatlarını gönderen bir zincir dışı P2P düğüm ağından ("aktarıcılar" ve "beslemeler") ve sağlanan tüm değerlerin medyanını hesaplayan zincir üstü bir "Medianizer" sözleşmesinden oluşur. Belirtilen gecikme süresi bittikten sonra bu ortalama değer, ilgili varlık için yeni referans değeri olur. -Schelling noktası mekanizmalarını kullanan diğer kâhin örnekleri arasında [Chainlink Zincir Dışında Raporlama](https://docs.chain.link/docs/off-chain-reporting/) ve [Witnet](https://witnet.io/) yer alır. İki sistemde de eşler arası ağdaki kâhin düğümlerinden gelen cevaplar ortalama veya orta gibi tek bir toplu değerde birleştirilir. Düğümler cevaplarının toplam değer ile ne kadar uyumlu olduğuna veya bu değerden ne kadar saptığına göre ödüllendirilir veya cezalandırılırlar. +Schelling noktası mekanizmalarını kullanan kâhinlere diğer örnekler arasında [Chainlink Offchain Reporting](https://docs.chain.link/architecture-overview/off-chain-reporting) ve [Witnet](https://witnet.io/) bulunmaktadır. İki sistemde de eşler arası ağdaki kâhin düğümlerinden gelen cevaplar ortalama veya orta gibi tek bir toplu değerde birleştirilir. Düğümler cevaplarının toplam değer ile ne kadar uyumlu olduğuna veya bu değerden ne kadar saptığına göre ödüllendirilir veya cezalandırılırlar. -Schelling noktası mekanizmaları, zincir üzerindeki ayak izini minimize ederken (tek bir işlem gönderilmesi gerekir) aynı anda merkeziyetsizliği de garanti ettikleri için çekicidir. İkincisi, gönderilen cevaplar listesindeki düğümlerin orta/ortalama değeri oluşturan algoritmaya aktarılmadan önce tamamlanması gerektiği için mümkündür. +Schelling noktası mekanizmaları, merkeziyetsizliği garanti ederken zincir üstü ayak izini en aza indirdikleri için (yalnızca tek bir işlem gönderilmesi gerekir) çekicidir. İkincisi, gönderilen cevaplar listesindeki düğümlerin orta/ortalama değeri oluşturan algoritmaya aktarılmadan önce tamamlanması gerektiği için mümkündür. ### Kullanılabilirlik {#availability} -Merkezi olmayan kâhin hizmetleri, akıllı sözleşmelere yüksek zincir dışı veri kullanılabilirliği sağlar. Bu, hem zincir dışı bilgi kaynağının hem de bilgiyi zincir üstünde aktarmaktan sorumlu olan düğümlerin merkeziyetsizleştirilmesi ile gerçekleşir. +Merkeziyetsiz kâhin hizmetleri, akıllı sözleşmelere zincir dışı verilerin yüksek düzeyde kullanılabilirliğini sağlar. Bu, hem zincir dışı bilgi kaynağını hem de bilgiyi zincir üstüne aktarmaktan sorumlu düğümleri merkeziyetsizleştirerek elde edilir. -Kâhin sözleşmesi diğer sözleşmelerden sorgular yürütmek için birden fazla düğüme dayandığından (ayrıca birden çok veri kaynağına da dayanır) hata toleransı da sağlanmış olur. Kaynak _ve_ düğüm operatörü seviyesinde merkeziyetsizlik önemlidir; aynı kaynaktan sağlanan bilgiyi sunan kâhin düğümlerinden oluşan bir ağ, merkezi bir kâhin ile aynı sorunla karşılaşacaktır. +Kâhin sözleşmesi diğer sözleşmelerden sorgular yürütmek için birden fazla düğüme dayandığından (ayrıca birden çok veri kaynağına da dayanır) hata toleransı da sağlanmış olur. Kaynak _ve_ düğüm operatörü düzeyinde merkeziyetsizleştirme çok önemlidir — aynı kaynaktan alınan bilgileri sunan bir kâhin düğümleri ağı, merkezi bir kâhin ile aynı sorunla karşılaşacaktır. -Aynı zamanda hisse tabanlı kâhinlerin veri isteklerine çabuk cevap veremeyen düğüm operatörlerini kesmesi de mümkündür. Bu, kâhin düğümlerinin hata toleransı altyapısına yatırım yapmasını ve zamanında veri sağlamasını önemli ölçüde teşvik eder. +Hisseye dayalı kâhinlerin veri taleplerine hızlı yanıt vermeyen düğüm operatörlerini kesmesi de mümkündür. Bu, kâhin düğümlerinin hata toleransı altyapısına yatırım yapmasını ve zamanında veri sağlamasını önemli ölçüde teşvik eder. ### İyi teşvik uyumluluğu {#good-incentive-compatibility} -Merkezi olmayan kâhinler, kâhin düğümleri arasında [Bizans](https://en.wikipedia.org/wiki/Byzantine_fault) davranışını önlemek için çeşitli teşvik tasarımları uygular. Özellikle, _dayandırılabilirlik_ ve _hesap verebilirliğe_ sahiptirler: +Merkeziyetsiz kâhinler, kâhin düğümleri arasında [Bizans](https://en.wikipedia.org/wiki/Byzantine_fault) davranışını önlemek için çeşitli teşvik tasarımları uygular. Spesifik olarak, _atfedilebilirlik_ ve _hesap verebilirlik_ sağlarlar: -1. Merkezi olmayan kâhin düğümlerinin genelde veri isteklerine karşı cevap olarak sağladıkları verileri imzalamaları gerekir. Bu bilgi, kullanıcıların veri isteklerinde bulunurken güvenilir olmayan düğümleri filtreleyebilmesini sağlamak adına kâhin düğümlerinin geçmiş performansının değerlendirilmesine yardımcı olur. Bunun bir örneği, Witnet'in [Algoritmik İtibar Sistemi](https://docs.witnet.io/intro/about/architecture#algorithmic-reputation-system)'dir. +1. Merkezi olmayan kâhin düğümlerinin genelde veri isteklerine karşı cevap olarak sağladıkları verileri imzalamaları gerekir. Bu bilgi, kullanıcıların veri isteklerinde bulunurken güvenilir olmayan düğümleri filtreleyebilmesini sağlamak adına kâhin düğümlerinin geçmiş performansının değerlendirilmesine yardımcı olur. Bir örnek, Witnet'in [Algoritmik İtibar Sistemi](https://docs.witnet.io/intro/about/architecture#algorithmic-reputation-system)'dir. 2. Merkezi olmayan kâhinler, önceden açıklandığı üzere düğümlerin bildirdikleri verinin doğruluğuna olan güvenleri üzerine bir hisse koymasını gerektirebilir. Eğer iddia doğru çıkarsa, bu hisse dürüst hizmet karşılığı verilen ödüller ile birlikte geri dönebilir. Ancak bilginin yanlış olduğu durumda da kesilebilir, bu da bir ölçüde hesap verilebilirlik sağlar. -## Kâhinlerin akıllı sözleşmelerde uygulama alanları {#applications-of-oracles-in-smart-contracts} +## Akıllı sözleşmelerde kâhin uygulamaları {#applications-of-oracles-in-smart-contracts} Ethereum'da kâhinler için yaygın kullanım alanları aşağıdadır: ### Finansal verileri alma {#retrieving-financial-data} -[Merkeziyetsiz finans](/defi/) (DeFi) uygulamaları, eşler arası borç verme, borç alma ve varlık takasına olanak tanır. Bu, genelde takas oranı verileri (kripto paraların itibari değerlerini hesaplamak ya da jeton fiyatlarını karşılaştırmak için) ve sermaye piyasaları verilerini (altın ya da Amerikan doları gibi jetonlaştırılmış varlıkların değerlerini hesaplamak için) de kapsayan farklı finansal bilgileri almayı gerektirir. +[Merkeziyetsiz finans](/defi/) (DeFi) uygulamaları, varlıkların eşler arası borç verilmesine, borç alınmasına ve takas edilmesine olanak tanır. Bu, genelde takas oranı verileri (kripto paraların itibari değerlerini hesaplamak ya da jeton fiyatlarını karşılaştırmak için) ve sermaye piyasaları verilerini (altın ya da Amerikan doları gibi jetonlaştırılmış varlıkların değerlerini hesaplamak için) de kapsayan farklı finansal bilgileri almayı gerektirir. Örneğin bir DeFi borç verme protokolünün teminat olarak yatırılan varlıklar (ETH gibi) için güncel piyasa fiyatlarını sorgulaması gerekir. Bu, sözleşmenin teminat varlıklarının değerinin ve sistemden ne kadar borç alınabileceğinin belirlenmesini sağlar. -DeFi'daki popüler "fiyat kâhinleri" (genelde böyle adlandırılırlar) arasında Chainlink Fiyat Akışları, Compound Protocol’ün [Açık Fiyat Akışı](https://compound.finance/docs/prices), Uniswap’ın [Zaman Ağırlıklı Ortalama Fiyatları (TWAP'lar)](https://docs.uniswap.org/contracts/v2/concepts/core-concepts/oracles) ve [Maker Kâhinleri](https://docs.makerdao.com/smart-contract-modules/oracle-module) yer alır. +DeFi'de popüler "fiyat kâhinleri" (genellikle bu şekilde adlandırılırlar) arasında Chainlink Fiyat Beslemeleri, Compound Protokolü'nün [Açık Fiyat Beslemesi](https://compound.finance/docs/prices), Uniswap'ın [Zaman Ağırlıklı Ortalama Fiyatları (TWAP'ler)](https://docs.uniswap.org/contracts/v2/concepts/core-concepts/oracles) ve [Maker Kâhinleri](https://docs.makerdao.com/smart-contract-modules/oracle-module) bulunur. -Oluşturucular, bu fiyat kâhinlerini projelerine dahil etmeden önce bunlarla birlikte gelen uyarıları kavramalıdır. Bu [makalede](https://blog.openzeppelin.com/secure-smart-contract-guidelines-the-dangers-of-price-oracles/), bahsedilen fiyat kâhinlerinden herhangi birini kullanmayı planlarken nelerin dikkate alınması gerektiği konusunda ayrıntılı bir analiz sunulmaktadır. +Oluşturucular, bu fiyat kâhinlerini projelerine dahil etmeden önce bunlarla birlikte gelen uyarıları kavramalıdır. Bu [makale](https://blog.openzeppelin.com/secure-smart-contract-guidelines-the-dangers-of-price-oracles), bahsedilen fiyat kâhinlerinden herhangi birini kullanmayı planlarken nelerin dikkate alınması gerektiğine dair ayrıntılı bir analiz sunmaktadır. Aşağıda, bir Chainlink fiyat akışı kullanarak akıllı sözleşmenizdeki en son ETH fiyatını nasıl alabileceğinizi gösteren bir örnek bulunmaktadır: @@ -358,15 +358,15 @@ contract PriceConsumerV3 { Blokzincir tabanlı oyunlar veya piyango şemaları gibi belirli blokzincir uygulamalarının etkili bir şekilde çalışması için yüksek düzeyde öngörülemezlik ve rastgelelik gerekir. Fakat blokzincirlerin belirleyici yürütümü, rastgeleliği ortadan kaldırır. -Orijinal yaklaşım, `blockhash` gibi sözde rastgele kriptografik fonksiyonları kullanmaktı fakat bunlar iş ispatı algoritmasını çözen madenciler tarafından [manipüle edilebilirdi](https://ethereum.stackexchange.com/questions/3140/risk-of-using-blockhash-other-miners-preventing-attack#:~:text=So%20while%20the%20miners%20can,to%20one%20of%20the%20players.). Ayrıca Ethereum'un [hisse ispatına geçişi](/roadmap/merge/) de geliştiricilerin zincir üstünde rastgelelik için `blockhash`'e artık güvenemeyecekleri anlamına geliyor. İşaret Zincirinin [RANDAO mekanizması](https://eth2book.info/altair/part2/building_blocks/randomness), rastgeleliğe alternatif bir çözüm sunuyor. +`blockhash` gibi sözde rastgele kriptografik fonksiyonların kullanılması özgün bir yaklaşımdı ancak bunlar [madenciler tarafından manipüle edilebilir](https://ethereum.stackexchange.com/questions/3140/risk-of-using-blockhash-other-miners-preventing-attack#:~:text=So%20while%20the%20miners%20can,to%20one%20of%20the%20players.) iş ispatı algoritmasını çözerken. Ayrıca Ethereum'un [hisse ispatına geçişi](/roadmap/merge/), geliştiricilerin artık zincir üstü rastgelelik için `blockhash`'e güvenemeyecekleri anlamına geliyor. Bunun yerine Beacon Chain'in [RANDAO mekanizması](https://eth2book.info/altair/part2/building_blocks/randomness) alternatif bir rastgelelik kaynağı sağlar. -Rastgele değeri zincir dışında oluşturup zincir üstünde göndermek mümkündür, fakat bunu yapmak kullanıcılara yüksek güven gereklilikleri de yükler. Değerin tahmin edilemeyecek mekanizmalarla gerçekten oluşturulduğuna ve geçiş sırasında değiştirilmediğine inanmak zorundadırlar. +Rastgele değeri zincir dışında oluşturup zincir üstüne göndermek mümkündür ancak bunu yapmak kullanıcılara yüksek güven gereksinimleri yükler. Değerin tahmin edilemeyecek mekanizmalarla gerçekten oluşturulduğuna ve geçiş sırasında değiştirilmediğine inanmak zorundadırlar. -Zincir dışında bilgi işlem için tasarlanmış kâhinler bu sorunu, sürecin tahmin edilemezliğini tasdik eden kriptografik kanıtlarla birlikte zincir üstünde yayımladıkları zincir dışı rastgele sonuçları güvenli bir şekilde oluşturarak çözerler. Bunun bir örneği, tahmin edilemez sonuçlara dayanan uygulamalar için güvenilir akıllı sözleşmeler oluşturmak açısından kullanışlı, kanıtlanabilir şekilde adil ve kurcalanamaz bir rastgele sayı oluşturucusu (RNG) olan [Chainlink VRF](https://docs.chain.link/docs/chainlink-vrf/)'dir (Onaylanabilir Rastgele Fonksiyon). +Zincir dışı hesaplama için tasarlanmış kâhinler, sürecin öngörülemezliğini tasdik eden kriptografik kanıtlarla birlikte zincir üstünde yayınladıkları rastgele sonuçları zincir dışında güvenli bir şekilde üreterek bu sorunu çözerler. Bir örnek, öngörülemeyen sonuçlara dayanan uygulamalar için güvenilir akıllı sözleşmeler oluşturmak için kullanışlı, kanıtlanabilir derecede adil ve kurcalamaya karşı korumalı bir rastgele sayı üreteci (RNG) olan [Chainlink VRF](https://docs.chain.link/docs/chainlink-vrf/)'dir (Doğrulanabilir Rastgele Fonksiyon). -### Olaylar için sonuçlar alma {#getting-outcomes-for-events} +### Olaylar için sonuçları alma {#getting-outcomes-for-events} -Kâhinler sayesinde gerçek hayat olaylarına tepkiler verebilen bir akıllı sözleşme kolaylıkla oluşturulabilir. Kâhin servisleri, sözleşmelerin zincir dışındaki harici API'lere bağlanmasını ve o veri kaynaklarından bilgi toplayabilmesini sağlayarak bunu mümkün kılar. Örnek olarak, daha önceden bahsedilmiş olan tahmin merkeziyetsiz uygulaması, kâhinlerin zincir dışında güvenilir bir kaynaktan (örneğin, Associated Press) seçim sonuçlarını döndürmesini isteyebilir. +Kâhinler sayesinde gerçek hayat olaylarına tepkiler verebilen bir akıllı sözleşme kolaylıkla oluşturulabilir. Kâhin hizmetleri, sözleşmelerin zincir dışı bileşenler aracılığıyla harici API'lere bağlanmasına ve bu veri kaynaklarındaki bilgileri kullanmasına olanak tanıyarak bunu mümkün kılar. Örneğin, daha önce bahsedilen tahmin merkeziyetsiz uygulaması, bir kâhin'den güvenilir bir zincir dışı kaynaktan (örneğin Associated Press) seçim sonuçlarını döndürmesini isteyebilir. Gerçek dünya sonuçlarına dayalı verileri alabilmek için kâhinleri kullanmak, başka yeni kullanım durumlarına da olanak tanır; örneğin, merkeziyetsiz bir sigorta ürününün etkili bir şekilde çalışabilmesi için hava durumu, afetler vb. hakkında doğru bilgilere ihtiyaç vardır. @@ -374,57 +374,60 @@ Gerçek dünya sonuçlarına dayalı verileri alabilmek için kâhinleri kullanm Akıllı sözleşmeler otomatik olarak çalışmaz; bundan ziyade sözleşmenin kodunu çalıştırabilmek için bir dışarıdan sahip olunan hesap (EOA) ya da başka bir sözleşme hesabı doğru fonksiyonları tetiklemelidir. Çoğu durumda, sözleşmenin fonksiyonlarının büyük kısmı herkese açıktır ve EOA'lar ve diğer sözleşmeler tarafından çağrılabilir. -Ancak bir sözleşmenin içinde başkaları tarafından erişilemeyen _özel fonksiyonlar_ da bulunur ve bunlar bir merkeziyetsiz uygulamanın genel işlevselliği açısından çok önemlidir. Örnekler arasında kullanıcılar için periyodik olarak yeni NFT'ler basan `mintERC721Token()` fonksiyonu, tahmin piyasasında ödül ödemeleri yapan bir fonksiyon ve bir merkeziyetsiz borsada hisselenmiş jetonların kilitlerini açan bir fonksiyon sayılabilir. +Ancak bir sözleşme içinde başkalarının erişemeyeceği, ancak bir merkeziyetsiz uygulamanın genel işlevselliği için kritik olan _özel fonksiyonlar_ da vardır. Örnekler arasında, kullanıcılar için periyodik olarak yeni NFT'ler basan bir `mintERC721Token()` fonksiyonu, bir tahmin piyasasında ödemeleri ödüllendirme fonksiyonu veya bir DEX'te stake edilmiş tokenlerin kilidini açma fonksiyonu bulunur. Geliştiricilerin bu gibi fonksiyonları, uygulamalarının sorunsuz şekilde çalışabilmesi için aralıklı olarak tetiklemeleri gerekir. Bununla birlikte, bu durum geliştiriciler için sıradan görevlerde daha fazla saat kaybedilmesine sebep olabilir, bu yüzden akıllı sözleşmelerin yürütülmesini otomatik hale getirme fikri ilgi çekicidir. -Bazı merkezi olmayan kâhin ağları, zincir dışı kâhin düğümlerinin kullanıcı tarafından ifade edilen parametrelere göre akıllı sözleşme fonksiyonlarını tetiklemesini sağlayan otomasyon hizmetleri sunar. Bu, tipik olarak hedef sözleşmeyi kâhin ağına "kaydetmeyi", kâhin operatörüne ödeme yapmak için fon sağlamayı ve sözleşmenin tetikleneceği şartları ya da zamanları belirtmeyi gerektirir. +Bazı merkeziyetsiz kâhin ağları, zincir dışı kâhin düğümlerinin kullanıcı tarafından tanımlanan parametrelere göre akıllı sözleşme fonksiyonlarını tetiklemesine olanak tanıyan otomasyon hizmetleri sunar. Bu, tipik olarak hedef sözleşmeyi kâhin ağına "kaydetmeyi", kâhin operatörüne ödeme yapmak için fon sağlamayı ve sözleşmenin tetikleneceği şartları ya da zamanları belirtmeyi gerektirir. -Chainlink [ Keeper Ağı](https://chain.link/keepers), akıllı sözleşmeler için olağan bakım görevlerini asgarileştirilmiş güven ve merkeziyetsizleştirilmiş bir şekilde dış kaynak kullanımı yoluyla tamamlamaya yönelik seçenekler sunar. Sözleşmenizi Keeper ile uyumlu hale getirme ve Upkeep hizmetini kullanma hakkında daha fazla bilgi edinmek için resmi [Keeper dokümanlarını](https://docs.chain.link/docs/chainlink-keepers/introduction/) okuyun. +Chainlink'in [Keeper Ağı](https://chain.link/keepers), akıllı sözleşmelerin düzenli bakım görevlerini güveni en aza indirilmiş ve merkeziyetsiz bir şekilde dış kaynaklardan sağlamaları için seçenekler sunar. Sözleşmenizi Keeper uyumlu hale getirme ve Upkeep hizmetini kullanma hakkında bilgi için resmi [Keeper belgelerini](https://docs.chain.link/docs/chainlink-keepers/introduction/) okuyun. -## Blokzincir kâhinleri nasıl kullanılır? {#use-blockchain-oracles} +## Blokzincir kâhinleri nasıl kullanılır {#use-blockchain-oracles} Ethereum merkeziyetsiz uygulamanıza entegre edebileceğiniz birden fazla kâhin uygulaması mevcuttur: -**[Chainlink](https://chain.link/)** - _Chainlink merkezi olmayan kâhin ağları, herhangi bir blokzincirde gelişmiş akıllı sözleşmeleri desteklemek için kurcalamaya dayanıklı girdiler, çıktılar ve hesaplamalar sağlar._ +**[Chainlink](https://chain.link/)** - _Chainlink merkeziyetsiz kâhin ağları, herhangi bir blokzincirdeki gelişmiş akıllı sözleşmeleri desteklemek için kurcalamaya karşı korumalı girdiler, çıktılar ve hesaplamalar sağlar._ -**[Chronicle](https://chroniclelabs.org/)** - _Chronicle, tam anlamıyla ölçeklenebilir, maliyet açısından verimli, merkeziyetsiz ve doğrulanabilir kâhinler geliştirerek zincir üstünde veri aktarımının mevcut sınırlamalarının ötesine geçer._ +**[RedStone Oracles](https://redstone.finance/)** - _RedStone, gaz optimizasyonlu veri akışları sağlayan merkeziyetsiz modüler bir kâhindir. _Likit stake tokenleri (LST'ler), likit yeniden stake tokenleri (LRT'ler) ve Bitcoin stake türevleri gibi gelişmekte olan varlıklar için fiyat beslemeleri sunma konusunda uzmanlaşmıştır._ -**[Witnet](https://witnet.io/)** - _Witnet, akıllı sözleşmelerin gerçek dünya olaylarına güçlü kripto-ekonomik garantilerle tepki vermesine yardımcı olan izin gerektirmez, merkezi olmayan ve sansüre dayanıklı bir kâhindir._ +**[Chronicle](https://chroniclelabs.org/)** - _Chronicle, gerçekten ölçeklenebilir, uygun maliyetli, merkeziyetsiz ve doğrulanabilir kâhinler geliştirerek verileri zincir üstünde aktarmanın mevcut sınırlamalarının üstesinden gelir._ -**[UMA Oracle](https://uma.xyz)** - _UMA'nın iyimser kâhini, akıllı sözleşmelerin sigorta, finansal türevler ve tahmin piyasaları dahil olmak üzere farklı uygulamalar için her türlü veriyi hızla almasına olanak tanır._ +**[Witnet](https://witnet.io/)** - _Witnet, akıllı sözleşmelerin güçlü kripto-ekonomik garantilerle gerçek dünya olaylarına tepki vermesine yardımcı olan izinsiz, merkeziyetsiz ve sansüre dayanıklı bir kâhindir._ -**[Tellor](https://tellor.io/)** - _Tellor, akıllı sözleşmenizin ihtiyaç duyduğu anda herhangi bir veriyi kolayca almasına yönelik şeffaf ve izin gerektirmeyen bir kâhin protokolüdür._ +**[UMA Oracle](https://uma.xyz)** - _UMA'nın iyimser kâhini, akıllı sözleşmelerin sigorta, finansal türevler ve tahmin piyasaları dahil olmak üzere farklı uygulamalar için her türlü veriyi hızlı bir şekilde almasını sağlar._ -**[Band Protocol](https://bandprotocol.com/)** - _Band Protocol, gerçek dünya verilerini ve API'leri toplayan ve akıllı sözleşmelere bağlayan zincirler arası bir veri kâhin platformudur._ +**[Tellor](https://tellor.io/)** - _Tellor, akıllı sözleşmenizin ihtiyaç duyduğu her an herhangi bir veriyi kolayca alması için şeffaf ve izinsiz bir kâhin protokolüdür._ -**[Pyth Network](https://pyth.network/)** - _Pyth ağı, kurcalanmaya-dayanıklı, merkeziyetsiz ve kendini sürdürebilir bir ortamda zincir üstünde sürekli gerçek hayat verileri yayımlamak üzere tasarlanmış finansal bir birinci taraf bir kâhin ağıdır._ +**[Band Protocol](https://bandprotocol.com/)** - _Band Protocol, gerçek dünya verilerini ve API'lerini toplayan ve akıllı sözleşmelere bağlayan zincirler arası bir veri kâhini platformudur._ -**[API3 DAO](https://www.api3.org/)** - _API3 DAO, akıllı sözleşmeler için merkezi olmayan bir çözümde daha fazla kaynak şeffaflığı, güvenlik ve ölçeklenebilirlik sağlayan birinci taraf kâhin çözümleri sunar._ +**[Pyth Network](https://pyth.network/)** - _Pyth ağı, kurcalamaya karşı dayanıklı, merkeziyetsiz ve kendi kendine yeten bir ortamda sürekli gerçek dünya verilerini zincir üstünde yayınlamak için tasarlanmış birinci taraf bir finansal kâhin ağıdır._ -**[Supra](https://supra.com/)** - Herkese açık (L1'ler ve L2'ler) veya özel (kurumsal) tüm blokzincirleri birbirine bağlayan, zincir üstünde ve zincir dışında kullanım durumları için uygun merkeziyetsiz kâhin fiyat akışları sunan, dikey olarak entegre edilmiş bir zincirler arası çözümler araç kitidir. +**[API3 DAO](https://www.api3.org/)** - _API3 DAO, akıllı sözleşmeler için merkeziyetsiz bir çözümde daha fazla kaynak şeffaflığı, güvenlik ve ölçeklenebilirlik sunan birinci taraf kâhin çözümleri sunar_ -## Daha fazla okuma {#further-reading} +**[Supra](https://supra.com/)** - Tüm blokzincirleri, halka açık (L1'ler ve L2'ler) veya özel (işletmeler) birbirine bağlayan, zincir üstü ve zincir dışı kullanım durumları için kullanılabilecek merkeziyetsiz kâhin fiyat akışları sağlayan, dikey olarak entegre edilmiş bir zincirler arası çözüm araç takımıdır. + +**[Gas Network](https://gas.network/)** - Blokzincir genelinde gerçek zamanlı gaz fiyatı verileri sağlayan dağıtık bir kâhin platformu. Gas Network, önde gelen gaz fiyatı veri sağlayıcılarından zincir üstü veriler getirerek birlikte çalışabilirliği artırmaya yardımcı olur. Gas Network, Ethereum Ana Ağı ve birçok önde gelen L2 dahil olmak üzere 35'ten fazla zincir için veriyi destekler. + +## Daha fazla kaynak {#further-reading} **Makaleler** - [Blokzincir Kâhini Nedir?](https://chain.link/education/blockchain-oracles) — _Chainlink_ -- [Blokzincir Kâhini Nedir?](https://betterprogramming.pub/what-is-a-blockchain-oracle-f5ccab8dbd72) — _Patrick Collins_ -- [Merkezi Olmayan Kâhinler: kapsamlı bir genel bakış](https://medium.com/fabric-ventures/decentralised-oracles-a-comprehensive-overview-d3168b9a8841) — _Julien Thevenard_ -- [Ethereum'da Blokzincir Kâhini Uygulaması](https://medium.com/@pedrodc/implementing-a-blockchain-oracle-on-ethereum-cedc7e26b49e) – _Pedro Costa_ -- [Akıllı sözleşmeler neden API çağrıları yapamıyor?](https://ethereum.stackexchange.com/questions/301/why-cant-contracts-make-api-calls) — _StackExchange_ -- [Demek bir fiyat kâhini kullanmak istiyorsunuz](https://samczsun.com/so-you-want-to-use-a-price-oracle/) — _samczsun_ +- [Blokzincir Kâhini Nedir?](https://medium.com/better-programming/what-is-a-blockchain-oracle-f5ccab8dbd72) — _Patrick Collins_ +- [Merkeziyetsiz Kâhinler: kapsamlı bir genel bakış](https://medium.com/fabric-ventures/decentralised-oracles-a-comprehensive-overview-d3168b9a8841) — _Julien Thevenard_ +- [Ethereum'da Bir Blokzincir Kâhini Uygulamak](https://medium.com/@pedrodc/implementing-a-blockchain-oracle-on-ethereum-cedc7e26b49e) – _Pedro Costa_ +- [Akıllı sözleşmeler neden API çağrıları yapamaz?](https://ethereum.stackexchange.com/questions/301/why-cant-contracts-make-api-calls) — _StackExchange_ +- [Yani bir fiyat kâhini kullanmak istiyorsunuz](https://samczsun.com/so-you-want-to-use-a-price-oracle/) — _samczsun_ **Videolar** -- [Kâhinler ve Blokzincir Yardımcı Programının Genişletilmesi](https://youtu.be/BVUZpWa8vpw) — _Real Vision Finance_ -- [Birinci taraf ile üçüncü taraf kâhinler arasındaki farklar](https://blockchainoraclesummit.io/first-party-vs-third-party-oracles/) - _Blokzincir Kâhini Zirvesi_ +- [Kâhinler ve Blokzincir Faydasının Genişlemesi](https://youtu.be/BVUZpWa8vpw) — _Real Vision Finance_ -**Sunumlar** +**Öğreticiler** -- [Solidity'de Ethereum'un Güncel Fiyatını Alma](https://blog.chain.link/fetch-current-crypto-price-data-solidity/) — _Chainlink_ -- [Kâhin Verilerini Kullanma](https://docs.chroniclelabs.org/Developers/tutorials/Remix) — _Chronicle_ +- [Solidity'de Ethereum'un Güncel Fiyatı Nasıl Alınır](https://blog.chain.link/fetch-current-crypto-price-data-solidity/) — _Chainlink_ +- [Kâhin Verilerini Tüketme](https://docs.chroniclelabs.org/Developers/tutorials/Remix) — _Chronicle_ **Örnek projeler** -- [Solidity'de Ethereum için tam Chainlink başlangıç ​​projesi](https://github.com/hackbg/chainlink-fullstack) — _HackBG_ +- [Solidity'de Ethereum için Tam Chainlink başlangıç projesi](https://github.com/hackbg/chainlink-fullstack) — _HackBG_ diff --git a/public/content/translations/tr/developers/docs/programming-languages/dart/index.md b/public/content/translations/tr/developers/docs/programming-languages/dart/index.md index 99f42eda9b2..43e84d9026e 100644 --- a/public/content/translations/tr/developers/docs/programming-languages/dart/index.md +++ b/public/content/translations/tr/developers/docs/programming-languages/dart/index.md @@ -1,28 +1,32 @@ --- -title: Dart geliştiricileri için Ethereum -description: Dart programlama dilini kullanarak nasıl Ethereum için geliştireceğinizi öğrenin +title: "Dart geliştiricileri için Ethereum" +description: "Dart programlama dilini kullanarak nasıl Ethereum için geliştireceğinizi öğrenin" lang: tr incomplete: true --- -## Akıllı sözleşmeler ve Solidity dilini öğrenmeye başlangıç {#getting-started-with-smart-contracts-and-solidity} +## Akıllı sözleşmelere ve Solidity diline başlangıç {#getting-started-with-smart-contracts-and-solidity} -## Öğreticiler {#tutorials} +## Eğitimler {#tutorials} -- [Flutter ve Blok Zinciri – Hello World Dapp](https://www.geeksforgeeks.org/flutter-and-blockchain-hello-world-dapp/) başlamanız için tüm adımlarda size yol gösterir: - 1. [Solidity](https://soliditylang.org/)'de akıllı sözleşme yazma - 2. Dart'ta bir kullanıcı arayüzü yazma -- Temel bilgileri hali hazırda biliyorsanız, [daha kısa olan Flutter ile Mobil bir dapp inşa etmek](https://medium.com/dash-community/building-a-mobile-dapp-with-flutter-be945c80315a) daha iyi olabilir -- Video izleyerek öğrenmeyi tercih ediyorsanız, yaklaşık bir saat uzunluğundaki [İlk Blok Zinciri Flutter Uygulamanızı Oluşturun](https://www.youtube.com/watch?v=3Eeh3pJ6PeA) videosunu izleyebilirsiniz -- Sabırsızsanız, yaklaşık yirmi dakika uzunluğundaki [Flutter ve Dart ile Ethereum Üzerinde bir Blok Zinciri Merkeziyetsiz Uygulaması Oluşturma](https://www.youtube.com/watch?v=jaMFEOCq_1s) videosunu tercih edebilirsiniz -- [WalletConnect'in Web3Modal'ini kullanarak Flutter uygulamanıza MetaMask'ı entegre etme](https://www.youtube.com/watch?v=v_M2buHCpc4) - bu kısa video size WalletConnect'in kütüphanesi [Web3Modal](https://pub.dev/packages/web3modal_flutter)'i kullanarak Flutter uygulamanıza MetaMask'ı entegre etmeye ilişkin adımları gösteriyor -- [Mobile Blockchain Developer Bootcamp Course With Solidity & Flutter](https://youtube.com/playlist?list=PL4V4Unlk5luhQ26ERO6hWEbcUwHDSSmVH) tam yığın mobil blokzincir geliştiricisi kurslarından oluşan bir oynatma listesi +- [Flutter ve Blokzincir – Merhaba Dünya Merkeziyetsiz Uygulaması](https://www.geeksforgeeks.org/flutter-and-blockchain-hello-world-dapp/) başlamak için gereken tüm adımlarda size yol gösterir: + 1. [Solidity](https://soliditylang.org/) dilinde akıllı sözleşme yazma + 2. Dart'ta bir kullanıcı arayüzü yazma +- [Flutter ile Mobil Merkeziyetsiz Uygulama Oluşturma](https://medium.com/dash-community/building-a-mobile-dapp-with-flutter-be945c80315a) çok daha kısadır; bu da temel bilgileri zaten biliyorsanız + daha iyi olabilir +- Video izleyerek öğrenmeyi tercih ediyorsanız, yaklaşık bir saat uzunluğundaki [İlk Blokzincir Flutter Uygulamanızı Oluşturun](https://www.youtube.com/watch?v=3Eeh3pJ6PeA) videosunu izleyebilirsiniz +- Sabırsızsanız, sadece yaklaşık yirmi dakika süren [Flutter ve Dart ile Ethereum Üzerinde Bir Blokzincir Merkeziyetsiz Uygulaması Oluşturma](https://www.youtube.com/watch?v=jaMFEOCq_1s) videosunu tercih edebilirsiniz +- [WalletConnect'in Web3Modal'ı ile Flutter Uygulamasına MetaMask'ı Entegre Etme](https://www.youtube.com/watch?v=v_M2buHCpc4) - bu kısa video, WalletConnect'in [Web3Modal](https://pub.dev/packages/web3modal_flutter) kütüphanesiyle MetaMask'ı Flutter uygulamalarınıza entegre etme adımlarını gösterir. +- [Solidity ve Flutter ile Mobil Blokzincir Geliştirici Eğitim Kampı Kursu](https://youtube.com/playlist?list=PL4V4Unlk5luhQ26ERO6hWEbcUwHDSSmVH) - tam yığın mobil blokzincir geliştirici kursu oynatma listesi -## Ethereum istemcileri ile çalışma {#working-with-ethereum-clients} +## Ethereum istemcileriyle çalışma {#working-with-ethereum-clients} -Ethereum'u, kripto para birimi ve blok zinciri teknolojisinin faydalarını kullanan merkeziyetsiz uygulamalar (veya "dapp'ler") oluşturmak için kullanabilirsiniz. Dart'ın Ethereum için olan [JSON-RPC API](/developers/docs/apis/json-rpc/)'sını kullanabilmesi için şu anda sürdürülmekte olan en az iki kütüphanesi vardır. +Ethereum'u, kripto para birimi ve blok zinciri teknolojisinin faydalarını kullanan merkeziyetsiz uygulamalar (veya "dapp'ler") oluşturmak için kullanabilirsiniz. +Dart'ta Ethereum için +[JSON-RPC API](/developers/docs/apis/json-rpc/)'sini kullanmak üzere halihazırda bakımı yapılan en az iki kütüphane vardır. -1. [Simonbutler.eu'dan Web3dart](https://pub.dev/packages/web3dart) -1. [Darticulate.com'dan Ethereum 5.0.0](https://pub.dev/packages/ethereum) +1. [pwa.ir'den Web3dart](https://pub.dev/packages/web3dart) +2. [darticulate.com'dan Ethereum 5.0.0](https://pub.dev/packages/ethereum) -Belirli Ethereum adreslerini değiştirmenize izin veren veya çeşitli kripto para birimlerinin fiyatlarını almanızı sağlayan ek kütüphaneler de vardır. [Tam listeyi burada görebilirsiniz](https://pub.dev/dart/packages?q=ethereum). +Belirli Ethereum adreslerini değiştirmenize izin veren veya çeşitli kripto para birimlerinin fiyatlarını almanızı sağlayan ek kütüphaneler de vardır. +[Tam listeyi burada görebilirsiniz](https://pub.dev/dart/packages?q=ethereum). diff --git a/public/content/translations/tr/developers/docs/programming-languages/delphi/index.md b/public/content/translations/tr/developers/docs/programming-languages/delphi/index.md index af49aa2e2d6..4a47661f97b 100644 --- a/public/content/translations/tr/developers/docs/programming-languages/delphi/index.md +++ b/public/content/translations/tr/developers/docs/programming-languages/delphi/index.md @@ -1,56 +1,56 @@ --- -title: Delphi geliştiricileri için Ethereum -description: Delphhi programlama dilini kullanarak nasıl Ethereum için geliştireceğinizi öğrenin +title: "Delphi geliştiricileri için Ethereum" +description: "Delphi programlama dilini kullanarak nasıl Ethereum için geliştireceğinizi öğrenin" lang: tr incomplete: true --- -Delphhi programlama dilini kullanarak nasıl Ethereum için geliştireceğinizi öğrenin +Delphi programlama dilini kullanarak nasıl Ethereum için geliştireceğinizi öğrenin -Ethereum'u, kripto para birimi ve blok zinciri teknolojisinin avantajlarından faydalanan merkeziyetsiz uygulamalar (veya "dapp'ler") oluşturmak için kullanın. Bu dapp'ler güvenilir olabilir, yani Ethereum'a dağıtıldıktan sonra her zaman programlandığı gibi çalışırlar. Yeni tür finansal uygulamalar oluşturmak için dijital varlıkları kontrol edebilirler. Merkeziyetsiz olabilirler, yani hiç bir kurum veya kişi onları kontrol edemez ve sansürlenmeleri neredeyse imkansızdır. +Kripto para birimi ve blok zinciri teknolojisinin faydalarını kullanan merkeziyetsiz uygulamalar (veya "dapp'ler") oluşturmak için Ethereum'u kullanın. Bu dapp'ler güvenilir olabilir, yani Ethereum'a dağıtıldıktan sonra her zaman programlandığı gibi çalışırlar. Yeni tür finansal uygulamalar oluşturmak için dijital varlıkları kontrol edebilirler. Merkeziyetsiz olabilirler, yani tek bir varlık veya kişi onları kontrol etmez ve sansürlemenin neredeyse imkansız olduğu anlamına gelir. Delphi programlama dilini kullanarak Ethereum üzerinde merkeziyetsiz uygulamalar geliştirin ve akıllı sözleşmelerle etkileşime geçin! -## Akıllı Sözleşmeler ve Solidity Dilini Öğrenmeye Başlangıç {#getting-started-with-smart-contracts-and-the-solidity-language} +## Akıllı sözleşmelere ve Solidity diline başlangıç {#getting-started-with-smart-contracts-and-the-solidity-language} **Delphi ve Ethereum'u entegre etmek için ilk adımlarınızı atın** -Başlamadan önce temel bilgilere mi ihtiyacınız var? [ethereum.org/learn](/learn/) veya [ethereum.org/developers](/developers/) adreslerine göz atın. +Başlamadan önce daha temel bir bilgiye mi ihtiyacınız var? [ethereum.org/learn](/learn/) veya [ethereum.org/developers](/developers/) adreslerine göz atın. -- [Blok Zinciri Açıklaması](https://kauri.io/article/d55684513211466da7f8cc03987607d5/blockchain-explained) +- [Blokzincir Açıklaması](https://kauri.io/article/d55684513211466da7f8cc03987607d5/blockchain-explained) - [Akıllı Sözleşmeleri Anlamak](https://kauri.io/article/e4f66c6079e74a4a9b532148d3158188/ethereum-101-part-5-the-smart-contract) - [İlk Akıllı Sözleşmenizi Yazın](https://kauri.io/article/124b7db1d0cf4f47b414f8b13c9d66e2/remix-ide-your-first-smart-contract) - [Solidity'yi Nasıl Derleyeceğinizi ve Dağıtacağınızı Öğrenin](https://kauri.io/article/973c5f54c4434bb1b0160cff8c695369/understanding-smart-contract-compilation-and-deployment) -## Başlangıç Düzeyi Yardımcı Kaynaklar ve Bağlantılar {#beginner-references-and-links} +## Yeni başlayanlar için referanslar ve bağlantılar {#beginner-references-and-links} **Delphereum kütüphanesinin tanıtımı** -- [Delphereum nedir?](https://github.com/svanas/delphereum/blob/master/README.md) -- [Delphi'yi yerel (dahili bellek) bir blok zincirine bağlama](https://medium.com/@svanas/connecting-delphi-to-a-local-in-memory-blockchain-9a1512d6c5b0) -- [Delphi'yi Ethereum Mainnet'e bağlama](https://medium.com/@svanas/connecting-delphi-to-the-ethereum-main-net-5faf1feffd83) -- [Delphi'yi Akıllı Sözleşmelere bağlama](https://medium.com/@svanas/connecting-delphi-to-smart-contracts-3146b12803a1) +- [Delphereum Nedir?](https://github.com/svanas/delphereum/blob/master/README.md) +- [Delphi'yi yerel (bellek içi) bir blokzincire bağlama](https://medium.com/@svanas/connecting-delphi-to-a-local-in-memory-blockchain-9a1512d6c5b0) +- [Delphi'yi Ethereum Ana Ağına Bağlama](https://medium.com/@svanas/connecting-delphi-to-the-ethereum-main-net-5faf1feffd83) +- [Delphi'yi Akıllı Sözleşmelere Bağlama](https://medium.com/@svanas/connecting-delphi-to-smart-contracts-3146b12803a1) **Şimdilik kurulumu bırakıp doğrudan örneklere geçmek ister misiniz?** -- [3 dakikalık bir Akıllı Sözleşme ve Delphi - Bölüm 1](https://medium.com/@svanas/a-3-minute-smart-contract-and-delphi-61d998571d) -- [3 dakikalık bir Akıllı Sözleşme ve Delphi - Bölüm 2](https://medium.com/@svanas/a-3-minute-smart-contract-and-delphi-part-2-446925faa47b) +- [3 Dakikada Akıllı Sözleşme ve Delphi - Bölüm 1](https://medium.com/@svanas/a-3-minute-smart-contract-and-delphi-61d998571d) +- [3 Dakikada Akıllı Sözleşme ve Delphi - Bölüm 2](https://medium.com/@svanas/a-3-minute-smart-contract-and-delphi-part-2-446925faa47b) -## Orta Seviye Makaleler {#intermediate-articles} +## Orta seviye makaleler {#intermediate-articles} -- [Delphi'de Ethereum tarafından imzalanmış bir mesaj imzası oluşturma](https://medium.com/@svanas/generating-an-ethereum-signed-message-signature-in-delphi-75661ce5031b) -- [Delphi ile ether aktarımı](https://medium.com/@svanas/transferring-ether-with-delphi-b5f24b1a98a4) -- [Delphi ile ERC-20 token'larının aktarımı](https://medium.com/@svanas/transferring-erc-20-tokens-with-delphi-bb44c05b295d) +- [Delphi'de Ethereum imzalı bir mesaj imzası oluşturma](https://medium.com/@svanas/generating-an-ethereum-signed-message-signature-in-delphi-75661ce5031b) +- [Delphi ile ether aktarma](https://medium.com/@svanas/transferring-ether-with-delphi-b5f24b1a98a4) +- [Delphi ile ERC-20 jetonlarını aktarma](https://medium.com/@svanas/transferring-erc-20-tokens-with-delphi-bb44c05b295d) -## İleri Düzey Kullanım Şekilleri {#advanced-use-patterns} +## Gelişmiş kullanım kalıpları {#advanced-use-patterns} - [Delphi ve Ethereum İsim Servisi (ENS)](https://medium.com/@svanas/delphi-and-ethereum-name-service-ens-4443cd278af7) - [QuikNode, Ethereum ve Delphi](https://medium.com/@svanas/quiknode-ethereum-and-delphi-f7bfc9671c23) -- [Delphi ve Ethereum Dark Forest](https://svanas.medium.com/delphi-and-the-ethereum-dark-forest-5b430da3ad93) -- [Delphi ile bir token'ı bir başkası için takaslayın](https://svanas.medium.com/swap-one-token-for-another-in-delphi-bcb999c47f7) +- [Delphi ve Ethereum Karanlık Ormanı](https://svanas.medium.com/delphi-and-the-ethereum-dark-forest-5b430da3ad93) +- [Delphi'de bir jetonu diğeriyle takas etme](https://svanas.medium.com/swap-one-token-for-another-in-delphi-bcb999c47f7) -Daha fazla kaynak mı arıyorsunuz? Göz atın: [ethereum.org/developers](/developers/). +Daha fazla kaynak mı arıyorsunuz? [ethereum.org/developers](/developers/) adresine göz atın. diff --git a/public/content/translations/tr/developers/docs/programming-languages/dot-net/index.md b/public/content/translations/tr/developers/docs/programming-languages/dot-net/index.md index f18e158d068..71f94542f22 100644 --- a/public/content/translations/tr/developers/docs/programming-languages/dot-net/index.md +++ b/public/content/translations/tr/developers/docs/programming-languages/dot-net/index.md @@ -1,86 +1,86 @@ --- -title: .NET Geliştiricileri için Ethereum -description: .NET tabanlı projeler ve araçlarla nasıl Ethereum için geliştireceğinizi öğrenin +title: ".Net Geliştiricileri için Ethereum" +description: ".NET tabanlı projeler ve araçlarla nasıl Ethereum için geliştireceğinizi öğrenin" lang: tr incomplete: true --- -.NET tabanlı projeler ve araçlarla nasıl Ethereum için geliştireceğinizi öğrenin +.NET tabanlı projeler ve araçlarla Ethereum için nasıl geliştirme yapacağınızı öğrenin -Ethereum'u, kripto para birimi ve blok zinciri teknolojisinin avantajlarından faydalanan merkeziyetsiz uygulamalar (veya "dapp'ler") oluşturmak için kullanın. Bu dapp'ler güvenilir olabilir, yani Ethereum'a dağıtıldıktan sonra her zaman programlandığı gibi çalışırlar. Yeni tür finansal uygulamalar oluşturmak için dijital varlıkları kontrol edebilirler. Merkeziyetsiz olabilirler, yani hiç bir kurum veya kişi onları kontrol edemez ve sansürlenmeleri neredeyse imkansızdır. +Kripto para birimi ve blok zinciri teknolojisinin faydalarını kullanan merkeziyetsiz uygulamalar (veya "dapp'ler") oluşturmak için Ethereum'u kullanın. Bu dapp'ler güvenilir olabilir, yani Ethereum'a dağıtıldıktan sonra her zaman programlandığı gibi çalışırlar. Yeni tür finansal uygulamalar oluşturmak için dijital varlıkları kontrol edebilirler. Merkeziyetsiz olabilirler, yani tek bir varlık veya kişi onları kontrol etmez ve sansürlemenin neredeyse imkansız olduğu anlamına gelir. Ethereum'un üzerinde merkeziyetsiz uygulamalar oluşturun ve Microsoft teknoloji yığınından araçları ve dilleri kullanarak akıllı sözleşmelerle etkileşim kurun: VSCode ve Visual Studio gibi araçlarda .NET Framework/.NET Core/.NET Standard üzerinde C#, # Visual Basic .NET ve F# desteklenir. Microsoft Azure'ı kullanarak Azure üzerinde bir Ethereum Blok zincirini dakikalar içinde yayınlayın. .NET aşkını Ethereum'a taşıyın! -## Akıllı Sözleşmeler ve Solidity Dilini Öğrenmeye Başlangıç {#getting-started-with-smart-contracts-and-the-solidity-language} +## Akıllı sözleşmelere ve Solidity diline başlangıç {#getting-started-with-smart-contracts-and-the-solidity-language} -**.NET ve Ethereum'u entegre etmek için ilk adımlarınızı atın** +**.NET'i Ethereum ile entegre etmek için ilk adımlarınızı atın** -Başlamadan önce temel bilgilere mi ihtiyacınız var? [ethereum.org/learn](/learn/) veya [ethereum.org/developers](/developers/) adreslerine göz atın. +Başlamadan önce daha temel bir bilgiye mi ihtiyacınız var? [ethereum.org/learn](/learn/) veya [ethereum.org/developers](/developers/) adreslerine göz atın. -- [Blok Zinciri Açıklaması](https://kauri.io/article/d55684513211466da7f8cc03987607d5/blockchain-explained) +- [Blokzincir Açıklaması](https://kauri.io/article/d55684513211466da7f8cc03987607d5/blockchain-explained) - [Akıllı Sözleşmeleri Anlamak](https://kauri.io/article/e4f66c6079e74a4a9b532148d3158188/ethereum-101-part-5-the-smart-contract) - [İlk Akıllı Sözleşmenizi Yazın](https://kauri.io/article/124b7db1d0cf4f47b414f8b13c9d66e2/remix-ide-your-first-smart-contract) -- [Solidity'i Nasıl Derleyeceğinizi ve Dağıtacağınızı Öğrenin](https://kauri.io/article/973c5f54c4434bb1b0160cff8c695369/understanding-smart-contract-compilation-and-deployment) +- [Solidity'yi Nasıl Derleyeceğinizi ve Dağıtacağınızı Öğrenin](https://kauri.io/article/973c5f54c4434bb1b0160cff8c695369/understanding-smart-contract-compilation-and-deployment) -## Başlangıç Düzeyi Yardımcı Kaynaklar ve Bağlantılar {#beginner-references-and-links} +## Yeni başlayanlar için referanslar ve bağlantılar {#beginner-references-and-links} -**Nethereum Kütüphanesi ve VS Code Solidity Tanıtımı** +**Nethereum Kütüphanesi ve VS Code Solidity'i sizlere sunarız** -- [Nethereum'a Başlangıç](https://docs.nethereum.com/en/latest/getting-started/) +- [Nethereum, Başlarken](https://docs.nethereum.com/en/latest/getting-started/) - [VS Code Solidity Kurulumu](https://marketplace.visualstudio.com/items?itemName=JuanBlanco.solidity) -- [Ethereum Akıllı Sözleşmelerini Yaratmak ve Çağırmak için Bir .NET Geliştiricisinin İş Akışı](https://medium.com/coinmonks/a-net-developers-workflow-for-creating-and-calling-ethereum-smart-contracts-44714f191db2) -- [Akıllı Kontratların Nethereum ile entegrasyonu](https://kauri.io/#collections/Getting%20Started/smart-contracts-integration-with-nethereum/#smart-contracts-integration-with-nethereumm) -- [Nethereum ile .NET ve Ethereum Blok Zinciri Akıllı Sözleşmelerinin Arayüzlenmesi](https://medium.com/my-blockchain-development-daily-journey/interfacing-net-and-ethereum-blockchain-smart-contracts-with-nethereum-2fa3729ac933), ayrıca [中文版](https://medium.com/my-blockchain-development-daily-journey/%E4%BD%BF%E7%94%A8nethereum%E9%80%A3%E6%8E%A5-net%E5%92%8C%E4%BB%A5%E5%A4%AA%E7%B6%B2%E5%8D%80%E5%A1%8A%E9%8F%88%E6%99%BA%E8%83%BD%E5%90%88%E7%B4%84-4a96d35ad1e1) dilinde -- [Nethereum - Blok zinciri için açık kaynaklı bir .NET entegrasyon kütüphanesi](https://kauri.io/#collections/a%20hackathon%20survival%20guide/nethereum-an-open-source-.net-integration-library/) -- [Nethereum Kullanarak Ethereum İşlemlerini SQL Database'ine yazmak](https://medium.com/coinmonks/writing-ethereum-transactions-to-sql-database-using-nethereum-fd94e0e4fa36) -- [C# ve VisualStudio kullanarak kolayca Ethereum akıllı sözleşmelerini dağıtmayı görün](https://koukia.ca/deploy-ethereum-smart-contracts-using-c-and-visualstudio-5be188ae928c) +- [Bir .NET Geliştiricisinin Ethereum Akıllı Sözleşmeleri Oluşturma ve Çağırma İş Akışı](https://medium.com/coinmonks/a-net-developers-workflow-for-creating-and-calling-ethereum-smart-contracts-44714f191db2) +- [Nethereum ile akıllı sözleşme entegrasyonu](https://kauri.io/#collections/Getting%20Started/smart-contracts-integration-with-nethereum/#smart-contracts-integration-with-nethereumm) +- [Nethereum ile .NET ve Ethereum Blokzinciri Akıllı Sözleşmelerinin Arayüzlenmesi](https://medium.com/my-blockchain-development-daily-journey/interfacing-net-and-ethereum-blockchain-smart-contracts-with-nethereum-2fa3729ac933), ayrıca [中文版](https://medium.com/my-blockchain-development-daily-journey/%E4%BD%BF%E7%94%A8nethereum%E9%80%A3%E6%8E%A5-net%E5%92%8C%E4%BB%A5%E5%A4%AA%E7%B6%B2%E5%8D%80%E5%A1%8A%E9%8F%88%E6%99%BA%E8%83%BD%E5%90%88%E7%B4%84-4a96d35ad1e1) +- [Nethereum - Blokzinciri için açık kaynaklı bir .NET entegrasyon kütüphanesi](https://kauri.io/#collections/a%20hackathon%20survival%20guide/nethereum-an-open-source-.net-integration-library/) +- [Nethereum Kullanarak Ethereum İşlemlerini SQL Veritabanına Yazma](https://medium.com/coinmonks/writing-ethereum-transactions-to-sql-database-using-nethereum-fd94e0e4fa36) +- [C# ve VisualStudio kullanarak Ethereum akıllı sözleşmelerini kolayca nasıl dağıtacağınızı görün](https://koukia.ca/deploy-ethereum-smart-contracts-using-c-and-visualstudio-5be188ae928c) **Şimdilik kurulumu bırakıp doğrudan örneklere geçmek ister misiniz?** -- [Playground](http://playground.nethereum.com/) - Tarayıcınız aracılığıyla Ethereum'la etkileşime geçin ve Nethereum'u nasıl kullanacağınızı öğrenin. - - Hesap Bakiyesi Sorgusu [C#](http://playground.nethereum.com/csharp/id/1001) [VB.NET](http://playground.nethereum.com/vb/id/2001) - - ERC20 Akıllı Sözleşme Bakiyesi Sorgusu[C#](http://playground.nethereum.com/csharp/id/1005) [VB.NET](http://playground.nethereum.com/vb/id/2004) - - Bir hesaba ether transfer aktarma [C#](http://playground.nethereum.com/csharp/id/1003) [VB.NET](http://playground.nethereum.com/vb/id/2003) - - ... Ve daha fazlası! +- [Playground](http://playground.nethereum.com/) - Tarayıcı üzerinden Ethereum ile etkileşime geçin ve Nethereum'u nasıl kullanacağınızı öğrenin. + - Hesap Bakiyesini Sorgulama [C#](http://playground.nethereum.com/csharp/id/1001) [VB.NET](http://playground.nethereum.com/vb/id/2001) + - ERC20 Akıllı Sözleşme Bakiyesini Sorgulama [C#](http://playground.nethereum.com/csharp/id/1005) [VB.NET](http://playground.nethereum.com/vb/id/2004) + - Bir Hesaba ether Aktarma [C#](http://playground.nethereum.com/csharp/id/1003) [VB.NET](http://playground.nethereum.com/vb/id/2003) + - ... Ve dahası! -## Orta Seviye Makaleler {#intermediate-articles} +## Orta seviye makaleler {#intermediate-articles} - [Nethereum Çalışma Kitabı/Örnek Listesi](http://docs.nethereum.com/en/latest/Nethereum.Workbooks/docs/) -- [Kendi Geliştirici Test Zincirlerinizi Yayınlayın](https://github.com/Nethereum/Testchains) +- [Kendi Geliştirme Test Zincirlerinizi Dağıtma](https://github.com/Nethereum/Testchains) - [Solidity için VSCode Codegen Eklentisi](https://docs.nethereum.com/en/latest/nethereum-codegen-vscodesolidity/) - [Unity ve Ethereum: Neden ve Nasıl](https://www.raywenderlich.com/5509-unity-and-ethereum-why-and-how) -- [Ethereum dapp'leri için ASP.NET Core Web API oluşturun](https://tech-mint.com/blockchain/create-asp-net-core-web-api-for-ethereum-dapps/) -- [Nethereum Web3'ü bir Tedarik Zinciri Takip Sistemi Uygulamak için Kullanmak](http://blog.pomiager.com/post/using-nethereum-web3-to-implement-a-supply-chain-traking-system4) -- [C# Playground örneği](http://playground.nethereum.com/csharp/id/1025) ile [Nethereum Blok İşleme](https://nethereum.readthedocs.io/en/latest/nethereum-block-processing-detail/) -- [Nethereum Websocket Yayını](https://nethereum.readthedocs.io/en/latest/nethereum-subscriptions-streaming/) +- [Ethereum merkeziyetsiz uygulamaları için ASP.NET Core Web API Oluşturma](https://tech-mint.com/blockchain/create-asp-net-core-web-api-for-ethereum-dapps/) +- [Bir Tedarik Zinciri Takip Sistemi Uygulamak için Nethereum Web3 Kullanımı](http://blog.pomiager.com/post/using-nethereum-web3-to-implement-a-supply-chain-traking-system4) +- [Nethereum Blok İşleme](https://nethereum.readthedocs.io/en/latest/nethereum-block-processing-detail/), [C# Playground örneği](http://playground.nethereum.com/csharp/id/1025) ile +- [Nethereum Websocket Akışı](https://nethereum.readthedocs.io/en/latest/nethereum-subscriptions-streaming/) - [Kaleido ve Nethereum](https://kaleido.io/kaleido-and-nethereum/) - [Quorum ve Nethereum](https://github.com/Nethereum/Nethereum/blob/master/src/Nethereum.Quorum/README.md) -## İleri Düzey Kullanım Şekilleri {#advanced-use-patterns} +## Gelişmiş kullanım kalıpları {#advanced-use-patterns} -- [Azure Anahtar Kasası ve Nethereum](https://github.com/Azure-Samples/bc-community-samples/tree/master/akv-nethereum) +- [Azure Key Vault ve Nethereum](https://github.com/Azure-Samples/bc-community-samples/tree/master/akv-nethereum) - [Nethereum.DappHybrid](https://github.com/Nethereum/Nethereum.DappHybrid) - [Ujo Nethereum arka uç referans mimarisi](https://docs.nethereum.com/en/latest/nethereum-ujo-backend-sample/) ## .NET projeleri, araçları ve diğer eğlenceli şeyler {#dot-net-projects-tools-and-other-fun-stuff} - [Nethereum Playground](http://playground.nethereum.com/) - _Tarayıcıda Nethereum kod parçacıklarını derleyin, oluşturun ve çalıştırın_ -- [Nethereum Codegen Blazor](https://github.com/Nethereum/Nethereum.CodeGen.Blazor) - _Blazor'da kullanıcı arayüzü ile Nethereum codegen_ -- [Nethereum Blazor](https://github.com/Nethereum/NethereumBlazor) - _.NET Wasm SPA hafif blok zinciri arayıcısı ve basit cüzdan_ -- [Wonka İş Kuralları Motoru](https://docs.nethereum.com/en/latest/wonka/) - _Kendiliğinden meta veri odaklı bir iş kuralları motoru (hem .NET platformu hem de Ethereum platformu için)_ -- [Nethermind](https://github.com/NethermindEth/nethermind) - _Linux, Windows, MacOs için bir .NET Core Ethereum istemcisi_ +- [Nethereum Codegen Blazor](https://github.com/Nethereum/Nethereum.CodeGen.Blazor) - _Blazor'da kullanıcı arayüzlü Nethereum kod oluşturma_ +- [Nethereum Blazor](https://github.com/Nethereum/NethereumBlazor) - _.NET Wasm SPA hafif bir blokzincir gezgini ve basit cüzdan_ +- [Wonka İş Kuralları Motoru](https://docs.nethereum.com/en/latest/wonka/) - _Doğası gereği meta veri odaklı bir iş kuralları motoru (hem .NET platformu hem de Ethereum platformu için)_ +- [Nethermind](https://github.com/NethermindEth/nethermind) - _Linux, Windows, MacOS için bir .NET Core Ethereum istemcisi_ - [eth-utils](https://github.com/ethereum/eth-utils/) - _Ethereum ile ilgili kod tabanlarıyla çalışmak için yardımcı fonksiyonlar_ -- [TestChains](https://github.com/Nethereum/TestChains) - _Hızlı yanıt için önceden yapılandırılmış .NET aygıtları (PoA)_ +- [TestChains](https://github.com/Nethereum/TestChains) - _Hızlı yanıt için önceden yapılandırılmış .NET geliştirme zincirleri (PoA)_ -Daha fazla kaynak mı arıyorsunuz? Göz atın: [ethereum.org/developers](/developers/). +Daha fazla kaynak mı arıyorsunuz? [ethereum.org/developers](/developers/) adresine göz atın. -## .NET Toplumuna Katkıda Bulunanlar {#dot-net-community-contributors} +## .NET topluluğu katkıda bulunanları {#dot-net-community-contributors} -Nethereum'da çoğu zaman [Gitter](https://gitter.im/Nethereum/Nethereum)'da zaman geçiriyoruz. Burası herkesin kabul edildiği, soru ve cevaplar yazabildiği, yardım alabildiği veya sadece kafa dağıttığı bir yerdir. [Nethereum Github deposunda](https://github.com/Nethereum) bir PR veya bir konu açmaktan veya sadece sahip olduğumuz birçok yan/örnek projeye göz atmaktan çekinmeyin. Ayrıca bizi [Discord](https://discord.gg/jQPrR58FxX) üzerinde de bulabilirsiniz! +Nethereum'da çoğunlukla herkesin soru sorup cevaplayabileceği, yardım alabileceği veya sadece rahatlayabileceği [Gitter](https://gitter.im/Nethereum/Nethereum)'da takılırız. [Nethereum GitHub deposunda](https://github.com/Nethereum) bir PR açmaktan veya bir sorun bildirmekten çekinmeyin, ya da sadece sahip olduğumuz birçok yan/örnek projeye göz atın. Bizi [Discord](https://discord.gg/jQPrR58FxX)'da da bulabilirsiniz! -Eğer Nethermind'da yeniyseniz ve başlamak için yardıma ihtiyaç duyuyorsanız, [Discord](http://discord.gg/PaCMRFdvWT) sunucumuza katılın. Geliştiricilerimiz sorularınızı cevaplamaya hazırdır. [Nethermind Github deposunda](https://github.com/NethermindEth/nethermind) bir PR açmaktan veya konu başlatmaktan çekinmeyin. +Nethermind'de yeniyseniz ve başlamak için yardıma ihtiyacınız varsa, [Discord](http://discord.gg/PaCMRFdvWT) sunucumuza katılın. Geliştiricilerimiz sorularınızı cevaplamaya hazırdır. [Nethermind GitHub deposunda](https://github.com/NethermindEth/nethermind) bir PR açmaktan veya herhangi bir sorun bildirmekten çekinmeyin. -## Diğer Toplu Listeler {#other-aggregated-lists} +## Diğer derlenmiş listeler {#other-aggregated-lists} [Resmi Nethereum Sitesi](https://nethereum.com/) [Resmi Nethermind Sitesi](https://nethermind.io/) diff --git a/public/content/translations/tr/developers/docs/programming-languages/elixir/index.md b/public/content/translations/tr/developers/docs/programming-languages/elixir/index.md new file mode 100644 index 00000000000..2a625d252a3 --- /dev/null +++ b/public/content/translations/tr/developers/docs/programming-languages/elixir/index.md @@ -0,0 +1,55 @@ +--- +title: "Elixir Geliştiricileri için Ethereum" +description: "Elixir tabanlı projeleri ve araçları kullanarak Ethereum için nasıl geliştirme yapacağınızı öğrenin." +lang: tr +incomplete: false +--- + +Elixir tabanlı projeleri ve araçları kullanarak Ethereum için nasıl geliştirme yapacağınızı öğrenin. + +Kripto para birimi ve blok zinciri teknolojisinin faydalarını kullanan merkeziyetsiz uygulamalar (veya "dapp'ler") oluşturmak için Ethereum'u kullanın. Bu dapp'ler güvenilir olabilir, yani Ethereum'a dağıtıldıktan sonra her zaman programlandığı gibi çalışırlar. Yeni tür finansal uygulamalar oluşturmak için dijital varlıkları kontrol edebilirler. Merkeziyetsiz olabilirler, yani tek bir varlık veya kişi onları kontrol etmez ve sansürlemenin neredeyse imkansız olduğu anlamına gelir. + +## Akıllı sözleşmelere ve Solidity diline başlangıç {#getting-started-with-smart-contracts-and-solidity} + +**Elixir'i Ethereum ile entegre etmek için ilk adımlarınızı atın** + +Başlamadan önce daha temel bir bilgiye mi ihtiyacınız var? [ethereum.org/learn](/learn/) veya [ethereum.org/developers](/developers/) adreslerine göz atın. + +- [Blokzincir Açıklaması](https://kauri.io/article/d55684513211466da7f8cc03987607d5/blockchain-explained) +- [Akıllı Sözleşmeleri Anlamak](https://kauri.io/article/e4f66c6079e74a4a9b532148d3158188/ethereum-101-part-5-the-smart-contract) +- [İlk Akıllı Sözleşmenizi Yazın](https://kauri.io/article/124b7db1d0cf4f47b414f8b13c9d66e2/remix-ide-your-first-smart-contract) +- [Solidity'yi Nasıl Derleyeceğinizi ve Dağıtacağınızı Öğrenin](https://kauri.io/article/973c5f54c4434bb1b0160cff8c695369/understanding-smart-contract-compilation-and-deployment) + +## Başlangıç seviyesi makaleler {#beginner-articles} + +- [Sonunda Ethereum hesaplarını anlamak](https://dev.to/q9/finally-understanding-ethereum-accounts-1kpe) +- [Ethers — Elixir için birinci sınıf bir Ethereum Web3 kütüphanesi](https://medium.com/@alisinabh/announcing-ethers-a-first-class-ethereum-web3-library-for-elixir-1d64e9409122) + +## Orta seviye makaleler {#intermediate-articles} + +- [Elixir ile ham Ethereum sözleşme işlemleri nasıl imzalanır](https://kohlerjp.medium.com/how-to-sign-raw-ethereum-contract-transactions-with-elixir-f8822bcc813b) +- [Ethereum Akıllı Sözleşmeleri ve Elixir](https://medium.com/agile-alpha/ethereum-smart-contracts-and-elixir-c7c4b239ddb4) + +## Elixir projeleri ve araçları {#elixir-projects-and-tools} + +### Aktif {#active} + +- [block_keys](https://github.com/ExWeb3/block_keys) - _Elixir'de BIP32 & BIP44 Uygulaması (Deterministik Cüzdanlar için Çoklu Hesap Hiyerarşisi)_ +- [ethereumex](https://github.com/mana-ethereum/ethereumex) - _Ethereum blokzinciri için Elixir JSON-RPC istemcisi_ +- [ethers](https://github.com/ExWeb3/elixir_ethers) - _Elixir kullanarak Ethereum'daki akıllı sözleşmelerle etkileşim kurmak için kapsamlı bir Web3 kütüphanesi_ +- [ethers_kms](https://github.com/ExWeb3/elixir_ethers_kms) - _Ethers için bir KMS imzalayıcı kütüphanesi (AWS KMS ile işlemleri imzala)_ +- [ex_abi](https://github.com/poanetwork/ex_abi) - _Elixir'de Ethereum ABI ayrıştırıcı/kod çözücü/kodlayıcı uygulaması_ +- [ex_keccak](https://github.com/ExWeb3/ex_keccak) - _Bir NIF ile oluşturulmuş tiny-keccak Rust crate'ini kullanarak Keccak SHA3-256 karmalarını hesaplamak için Elixir kütüphanesi_ +- [ex_rlp](https://github.com/mana-ethereum/ex_rlp) - _Ethereum'un RLP (Özyinelemeli Uzunluk Öneki) kodlamasının Elixir uygulaması_ + +### Arşivlenmiş / Artık bakımı yapılmıyor {#archived--no-longer-maintained} + +- [eth](https://hex.pm/packages/eth) - _Elixir için Ethereum yardımcı programları_ +- [exw3](https://github.com/hswick/exw3) - _Elixir için üst düzey Ethereum RPC İstemcisi_ +- [mana](https://github.com/mana-ethereum/mana) - _Elixir ile yazılmış Ethereum tam düğüm uygulaması_ + +Daha fazla kaynak mı arıyorsunuz? [Geliştirici ana sayfamıza](/developers/) göz atın. + +## Elixir topluluğu katkıda bulunanları {#elixir-community-contributors} + +[Elixir Slack #ethereum kanalı](https://elixir-lang.slack.com/archives/C5RPZ3RJL), hızla büyüyen bir topluluğa ev sahipliği yapar ve yukarıdaki projelerden herhangi biri ve ilgili konular hakkındaki tartışmalar için özel bir kaynaktır. diff --git a/public/content/translations/tr/developers/docs/programming-languages/golang/index.md b/public/content/translations/tr/developers/docs/programming-languages/golang/index.md index cfa9a8f4862..2e70aa4e384 100644 --- a/public/content/translations/tr/developers/docs/programming-languages/golang/index.md +++ b/public/content/translations/tr/developers/docs/programming-languages/golang/index.md @@ -1,74 +1,74 @@ --- -title: Go Geliştiricileri için Ethereum -description: Go tabanlı projeler ve araçlarla nasıl Ethereum için geliştireceğinizi öğrenin +title: "Go Geliştiricileri için Ethereum" +description: "Go tabanlı projeler ve araçlarla nasıl Ethereum için geliştireceğinizi öğrenin" lang: tr incomplete: true --- -Go tabanlı projeler ve araçlarla nasıl Ethereum için geliştireceğinizi öğrenin +Go tabanlı projeler ve araçlar kullanarak Ethereum için nasıl geliştirme yapacağınızı öğrenin Ethereum'u, merkeziyetsiz uygulamalar (veya "dapp'ler") oluşturmak için kullanın. Bu dapp'ler güvenilir olabilir, yani Ethereum'a dağıtıldıktan sonra her zaman programlandığı gibi çalışırlar. Merkeziyetsizdirler, yani uçtan uca bir ağda çalışırlar ve tek bir hata noktası yoktur. Hiçbir tekil varlık veya şahıs onları kontrol edemez ve sansürlenmeleri neredeyse imkansızdır. Yeni tür uygulamalar oluşturmak için dijital varlıkları kontrol edebilirler. -## Akıllı sözleşmeler ve Solidity dilini öğrenmeye başlangıç {#getting-started-with-smart-contracts-and-solidity} +## Akıllı sözleşmelere ve Solidity diline başlangıç {#getting-started-with-smart-contracts-and-solidity} **Go ve Ethereum'u entegre etmek için ilk adımlarınızı atın** -Başlamadan önce temel bilgilere mi ihtiyacınız var? [ethereum.org/learn](/learn/) veya [ethereum.org/developers](/developers/) adreslerine göz atın. +Başlamadan önce daha temel bir bilgiye mi ihtiyacınız var? [ethereum.org/learn](/learn/) veya [ethereum.org/developers](/developers/) adreslerine göz atın. -- [Blok Zinciri Açıklaması](https://kauri.io/article/d55684513211466da7f8cc03987607d5/blockchain-explained) +- [Blokzincir Açıklaması](https://kauri.io/article/d55684513211466da7f8cc03987607d5/blockchain-explained) - [Akıllı Sözleşmeleri Anlamak](https://kauri.io/article/e4f66c6079e74a4a9b532148d3158188/ethereum-101-part-5-the-smart-contract) - [İlk Akıllı Sözleşmenizi Yazın](https://kauri.io/article/124b7db1d0cf4f47b414f8b13c9d66e2/remix-ide-your-first-smart-contract) -- [Solidity'i nasıl derleyeceğinizi ve dağıtacağınızı öğrenin](https://kauri.io/article/973c5f54c4434bb1b0160cff8c695369/understanding-smart-contract-compilation-and-deployment) +- [Solidity'yi Nasıl Derleyeceğinizi ve Dağıtacağınızı Öğrenin](https://kauri.io/article/973c5f54c4434bb1b0160cff8c695369/understanding-smart-contract-compilation-and-deployment) - [Sözleşme Öğreticisi](https://github.com/ethereum/go-ethereum/wiki/Contract-Tutorial) -## Başlangıç Seviyesi Makaleler ve Kitaplar {#beginner-articles-and-books} +## Başlangıç seviyesi makaleler ve kitaplar {#beginner-articles-and-books} - [Geth ile Başlarken](https://medium.com/@tzhenghao/getting-started-with-geth-c1a30b8d6458) -- [Ethereum'a bağlanmak için Golang kullanmak](https://www.youtube.com/watch?v=-7uChuO_VzM) -- [Golang Kullanarak Ethereum Akıllı Sözleşmeleri Dağıtmak](https://www.youtube.com/watch?v=pytGqQmDslE) -- [Go ile Ethereum Akıllı Sözleşmelerini Test Etmek ve Dağıtmak için Adım Adım Rehber](https://hackernoon.com/a-step-by-step-guide-to-testing-and-deploying-ethereum-smart-contracts-in-go-9fc34b178d78) -- [eKitap: Go ile Ethereum Geliştirme](https://goethereumbook.org/) - _Go ile Ethereum uygulamaları geliştirin_ +- [Ethereum'a Bağlanmak için Golang Kullanımı](https://www.youtube.com/watch?v=-7uChuO_VzM) +- [Golang Kullanarak Ethereum Akıllı Sözleşmelerini Dağıtma](https://www.youtube.com/watch?v=pytGqQmDslE) +- [Go'da Ethereum Akıllı Sözleşmelerini Test Etmek ve Dağıtmak İçin Adım Adım Kılavuz](https://hackernoon.com/a-step-by-step-guide-to-testing-and-deploying-ethereum-smart-contracts-in-go-9fc34b178d78) +- [e-Kitap: Go ile Ethereum Geliştirme](https://goethereumbook.org/) - _Go ile Ethereum uygulamaları geliştirin_ -## Orta Seviye Makaleler ve Belgeler {#intermediate-articles-and-docs} +## Orta seviye makaleler ve belgeler {#intermediate-articles-and-docs} -- [Go Ethereum Belgeleri](https://geth.ethereum.org/docs/) - _Resmi Ethereum Golang belgeleri_ -- [Erigon'un Programcı Kılavuzu](https://github.com/ledgerwatch/erigon/blob/devel/docs/programmers_guide/guide.md) - _Durum ağacını, çoklu ispatları ve işlem sürecini içeren resimli bir rehber_ +- [Go Ethereum Belgeleri](https://geth.ethereum.org/docs/) - _Resmi Ethereum Golang'ın belgeleri_ +- [Erigon Programcı Kılavuzu](https://github.com/ledgerwatch/erigon/blob/devel/docs/programmers_guide/guide.md) - _Durum ağacı, çoklu kanıtlar ve işlem işlemeyi içeren resimli kılavuz_ - [Erigon ve Durumsuz Ethereum](https://youtu.be/3-Mn7OckSus?t=394) - _2020 Ethereum Topluluk Konferansı (EthCC 3)_ -- [Erigon: Ethereum istemcilerinin optimizasyonu](https://www.youtube.com/watch?v=CSpc1vZQW2Q) - _2018 Devcon 4_ +- [Erigon: Ethereum istemcilerini optimize etme](https://www.youtube.com/watch?v=CSpc1vZQW2Q) - _2018 Devcon 4_ - [Go Ethereum GoDoc](https://godoc.org/github.com/ethereum/go-ethereum) -- [GETH ile Go'da bir dapp oluşturma](https://kauri.io/#collections/A%20Hackathon%20Survival%20Guide/creating-a-dapp-in-go-with-geth/) -- [Golang ve Geth üzerinden Ethereum Private Network ile çalışın](https://myhsts.org/tutorial-learn-how-to-work-with-ethereum-private-network-with-golang-with-geth.php) -- [Go ile Ethereum üzerindeki Solidity sözleşmelerinin birim testi](https://medium.com/coinmonks/unit-testing-solidity-contracts-on-ethereum-with-go-3cc924091281) -- [Geth'i bir kütüphane olarak kullanmak için hızlı bir kaynak](https://medium.com/coinmonks/web3-go-part-1-31c68c68e20e) +- [Geth ile Go'da bir merkeziyetsiz uygulama oluşturma](https://kauri.io/#collections/A%20Hackathon%20Survival%20Guide/creating-a-dapp-in-go-with-geth/) +- [Golang ve Geth ile Ethereum Özel Ağıyla Çalışma](https://myhsts.org/tutorial-learn-how-to-work-with-ethereum-private-network-with-golang-with-geth.php) +- [Go ile Ethereum'daki Solidity sözleşmelerinin birim testi](https://medium.com/coinmonks/unit-testing-solidity-contracts-on-ethereum-with-go-3cc924091281) +- [Geth'i bir kütüphane olarak kullanmak için hızlı başvuru](https://medium.com/coinmonks/web3-go-part-1-31c68c68e20e) -## İleri Düzey Kullanım Şekilleri {#advanced-use-patterns} +## Gelişmiş kullanım kalıpları {#advanced-use-patterns} -- [GETH ile Simüle Edilen Arka Uç](https://kauri.io/#collections/An%20ethereum%20test%20toolkit%20in%20Go/the-geth-simulated-backend/#_top) -- [Ethereum ve Quorum Kullanan Hizmet Blok Zinciri Uygulamaları](https://blockchain.dcwebmakers.com/blockchain-as-a-service-apps-using-ethereum-and-quorum.html) -- [Ethereum Blok Zinciri Uygulamalarında Dağıtılmış Depolama IPFS ve Swarm](https://blockchain.dcwebmakers.com/work-with-distributed-storage-ipfs-and-swarm-in-ethereum.html) -- [Mobil İstemciler: Kütüphaneler ve Inproc Ethereum Düğümleri](https://github.com/ethereum/go-ethereum/wiki/Mobile-Clients:-Libraries-and-Inproc-Ethereum-Nodes) -- [Yerel merkeziyetsiz uygulamalar: Ethereum sözleşmeleri ile Go bağları](https://github.com/ethereum/go-ethereum/wiki/Native-DApps:-Go-bindings-to-Ethereum-contracts) +- [GETH Simüle Edilmiş Arka Uç](https://kauri.io/#collections/An%20ethereum%20test%20toolkit%20in%20Go/the-geth-simulated-backend/#_top) +- [Ethereum ve Quorum Kullanan Hizmet Olarak Blokzincir Uygulamaları](https://blockchain.dcwebmakers.com/blockchain-as-a-service-apps-using-ethereum-and-quorum.html) +- [Ethereum Blokzincir Uygulamalarında Dağıtılmış Depolama IPFS ve Swarm](https://blockchain.dcwebmakers.com/work-with-distributed-storage-ipfs-and-swarm-in-ethereum.html) +- [Mobil İstemciler: Kütüphaneler ve Süreç İçi Ethereum Düğümleri](https://github.com/ethereum/go-ethereum/wiki/Mobile-Clients:-Libraries-and-Inproc-Ethereum-Nodes) +- [Yerel merkeziyetsiz uygulamalar: Ethereum sözleşmelerine Go bağlantıları](https://github.com/ethereum/go-ethereum/wiki/Native-DApps:-Go-bindings-to-Ethereum-contracts) ## Go projeleri ve araçları {#go-projects-and-tools} - [Geth / Go Ethereum](https://github.com/ethereum/go-ethereum) - _Ethereum protokolünün resmi Go uygulaması_ -- [Go Ethereum Kodu Analizi](https://github.com/ZtesoftCS/go-ethereum-code-analysis) - _Go Ethereum kaynak kodunun incelenmesi ve analizi_ -- [Erigon](https://github.com/ledgerwatch/erigon) - _Arşiv düğümlerine odaklanan, Go Ethereum'un daha hızlı türevi_ -- [Golem](https://github.com/golemfactory/golem) - _Golem, bilgi işlem gücü için küresel bir pazar oluşturuyor_ -- [Quorum](https://github.com/jpmorganchase/quorum) - _İzin verilen veri gizliliğini destekleyen Ethereum uygulaması_ -- [Prysm](https://github.com/prysmaticlabs/prysm) - _Ethereum "Serenity" 2.0 Go Uygulaması_ -- [Eth Tweet](https://github.com/yep/eth-tweet) - _Merkeziyetsiz Twitter: Ethereum blok zincirinde çalışan bir mikroblog hizmeti_ -- [Plazma MVP Golang](https://github.com/kyokan/plasma) - _Golang uygulaması ve Minimum Uygulanabilir Plazma şartnamesinin eki_ +- [Go Ethereum Kod Analizi](https://github.com/ZtesoftCS/go-ethereum-code-analysis) - _Go Ethereum kaynak kodunun incelenmesi ve analizi_ +- [Erigon](https://github.com/ledgerwatch/erigon) - _Go Ethereum'un arşiv düğümlerine odaklanan daha hızlı bir türevi_ +- [Golem](https://github.com/golemfactory/golem) - _Golem, bilgi işlem gücü için küresel bir pazar yaratıyor_ +- [Quorum](https://github.com/jpmorganchase/quorum) - _Veri gizliliğini destekleyen, Ethereum'un izinli bir uygulaması_ +- [Prysm](https://github.com/prysmaticlabs/prysm) - _Ethereum 'Serenity' 2.0 Go Uygulaması_ +- [Eth Tweet](https://github.com/yep/eth-tweet) - _Merkeziyetsiz Twitter: Ethereum blokzincirinde çalışan bir mikroblog hizmeti_ +- [Plasma MVP Golang](https://github.com/kyokan/plasma) — _Minimum Uygulanabilir Plazma spesifikasyonunun Golang uygulaması ve uzantısı_ - [Açık Ethereum Madencilik Havuzu](https://github.com/sammy007/open-ethereum-pool) - _Açık kaynaklı bir Ethereum madencilik havuzu_ -- [Ethereum HD Cüzdan](https://github.com/miguelmota/go-ethereum-hdwallet) - _Go'daki Ethereum HD Cüzdan türevleri_ -- [Multi Geth](https://github.com/multi-geth/multi-geth) - _Pek çok Ethereum ağ türü için destek_ -- [Geth Hafif İstemci](https://github.com/zsfelfoldi/go-ethereum/wiki/Geth-Light-Client) - _Hafif Ethereum Alt Protokolünün Geth uygulaması_ -- [Ethereum Golang SDK](https://github.com/everFinance/goether) - _Golang'da Basit bir Ethereum cüzdan uygulaması ve faydaları_ -- [Covalent Golang SDK](https://github.com/covalenthq/covalent-api-sdk-go) - _200'den fazla blokzincir için Go SDK aracılığıyla verimli blokzincir verileri erişimi_ +- [Ethereum HD Cüzdanı](https://github.com/miguelmota/go-ethereum-hdwallet) - _Go'da Ethereum HD Cüzdan türevleri_ +- [Multi Geth](https://github.com/multi-geth/multi-geth) - _Birçok Ethereum ağı türü için destek_ +- [Geth Hafif İstemci](https://github.com/zsfelfoldi/go-ethereum/wiki/Geth-Light-Client) - _Hafif Ethereum Alt Protokolü'nün Geth uygulaması_ +- [Ethereum Golang SDK](https://github.com/everFinance/goether) - _Golang'da basit bir Ethereum cüzdanı uygulaması ve yardımcı programları_ +- [Covalent Golang SDK](https://github.com/covalenthq/covalent-api-sdk-go) - _200'den fazla blokzincir için Go SDK aracılığıyla verimli blokzincir veri erişimi_ -Daha fazla kaynak mı arıyorsunuz? Göz atın: [ethereum.org/developers](/developers/). +Daha fazla kaynak mı arıyorsunuz? [ethereum.org/developers](/developers/) adresine göz atın -## Go topluluğuna katkıda bulunanlar {#go-community-contributors} +## Go topluluğu katkıda bulunanları {#go-community-contributors} - [Geth Discord](https://discordapp.com/invite/nthXNEv) - [Geth Gist](https://gitter.im/ethereum/go-ethereum) @@ -76,9 +76,9 @@ Daha fazla kaynak mı arıyorsunuz? Göz atın: [ethereum.org/developers](/devel - [StackExchange - Ethereum](https://ethereum.stackexchange.com/) - [Multi Geth Gitter](https://gitter.im/ethoxy/multi-geth) - [Ethereum Gitter](https://gitter.im/ethereum/home) -- [Geth hafif İstemci Gitter](https://gitter.im/ethereum/light-client) +- [Geth Hafif İstemci Gitter](https://gitter.im/ethereum/light-client) -## Diğer toplu listeler {#other-aggregated-lists} +## Diğer derlenmiş listeler {#other-aggregated-lists} - [Awesome Ethereum](https://github.com/btomashvili/awesome-ethereum) -- [Consensys: Ethereum Geliştirici Araçlarının Eksiksiz Listesi](https://media.consensys.net/an-definitive-list-of-ethereum-developer-tools-2159ce865974) | [GitHub kaynağı](https://github.com/ConsenSys/ethereum-developer-tools-list) +- [Consensys: Ethereum Geliştirici Araçlarının Kesin Listesi](https://media.consensys.net/an-definitive-list-of-ethereum-developer-tools-2159ce865974) | [GitHub kaynağı](https://github.com/ConsenSys/ethereum-developer-tools-list) diff --git a/public/content/translations/tr/developers/docs/programming-languages/index.md b/public/content/translations/tr/developers/docs/programming-languages/index.md index 39c42c92e18..f37a1d19a04 100644 --- a/public/content/translations/tr/developers/docs/programming-languages/index.md +++ b/public/content/translations/tr/developers/docs/programming-languages/index.md @@ -1,10 +1,11 @@ --- title: Programlama dilleri -description: +description: "JavaScript, Python, Go, Rust ve daha fazlası dâhil olmak üzere çeşitli programlama dilleri için Ethereum geliştirme kaynaklarını keşfedin." lang: tr --- -Geliştiricilerin, Ethereum üzerinde inşa etmek için [akıllı sözleşmeler](/developers/docs/smart-contracts/) yazması gerektiği yaygın bir yanlış anlaşılmadır. Bu yanlıştır. Ethereum ağı ve topluluğunun güzelliklerinden biri, herhangi bir programlama dilinde [katılım](/community/) sağlayabilmenizdir. +Geliştiricilerin, Ethereum üzerinde inşa etmek için [akıllı sözleşmeler](/developers/docs/smart-contracts/) yazması gerektiği yaygın bir yanlış anlaşılmadır. Bu yanlıştır. +Ethereum ağının ve topluluğunun güzelliklerinden biri, neredeyse her programlama diliyle [katılabilmenizdir](/community/). Ethereum ve topluluğu açık kaynak ile iç içecidir. Geniş bir dil yelpazesinde topluluk projeleri; istemci uygulamaları, API'ler, geliştirme çerçeveleri, test araçları bulabilirsiniz. @@ -14,16 +15,18 @@ Projeler, kaynaklar ve sanal topluluklar bulmak için tercih ettiğiniz programl - [Dart geliştiricileri için Ethereum](/developers/docs/programming-languages/dart/) - [Delphi geliştiricileri için Ethereum](/developers/docs/programming-languages/delphi/) -- [.Net Geliştiricileri için Ethereum](/developers/docs/programming-languages/dot-net/) -- [Go Geliştiricileri için Ethereum](/developers/docs/programming-languages/golang/) -- [Java Geliştiricileri için Ethereum](/developers/docs/programming-languages/java/) -- [Javascript Geliştiricileri için Ethereum](/developers/docs/programming-languages/javascript/) -- [Python Geliştiricileri için Ethereum](/developers/docs/programming-languages/python/) +- [.NET geliştiricileri için Ethereum](/developers/docs/programming-languages/dot-net/) +- [Elixir geliştiricileri için Ethereum](/developers/docs/programming-languages/elixir/) +- [Go geliştiricileri için Ethereum](/developers/docs/programming-languages/golang/) +- [Java geliştiricileri için Ethereum](/developers/docs/programming-languages/java/) +- [JavaScript geliştiricileri için Ethereum](/developers/docs/programming-languages/javascript/) +- [Python geliştiricileri için Ethereum](/developers/docs/programming-languages/python/) - [Ruby geliştiricileri için Ethereum](/developers/docs/programming-languages/ruby/) -- [Rust Geliştiricileri için Ethereum](/developers/docs/programming-languages/rust/) +- [Rust geliştiricileri için Ethereum](/developers/docs/programming-languages/rust/) -### Konuştuğunuz dil desteklenmiyorsa {#other-lang} +### Ya diliniz desteklenmiyorsa? {#other-lang} -Eğer ek bir programlama dili için kaynaklara yönlendirmek veya sanal bir topluluğa işaret etmek istiyorsanız [bir konu açarak](https://github.com/ethereum/ethereum-org-website/issues/new/choose) yeni bir sayfa talep edebilirsiniz. +Ek bir programlama dili için kaynaklara bağlantı vermek veya sanal bir topluluğa yönlendirmek istiyorsanız [bir konu açarak](https://github.com/ethereum/ethereum-org-website/issues/new/choose) yeni bir sayfa talep edebilirsiniz. -Eğer sadece şu anda desteklenmeyen bir dilde blok zinciri arayüzünde bir kod yazmak istiyorsanız Ethereum ağına bağlanmak için [JSON-RPC arayüzünü](/developers/docs/apis/json-rpc/) kullanabilirsiniz. TCP/IP kullanabilen herhangi bir programlama dili bu arayüzü kullanabilir. +Eğer sadece şu anda desteklenmeyen bir dil kullanarak blokzincir ile arayüz oluşturmak için kod yazmak istiyorsanız, +Ethereum ağına bağlanmak için [JSON-RPC arayüzünü](/developers/docs/apis/json-rpc/) kullanabilirsiniz. TCP/IP kullanabilen herhangi bir programlama dili bu arayüzü kullanabilir. diff --git a/public/content/translations/tr/developers/docs/programming-languages/java/index.md b/public/content/translations/tr/developers/docs/programming-languages/java/index.md index d386f819ef2..953180979e1 100644 --- a/public/content/translations/tr/developers/docs/programming-languages/java/index.md +++ b/public/content/translations/tr/developers/docs/programming-languages/java/index.md @@ -1,61 +1,62 @@ --- -title: Java geliştiricileri için Ethereum -description: Java tabanlı projeler ve araçlarla nasıl Ethereum için geliştireceğinizi öğrenin +title: "Java Geliştiricileri için Ethereum" +description: "Java tabanlı projeler ve araçlarla nasıl Ethereum için geliştireceğinizi öğrenin" lang: tr incomplete: true --- -Java tabanlı projeler ve araçlarla nasıl Ethereum için geliştireceğinizi öğrenin +Java tabanlı projeler ve araçlar kullanarak Ethereum için nasıl geliştirme yapacağınızı öğrenin -Ethereum'u, kripto para birimi ve blok zinciri teknolojisinin faydalarını kullanan merkeziyetsiz uygulamalar (veya "dapp'ler") oluşturmak için kullanın. Bu dapp'ler güvenilir olabilir, yani Ethereum'a dağıtıldıktan sonra her zaman programlandığı gibi çalışırlar. Yeni tür finansal uygulamalar oluşturmak için dijital varlıkları kontrol edebilirler. Merkeziyetsiz olabilirler, yani hiç bir kurum veya kişi onları kontrol edemez ve sansürlenmeleri neredeyse imkansızdır. +Kripto para birimi ve blok zinciri teknolojisinin faydalarını kullanan merkeziyetsiz uygulamalar (veya "dapp'ler") oluşturmak için Ethereum'u kullanın. Bu dapp'ler güvenilir olabilir, yani Ethereum'a dağıtıldıktan sonra her zaman programlandığı gibi çalışırlar. Yeni tür finansal uygulamalar oluşturmak için dijital varlıkları kontrol edebilirler. Merkeziyetsiz olabilirler, yani tek bir varlık veya kişi onları kontrol etmez ve sansürlemenin neredeyse imkansız olduğu anlamına gelir. -## Akıllı sözleşmeler ve Solidity dilini öğrenmeye başlangıç {#getting-started-with-smart-contracts-and-solidity} +## Akıllı sözleşmelere ve Solidity diline başlangıç {#getting-started-with-smart-contracts-and-solidity} **Java ve Ethereum'u entegre etmek için ilk adımlarınızı atın** -Başlamadan önce temel bilgilere mi ihtiyacınız var? [ethereum.org/learn](/learn/) veya [ethereum.org/developers](/developers/) adreslerine göz atın. +Başlamadan önce daha temel bir bilgiye mi ihtiyacınız var? [ethereum.org/learn](/learn/) veya [ethereum.org/developers.](/developers/) adreslerine göz atın. -- [Blok Zinciri Açıklaması](https://kauri.io/article/d55684513211466da7f8cc03987607d5/blockchain-explained) +- [Blokzincir Açıklaması](https://kauri.io/article/d55684513211466da7f8cc03987607d5/blockchain-explained) - [Akıllı Sözleşmeleri Anlamak](https://kauri.io/article/e4f66c6079e74a4a9b532148d3158188/ethereum-101-part-5-the-smart-contract) - [İlk Akıllı Sözleşmenizi Yazın](https://kauri.io/article/124b7db1d0cf4f47b414f8b13c9d66e2/remix-ide-your-first-smart-contract) - [Solidity'yi Nasıl Derleyeceğinizi ve Dağıtacağınızı Öğrenin](https://kauri.io/article/973c5f54c4434bb1b0160cff8c695369/understanding-smart-contract-compilation-and-deployment) -## Ethereum müşterileri ile çalışma {#working-with-ethereum-clients} +## Ethereum istemcileriyle çalışma {#working-with-ethereum-clients} -İki öncü Java Ethereum istemcisi olan [Web3J](https://github.com/web3j/web3j) ve Hyperledger Besu'nun kullanımını öğrenin +İki öncü Java Ethereum istemcisi olan [Web3J](https://github.com/web3j/web3j) ve Hyperledger Besu'nun nasıl kullanılacağını öğrenin. -- [Java, Eclipse ve Web3J ile bir Ethereum istemcisine bağlanmak](https://kauri.io/article/b9eb647c47a546bc95693acc0be72546/connecting-to-an-ethereum-client-with-java-eclipse-and-web3j) -- [Bir Ethereum hesabını Java ve Web3j ile yönetin](https://kauri.io/article/925d923e12c543da9a0a3e617be963b4/manage-an-ethereum-account-with-java-and-web3j) -- [Akıllı Sözleşmenizden bir Java Paketleyicisi oluşturun](https://kauri.io/article/84475132317d4d6a84a2c42eb9348e4b/generate-a-java-wrapper-from-your-smart-contract) -- [Bir Ethereum Akıllı Sözleşmesiyle etkileşime girmek](https://kauri.io/article/14dc434d11ef4ee18bf7d57f079e246e/interacting-with-an-ethereum-smart-contract-in-java) -- [Ethereum Akıllı Sözleşmesi Olaylarını Dinlemek](https://kauri.io/article/760f495423db42f988d17b8c145b0874/listening-for-ethereum-smart-contract-events-in-java) -- [Java Ethereum İstemcisi olan Besu'yu (Pantheon) Linux'la kullanmak](https://kauri.io/article/276dd27f1458443295eea58403fd6965/using-pantheon-the-java-ethereum-client-with-linux) +- [Java, Eclipse ve Web3J ile bir Ethereum istemcisine bağlanma](https://kauri.io/article/b9eb647c47a546bc95693acc0be72546/connecting-to-an-ethereum-client-with-java-eclipse-and-web3j) +- [Java ve Web3j ile bir Ethereum hesabını yönetme](https://kauri.io/article/925d923e12c543da9a0a3e617be963b4/manage-an-ethereum-account-with-java-and-web3j) +- [Akıllı Sözleşmenizden bir Java Sarmalayıcı oluşturma](https://kauri.io/article/84475132317d4d6a84a2c42eb9348e4b/generate-a-java-wrapper-from-your-smart-contract) +- [Bir Ethereum Akıllı Sözleşmesi ile Etkileşim Kurma](https://kauri.io/article/14dc434d11ef4ee18bf7d57f079e246e/interacting-with-an-ethereum-smart-contract-in-java) +- [Ethereum Akıllı Sözleşme Olaylarını Dinleme](https://kauri.io/article/760f495423db42f988d17b8c145b0874/listening-for-ethereum-smart-contract-events-in-java) +- [Linux ile Java Ethereum İstemcisi Besu'yu (Pantheon) Kullanma](https://kauri.io/article/276dd27f1458443295eea58403fd6965/using-pantheon-the-java-ethereum-client-with-linux) - [Java Entegrasyon Testlerinde Hyperledger Besu (Pantheon) Düğümü Çalıştırma](https://kauri.io/article/7dc3ecc391e54f7b8cbf4e5fa0caf780/running-a-pantheon-node-in-java-integration-tests) -- [Web3j Kopya Kağıdı](https://kauri.io/web3j-cheat-sheet-(java-ethereum)/5dfa1ea941ac3d0001ce1d90/c) +- [Web3j Kopya Kağıdı](https://kauri.io/web3j-cheat-sheet-\(java-ethereum\)/5dfa1ea941ac3d0001ce1d90/c) -EVM tabanlı blokzincirlerle etkileşim için asenkron, yüksek performanslı bir Kotlin kütüphanesi olan [ethers-kt](https://github.com/Kr1ptal/ethers-kt)'yi nasıl kullanacağınızı öğrenin. JVM ve Android platformlarını hedefler. -- [ERC20 jetonlarını transfer etme](https://github.com/Kr1ptal/ethers-kt/blob/master/examples/src/main/kotlin/io/ethers/examples/abi/TransferERC20.kt) +EVM tabanlı blokzincirlerle etkileşim kurmak için kullanılan, asenkron ve yüksek performanslı bir Kotlin kütüphanesi olan [ethers-kt](https://github.com/Kr1ptal/ethers-kt)'yi nasıl kullanacağınızı öğrenin. JVM ve Android platformlarını hedefler. + +- [ERC20 jetonlarını aktarma](https://github.com/Kr1ptal/ethers-kt/blob/master/examples/src/main/kotlin/io/ethers/examples/abi/TransferERC20.kt) - [Olay dinleme ile UniswapV2 takası](https://github.com/Kr1ptal/ethers-kt/blob/master/examples/src/main/kotlin/io/ethers/examples/tokenswapwitheventlistening/TokenSwapWithEventListening.kt) -- [ETH/ERC20 bakiye izleyicisi](https://github.com/Kr1ptal/ethers-kt/blob/master/examples/src/main/kotlin/io/ethers/examples/balancetracker/BalanceTracker.kt) +- [ETH / ERC20 bakiye izleyici](https://github.com/Kr1ptal/ethers-kt/blob/master/examples/src/main/kotlin/io/ethers/examples/balancetracker/BalanceTracker.kt) ## Orta seviye makaleler {#intermediate-articles} -- [IPFS ile bir Java uygulamasında depolama yönetimi](https://kauri.io/article/3e8494f4f56f48c4bb77f1f925c6d926/managing-storage-in-a-java-application-with-ipfs) -- [ERC20 token'larını Java'da Web3j ile yönetin](https://kauri.io/article/d13e911bbf624108b1d5718175a5e0a0/manage-erc20-tokens-in-java-with-web3j) +- [IPFS ile bir Java uygulamasında depolama alanını yönetme](https://kauri.io/article/3e8494f4f56f48c4bb77f1f925c6d926/managing-storage-in-a-java-application-with-ipfs) +- [Web3j ile Java'da ERC20 jetonlarını yönetme](https://kauri.io/article/d13e911bbf624108b1d5718175a5e0a0/manage-erc20-tokens-in-java-with-web3j) - [Web3j İşlem Yöneticileri](https://kauri.io/article/4cb780bb4d0846438d11885a25b6d7e7/web3j-transaction-managers) -## İleri Düzey Kullanım Şekilleri {#advanced-use-patterns} +## Gelişmiş kullanım kalıpları {#advanced-use-patterns} -- [Java akıllı sözleşmesi veri önbelleği oluşturmak için Eventeum'u kullanma](https://kauri.io/article/fe81ee9612eb4e5a9ab72790ef24283d/using-eventeum-to-build-a-java-smart-contract-data-cache) +- [Bir Java akıllı sözleşme veri önbelleği oluşturmak için Eventeum'u kullanma](https://kauri.io/article/fe81ee9612eb4e5a9ab72790ef24283d/using-eventeum-to-build-a-java-smart-contract-data-cache) ## Java projeleri ve araçları {#java-projects-and-tools} -- [Web3J (Ethereum İstemcileriyle Etkileşim Kütüphanesi)](https://github.com/web3j/web3j) -- [ethers-kt (Async, EVM tabanlı blokzincirler için yüksek performanslı Kotlin/Java/Android kütüphanesi.)](https://github.com/Kr1ptal/ethers-kt) +- [Web3J (Ethereum İstemcileriyle Etkileşim Kurma Kütüphanesi)](https://github.com/web3j/web3j) +- [ethers-kt (EVM tabanlı blokzincirler için asenkron, yüksek performanslı Kotlin/Java/Android kütüphanesi.)](https://github.com/Kr1ptal/ethers-kt) - [Eventeum (Olay Dinleyici)](https://github.com/ConsenSys/eventeum) - [Mahuta (IPFS Geliştirici Araçları)](https://github.com/ConsenSys/mahuta) -Daha fazla kaynak mı arıyorsunuz? Göz atın: [ethereum.org/developers](/developers/). +Daha fazla kaynak mı arıyorsunuz? [ethereum.org/developers.](/developers/) adresine göz atın. ## Java topluluğuna katkıda bulunanlar {#java-community-contributors} diff --git a/public/content/translations/tr/developers/docs/programming-languages/javascript/index.md b/public/content/translations/tr/developers/docs/programming-languages/javascript/index.md index 6fd51eef13f..b81b82c05a8 100644 --- a/public/content/translations/tr/developers/docs/programming-languages/javascript/index.md +++ b/public/content/translations/tr/developers/docs/programming-languages/javascript/index.md @@ -1,38 +1,39 @@ --- -title: Javascript geliştiricileri için Ethereum -description: JavaScript tabanlı projeler ve araçlarla nasıl Ethereum için geliştireceğinizi öğrenin. +title: "Javascript geliştiricileri için Ethereum" +description: "JavaScript tabanlı projeler ve araçlarla nasıl Ethereum için geliştireceğinizi öğrenin." lang: tr --- -JavaScript, Ethereum ekosistemindeki en popüler diller arasındadır. Hatta Ethereum'u mümkün olduğunca JavaScript'e taşımaya adanmış bir [ekip](https://github.com/ethereumjs) bulunuyor. +JavaScript, Ethereum ekosistemindeki en popüler diller arasındadır. Aslında, Ethereum'u mümkün olduğunca JavaScript'e getirmeye adanmış bir [ekip](https://github.com/ethereumjs) var. -Yığının her seviyesinde JavaScript (veya benzer bir şey) yazma [fırsatları bulunur](/developers/docs/ethereum-stack/). +Yığının [her seviyesinde](/developers/docs/ethereum-stack/) JavaScript (veya benzeri bir şey) yazma fırsatları bulunur. -## Ethereum ile etkileşime gir {#interact-with-ethereum} +## Ethereum ile Etkileşim {#interact-with-ethereum} -### Javascript API kütüphaneleri {#javascript-api-libraries} +### JavaScript API Kütüphaneleri {#javascript-api-libraries} -Eğer blok zincirini sorgulamak için JavaScript yazmak isterseniz, işlemleri göndermenin ve daha fazlasını yapmanın en uygun yolu bir [JavaScript API kütüphanesi kullanmaktır](/developers/docs/apis/javascript/). Bu API'ler, geliştiricilerin [ Ethereum ağındaki düğümlerle](/developers/docs/nodes-and-clients/) kolayca etkileşim kurmasına olanak tanır. +Blokzincirini sorgulamak, işlem göndermek ve daha fazlası için JavaScript yazmak isterseniz, bunu yapmanın en uygun yolu bir [JavaScript API kütüphanesi](/developers/docs/apis/javascript/) kullanmaktır. Bu API'ler, geliştiricilerin [Ethereum ağındaki düğümlerle](/developers/docs/nodes-and-clients/) kolayca etkileşim kurmasına olanak tanır. Bu kütüphaneleri Ethereum'daki akıllı sözleşmelerle etkileşim kurmak için kullanabilirsiniz, böylece önceden var olan sözleşmelerle etkileşim kurmak için JavaScript'i kullandığınız merkeziyetsiz bir uygulama oluşturmak mümkündür. **Göz atın** -- [Web3.js](https://web3js.readthedocs.io/) -- [Ethers.js](https://docs.ethers.io/) _– JavaScript ve TypeScript'te Ethereum cüzdan uygulamasına yardımcı araçları içerir._ -- [viem](https://viem.sh) – Ethereum ile etkileşime geçmek için düşük seviye durumsuz temeller sağlayan Ethereum için bir TypeScript arayüzü. +- [Web3.js](https://web3js.readthedocs.io) +- [Ethers.js](https://ethers.org) – _JavaScript ve TypeScript'te Ethereum cüzdanı uygulaması ve yardımcı programlarını içerir._ +- [viem](https://viem.sh) – _Ethereum ile etkileşime geçmek için düşük seviyeli, durumsuz temeller sağlayan, Ethereum için bir TypeScript Arayüzü._ +- [Drift](https://ryangoree.github.io/drift/) – _web3 kütüphaneleri genelinde zahmetsiz Ethereum geliştirmesi için yerleşik önbelleğe alma, kancalar ve test taklitleri içeren bir TypeScript meta kütüphanesi._ ### Akıllı sözleşmeler {#smart-contracts} -Eğer bir JavaScript geliştiricisiyseniz ve kendi akıllı sözleşmenizi yazmak istiyorsanız, [Solidity](https://solidity.readthedocs.io) ile bilgi sahibi olmak isteyebilirsiniz. Bu en popüler akıllı sözleşme dilidir ve sözdizimsel olarak JavaScript'e benzer, bu da öğrenmeyi kolaylaştırabilir. +Bir JavaScript geliştiricisiyseniz ve kendi akıllı sözleşmenizi yazmak istiyorsanız [Solidity](https://solidity.readthedocs.io) ile tanışmak isteyebilirsiniz. Bu en popüler akıllı sözleşme dilidir ve sözdizimsel olarak JavaScript'e benzer, bu da öğrenmeyi kolaylaştırabilir. -[Akıllı sözleşmeler](/developers/docs/smart-contracts/) hakkında daha fazla bilgi. +[Akıllı sözleşmeler](/developers/docs/smart-contracts/) hakkında daha fazlası. -## Protokolü anlamak {#understand-the-protocol} +## Protokolü Anlamak {#understand-the-protocol} -### Ethereum sanal makinesi {#the-ethereum-virtual-machine} +### Ethereum Sanal Makinesi {#the-ethereum-virtual-machine} -[Ethereum'un sanal makinesinin](/developers/docs/evm/) bir JavaScript uygulaması bulunuyor. Bu uygulama, en güncel çatallanma kurallarını destekler. Çatallanma kuralları, planlanan yükseltmelerin bir sonucu olarak EVM'de yapılan değişiklikleri ifade eder. +[Ethereum'un sanal makinesinin](/developers/docs/evm/) bir JavaScript uygulaması mevcuttur. Bu uygulama, en güncel çatallanma kurallarını destekler. Çatallanma kuralları, planlanan yükseltmelerin bir sonucu olarak EVM'de yapılan değişiklikleri ifade eder. Daha iyi anlamak için kontrol edebileceğiniz çeşitli JavaScript paketlerine ayrılmıştır: @@ -46,28 +47,26 @@ Bu, "bir hesabın veri yapısının ne olduğu" gibi şeyleri anlamanıza yardı Kodu okumayı tercih ediyorsanız, JavaScript belgelerimizi okumak sizin için harika bir alternatif olabilir. -**Şu monorepo'ya (tek depo) göz atın:** -[`ethereumjs`](https://github.com/ethereumjs/ethereumjs-vm) +**EVM'ye göz atın** +[`@ethereumjs/evm`](https://github.com/ethereumjs/ethereumjs-monorepo/tree/master/packages/evm) -### Düğümler ve istemciler {#nodes-and-clients} +### Düğümler ve İstemciler {#nodes-and-clients} Ethereum istemcilerinin nasıl çalıştığını anladığınız bir dilde inceleyebileceğiniz bir Ethereumjs istemcisi geliştirilmektedir; JavaScript! -Daha önce bağımsız bir [`kılavuzda`](https://github.com/ethereumjs/ethereumjs-client) barındırılıyordu, ancak daha sonra bir paket olarak EthereumVM monorepo ile birleştirildi. +**İstemciye göz atın** +[`@ethereumjs/client`](https://github.com/ethereumjs/ethereumjs-monorepo/tree/master/packages/client) -**Şu istemciye göz atın:** -[`ethereumjs-client`](https://github.com/ethereumjs/ethereumjs-monorepo/tree/master/packages/client) - -## Diğer projeler {#other-projects} +## Diğer Projeler {#other-projects} Ethereum JavaScript alanında aşağıdakiler de dahil olmak üzere pek çok başka şey oluyor: - cüzdan yardımcı programlarının kütüphaneleri. - Ethereum anahtarları oluşturmak, bunları içe ve dışa aktarmak için araçlar. -- Ethereum sarı kağıdında açıklanan `merkle-patricia-tree` veri yapısının bir uygulaması. +- Ethereum sarı bülteninde ana hatları verilen `merkle-patricia-tree` veri yapısının bir uygulaması. [EthereumJS deposunda](https://github.com/ethereumjs) en çok ilginizi çeken şeyleri inceleyin -## 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/programming-languages/python/index.md b/public/content/translations/tr/developers/docs/programming-languages/python/index.md index e2a4bd6e1d1..e1a1a85dfa4 100644 --- a/public/content/translations/tr/developers/docs/programming-languages/python/index.md +++ b/public/content/translations/tr/developers/docs/programming-languages/python/index.md @@ -1,90 +1,99 @@ --- -title: Python Geliştiricileri için Ethereum -description: Python tabanlı projeler ve araçlarla nasıl Ethereum için geliştireceğinizi öğrenin +title: "Python Geliştiricileri için Ethereum" +description: "Ethereum için Python temelli projeler ve araçları kullanarak nasıl geliştireceğinizi öğrenin" lang: tr incomplete: true --- -Python tabanlı projeler ve araçlar kullanarak Ethereum için nasıl geliştirme yapacağınızı öğrenin +Python tabanlı projeleri ve araçları kullanarak Ethereum için nasıl geliştirme yapacağınızı öğrenin -Use Ethereum to create decentralized applications (or "dapps") that utilize the benefits of cryptocurrency and blockchain technology. Bu dapp'ler güvenilir olabilir, yani Ethereum'a dağıtıldıktan sonra her zaman programlandığı gibi çalışırlar. Yeni tür finansal uygulamalar oluşturmak için dijital varlıkları kontrol edebilirler. Merkeziyetsiz olabilirler, yani hiç bir kurum veya kişi onları kontrol edemez ve sansürlenmeleri neredeyse imkansızdır. +Kripto para birimi ve blok zinciri teknolojisinin faydalarını kullanan merkeziyetsiz uygulamalar (veya "dapp'ler") oluşturmak için Ethereum'u kullanın. Bu dapp'ler güvenilir olabilir, yani Ethereum'a dağıtıldıktan sonra her zaman programlandığı gibi çalışırlar. Yeni tür finansal uygulamalar oluşturmak için dijital varlıkları kontrol edebilirler. Merkeziyetsiz olabilirler, yani tek bir varlık veya kişi onları kontrol etmez ve sansürlemenin neredeyse imkansız olduğu anlamına gelir. -## Akıllı Sözleşmeler ve Solidity Dilini Öğrenmeye Başlangıç {#getting-started-with-smart-contracts-and-solidity} +## Akıllı sözleşmelere ve Solidity diline başlangıç {#getting-started-with-smart-contracts-and-solidity} **Python ve Ethereum'u entegre etmek için ilk adımlarınızı atın** -Başlamadan önce temel bilgilere mi ihtiyacınız var? [ethereum.org/learn](/learn/) veya [ethereum.org/developers](/developers/) adreslerine göz atın. +Başlamadan önce daha temel bir bilgiye mi ihtiyacınız var? [ethereum.org/learn](/learn/) veya [ethereum.org/developers](/developers/) adreslerine göz atın. -- [Blok Zinciri Açıklaması](https://kauri.io/article/d55684513211466da7f8cc03987607d5/blockchain-explained) +- [Blokzincir Açıklaması](https://kauri.io/article/d55684513211466da7f8cc03987607d5/blockchain-explained) - [Akıllı Sözleşmeleri Anlamak](https://kauri.io/article/e4f66c6079e74a4a9b532148d3158188/ethereum-101-part-5-the-smart-contract) - [İlk Akıllı Sözleşmenizi Yazın](https://kauri.io/article/124b7db1d0cf4f47b414f8b13c9d66e2/remix-ide-your-first-smart-contract) - [Solidity'yi Nasıl Derleyeceğinizi ve Dağıtacağınızı Öğrenin](https://kauri.io/article/973c5f54c4434bb1b0160cff8c695369/understanding-smart-contract-compilation-and-deployment) +- [Blokzincirde Python'un durumu 2023 raporu](https://tradingstrategy.ai/blog/the-state-of-python-in-blockchain-in-2023) ## Başlangıç seviyesi makaleler {#beginner-articles} -- [Bir (Python) Geliştiricinin Ethereum Rehberi](https://snakecharmers.ethereum.org/a-developers-guide-to-ethereum-pt-1/) -- [Blok zincir 2023 raporunda Python'un durumu](https://tradingstrategy.ai/blog/the-state-of-python-in-blockchain-in-2023) +- [web3.py'ye Genel Bakış](https://web3py.readthedocs.io/en/latest/overview.html) +- [Ethereum Python Ekosistem Turu](https://snakecharmers.ethereum.org/python-ecosystem/) +- [Bir (Python) Geliştiricisinin Ethereum Rehberi](https://snakecharmers.ethereum.org/a-developers-guide-to-ethereum-pt-1/) +- [Ödüle Değer: Bir Ethereum Python Hackathon Rehberi](https://snakecharmers.ethereum.org/prize-worthy/) - [Vyper ile Akıllı Sözleşmelere Giriş](https://kauri.io/#collections/Getting%20Started/an-introduction-to-smart-contracts-with-vyper/) -- [Python ve Brownie ile kendi ERC20 token'ınızı dağıtın](https://betterprogramming.pub/python-blockchain-token-deployment-tutorial-create-an-erc20-77a5fd2e1a58) -- [Python Flask kullanarak Ethereum sözleşmesi nasıl geliştirilir?](https://medium.com/coinmonks/how-to-develop-ethereum-contract-using-python-flask-9758fe65976e) -- [Web3.py'ye Giriş · Python Geliştiricileri için Ethereum](https://www.dappuniversity.com/articles/web3-py-intro) -- [Python ve web3.py kullanan Akıllı Sözleşme'ye ne denir?](https://stackoverflow.com/questions/57580702/how-to-call-a-smart-contract-function-using-python-and-web3-py) +- [Python Flask kullanarak Ethereum akıllı sözleşmesi nasıl geliştirilir?](https://medium.com/coinmonks/how-to-develop-ethereum-contract-using-python-flask-9758fe65976e) +- [Web3.py'ye Giriş · Python Geliştiricileri İçin Ethereum](https://www.dappuniversity.com/articles/web3-py-intro) +- [Python ve web3.py kullanarak bir Akıllı Sözleşme fonksiyonu nasıl çağrılır](https://stackoverflow.com/questions/57580702/how-to-call-a-smart-contract-function-using-python-and-web3-py) -## Orta Seviye Makaleler {#intermediate-articles} +## Orta seviye makaleler {#intermediate-articles} -- [Python Yazılımcıları için Dapp Geliştirme](https://levelup.gitconnected.com/dapps-development-for-python-developers-f52b32b54f28) +- [web3.py Dostları: Ape'e Giriş](https://snakecharmers.ethereum.org/intro-to-ape/) +- [Python Programcıları için Merkeziyetsiz Uygulama Geliştirme](https://levelup.gitconnected.com/dapps-development-for-python-developers-f52b32b54f28) - [Python Ethereum Arayüzü Oluşturma: Bölüm 1](https://hackernoon.com/creating-a-python-ethereum-interface-part-1-4d2e47ea0f4d) -- [Python'da Ethereum Akıllı Sözleşmeleri: kapsamlı(ca) bir rehber](https://hackernoon.com/ethereum-smart-contracts-in-python-a-comprehensive-ish-guide-771b03990988) -- [Akıllı Sözleşmeler dağıtmak için Brownie ve Python kullanımı](https://dev.to/patrickalphac/using-brownie-for-to-deploy-smart-contracts-1kkp) -- [Brownie ile OpenSea üzerinde NFT'ler oluşturma](https://www.freecodecamp.org/news/how-to-make-an-nft-and-render-on-opensea-marketplace/) +- [Python'da Ethereum Akıllı Sözleşmeleri: kapsamlı(msı) bir rehber](https://hackernoon.com/ethereum-smart-contracts-in-python-a-comprehensive-ish-guide-771b03990988) -## İleri Düzey Kullanım Şekilleri {#advanced-use-patterns} +## Gelişmiş kullanım kalıpları {#advanced-use-patterns} +- [web3.py Kalıpları: Gerçek Zamanlı Olay Abonelikleri](https://snakecharmers.ethereum.org/subscriptions/) +- [web3.py Kalıpları: WebSocketProvider](https://snakecharmers.ethereum.org/websocketprovider/) - [Python kullanarak Ethereum akıllı sözleşmesini derleme, dağıtma ve çağırma](https://yohanes.gultom.id/2018/11/28/compiling-deploying-and-calling-ethereum-smartcontract-using-python/) -- [Slither ile Solidity Akıllı Sözleşmeleri Analiz Edin](https://kauri.io/#collections/DevOps/analyze-solidity-smart-contracts-with-slither/#analyze-solidity-smart-contracts-with-slither) -- [Blokzincir Finans Teknolojisi Öğreticisi: Python ile Borç Verme ve Borç Alma](https://blog.chain.link/blockchain-fintech-defi-tutorial-lending-borrowing-python/) +- [Slither ile Solidity Akıllı Sözleşmelerini Analiz Etme](https://kauri.io/#collections/DevOps/analyze-solidity-smart-contracts-with-slither/#analyze-solidity-smart-contracts-with-slither) +- [Blokzincir Fintech Öğreticisi: Python ile Borç Verme ve Borç Alma](https://blog.chain.link/blockchain-fintech-defi-tutorial-lending-borrowing-python/) -## Python Projeleri ve Araçları {#python-projects-and-tools} +## Arşivlenmiş makaleler + +- [Python ve Brownie ile kendi ERC20 Jetonunuzu Dağıtın](https://betterprogramming.pub/python-blockchain-token-deployment-tutorial-create-an-erc20-77a5fd2e1a58) +- [Akıllı Sözleşmeleri dağıtmak için Brownie ve Python kullanma](https://dev.to/patrickalphac/using-brownie-for-to-deploy-smart-contracts-1kkp) +- [Brownie ile OpenSea'de Değiştirilemez Jetonlar oluşturma](https://www.freecodecamp.org/news/how-to-make-an-nft-and-render-on-opensea-marketplace/) + +## Python projeleri ve araçları {#python-projects-and-tools} ### Aktif: {#active} -- [Web3.py](https://github.com/ethereum/web3.py) - _Ethereum ile etkileşim için Phyton kütüphanesi_ -- [Vyper](https://github.com/ethereum/vyper/) - _EVM İçin Pythonic Akıllı Sözleşme Dili_ -- [Ape](https://github.com/ApeWorX/ape) - _Pythoncular, Veri Bilimciler ve Güvenlik Uzmanları için akıllı sözleşme geliştirme aracı_ -- [py-evm](https://github.com/ethereum/py-evm) - _Ethereum Sanal Makinesinin uygulanması_ -- [eth-tester](https://github.com/ethereum/eth-tester) - _Ethereum tabanlı uygulamaları test etmek için araçlar_ -- [eth-utils](https://github.com/ethereum/eth-utils/) - _Ethereum ile ilgili kod tabanlarıyla çalışmak için yardımcı işlevler_ -- [py-solc-x](https://pypi.org/project/py-solc-x/) - _0.5.x desteği ile solc solidity derleyicisine yönelik Python paketleyici_ -- [pymaker](https://github.com/makerdao/pymaker) - _Maker sözleşmeleri için Python API_ -- [siwe](https://github.com/signinwithethereum/siwe-py) - _Python için Ethereum (siwe) ile oturum açın_ +- [Web3.py](https://github.com/ethereum/web3.py) - _Ethereum ile etkileşim kurmak için Python kütüphanesi_ +- [Vyper](https://github.com/ethereum/vyper/) - _EVM için Pythonvari Akıllı Sözleşme Dili_ +- [Ape](https://github.com/ApeWorX/ape) - _Pythoncular, Veri Bilimcileri ve Güvenlik Profesyonelleri için akıllı sözleşme geliştirme aracı_ +- [py-evm](https://github.com/ethereum/py-evm) - _Ethereum Sanal Makinesi'nin bir uygulaması_ +- [eth-tester](https://github.com/ethereum/eth-tester) - _Ethereum tabanlı uygulamaları test etme araçları_ +- [eth-utils](https://github.com/ethereum/eth-utils/) - _Ethereum ile ilgili kod tabanlarıyla çalışmak için yardımcı fonksiyonlar_ +- [py-solc-x](https://pypi.org/project/py-solc-x/) - _0.5.x destekli solc solidity derleyicisi için Python sarmalayıcısı_ +- [pymaker](https://github.com/makerdao/pymaker) - _Maker sözleşmeleri için Python API'si_ +- [siwe](https://github.com/signinwithethereum/siwe-py) - _Python için Ethereum ile Oturum Aç (siwe)_ - [Ethereum entegrasyonları için Web3 DeFi](https://github.com/tradingstrategy-ai/web3-ethereum-defi) - _ERC-20, Uniswap ve diğer popüler projeler için hazır entegrasyonlar içeren bir Python paketi_ -- [Wake](https://getwake.io) - _Sözleşme testleri, bulanıklaştırma, dağıtım, güvenlik açığı taraması ve kodda gezinme için hepsi bir arada Python çerçevesi (dil sunucusu - [Solidity Araçları](https://marketplace.visualstudio.com/items?itemName=AckeeBlockchain.tools-for-solidity))_ +- [Wake](https://getwake.io) - _Sözleşme testi, fuzzing, dağıtım, güvenlik açığı taraması ve kodda gezinme için hepsi bir arada Python çatısı (dil sunucusu - [Solidity için Araçlar](https://marketplace.visualstudio.com/items?itemName=AckeeBlockchain.tools-for-solidity))_ -### Arşivlenmiş / Artık sürdürülmeyen: {#archived--no-longer-maintained} +### Arşivlenmiş / Artık bakımı yapılmıyor: {#archived--no-longer-maintained} - [Trinity](https://github.com/ethereum/trinity) - _Ethereum Python istemcisi_ -- [Mamba](https://github.com/arjunaskykok/mamba) - _Vyper dilinde yazılmış akıllı sözleşmeleri yazmak, derlemek ve dağıtmak için çerçeve_ -- [Brownie](https://github.com/eth-brownie/brownie) - _Ethereum akıllı sözleşmelerini dağıtmak, test etmek ve bunlarla etkileşimde bulunmak için Python çerçevesi_ -- [pydevp2p](https://github.com/ethereum/pydevp2p) - _Ethereum P2P yığınının uygulanması_ +- [Mamba](https://github.com/arjunaskykok/mamba) - _Vyper dilinde yazılmış akıllı sözleşmeleri yazmak, derlemek ve dağıtmak için bir çatı_ +- [Brownie](https://github.com/eth-brownie/brownie) - _Ethereum akıllı sözleşmelerini dağıtmak, test etmek ve bunlarla etkileşim kurmak için Python çatısı_ +- [pydevp2p](https://github.com/ethereum/pydevp2p) - _Ethereum P2P yığınının bir uygulaması_ - [py-wasm](https://github.com/ethereum/py-wasm) - _Web assembly yorumlayıcısının Python uygulaması_ -Daha fazla kaynak mı arıyorsunuz? Göz atın: [ethereum.org/developers](/developers/). +Daha fazla kaynak mı arıyorsunuz? [ethereum.org/developers](/developers/) adresine göz atın. -## Python araçları kullanan projeler {#projects-using-python-tooling} +## Python araçlarını kullanan projeler {#projects-using-python-tooling} Aşağıdaki Ethereum tabanlı projeler bu sayfada bahsedilen araçları kullanırlar. İlgili açık kaynak depoları, örnek kodlar ve en iyi yöntemler için iyi bir kaynakça niteliğindedir. -- [Yearn Finance](https://yearn.finance/) ve [Yearn Vault Contracts deposu](https://github.com/yearn/yearn-vaults) -- [Curve](https://curve.fi/) ve [Curve akıllı sözleşmeler deposu](https://github.com/curvefi/curve-contract) +- [Yearn Finance](https://yearn.finance/) ve [Yearn Vault Sözleşmeleri deposu](https://github.com/yearn/yearn-vaults) +- [Curve](https://www.curve.finance/) ve [Curve akıllı sözleşmeler deposu](https://github.com/curvefi/curve-contract) - [BadgerDAO](https://badger.com/) ve [Brownie araç zincirini kullanan akıllı sözleşmeler](https://github.com/Badger-Finance/badger-system) -- [Sushi](https://sushi.com/) [temlik sözleşmelerini yönetme ve dağıtmada Python](https://github.com/sushiswap/sushi-vesting-protocols) kullanır -- Ünü Alpha Homora'dan gelen [Alpha Finance](https://alphafinance.io/), [akıllı sözleşmeleri test etme ve dağıtma için Brownie](https://github.com/AlphaFinanceLab/alpha-staking-contract) kullanır +- [Sushi](https://sushi.com/), [hak ediş sözleşmelerini yönetmek ve dağıtmak için Python kullanır](https://github.com/sushiswap/sushi-vesting-protocols) +- Alpha Homora ile tanınan [Alpha Finance](https://alphafinance.io/), [akıllı sözleşmeleri test etmek ve dağıtmak için Brownie kullanır](https://github.com/AlphaFinanceLab/alpha-staking-contract) -## Python Topluluk tartışması {#python-community-contributors} +## Python Topluluğu tartışması {#python-community-contributors} -- Web3.py ve diğer Python çerçeve tartışmaları için [Ethereum Python Topluluk Discord'u](https://discord.gg/9zk7snTfWe) -- Vyper akıllı sözleşme programlama ile ilgili tartışmalar için [Vyper Discord'u](https://discord.gg/SdvKC79cJk) +- Web3.py ve diğer Python çatıları hakkındaki tartışmalar için [Ethereum Python Topluluğu Discord'u](https://discord.gg/9zk7snTfWe) +- Vyper akıllı sözleşme programlama tartışmaları için [Vyper Discord'u](https://discord.gg/SdvKC79cJk) -## Diğer Toplu Listeler {#other-aggregated-lists} +## Diğer derlenmiş listeler {#other-aggregated-lists} -Vyper wiki'sinde [Vyper için inanılmaz bir kaynak listesi](https://github.com/vyperlang/vyper/wiki/Vyper-tools-and-resources) mevcuttur \ No newline at end of file +Vyper wiki'sinde [Vyper için inanılmaz bir kaynak listesi](https://github.com/vyperlang/vyper/wiki/Vyper-tools-and-resources) bulunmaktadır \ No newline at end of file diff --git a/public/content/translations/tr/developers/docs/programming-languages/ruby/index.md b/public/content/translations/tr/developers/docs/programming-languages/ruby/index.md index 226c92da670..43b29fc2ec6 100644 --- a/public/content/translations/tr/developers/docs/programming-languages/ruby/index.md +++ b/public/content/translations/tr/developers/docs/programming-languages/ruby/index.md @@ -1,6 +1,6 @@ --- -title: Ruby Geliştiricileri için Ethereum -description: Ruby tabanlı projeleri ve araçları kullanarak Ethereum için nasıl geliştirme yapacağınızı öğrenin. +title: "Ruby Geliştiricileri için Ethereum" +description: "Ruby tabanlı projeleri ve araçları kullanarak Ethereum için nasıl geliştirme yapacağınızı öğrenin." lang: tr incomplete: false --- @@ -9,21 +9,21 @@ incomplete: false Kripto para birimi ve blok zinciri teknolojisinin faydalarını kullanan merkeziyetsiz uygulamalar (veya "dapp'ler") oluşturmak için Ethereum'u kullanın. Bu dapp'ler güvenilir olabilir, yani Ethereum'a dağıtıldıktan sonra her zaman programlandığı gibi çalışırlar. Yeni tür finansal uygulamalar oluşturmak için dijital varlıkları kontrol edebilirler. Merkeziyetsiz olabilirler, yani tek bir varlık veya kişi onları kontrol etmez ve sansürlemenin neredeyse imkansız olduğu anlamına gelir. -## Akıllı sözleşmeleri ve Solidity dilini kullanmaya başlama {#getting-started-with-smart-contracts-and-solidity} +## Akıllı sözleşmelere ve Solidity diline başlangıç {#getting-started-with-smart-contracts-and-solidity} **Ruby'yi Ethereum ile entegre etmek için ilk adımlarınızı atın** -Başlamadan önce daha temel bir bilgiye mi ihtiyacınız var? [ethereum.org/learn](/learn/) veya [ethereum.org/developers](/developers/)'a göz atın. +Başlamadan önce daha temel bir bilgiye mi ihtiyacınız var? [ethereum.org/learn](/learn/) veya [ethereum.org/developers](/developers/) adreslerine göz atın. -- [Blok Zinciri Açıklaması](https://kauri.io/article/d55684513211466da7f8cc03987607d5/blockchain-explained) +- [Blokzincir Açıklaması](https://kauri.io/article/d55684513211466da7f8cc03987607d5/blockchain-explained) - [Akıllı Sözleşmeleri Anlamak](https://kauri.io/article/e4f66c6079e74a4a9b532148d3158188/ethereum-101-part-5-the-smart-contract) - [İlk Akıllı Sözleşmenizi Yazın](https://kauri.io/article/124b7db1d0cf4f47b414f8b13c9d66e2/remix-ide-your-first-smart-contract) -- [Solidity'i Nasıl Derleyeceğinizi ve Dağıtacağınızı Öğrenin](https://kauri.io/article/973c5f54c4434bb1b0160cff8c695369/understanding-smart-contract-compilation-and-deployment) +- [Solidity'yi Nasıl Derleyeceğinizi ve Dağıtacağınızı Öğrenin](https://kauri.io/article/973c5f54c4434bb1b0160cff8c695369/understanding-smart-contract-compilation-and-deployment) -## Başlangıç ​​seviyesi makaleler {#beginner-articles} +## Başlangıç seviyesi makaleler {#beginner-articles} - [Sonunda Ethereum hesaplarını anlamak](https://dev.to/q9/finally-understanding-ethereum-accounts-1kpe) -- [Sonunda MetaMask ile Rails Kullanıcılarının Doğrulanması](https://dev.to/q9/finally-authenticating-rails-users-with-metamask-3fj) +- [Sonunda Rails Kullanıcılarının MetaMask ile Kimliğini Doğrulama](https://dev.to/q9/finally-authenticating-rails-users-with-metamask-3fj) - [Ruby kullanarak Ethereum ağına nasıl bağlanılır](https://www.quicknode.com/guides/web3-sdks/how-to-connect-to-the-ethereum-network-using-ruby) - [Ruby'de yeni bir Ethereum adresi nasıl oluşturulur](https://www.quicknode.com/guides/web3-sdks/how-to-generate-a-new-ethereum-address-in-ruby) @@ -36,25 +36,25 @@ Başlamadan önce daha temel bir bilgiye mi ihtiyacınız var? [ethereum.org/lea ### Aktif {#active} -- [eth.rb](https://github.com/q9f/eth.rb) - _Ethereum hesaplarını, mesajlarını ve işlemlerini işlemek için Ruby kitaplığı ve RPC istemcisi_ -- [keccak.rb](https://github.com/q9f/keccak.rb) - _Ethereum tarafından kullanılan Keccak (SHA3) hash değeri_ -- [siwe-ruby](https://github.com/signinwithethereum/siwe-ruby) - _Ethereum ile Oturum Açmanın Ruby uygulaması_ -- [siwe-rails](https://github.com/signinwithethereum/siwe-rails) - _SIWE yerel oturum açma rotalarını ekleyen Rails gem_ -- [siwe-rails-examples](https://github.com/signinwithethereum/siwe-rails-examples) - _Özel denetleyiciyle Ruby on Rails kullanan SIWE örneği_ -- [omniauth-siwe](https://github.com/signinwithethereum/omniauth-siwe) - _Ethereum ile Oturum Açma (SIWE) için OmniAuth stratejisi_ +- [eth.rb](https://github.com/q9f/eth.rb) - _Ethereum hesaplarını, mesajlarını ve işlemlerini yönetmek için Ruby kütüphanesi ve RPC istemcisi_ +- [keccak.rb](https://github.com/q9f/keccak.rb) - _Ethereum tarafından kullanılan Keccak (SHA3) karması_ +- [siwe-ruby](https://github.com/signinwithethereum/siwe-ruby) - _Sign-In with Ethereum'un Ruby uygulaması_ +- [siwe-rails](https://github.com/signinwithethereum/siwe-rails) - _SIWE yerel oturum açma rotaları ekleyen Rails gem'i_ +- [siwe-rails-examples](https://github.com/signinwithethereum/siwe-rails-examples) - _Özel denetleyici ile Ruby on Rails kullanan SIWE örneği_ +- [omniauth-siwe](https://github.com/signinwithethereum/omniauth-siwe) - _Sign In With Ethereum (SIWE) için OmniAuth stratejisi_ - [omniauth-nft](https://github.com/valthon/omniauth-nft) - _NFT sahipliği aracılığıyla kimlik doğrulama için OmniAuth stratejisi_ - [ethereum-on-rails](https://github.com/q9f/ethereum-on-rails) - _MetaMask'i Ruby on Rails'e bağlamayı sağlayan Ethereum on Rails şablonu_ -### Arşivlenmiş / Artık sürdürülmeyen {#archived--no-longer-maintained} +### Arşivlenmiş / Artık bakımı yapılmıyor {#archived--no-longer-maintained} - [web3-eth](https://github.com/spikewilliams/vtada-ethereum) - _Ruby ile Ethereum düğümünün RPC yöntemlerini çağırma_ -- [ethereum_tree](https://github.com/longhoangwkm/ethereum_tree) - _BIP32 standardına göre Hiyerarşik Deterministik cüzdandan ETH adresleri oluşturmak için Ruby kitaplığı _ +- [ethereum_tree](https://github.com/longhoangwkm/ethereum_tree) - _BIP32 standardına göre bir Hiyerarşik Deterministik cüzdandan ETH adresleri oluşturmak için Ruby kütüphanesi_ - [etherlite](https://github.com/budacom/etherlite) - _Ruby on Rails için Ethereum entegrasyonu_ -- [ethereum.rb](https://github.com/EthWorks/ethereum.rb) - _İşlem göndermek için JSON-RPC arayüzünü kullanan Ruby Ethereum istemcisi, Ethereum düğümü ile çalışmak için kullanışlı araç setinin yanı sıra sözleşmeler oluşturma ve bunlarla etkileşim kurma_ -- [omniauth-ethereum.rb](https://github.com/q9f/omniauth-ethereum.rb) - _OmniAuth için Ethereum sağlayıcı stratejisini uygular _ +- [ethereum.rb](https://github.com/EthWorks/ethereum.rb) - _İşlem göndermek, sözleşmeler oluşturmak ve onlarla etkileşim kurmak için JSON-RPC arayüzünü kullanan ve Ethereum düğümüyle çalışmak için kullanışlı bir araç seti de sunan Ruby Ethereum istemcisi_ +- [omniauth-ethereum.rb](https://github.com/q9f/omniauth-ethereum.rb) - _OmniAuth için Ethereum sağlayıcı stratejisini uygular_ -Daha fazla kaynak mı arıyorsunuz? [Geliştiricilerimizin ana sayfasına](/developers/) göz atın. +Daha fazla kaynak mı arıyorsunuz? [Geliştirici ana sayfamıza](/developers/) göz atın. -## Ruby topluluğuna katkıda bulunanlar {#ruby-community-contributors} +## Ruby topluluğu katkıda bulunanları {#ruby-community-contributors} -[Ethereum Ruby Telegram grubu](https://t.me/ruby_eth), hızla büyüyen bir topluluğa ev sahipliği yapar ve yukarıdaki projelerden ve ilgili konulardan herhangi biri hakkında tartışmalar için özel bir kaynaktır. +[Ethereum Ruby Telegram grubu](https://t.me/ruby_eth), hızla büyüyen bir topluluğa ev sahipliği yapar ve yukarıdaki projelerden herhangi biri ve ilgili konular hakkındaki tartışmalar için özel bir kaynaktır. diff --git a/public/content/translations/tr/developers/docs/programming-languages/rust/index.md b/public/content/translations/tr/developers/docs/programming-languages/rust/index.md index 81fd9676deb..8874d3bbbb5 100644 --- a/public/content/translations/tr/developers/docs/programming-languages/rust/index.md +++ b/public/content/translations/tr/developers/docs/programming-languages/rust/index.md @@ -1,61 +1,63 @@ --- -title: Rust geliştiricileri için Ethereum -description: Rust tabanlı projeler ve araçlarla nasıl Ethereum için geliştireceğinizi öğrenin +title: "Rust geliştiricileri için Ethereum" +description: "Rust tabanlı projeler ve araçlarla nasıl Ethereum için geliştireceğinizi öğrenin" lang: tr incomplete: true --- Rust tabanlı projeler ve araçlar kullanarak Ethereum için nasıl geliştirme yapacağınızı öğrenin -Ethereum'u, kripto para birimi ve blok zinciri teknolojisinin avantajlarından faydalanan merkeziyetsiz uygulamalar (veya "dapp'ler") oluşturmak için kullanın. Bu dapp'ler güvenilir olabilir, yani Ethereum'a dağıtıldıktan sonra her zaman programlandığı gibi çalışırlar. Yeni tür finansal uygulamalar oluşturmak için dijital varlıkları kontrol edebilirler. Merkeziyetsiz olabilirler, yani hiç bir kurum veya kişi onları kontrol edemez ve sansürlenmeleri neredeyse imkansızdır. +Kripto para birimi ve blok zinciri teknolojisinin faydalarını kullanan merkeziyetsiz uygulamalar (veya "dapp'ler") oluşturmak için Ethereum'u kullanın. Bu dapp'ler güvenilir olabilir, yani Ethereum'a dağıtıldıktan sonra her zaman programlandığı gibi çalışırlar. Yeni tür finansal uygulamalar oluşturmak için dijital varlıkları kontrol edebilirler. Merkeziyetsiz olabilirler, yani tek bir varlık veya kişi onları kontrol etmez ve sansürlemenin neredeyse imkansız olduğu anlamına gelir. -## Akıllı sözleşmeler ve Solidity dilini öğrenmeye başlangıç {#getting-started-with-smart-contracts-and-solidity} +## Akıllı sözleşmelere ve Solidity diline başlangıç {#getting-started-with-smart-contracts-and-solidity} **Rust ve Ethereum'u entegre etmek için ilk adımlarınızı atın** -Başlamadan önce temel bilgilere mi ihtiyacınız var? [ethereum.org/learn](/learn/) veya [ethereum.org/developers](/developers/) adreslerine göz atın. +Başlamadan önce daha temel bir bilgiye mi ihtiyacınız var? [ethereum.org/learn](/learn/) veya [ethereum.org/developers](/developers/) adreslerine göz atın. -- [Blok Zinciri Açıklaması](https://kauri.io/article/d55684513211466da7f8cc03987607d5/blockchain-explained) +- [Blokzincir Açıklaması](https://kauri.io/article/d55684513211466da7f8cc03987607d5/blockchain-explained) - [Akıllı Sözleşmeleri Anlamak](https://kauri.io/article/e4f66c6079e74a4a9b532148d3158188/ethereum-101-part-5-the-smart-contract) - [İlk Akıllı Sözleşmenizi Yazın](https://kauri.io/article/124b7db1d0cf4f47b414f8b13c9d66e2/remix-ide-your-first-smart-contract) - [Solidity'yi Nasıl Derleyeceğinizi ve Dağıtacağınızı Öğrenin](https://kauri.io/article/973c5f54c4434bb1b0160cff8c695369/understanding-smart-contract-compilation-and-deployment) ## Başlangıç seviyesi makaleler {#beginner-articles} -- [The Rust Ethereum Client](https://openethereum.github.io/) \* **OpenEthereum'un [kullanımdan kaldırıldığını](https://medium.com/openethereum/gnosis-joins-erigon-formerly-turbo-geth-to-release-next-gen-ethereum-client-c6708dd06dd) ve artık bakıma tabi olmadığını unutmayın.** Dikkatli kullanın ve tercihen başka bir istemci uygulamasına geçin. -- [Rust Kullanarak Ethereum'a İşlem Göndermek](https://kauri.io/#collections/A%20Hackathon%20Survival%20Guide/sending-ethereum-transactions-with-rust/) -- [Kovan için rust Wasm ile sözleşme yazma hakkında adım adım öğretici](https://github.com/paritytech/pwasm-tutorial) +- [Rust Ethereum İstemcisi](https://openethereum.github.io/) \* **OpenEthereum'un [kullanımdan kaldırıldığını](https://medium.com/openethereum/gnosis-joins-erigon-formerly-turbo-geth-to-release-next-gen-ethereum-client-c6708dd06dd) ve artık bakımının yapılmadığını unutmayın.** Dikkatli kullanın ve tercihen başka bir istemci uygulamasına geçin. +- [Rust Kullanarak Ethereum'a İşlem Gönderme](https://kauri.io/#collections/A%20Hackathon%20Survival%20Guide/sending-ethereum-transactions-with-rust/) +- [Kovan için Rust Wasm ile sözleşme yazma hakkında adım adım bir öğretici](https://github.com/paritytech/pwasm-tutorial) -## Orta Seviye Makaleler {#intermediate-articles} +## Orta seviye makaleler {#intermediate-articles} -## İleri Düzey Kullanım Şekilleri {#advanced-use-patterns} +## Gelişmiş kullanım kalıpları {#advanced-use-patterns} -- [Ethereum benzeri ağ ile etkileşim kurmak için pwasm_ethereum externs kütüphanesi](https://github.com/openethereum/pwasm-ethereum) -- [JavaScript ve Rust Kullanarak Merkezsiz Bir Sohbet Oluşturun](https://medium.com/perlin-network/build-a-decentralized-chat-using-javascript-rust-webassembly-c775f8484b52) -- [Vue.js & Rust kullanarak Merkezsiz bir Yapılacaklar Uygulaması oluşturun](https://medium.com/@jjmace01/build-a-decentralized-todo-app-using-vue-js-rust-webassembly-5381a1895beb) +- [Ethereum benzeri ağlarla etkileşim kurmak için pwasm_ethereum externs kütüphanesi](https://github.com/openethereum/pwasm-ethereum) -- [Rust ile bir blok zincir inşa et](https://blog.logrocket.com/how-to-build-a-blockchain-in-rust/) +- [JavaScript ve Rust Kullanarak Merkeziyetsiz Bir Sohbet Uygulaması Oluşturun](https://medium.com/perlin-network/build-a-decentralized-chat-using-javascript-rust-webassembly-c775f8484b52) -## Rust Projeleri ve Araçları {#rust-projects-and-tools} +- [Vue.js ve Rust Kullanarak Merkeziyetsiz Bir Yapılacaklar Uygulaması Oluşturun](https://medium.com/@jjmace01/build-a-decentralized-todo-app-using-vue-js-rust-webassembly-5381a1895beb) -- [pwasm-ethereum](https://github.com/paritytech/pwasm-ethereum) - _Ethereum benzeri ağlar ile etkileşim kurmak için hariciler koleksiyonu._ -- [Lighthouse](https://github.com/sigp/lighthouse) - _Hızlı Ethereum fikir birliği katmanı istemcisi_ -- [Ethereum WebAssemmbly](https://ewasm.readthedocs.io/en/mkdocs/) - _WebAssembly'nin karar verici bir alt takımı kullanılarak Ethereum akıllı sözleşme yürütüm katmanının yeniden tasarımının önerilmesi_ +- [Rust ile bir blokzincir oluşturun](https://blog.logrocket.com/how-to-build-a-blockchain-in-rust/) + +## Rust projeleri ve araçları {#rust-projects-and-tools} + +- [pwasm-ethereum](https://github.com/paritytech/pwasm-ethereum) - _Ethereum benzeri ağlarla etkileşim kurmak için externs koleksiyonu_ +- [Lighthouse](https://github.com/sigp/lighthouse) - _Hızlı Ethereum mutabakat katmanı istemcisi_ +- [Ethereum WebAssembly](https://ewasm.readthedocs.io/en/mkdocs/) - _WebAssembly'nin deterministik bir alt kümesini kullanan Ethereum akıllı sözleşme yürütme katmanının önerilen yeniden tasarımı_ - [oasis_std](https://docs.rs/oasis-std/latest/oasis_std/index.html) - _OASIS API referansı_ -- [Solaris](https://github.com/paritytech/sol-rs) - _Yerli Parity İstemci EVM'si kullanılarak Solidity Akıllı Sözleşme birim testi teçhizatı._ +- [Solaris](https://github.com/paritytech/sol-rs) - _Yerel Parity İstemcisi EVM'sini kullanan Solidity Akıllı Sözleşmeleri birim testi çerçevesi._ - [SputnikVM](https://github.com/rust-blockchain/evm) - _Rust Ethereum Sanal Makinesi Uygulaması_ -- [Wavelet](https://wavelet.perlin.net/docs/smart-contracts) - _Rust'ta Wavelet sakıllı sözleşme_ +- [Wavelet](https://wavelet.perlin.net/docs/smart-contracts) - _Rust ile Wavelet akıllı sözleşmesi_ - [Foundry](https://github.com/foundry-rs/foundry) - _Ethereum uygulama geliştirmesi için araç takımı_ -- [Alloy](https://alloy.rs) - _Ethereum ve diğer EVM tabanlı zincirlerle etkileşime girebilmek için yüksek performanslı, test edilip belgelenmiş kütüphaneler._ +- [Alloy](https://alloy.rs) - _Ethereum ve diğer EVM tabanlı zincirlerle etkileşim kurmak için yüksek performanslı, iyi test edilmiş ve belgelenmiş kütüphaneler._ - [Ethers_rs](https://github.com/gakonst/ethers-rs) - _Ethereum kütüphanesi ve cüzdan uygulaması_ -- [SewUp](https://github.com/second-state/SewUp) - _Tıpkı ortak bir arka uçta geliştiriyormuş gibi Rust ile Ethereum webassembly sözleşmenizi oluşturmanıza yardımcı olacak bir kütüphane_ -- [Alt akımlar](https://github.com/streamingfast/substreams) - _Paralel hale getirilmiş blok zincir veri endeksleme teknolojisi_ -- [Reth](https://github.com/paradigmxyz/reth) Reth (Rust Ethereum'un kısaltması) yeni bir Ethereum tam düğüm uygulamasıdır -- [Awesome Ethereum Rust](https://github.com/Vid201/awesome-ethereum-rust) - _Ethereum ekosisteminde, Rust ile yazılmış projelerden oluşan bir koleksiyondur_ +- [SewUp](https://github.com/second-state/SewUp) - _Tıpkı ortak bir arka uçta geliştirme yapar gibi Rust ile Ethereum webassembly sözleşmenizi oluşturmanıza yardımcı olan bir kütüphane_ +- [Substreams](https://github.com/streamingfast/substreams) - _Paralelleştirilmiş blokzincir veri dizinleme teknolojisi_ +- [Reth](https://github.com/paradigmxyz/reth) Reth (Rust Ethereum'un kısaltması), yeni bir Ethereum tam düğüm uygulamasıdır +- [Awesome Ethereum Rust](https://github.com/Vid201/awesome-ethereum-rust) - _Ethereum ekosisteminde Rust ile yazılmış projelerden oluşan derlenmiş bir koleksiyon_ -Daha fazla kaynak mı arıyorsunuz? Göz atın: [ethereum.org/developers](/developers/). +Daha fazla kaynak mı arıyorsunuz? [ethereum.org/developers.](/developers/) adresine göz atın. -## Rust Topluluğuna Katkıda Bulunanlar {#rust-community-contributors} +## Rust topluluğu katkıda bulunanları {#rust-community-contributors} - [Ethereum WebAssembly](https://gitter.im/ewasm/Lobby) - [Oasis Gitter](https://gitter.im/Oasis-official/Lobby) diff --git a/public/content/translations/tr/developers/docs/scaling/index.md b/public/content/translations/tr/developers/docs/scaling/index.md index f9ba68c57fd..9d87121a5ff 100644 --- a/public/content/translations/tr/developers/docs/scaling/index.md +++ b/public/content/translations/tr/developers/docs/scaling/index.md @@ -1,6 +1,6 @@ --- -title: Ölçeklendirme -description: Ethereum topluluğu tarafından geliştirilmekte olan farklı ölçekleme seçeneklerine giriş. +title: "Ölçeklendirme" +description: "Ethereum topluluğu tarafından geliştirilmekte olan farklı ölçekleme seçeneklerine giriş." lang: tr sidebarDepth: 3 --- @@ -9,105 +9,105 @@ sidebarDepth: 3 Ethereum kullanan kişi sayısı arttıkça blok zinciri belirli kapasite sınırlamalarına ulaştı. Bu durum, ağı kullanma maliyetini artırarak "ölçeklendirme çözümlerine" yönelik bir ihtiyaç doğurdu. Benzer hedeflere ulaşmak için farklı yaklaşımlar benimseyen, araştırılan, test edilen ve uygulanan çok sayıda çözüm vardır. -Ölçeklenebilirliğin ana hedefi, merkeziyetsizlikten veya güvenlikten ödün vermeden işlem hızını (daha hızlı kesinlik) ve işlem verimini (saniye başına daha fazla sayıda işlem) artırmaktır ([Ethereum'un vizyonu](/roadmap/vision/) hakkında daha fazla bilgi). Katman 1 Ethereum blok zincirinde yüksek talep, daha yavaş işlemlere ve elverişsiz [gaz fiyatlarına](/developers/docs/gas/) yol açar. Ethereum'un anlamlı ve toplu olarak benimsenmesi için ağ kapasitesini hız ve verim açısından artırmak çok önemlidir. +Ölçeklenebilirliğin ana hedefi, merkeziyetsizlikten veya güvenlikten ödün vermeden işlem hızını (daha hızlı kesinlik) ve işlem hacmini (saniye başına daha yüksek işlem sayısı) artırmaktır. Katman 1 Ethereum blokzincirinde yüksek talep, daha yavaş işlemlere ve elverişsiz [gaz fiyatlarına](/developers/docs/gas/) yol açar. Ethereum'un anlamlı ve toplu olarak benimsenmesi için ağ kapasitesini hız ve verim açısından artırmak çok önemlidir. Hız ve verim önemli olsa da, bu hedefleri mümkün kılan ölçeklendirme çözümlerinin merkeziyetsiz ve güvenli kalması çok önemlidir. Düğüm operatörleri için giriş engelini düşük tutmak, merkezi ve güvenli olmayan bilgi işlem gücüne doğru ilerlemeyi önlemede kritik önem arz eder. -Kavramsal olarak, ölçeklendirmeyi ilk olarak zincir üstünde veya zincir dışında ölçeklendirme olarak sınıflandırıyoruz. +Kavramsal olarak, ölçeklendirmeyi ilk olarak zincir üstü ölçeklendirme veya zincir dışı ölçeklendirme olarak sınıflandırıyoruz. ## Ön Koşullar {#prerequisites} Tüm temel konuları kapsamlı olarak anlamanız gerekmektedir. Bu teknoloji henüz pek kullanılmadığı için ve araştırılmaya ve geliştirilmeye devam edildiğinden, ölçeklendirme çözümlerinin uygulanması ileri seviye bilgi gerektirir. -## Zincir üstünde ölçeklendirme {#on-chain-scaling} +## Zincir üstü ölçeklendirme {#onchain-scaling} -Zincir üstünde ölçeklendirme yöntemi, Ethereum protokolünde değişiklik yapılmasını gerektirir (katman 1 [Ana Ağ](/glossary/#mainnet)). Uzun bir süredir blokzinciri parçalamanın Ethereum'u ölçeklendirmesi bekleniyordu. Süreç, blokzincirin çeşitli ayrık parçalara (shard adı verilen) ayrılmasını ve bu parçaların doğrulayıcı alt kümeleri tarafından onaylanmasını içerecekti. Ancak katman-2 toplamalarıyla ölçeklendirmenin birincil ölçeklendirme tekniği olmasıyla beraber bu durum değişti. Bu, toplama kullanımlarının kullanıcılar için ucuz hale getirilmesi amaçlanarak daha ucuz bir veri biçiminin Ethereum bloklarına eklenmesiyle destekleniyor. +Zincir üstü ölçeklendirme, Ethereum protokolünde (katman 1 [Ana Ağ](/glossary/#mainnet)) değişiklikler yapılmasını gerektirir. Uzun bir süredir blokzinciri parçalamanın Ethereum'u ölçeklendirmesi bekleniyordu. Süreç, blokzincirin çeşitli ayrık parçalara (shard adı verilen) ayrılmasını ve bu parçaların doğrulayıcı alt kümeleri tarafından onaylanmasını içerecekti. Ancak katman-2 toplamalarıyla ölçeklendirmenin birincil ölçeklendirme tekniği olmasıyla beraber bu durum değişti. Bu, toplama kullanımlarının kullanıcılar için ucuz hale getirilmesi amaçlanarak daha ucuz bir veri biçiminin Ethereum bloklarına eklenmesiyle destekleniyor. ### Parçalama {#sharding} -Parçalama, veritabanını bölmek için kullanılan işlemdir. Böylelikle doğrulayıcı alt kümeleri, tüm Ethereum ağını takip etmektense belirli bazı parçaları takip etmekten sorumlu olurlar. Parçalama aslında uzun süredir Ethereum [yol haritasında](/roadmap/) yer alıyordu ve Birleşim'den önce hisse ispatına gönderilmesi amaçlanmıştı. Bununla birlikte, [katman 2 toplamalarının](#layer-2-scaling) hızlı gelişimi ve [Danksharding'in](/roadmap/danksharding)(doğrulayıcılar tarafından çok verimli bir şekilde doğrulanabilen Ethereum bloklarına toplama verisi damlacıkları ekleme) icat edilmesi, Ethereum topluluğunun parçalama yoluyla ölçeklendirme yerine toplama merkezli ölçeklendirmeyi tercih etmesine yol açtı. Bu aynı zamanda da Ethereum'un mutabakat mantığının sade kalmasına da yardımcı olacaktır. +Parçalama, veritabanını bölmek için kullanılan işlemdir. Böylelikle doğrulayıcı alt kümeleri, tüm Ethereum ağını takip etmektense belirli bazı parçaları takip etmekten sorumlu olurlar. Parçalama uzun süredir Ethereum [yol haritasında](/roadmap/) yer alıyordu ve bir zamanlar Hisse İspatı'na geçiş için Birleşme'den önce gönderilmesi amaçlanmıştı. Ancak, [katman 2 toplamalarının](#layer-2-scaling) hızlı gelişimi ve [Danksharding](/roadmap/danksharding) (doğrulayıcılar tarafından çok verimli bir şekilde doğrulanabilen Ethereum bloklarına toplama verisi blobları ekleme) icadı, Ethereum topluluğunun parçalama yoluyla ölçeklendirme yerine toplama merkezli ölçeklendirmeyi tercih etmesine yol açtı. Bu aynı zamanda da Ethereum'un mutabakat mantığının sade kalmasına da yardımcı olacaktır. -## Zincir dışında ölçeklendirme {#off-chain-scaling} +## Zincir dışı ölçeklendirme {#offchain-scaling} -Zincir dışı çözümler, katman 1 Ana Ağ'dan ayrı olarak uygulanır; mevcut Ethereum protokolünde herhangi bir değişiklik gerektirmezler. "Katman 2" çözümleri olarak bilinen bazı çözümler, güvenliklerini doğrudan [iyimser toplamalar](/developers/docs/scaling/optimistic-rollups/), [sıfır bilgi toplamaları](/developers/docs/scaling/zk-rollups/) veya [özel kanallar](/developers/docs/scaling/state-channels/) gibi katman 1 Ethereum mutabakatından alır. Diğer çözümler, [yan zincirler](#sidechains) [validium'lar](#validium) veya [plazma zincirleri](#plasma) gibi güvenliklerini Ana Ağ'dan ayrı olarak türeten çeşitli biçimlerde yeni zincirlerin oluşturulmasını içerir. Bu çözümler Ana Ağ ile iletişim kurar, ancak çeşitli hedeflere ulaşmak için güvenliklerini farklı şekilde elde eder. +Zincir dışı çözümler, katman 1 Ana Ağ'dan ayrı olarak uygulanır - mevcut Ethereum protokolünde herhangi bir değişiklik gerektirmezler. "Katman 2" çözümleri olarak bilinen bazı çözümler, güvenliklerini doğrudan katman 1 Ethereum mutabakatından alır; [iyimser toplamalar](/developers/docs/scaling/optimistic-rollups/), [sıfır bilgi toplamaları](/developers/docs/scaling/zk-rollups/) veya [durum kanalları](/developers/docs/scaling/state-channels/) gibi. Diğer çözümler, güvenliklerini Ana Ağ'dan ayrı olarak alan [yan zincirler](#sidechains), [validium'lar](#validium) veya [plasma zincirleri](#plasma) gibi çeşitli biçimlerde yeni zincirlerin oluşturulmasını içerir. Bu çözümler Ana Ağ ile iletişim kurar ancak çeşitli hedeflere ulaşmak için güvenliklerini farklı şekilde elde ederler. ### Katman 2 ölçeklendirme {#layer-2-scaling} -Bu zincir dışı çözümler kategorisi, güvenliğini Ana Ağ Ethereum'dan alır. +Bu zincir dışı çözüm kategorisi, güvenliğini Ana Ağ Ethereum'dan alır. Katman 2, Ana Ağ'ın sağlam merkeziyetsiz güvenlik modelinden yararlanırken, işlemleri Ethereum Ana Ağı'ndan (katman 1) yöneterek uygulamanızı ölçeklendirmeye yardımcı olmak üzere tasarlanmış çözümler için kullanılan toplu bir terimdir. Ağ meşgulken işlem hızı düşer ve belirli türdeki merkeziyetsiz uygulamalar için kullanıcı deneyimi olumsuz etkilenir. Ağ yoğunluğu arttıkça işlem göndericiler birbirleriyle rekabete girerek gaz ücretlerinin artmasına neden olurlar. Bu, Ethereum'u kullanmayı çok pahalı hâle getirebilir. -Katman 2 çözümlerinin çoğu düğüm, doğrulayıcı, operatör, sıralayıcı veya blok üreticileri gibi bir sunucu veya sunucu kümesi etrafında toplanır. Uygulamaya bağlı olarak bu katman 2 düğümleri, onları kullanan kişiler, işletmeler veya kuruluşlar veya bir 3. taraf operatör veya büyük bir grup kişi tarafından (Ana Ağ'a benzer şekilde) çalıştırılabilir. Genel olarak konuşursak, işlemler doğrudan katman 1'e (Ana ağ) gönderilmek yerine bu katman 2 düğümlerine gönderilir. Bazı çözümlerde katman 2 örneği daha sonra bunları katman 1'e bağlamadan önce gruplara ayırır, ardından bunlar katman 1 tarafından sabitlenir ve değiştirilemez. Bunun nasıl yapıldığına ilişkin ayrıntılar, farklı katman 2 teknolojileri ve uygulamaları arasında önemli ölçüde farklılık gösterir. +Katman 2 çözümlerinin çoğu düğüm, doğrulayıcı, operatör, sıralayıcı veya blok üreticileri gibi bir sunucu veya sunucu kümesi etrafında toplanır. Uygulamaya bağlı olarak bu katman 2 düğümleri, onları kullanan kişiler, işletmeler veya kuruluşlar veya bir 3. taraf operatör veya büyük bir grup kişi tarafından (Ana Ağ'a benzer şekilde) çalıştırılabilir. Genel olarak konuşursak, işlemler doğrudan katman 1'e (Ana ağ) gönderilmek yerine bu katman 2 düğümlerine gönderilir. Bazı çözümlerde katman 2 örneği, bunları katman 1'e sabitlemeden önce gruplar halinde toplar, ardından katman 1 tarafından güvence altına alınır ve değiştirilemezler. Bunun nasıl yapıldığına ilişkin ayrıntılar, farklı katman 2 teknolojileri ve uygulamaları arasında önemli ölçüde farklılık gösterir. Belirli bir katman 2 örneği açık olabilir ve birçok uygulama tarafından paylaşılabilir veya bir proje tarafından dağıtılabilir ve yalnızca uygulamalarını desteklemeye adanmış olabilir. #### Katman 2 neden gerekli? {#why-is-layer-2-needed} - Saniye başına artan işlem, kullanıcı deneyimini büyük ölçüde iyileştirir ve Mainnet Ethereum'daki ağ tıkanıklığını azaltır. -- İşlemler, Mainnet Ethereum'da tek bir işlemde toplanır ve Ethereum'u tüm dünyadaki insanlar için daha kapsayıcı ve erişilebilir hâle getiren kullanıcılar için gaz ücretlerini azaltır. +- İşlemler, Ana Ağ Ethereum'a tek bir işlemde toplanarak kullanıcılar için gaz ücretlerini düşürür ve Ethereum'u her yerdeki insanlar için daha kapsayıcı ve erişilebilir hâle getirir. - Ölçeklendirme ile ilgili hiçbir gelişme güvenlik veya merkeziyetsizlikten taviz vermemelidir: Katman 2 çözümleri Ethereum'u olduğu hâliyle geliştirir. -- Ölçekli varlıklarla çalışırken kendi verimlilik setlerini kullanan uygulamaya özel katman 2 ağları bulunuyor. +- Varlıklarla büyük ölçekte çalışırken kendi verimliliklerini getiren uygulamaya özel katman 2 ağları vardır. -[Katman 2 hakkında daha fazla bilgi](/layer-2/). +[Katman 2 hakkında daha fazla bilgi](/layer-2/) #### Toplamalar {#rollups} -Toplamalar, işlem yürütmesini katman 1 dışında gerçekleştirir ve ardından veriler, mutabakata varılan katman 1'e gönderilir. Bu, işlem verileri katman 1 bloklarına dahil edildiğinden toplamaların yerel Ethereum güvenliği ile güvence altına alınmasına olanak tanır. +Toplamalar, işlem yürütmesini katman 1 dışında gerçekleştirir ve ardından veriler, konsensusa varılan, katman 1'e gönderilir. Bu, işlem verileri katman 1 bloklarına dahil edildiğinden toplamaların yerel Ethereum güvenliği ile güvence altına alınmasına olanak tanır. Farklı güvenlik modellerine sahip iki tür toplama vardır: -- **İyimser toplamalar**: İşlemlerin varsayılan olarak geçerli olduğunu varsayar ve yalnızca bir meydan okuma ile karşılaşıldığında [**dolandırıcılık kanıtı**](/glossary/#fraud-proof) aracılığıyla hesaplama çalıştırır. [İyimser toplamalar üzerine daha fazla bilgi](/developers/docs/scaling/optimistic-rollups/). -- **Sıfır bilgi toplamaları**: Zincir dışı hesaplamalar çalıştırır ve zincire bir [**doğruluk ispatı**](/glossary/#validity-proof) gönderir. [Sıfır bilgi toplamaları üzerine daha fazla bilgi](/developers/docs/scaling/zk-rollups/). +- **İyimser toplamalar**: işlemlerin varsayılan olarak geçerli olduğunu varsayar ve yalnızca bir itiraz durumunda bir [**sahtekarlık kanıtı**](/glossary/#fraud-proof) aracılığıyla hesaplama çalıştırır. [İyimser toplamalar hakkında daha fazla bilgi](/developers/docs/scaling/optimistic-rollups/). +- **Sıfır bilgi toplamaları**: hesaplamayı zincir dışı çalıştırır ve zincire bir [**geçerlilik kanıtı**](/glossary/#validity-proof) gönderir. [Sıfır bilgi toplamaları hakkında daha fazla bilgi](/developers/docs/scaling/zk-rollups/). #### Durum kanalları {#channels} -Özel kanallar, katılımcıların zincir dışında hızlı ve özgürce işlem yapmalarını sağlamak için çoklu imza sözleşmelerini kullanır ve ardından Ana ağ ile kesinliği belirler. Bu, ağ tıkanıklığını, ücretleri ve gecikmeleri en aza indirger. Mevcut kanal türleri, özel kanallar ve ödeme kanalları olarak iki türdedir. +Durum kanalları, katılımcıların zincir dışı hızlı ve özgürce işlem yapmalarını sağlamak için çoklu imza (multisig) sözleşmelerini kullanır ve ardından Ana Ağ ile kesinliği belirler. Bu, ağ tıkanıklığını, ücretleri ve gecikmeleri en aza indirger. Mevcut kanal türleri, özel kanallar ve ödeme kanalları olarak iki türdedir. -[Özel kanallar](/developers/docs/scaling/state-channels/) hakkında daha fazla bilgi. +[Durum kanalları](/developers/docs/scaling/state-channels/) hakkında daha fazla bilgi edinin. ### Yan zincirler {#sidechains} -Bir yan zincir, Ana Ağ'a paralel olarak çalışan bağımsız bir Ethereum Sanal Makinesi uyumlu blokzinciridir. Bunlar, iki yönlü köprüler aracılığıyla Ethereum ile uyumludur ve kendi seçtikleri mutabakat kuralları ve blok parametreleri altında çalışırlar. +Bir yan zincir, Ana Ağ'a paralel olarak çalışan bağımsız bir EVM uyumlu blokzinciridir. Bunlar, iki yönlü köprüler aracılığıyla Ethereum ile uyumludur ve kendi seçtikleri mutabakat kuralları ve blok parametreleri altında çalışırlar. -[Yan zincirler](/developers/docs/scaling/sidechains/) hakkında daha fazla bilgi. +[Yan zincirler](/developers/docs/scaling/sidechains/) hakkında daha fazla bilgi edinin. -### Plazma {#plasma} +### Plasma {#plasma} -Plazma zinciri, ana Ethereum zincirine bağlı olan ve uyuşmazlıkları çözüme kavuşturmak için sahtecilik kanıtlarını ([iyimser toplamalar](/developers/docs/scaling/optimistic-rollups/) gibi) kullanan ayrı bir blokzincirdir. +Bir plasma zinciri, ana Ethereum zincirine sabitlenmiş ayrı bir blokzinciridir ve anlaşmazlıklara hakemlik etmek için ( [iyimser toplamalar](/developers/docs/scaling/optimistic-rollups/) gibi) sahtekarlık kanıtlarını kullanır. -[Plazma](/developers/docs/scaling/plasma/) hakkında daha fazla bilgi. +[Plasma](/developers/docs/scaling/plasma/) hakkında daha fazla bilgi edinin. ### Validium {#validium} Bir Validium zinciri, sıfır bilgi toplamaları gibi doğruluk ispatlarını kullanır, ancak veriler ana katman 1 Ethereum zincirinde depolanmaz. Bu, her bir Validium zinciri başına saniyede 10 bin işlem yapılabilmesine ve birden çok zincirin paralel olarak çalışabilmesine olanak sağlar. -[Validium](/developers/docs/scaling/validium/) hakkında daha fazla bilgi. +[Validium](/developers/docs/scaling/validium/) hakkında daha fazla bilgi edinin. ## Neden bu kadar çok ölçeklendirme çözümüne ihtiyaç var? {#why-do-we-need-these} -- Birden çok çözüm, ağın herhangi bir bölümündeki genel tıkanıklığı azaltmaya yardımcı olabilir ve ayrıca tek hata noktalarını da önler. +- Birden çok çözüm, ağın herhangi bir bölümündeki genel tıkanıklığı azaltmaya yardımcı olabilir ve ayrıca tekil hata noktalarını önler. - Bütün, parçalarının toplamından daha büyüktür. Farklı çözümler var olabilir ve uyum içinde çalışabilir, bu da gelecekteki işlem hızı ve verimi üzerinde üstel bir etkiye izin verir. - Tüm çözümler, Ethereum mutabakat algoritmasının doğrudan kullanılmasını gerektirmez ve alternatifler, aksi takdirde elde edilmesi zor olacak faydalar sunabilir. -- [Ethereum vizyonunu](/roadmap/vision/) gerçekleştirmek için tek bir ölçeklendirme çözümü yeterli değildir. -## Görsel olarak öğrenmeyi mi tercih ediyorsunuz? {#visual-learner} +## Görerek öğrenmeyi mi tercih ediyorsunuz? {#visual-learner} -_Videodaki açıklamanın "Katman 2" terimini tüm zincir dışı ölçeklendirme çözümlerini ifade etmek için kullandığına dikkat edin: Biz "Katman 2"yi, güvenliğini katman 1 Ana ağ mutabakatından alan zincir dışı bir çözüm olarak ayırıyoruz._ +_Videodaki açıklamanın "Katman 2" terimini tüm zincir dışı ölçeklendirme çözümlerini ifade etmek için kullandığını, bizim ise "Katman 2"yi güvenliğini katman 1 Ana Ağ mutabakatı aracılığıyla sağlayan zincir dışı bir çözüm olarak ayırdığımızı unutmayın._ -## Daha fazla bilgi {#further-reading} +## Daha fazla kaynak {#further-reading} - [Toplama merkezli bir Ethereum yol haritası](https://ethereum-magicians.org/t/a-rollup-centric-ethereum-roadmap/4698) _Vitalik Buterin_ -- [Ethereum için Katman 2 ölçeklendirme çözümlerinde güncel analitikler](https://www.l2beat.com/) -- [Ethereum katman 2 Ölçeklendirme Çözümlerini Değerlendirme: Bir Karşılaştırma Çerçevesi](https://medium.com/matter-labs/evaluating-ethereum-l2-scaling-solutions-a-comparison-framework-b6b2f410f955) -- [Toplamalar için Tamamlanmamış Bir Kılavuz](https://vitalik.eth.limo/general/2021/01/05/rollup.html) -- [Ethereum destekli ZK-Toplamaları: Dünya Liderleri](https://hackmd.io/@canti/rkUT0BD8K) -- [İyimser Toplamalar ile ZK Toplamalarının Karşılaştırması](https://limechain.tech/blog/optimistic-rollups-vs-zk-rollups/) -- [Toplamalar + veri parçalarının, yüksek ölçeklenebilirlik için tek sürdürülebilir çözüm olma nedeni](https://polynya.medium.com/why-rollups-data-shards-are-the-only-sustainable-solution-for-high-scalability-c9aabd6fbb48) -- [Hangi tür Katman 3'ler kulağa mantıklı geliyor?](https://vitalik.eth.limo/general/2022/09/17/layer_3.html) -- [Veri Kullanılabilirliği veya: Toplamalar Endişelenmeyi Bırakıp Ethereum'u Sevmeyi Nasıl Öğrendi?](https://ethereum2077.substack.com/p/data-availability-in-ethereum-rollups) - -_Size yardımcı olan bir topluluk kaynağı biliyor musunuz? Bu sayfayı düzenleyin ve ekleyin!_ +- [Ethereum için Katman 2 ölçeklendirme çözümleri hakkında güncel analizler](https://www.l2beat.com/) +- [Ethereum Katman 2 Ölçeklendirme Çözümlerini Değerlendirme: Bir Karşılaştırma Çerçevesi](https://medium.com/matter-labs/evaluating-ethereum-l2-scaling-solutions-a-comparison-framework-b6b2f410f955) +- [Toplamalar İçin Eksik Bir Kılavuz](https://vitalik.eth.limo/general/2021/01/05/rollup.html) +- [Ethereum Destekli ZK Toplamaları: Dünya Liderleri](https://hackmd.io/@canti/rkUT0BD8K) +- [İyimser Toplamalar ve ZK Toplamalar Karşılaştırması](https://limechain.tech/blog/optimistic-rollups-vs-zk-rollups/) +- [Toplamalar + veri parçaları neden yüksek ölçeklenebilirlik için tek sürdürülebilir çözümdür?](https://polynya.medium.com/why-rollups-data-shards-are-the-only-sustainable-solution-for-high-scalability-c9aabd6fbb48) +- [Ne tür Katman 3'ler mantıklıdır?](https://vitalik.eth.limo/general/2022/09/17/layer_3.html) +- [Data Availability Or: How Rollups Learned To Stop Worrying And Love Ethereum](https://web.archive.org/web/20250515194659/https://web.archive.org/web/20241108192208/https://research.2077.xyz/data-availability-or-how-rollups-learned-to-stop-worrying-and-love-ethereum) +- [Ethereum Toplamaları için Pratik Kılavuz](https://web.archive.org/web/20241108192208/https://research.2077.xyz/the-practical-guide-to-ethereum-rollups) + +_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/scaling/optimistic-rollups/index.md b/public/content/translations/tr/developers/docs/scaling/optimistic-rollups/index.md index 52aeb79da54..587ffa3744e 100644 --- a/public/content/translations/tr/developers/docs/scaling/optimistic-rollups/index.md +++ b/public/content/translations/tr/developers/docs/scaling/optimistic-rollups/index.md @@ -1,54 +1,54 @@ --- -title: İyimser Toplamalar -description: Ethereum topluluğu tarafından kullanılmakta olan bir ölçeklendirme çözümü sunan iyimser toplamalara giriş. +title: "İyimser Toplamalar" +description: "Ethereum topluluğu tarafından kullanılmakta olan bir ölçeklendirme çözümü sunan iyimser toplamalara giriş." lang: tr --- -İyimser toplamalar, Ethereum temel katmanının işlem hacmini genişletmek üzere tasarlanmış katman 2 (L2) protokolleridir. Ana Ethereum zincirindeki hesaplama yükünü, işlemleri zincir dışında yürüterek azaltarak işleme hızlarında önemli iyileştirmeler sunarlar. Diğer ölçeklendirme çözümleri olan [yan zincirlerin](/developers/docs/scaling/sidechains/) aksine iyimser toplamalar, işlem sonuçlarını zincir üstünde yayımlayarak Ana ağ'dan güvenlik alırken; [plazma zincirleri](/developers/docs/scaling/plasma/) ise Ethereum'da sahtecilik kanıtları ile işlemleri doğrular ancak işlem verilerini farklı bir yerde saklarlar. +İyimser toplamalar, Ethereum temel katmanının işlem hacmini genişletmek üzere tasarlanmış katman 2 (L2) protokolleridir. Ana Ethereum zincirindeki hesaplamayı, işlemleri zincir dışında işleyerek azaltır ve işleme hızlarında önemli iyileştirmeler sunarlar. [Yan zincirler](/developers/docs/scaling/sidechains/) veya işlemleri Ethereum'da sahtekarlık kanıtları ile doğrulayıp işlem verilerini başka bir yerde saklayan [plazma zincirleri](/developers/docs/scaling/plasma/) gibi diğer ölçeklendirme çözümlerinin aksine, iyimser toplamalar işlem sonuçlarını zincir üstünde yayımlayarak güvenliği Ana Ağ'dan alır. -Hesaplama, Ethereum'u kullanmanın yavaş ve pahalı kısmı olduğundan iyimser toplamalar ölçeklenebilirlikte 10-100x'lik iyileştirmeler sunabilir. İyimser toplamalar ayrıca işlemleri Ethereum'a çağrı verisi `calldata` ya da [blobs](/roadmap/danksharding/) olarak yazar, bu da kullanıcılar için gaz maliyetlerini azaltır. +Hesaplama, Ethereum'u kullanmanın yavaş ve pahalı kısmı olduğundan iyimser toplamalar ölçeklenebilirlikte 10-100x'lik iyileştirmeler sunabilir. İyimser toplamalar ayrıca işlemleri Ethereum'a `calldata` veya [bloblar](/roadmap/danksharding/) halinde yazarak kullanıcılar için gaz maliyetlerini azaltır. ## Ön Koşullar {#prerequisites} -[Ethereum ölçeklendirme](/developers/docs/scaling/) ve [katman 2](/layer-2/) hakkındaki sayfalarımızı okumuş ve anlamış olmalısınız. +[Ethereum ölçeklendirme](/developers/docs/scaling/) ve [katman 2](/layer-2/) sayfalarımızı okumuş ve anlamış olmalısınız. ## İyimser toplama nedir? {#what-is-an-optimistic-rollup} -Bir iyimser toplama, Ethereum'u ölçeklendirmek amacıyla hesaplama ve durum depolamayı zincir dışına taşımayı içeren bir çözüm yaklaşımıdır. İyimser toplamalar, işlemleri Ethereum dışında yürütür ancak işlem verilerini Ana Ağa `calldata` veya [blobs](/roadmap/danksharding/) olarak gönderir. +İyimser toplama, hesaplama ve durum depolamayı zincir dışına taşıyan bir Ethereum ölçeklendirme yaklaşımıdır. İyimser toplamalar, işlemleri Ethereum'un dışında yürütür ancak işlem verilerini Ana Ağ'a `calldata` veya [bloblar](/roadmap/danksharding/) halinde gönderir. -İyimser toplama operatörleri, Ethereum'a göndermeden önce birden fazla zincir dışı işlemi büyük paketler halinde bir araya getirir. Bu yaklaşım, sabit maliyetlerin her paket içerisindeki birden çok işlem arasında paylaştırarak son kullanıcılar için ücretleri azaltmaya olanak tanır. İyimser toplamalar ayrıca Ethereum'da yayımlanan veri miktarını azaltmak için sıkıştırma tekniklerini kullanır. +İyimser toplama operatörleri, Ethereum'a göndermeden önce birden fazla zincir dışı işlemi büyük gruplar halinde bir araya getirir. Bu yaklaşım, sabit maliyetlerin her paket içerisindeki birden çok işlem arasında paylaştırarak son kullanıcılar için ücretleri azaltmaya olanak tanır. İyimser toplamalar ayrıca Ethereum'da yayımlanan veri miktarını azaltmak için sıkıştırma tekniklerini kullanır. -İyimser toplamalar, zincir dışı işlemlerin geçerli olduğunu varsaydıkları ve zincir üstünde yayımlanan işlem paketleri için geçerlilik kanıtları yayımlamadıkları için "iyimser" olarak adlandırılır. Bu durum, iyimser toplamaları zincir dışı işlemler için kriptografik [geçerlilik kanıtları](/glossary/#validity-proof) yayımlayan [sıfır-bilgi toplamaları](/developers/docs/scaling/zk-rollups)ndan ayırır. +İyimser toplamalar, zincir dışı işlemlerin geçerli olduğunu varsaydıkları ve zincir üstünde yayımlanan işlem grupları için geçerlilik kanıtları yayımlamadıkları için “iyimser” olarak kabul edilir. Bu, iyimser toplamaları, zincir dışı işlemler için kriptografik [geçerlilik kanıtları](/glossary/#validity-proof) yayımlayan [sıfır bilgi toplamalarından](/developers/docs/scaling/zk-rollups) ayırır. -İyimser toplamalar, işlemlerin doğru şekilde hesaplanmadığı durumları tespit etme konusunda bir sahtekarlık kanıtlama şemasına güvenir. Bir toplama partisi Ethereum'a gönderildikten sonra, isteyen herkesin bir [sahtecilik kanıtı](/glossary/#fraud-proof)nı hesaplayarak bir toplama işleminin sonuçlarına itiraz edebileceği bir zaman penceresi (itiraz dönemi olarak adlandırılır) bulunmaktadır. +İyimser toplamalar, işlemlerin doğru şekilde hesaplanmadığı durumları tespit etme konusunda bir sahtekarlık kanıtlama şemasına güvenir. Bir toplama grubu Ethereum'a gönderildikten sonra, herhangi birinin bir [sahtekarlık kanıtı](/glossary/#fraud-proof) hesaplayarak bir toplama işleminin sonuçlarına itiraz edebileceği bir zaman aralığı (meydan okuma süresi olarak adlandırılır) vardır. Eğer sahtecilik kanıtı başarılı olursa, toplama protokolü işlemi/işlemleri yeniden yürütür ve toplamanın durumunu buna göre günceller. Başarılı bir sahtecilik kanıtının bir diğer etkisi, yanlış gerçekleştirilmiş işlemi bir bloğa dahil etmekten sorumlu sıralayıcının ceza almasıdır. Toplama partisinin itiraz süresi sona erdikten sonra hala itiraz edilmemişse (yani tüm işlemler doğru bir şekilde yürütülmüşse), parti geçerli sayılır ve Ethereum'da kabul edilir. Diğerleri, doğrulanmamış bir toplama bloğu üzerine inşa etmeye devam edebilir, ancak bir uyarı söz konusudur: işlem sonuçları, önceden yayınlanmış ve yanlış gerçekleştirilmiş bir işleme dayanıyorsa sonuçlar tersine çevrilecektir. -## İyimser toplamalar Ethereum ile nasıl etkileşime girer? {#optimistic-rollups-and-Ethereum} +## İyimser toplamalar Ethereum ile nasıl etkileşime girer? İyimser toplamalar ve Ethereum {#optimistic-rollups-and-Ethereum} -İyimser toplamalar, Ethereum üzerinde çalışacak şekilde inşa edilmiş [zincir dışı ölçeklendirme çözümleri](/developers/docs/scaling/#off-chain-scaling)dir. Her iyimser toplama, Ethereum ağına dağıtılmış bir dizi akıllı sözleşme tarafından yönetilir. İyimser toplamalar, işlemleri ana Ethereum zinciri dışında gerçekleştirir ancak zincir dışındaki işlemleri (toplu halde) zincir üzerindeki bir toplama sözleşmesine gönderir. Ethereum blokzincirinde olduğu gibi, bu işlem kaydı da değiştirilemezdir ve "iyimser toplama zincirini" oluşturur. +İyimser toplamalar, Ethereum üzerinde çalışmak üzere oluşturulmuş [zincir dışı ölçeklendirme çözümleridir](/developers/docs/scaling/#offchain-scaling). Her iyimser toplama, Ethereum ağına dağıtılmış bir dizi akıllı sözleşme tarafından yönetilir. İyimser toplamalar, işlemleri ana Ethereum zincirinin dışında işler, ancak zincir dışı işlemleri (gruplar halinde) zincir üstü bir toplama sözleşmesine gönderir. Ethereum blokzincirinde olduğu gibi, bu işlem kaydı da değiştirilemezdir ve "iyimser toplama zincirini" oluşturur. Bir iyimser toplamanın mimarisi şu bölümlerden oluşur: -**Zincir üstü sözleşmeler**: İyimser toplamaların çalışması, Ethereum üzerinde çalışan akıllı sözleşmeler tarafından kontrol edilir. Bu, toplama bloklarını depolayan, toplamada durum güncellemelerini izleyen ve kullanıcı tarafından yapılan yatırma işlemlerini takip eden sözleşmeleri içerir. Bu anlamda Ethereum, iyimser toplamalar için temel katman veya "katman 1" olarak hizmet verir. +**Zincir üstü sözleşmeler**: İyimser toplamanın işleyişi, Ethereum üzerinde çalışan akıllı sözleşmeler tarafından kontrol edilir. Bu, toplama bloklarını depolayan, toplamada durum güncellemelerini izleyen ve kullanıcı tarafından yapılan yatırma işlemlerini takip eden sözleşmeleri içerir. Bu anlamda Ethereum, iyimser toplamalar için temel katman veya "katman 1" olarak hizmet verir. -**Zincir dışı sanal makine (VM)**: İyimser toplama protokolünü yöneten sözleşmeler Ethereum üzerinde çalışsa da, toplama protokolü hesaplama ve durum depolamayı [Ethereum Sanal Makinası](/developers/docs/evm/)'ndan ayrı, başka bir sanal makinede gerçekleştirir. Zincir dışı VM yani sanal makine, uygulamaların yaşadığı ve durum değişikliklerinin yürütüldüğü yerdir; bu, bir iyimser toplama için üst katman veya "katman 2" olarak hizmet eder. +**Zincir dışı sanal makine (VM)**: İyimser toplama protokolünü yöneten sözleşmeler Ethereum'da çalışsa da, toplama protokolü hesaplama ve durum depolamayı [Ethereum Sanal Makinesi](/developers/docs/evm/)'nden ayrı başka bir sanal makinede gerçekleştirir. Zincir dışı VM, uygulamaların yaşadığı ve durum değişikliklerinin yürütüldüğü yerdir; bir iyimser toplama için üst katman veya "katman 2" olarak hizmet eder. -İyimser toplamalar EVM için yazılmış ya da derlenmiş programları çalıştırmak üzere tasarlandığından, zincir dışı sanal makine birçok EVM tasarım özelliğini içerir. Ek olarak, zincir içinde hesaplanan sahtecilik kanıtları, Ethereum ağının durum değişikliklerinin geçerliliğinin zincir dışı VM'de hesaplanmasını koşul olarak koymasına olanak tanır. +İyimser toplamalar EVM için yazılmış veya derlenmiş programları çalıştırmak üzere tasarlandığından, zincir dışı VM birçok EVM tasarım özelliğini içerir. Ayrıca, zincir üstünde hesaplanan sahtekarlık kanıtları, Ethereum ağının zincir dışı VM'de hesaplanan durum değişikliklerinin geçerliliğini zorunlu kılmasına olanak tanır. -İyimser toplamalar "hibrit ölçeklendirme çözümleri" olarak tanımlanmaktadır. Çünkü ayrı protokoller olarak var olmalarına rağmen güvenlik özellikleri Ethereum'dan türetilmiştir. Ethereum, bir toplamanın zincir dışı hesaplamasının doğruluğunu ve hesaplamanın arkasındaki verilerin kullanılabilirliğini garanti eder. Bu, iyimser toplamaları güvenlik için Ethereum'a güvenmeyen saf zincir dışı ölçeklendirme protokollerinden (örneğin, [yan zincirler](/developers/docs/scaling/sidechains/)) daha güvenli hale getirir. +İyimser toplamalar "hibrit ölçeklendirme çözümleri" olarak tanımlanmaktadır. Çünkü ayrı protokoller olarak var olmalarına rağmen güvenlik özellikleri Ethereum'dan türetilmiştir. Ethereum, diğer şeylerin yanı sıra, bir toplamanın zincir dışı hesaplamasının doğruluğunu ve hesaplamanın arkasındaki verilerin kullanılabilirliğini garanti eder. Bu, iyimser toplamaları güvenlik için Ethereum'a dayanmayan saf zincir dışı ölçeklendirme protokollerinden (ör. [yan zincirler](/developers/docs/scaling/sidechains/)) daha güvenli hale getirir. İyimser toplamalar aşağıdakiler için ana Ethereum protokolüne güvenir: -### Veri mevcudiyeti {#data-availability} +### Veri kullanılabilirliği {#data-availability} -Belirtildiği üzere iyimser toplamalar, işlem verilerini Ethereum'a `calldata` veya [blobs](/roadmap/danksharding/) olarak gönderir. Toplama zincirinin yürütülmesi gönderilen işlemlere dayandığından, herkes Ethereum'un temel katmanında bulunan bu bilgileri kullanarak toplamanın durumunu yürütebilir ve durum geçişlerinin doğruluğunu teyit edebilir. +Belirtildiği gibi, iyimser toplamalar işlem verilerini Ethereum'a `calldata` veya [bloblar](/roadmap/danksharding/) olarak gönderir. Toplama zincirinin yürütülmesi gönderilen işlemlere dayandığından, herkes Ethereum'un temel katmanında bulunan bu bilgileri kullanarak toplamanın durumunu yürütebilir ve durum geçişlerinin doğruluğunu teyit edebilir. -[Veri kullanılabilirliği](/developers/docs/data-availability/) kritiktir; çünkü itiraz eden kişiler, durum verilerine erişim olmadan geçersiz toplama işlemlerine itiraz etmek için sahtecilik kanıtları oluşturamazlar. Ethereum'un veri mevcudiyeti ve kullanılabilirliği sağlaması sayesinde, toplama operatörlerinin kötü niyetli hareketlerden (ör. geçersiz bloklar gönderme) paçayı sıyırma riski azalır. +[Veri kullanılabilirliği](/developers/docs/data-availability/) kritik öneme sahiptir çünkü durum verilerine erişim olmadan, meydan okuyanlar geçersiz toplama işlemlerine itiraz etmek için sahtekarlık kanıtları oluşturamazlar. Ethereum'un veri mevcudiyeti ve kullanılabilirliği sağlaması sayesinde, toplama operatörlerinin kötü niyetli hareketlerden (ör. geçersiz bloklar gönderme) paçayı sıyırma riski azalır. -### Sansüre dayanıklılık {#censorship-resistance} +### Sansür direnci {#censorship-resistance} İyimser toplamalar da sansüre karşı direnç konusunda Ethereum'a güvenir. Bir iyimser toplamada işlemleri işlemekten ve Ethereum'a toplama blokları göndermekten merkezi bir varlık (operatör) sorumludur. Bunun bazı sonuçları vardır: @@ -68,7 +68,7 @@ Belirtildiği üzere iyimser toplamalar, işlem verilerini Ethereum'a `calldata` Ethereum'un iyimser toplamalar bağlamında oynadığı bir diğer rol de, uzlaşma katmanı olmasıdır. Bir uzlaşma katmanı tüm blokzincir ekosistemi için çıpa görevi görür, güvenliği tesis eder ve başka bir zincirde (bu durumda iyimser toplamalar) hakemlik gerektiren bir anlaşmazlık meydana gelirse nesnel kesinlik sağlar. -Ethereum Ana Ağı, iyimser toplamaların sahtecilik kanıtlarını doğrulaması ve anlaşmazlıkları çözmesi için bir merkez sunar. Dahası, toplama üzerinde gerçekleştirilen işlemler, ancak toplama bloğu Ethereum'da kabul edildikten _sonra_ nihai hale gelir. Bir toplama işlemi Ethereum'un temel katmanına işlendikten sonra geri alınamaz (zincirin yeniden düzenlenmesi gibi gerçekleşme olasılığı çok az olan bir durum hariç). +Ethereum Ana Ağı, iyimser toplamaların sahtecilik kanıtlarını doğrulaması ve anlaşmazlıkları çözmesi için bir merkez sunar. Ayrıca, toplama üzerinde yürütülen işlemler ancak toplama bloğu Ethereum'da kabul _edildikten sonra_ kesinleşir. Bir toplama işlemi Ethereum'un temel katmanına işlendikten sonra geri alınamaz (zincirin yeniden düzenlenmesi gibi gerçekleşme olasılığı çok az olan bir durum hariç). ## İyimser toplamalar nasıl çalışır? {#how-optimistic-rollups-work} @@ -76,41 +76,41 @@ Ethereum Ana Ağı, iyimser toplamaların sahtecilik kanıtlarını doğrulamas Kullanıcılar işlemleri "operatörlere" gönderir; bu operatörler, iyimser toplamalar üzerinde işlemleri gerçekleştirmekten sorumlu olan düğümlerdir. Aynı zamanda "doğrulayıcı" veya "birleştirici" olarak da bilinen operatör, işlemleri birleştirir, temel veriyi sıkıştırır ve bloğu Ethereum'da yayımlar. -Herkes doğrulayıcı olabilse de, iyimser toplama doğrulayıcıları blok üretmeden önce [hisse ispatı sistemi](/developers/docs/consensus-mechanisms/pos/) gibi bir teminat sağlamalıdır. Doğrulayıcı geçersiz bir blok yayınlarsa veya eski ancak geçersiz bir blok üzerine inşa ederse (bloğu geçerli olsa bile) bu teminattan kesinti yapılabilir. İyimser toplamalar, bu şekilde doğrulayıcıların dürüst davranmasını sağlamak için kriptoekonomik teşvikleri kullanır. +Herkes doğrulayıcı olabilse de, iyimser toplama doğrulayıcıları, tıpkı bir [hisse ispatı sistemi](/developers/docs/consensus-mechanisms/pos/) gibi, blok üretmeden önce bir teminat sağlamalıdır. Doğrulayıcı geçersiz bir blok yayınlarsa veya eski ancak geçersiz bir blok üzerine inşa ederse (bloğu geçerli olsa bile) bu teminattan kesinti yapılabilir. İyimser toplamalar, bu şekilde doğrulayıcıların dürüst davranmasını sağlamak için kriptoekonomik teşvikleri kullanır. İyimser toplama zincirindeki diğer doğrulayıcıların, toplama durumunun kendilerine ait kopyalarını kullanarak gönderilen işlemleri yürütmesi beklenir. Bir doğrulayıcının nihai durumu operatörün önerdiği durumdan farklıysa, bir itiraz başlatabilir ve bir sahtecilik kanıtı hesaplayabilir. Bazı iyimser toplamalar izin gerektirmeyen bir doğrulayıcı sisteminden feragat edebilir ve zinciri yürütmek için tek bir "sıralayıcı" kullanabilir. Bir doğrulayıcı gibi sıralayıcı da işlemleri işler, toplama blokları üretir ve toplama işlemlerini L1 zincirine (Ethereum) gönderir. -Sıralayıcı, işlemlerin sıralanması üzerinde daha fazla kontrole sahip olduğu için normal bir toplama operatöründen farklıdır. Sıralayıcı ayrıca, toplama zincirine öncelikli erişime sahiptir ve zincir üstündeki sözleşmeye işlem gönderme yetkisine sahip tek varlıktır. Sıralayıcı olmayan düğümlerden veya normal kullanıcılardan gelen işlemler, sıralayıcı bunları yeni bir partiye dahil edene kadar ayrı bir gelen kutusunda bekletilir. +Sıralayıcı, işlemlerin sıralanması üzerinde daha fazla kontrole sahip olduğu için normal bir toplama operatöründen farklıdır. Ayrıca, sıralayıcı toplama zincirine öncelikli erişime sahiptir ve zincir üstü sözleşmeye işlem gönderme yetkisine sahip tek varlıktır. Sıralayıcı olmayan düğümlerden veya normal kullanıcılardan gelen işlemler, sıralayıcı bunları yeni bir partiye dahil edene kadar ayrı bir gelen kutusunda bekletilir. #### Toplama bloklarını Ethereum'a gönderme {#submitting-blocks-to-ethereum} -Belirtildiği gibi, bir iyimser toplamanın operatörü zincir dışı işlemleri bir yığın halinde toplar ve onay için Ethereum'a gönderir. Bu süreç, işlemle ilgili verilerin sıkıştırılmasını ve Ethereum üzerinde `calldata` veya blob olarak yayımlanmasını içerir. +Belirtildiği gibi, bir iyimser toplama operatörü, zincir dışı işlemleri bir grup halinde toplar ve noter onayı için Ethereum'a gönderir. Bu süreç, işlemle ilgili verilerin sıkıştırılmasını ve Ethereum üzerinde `calldata` veya blob olarak yayımlanmasını içerir. -`calldata`, akıllı bir sözleşmede çoğunlukla [bellek](/developers/docs/smart-contracts/anatomy/#memory) gibi davranan, değiştirilemeyen, kalıcı olmayan bir alandır. `calldata` blokzincirin [geçmiş günlüklerinin](https://docs.soliditylang.org/en/latest/introduction-to-smart-contracts.html?highlight=memory#logs) bir parçası olarak zincir üzerinde kalırken, Ethereum'un durumunun bir parçası olarak saklanmaz. Çünkü `calldata`, Ethereum'un durumunun herhangi bir bölümüne müdahale etmediğinden zincir üstünde veri saklamak için duruma göre daha ucuzdur. +`calldata`, bir akıllı sözleşmede çoğunlukla [bellek](/developers/docs/smart-contracts/anatomy/#memory) gibi davranan, değiştirilemez, kalıcı olmayan bir alandır. `calldata`, blokzincirin [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ı olsa da, Ethereum'un durumunun bir parçası olarak saklanmaz. `calldata`, Ethereum durumunun hiçbir bölümüne dokunmadığı için, verileri zincir üstünde depolamak için durumdan daha ucuzdur. -`calldata` anahtar sözcüğü Solidity'de yürütme zamanında bir akıllı sözleşme fonksiyonuna argüman aktarmak için de kullanılır. `calldata` bir işlem sırasında çağrılan fonksiyonu tanımlar ve fonksiyonun girdilerini rastgele bir bayt dizisi şeklinde tutar. +`calldata` anahtar sözcüğü, yürütme zamanında bir akıllı sözleşme işlevine argümanlar geçirmek için Solidity'de de kullanılır. `calldata` bir işlem sırasında çağrılan işlevi tanımlar ve işlevin girdilerini rastgele bir bayt dizisi biçiminde tutar. -İyimser toplamalar bağlamında `calldata`, sıkıştırılmış işlem verilerini zincir üstündeki sözleşmeye göndermek için kullanılır. Toplama operatörü, toplama sözleşmesinde gerekli fonksiyonu çağırarak ve sıkıştırılmış verileri fonksiyon argümanları olarak geçirerek yeni bir toplu iş ekler. Toplamaların maliyetlerinin çoğu verilerin zincir üstünde depolanmasından kaynaklandığı için `calldata` kullanımı kullanıcı ücretlerini azaltır. +İyimser toplamalar bağlamında `calldata`, sıkıştırılmış işlem verilerini zincir üstü sözleşmeye göndermek için kullanılır. Toplama operatörü, toplama sözleşmesinde gerekli fonksiyonu çağırarak ve sıkıştırılmış verileri fonksiyon argümanları olarak geçirerek yeni bir toplu iş ekler. `calldata` kullanmak, toplamaların maruz kaldığı maliyetlerin çoğu verileri zincir üstünde depolamaktan geldiği için kullanıcı ücretlerini düşürür. -İşte bu konseptin nasıl çalıştığını göstermek için toplama partisi gönderimine [bir örnek](https://etherscan.io/tx/0x9102bfce17c58b5fc1c974c24b6bb7a924fb5fbd7c4cd2f675911c27422a5591). Sıralayıcı `appendSequencerBatch()` yöntemini çağırmış ve sıkıştırılmış işlem verilerini `calldata` kullanarak girdi olarak geçirmiştir. +Bu konseptin nasıl çalıştığını göstermek için bir toplama grubu gönderimine [bir örnek](https://eth.blockscout.com/tx/0x9102bfce17c58b5fc1c974c24b6bb7a924fb5fbd7c4cd2f675911c27422a5591) aşağıda verilmiştir. Sıralayıcı, `appendSequencerBatch()` yöntemini çağırdı ve sıkıştırılmış işlem verilerini `calldata` kullanarak girdi olarak geçti. Bazı toplamalar işlem gruplarını Ethereum'a göndermek için artık blob'ları kullanıyor. -Blob'lar değiştirilemez ve geçicilerdir (aynı `calldata` gibi), geçmişten ~18 gün içinde silinirler. Blob'lar hakkında daha fazla bilgi için [Danksharding](/roadmap/danksharding)'e göz atın. +Bloblar (tıpkı `calldata` gibi) değiştirilemez ve kalıcı değildir ancak yaklaşık 18 gün sonra geçmişten budanır. Bloblar hakkında daha fazla bilgi için bkz. [Danksharding](/roadmap/danksharding). ### Durum taahhütleri {#state-commitments} -Herhangi bir zamanda, iyimser toplamanın durumu (hesaplar, bakiyeler, sözleşme kodu, vb.) "durum ağacı" adı verilen bir [Merkle ağacı](/whitepaper/#merkle-trees) olarak düzenlenir. Toplamanın en son durumuna başvuran bu Merkle ağacının kökü (durum kökü) karma hale getirilir ve toplama sözleşmesinde saklanır. Zincir üstündeki her durum geçişi, operatörün yeni bir durum kökü hesaplayarak taahhüt ettiği yeni bir toplama durumu üretir. +Herhangi bir zamanda, iyimser toplamanın durumu (hesaplar, bakiyeler, sözleşme kodu vb.) “durum ağacı” olarak adlandırılan bir [Merkle ağacı](/whitepaper/#merkle-trees) olarak düzenlenir. Toplamanın en son durumuna başvuran bu Merkle ağacının kökü (durum kökü) karma hale getirilir ve toplama sözleşmesinde saklanır. Zincir üstündeki her durum geçişi, operatörün yeni bir durum kökü hesaplayarak taahhüt ettiği yeni bir toplama durumu üretir. -Operatörün partileri gönderirken hem eski durum köklerini hem de yeni durum köklerini göndermesi gerekir. Eski durum kökü zincir üstündeki sözleşmede mevcut durum kökü ile eşleşirse, mevcut durum kökü atılır ve yeni durum kökü ile değiştirilir. +Operatörün partileri gönderirken hem eski durum köklerini hem de yeni durum köklerini göndermesi gerekir. Eski durum kökü, zincir üstü sözleşmedeki mevcut durum köküyle eşleşirse, ikincisi atılır ve yeni durum köküyle değiştirilir. -Toplama operatörünün ayrıca işlem yığınının kendisi için bir Merkle kökü taahhüt etmesi gerekir. Bu, isteyen herkesin bir [Merkle kanıtı](/developers/tutorials/merkle-proofs-for-offline-data-integrity/) sunarak bir işlemin yığına, yani toplama kümesine dahil olduğunu (L1 üzerinde) kanıtlamasına olanak tanır. +Toplama operatörünün ayrıca işlem yığınının kendisi için bir Merkle kökü taahhüt etmesi gerekir. Bu, herhangi birinin bir [Merkle kanıtı](/developers/tutorials/merkle-proofs-for-offline-data-integrity/) sunarak bir işlemin gruba (L1'de) dahil olduğunu kanıtlamasına olanak tanır. Durum taahhütleri, özellikle de durum kökleri, iyimser toplamada durum değişikliklerinin doğruluğunu kanıtlamak için gereklidir. Toplama sözleşmesi, gönderildikten hemen sonra operatörlerden yeni durum köklerini kabul eder ancak daha sonra toplamayı doğru durumuna geri getirmek için geçersiz durum köklerini silebilir. -### Sahteciliği kanıtlama {#fraud-proving} +### Sahtekarlık kanıtlama {#fraud-proving} Açıklandığı üzere, iyimser toplamalar isteyen herkesin geçerlilik kanıtları sunmadan blokları yayımlamasına izin verir. Bununla birlikte, zincirin güvenli kalmasını sağlamak için iyimser toplamalar, herhangi birinin bir durum geçişine itiraz edebileceği bir zaman aralığı belirtir. Bu nedenle, isteyen herkes doğruluklarına itiraz edebileceğinden toplama bloklarına "savlar" denir. @@ -118,13 +118,13 @@ Birisi bir sava itiraz ederse, toplama protokolü sahtekarlık kanıtı hesaplam Tek turlu etkileşimli kanıtlama şemaları, geçersiz savları tespit etmek için itiraz edilen işlemleri L1'de tekrar oynatır. Toplama protokolü, bir doğrulayıcı sözleşme kullanarak L1 (Ethereum) üzerinde ihtilaflı işlemin yeniden yürütülmesini taklit eder ve hesaplanan durum kökü itirazı kimin kazandığını belirler. Eğer itiraz edenin, toplamanın doğruluk durumuyla ilgili savı geçerliyse, operatör teminatının kesilmesiyle cezalandırılır. -Bununla birlikte, sahtekarlığı tespit etmek için L1'deki işlemlerin yeniden yürütülmesi, bireysel işlemler için durum taahhütlerinin yayımlanmasını gerektirir ve toplamaların zincir üstünde yayımlanması gereken veri miktarını artırır. İşlemlerin tekrarlanması, önemli gaz maliyetlerine neden olur. Bu nedenlerle, iyimser toplamalar aynı hedefe (yani geçersiz toplama işlemlerini tespit etme) daha verimli bir şekilde ulaşmak için çok turlu etkileşimli kanıtlamaya geçmektedir. +Ancak, sahtekarlığı tespit etmek için L1'deki işlemleri yeniden yürütmek, bireysel işlemler için durum taahhütleri yayımlamayı gerektirir ve toplamaların zincir üstünde yayımlaması gereken veriyi artırır. İşlemlerin tekrarlanması, önemli gaz maliyetlerine neden olur. Bu nedenlerle, iyimser toplamalar aynı hedefe (yani geçersiz toplama işlemlerini tespit etme) daha verimli bir şekilde ulaşmak için çok turlu etkileşimli kanıtlamaya geçmektedir. #### Çok turlu etkileşimli kanıtlama {#multi-round-interactive-proving} Çok turlu etkileşimli kanıtlama, bir sav sahibi ile itiraz eden arasında bir L1 doğrulayıcı sözleşmesi tarafından denetlenen ileri geri bir protokol içerir ve yalan söyleyen tarafı bu protokol belirler. Bir L2 düğümü bir sava itiraz ederse, sav sahibinin itiraza konu savı iki eşit yarıya bölmesi gerekir. Bu durumda her bir bireysel sav, diğerinde olduğu kadar çok hesaplama adımı içerecektir. -İtiraz eden daha sonra hangi sava itiraz etmek istediğini seçer. Bölme süreci ("ikiye bölme protokolü" adı verilir), her iki taraf da yürütmenin _tek_ bir adımı hakkında bir sav üzerinde ihtilafa düşene kadar devam eder. Bu noktada L1 sözleşmesi, talimatı (ve sonucunu) değerlendirerek hile yapan tarafı tespit eder ve ihtilafı çözer. +İtiraz eden daha sonra hangi sava itiraz etmek istediğini seçer. Bölme süreci (“ikiye bölme protokolü” olarak adlandırılır), her iki taraf da yürütmenin _tek bir_ adımı hakkındaki bir iddiayı tartışana kadar devam eder. Bu noktada L1 sözleşmesi, talimatı (ve sonucunu) değerlendirerek hile yapan tarafı tespit eder ve ihtilafı çözer. Sav sahibi, ihtilaflı tek adımlı hesaplamanın geçerliliğini doğrulayan bir "tek adım kanıtı" sağlamak zorundadır. Sav sahibi, tek adım kanıtını sunamazsa veya L1 doğrulayıcı kanıtı geçersiz bulursa meydan okumayı kaybeder. @@ -132,47 +132,47 @@ Bu tür bir sahtecilik kanıtı hakkında bazı notlar: 1. Çok turlu etkileşimli sahtecilik kanıtlama, L1 zincirinin ihtilaf arabuluculuğu sırasında yapması gereken işi en aza indirgediği için verimli kabul edilir. L1 zincirinin tüm işlemi yeniden gerçekleştirmek yerine sadece toplamanın yürütülmesinde bir adımı yeniden yürütmesi gerekir. -2. İkiye bölme protokolleri, zincir üstünde gönderilen veri miktarını azaltır (her işlem için durum taahhütleri yayımlama ihtiyacı olmaz). Ayrıca, iyimser toplama işlemleri Ethereum'un gaz limiti ile kısıtlı değildir. Tersine, işlemleri yeniden yürüten iyimser toplamalar, bir L2 işleminin yürütümünü tek bir Ethereum işlemi içinde taklit etmek için daha düşük bir gaz limitine sahip olmasını sağlamalıdır. +2. İkiye bölme protokolleri, zincir üstünde yayımlanan veri miktarını azaltır (her işlem için durum taahhütleri yayımlamaya gerek yoktur). Ayrıca, iyimser toplama işlemleri Ethereum'un gaz limiti ile kısıtlı değildir. Tersine, işlemleri yeniden yürüten iyimser toplamalar, bir L2 işleminin yürütümünü tek bir Ethereum işlemi içinde taklit etmek için daha düşük bir gaz limitine sahip olmasını sağlamalıdır. 3. Kötü niyetli sav sahibinin teminatının bir kısmı itiraz edene verilirken diğer kısmı yakılır. Yakma işlemi, doğrulayıcılar arasında danışıklı dövüşü engeller; iki doğrulayıcı sahte itirazlar başlatmak için iş birliği yaparsa, hala tüm hisse miktarının önemli bir kısmını kaybedeceklerdir. 4. Çok turlu etkileşimli kanıtlama, her iki tarafın da (sav sahibi ve itiraz eden) belirtilen zaman penceresi içinde hamle yapmasını gerektirir. Son tarih öncesinde harekete geçmemek, temerrüde düşen tarafın itirazı kaybetmesine neden olur. -#### Sahtecilik kanıtları iyimser toplamalar için neden önemlidir? {#fraud-proof-benefits} +#### Sahtekarlık kanıtları iyimser toplamalar için neden önemlidir {#fraud-proof-benefits} -Sahtecilik kanıtları, iyimser toplamalarda _güven gerektirmeyen kesinliği_ kolaylaştırdığı için önemlidir. Güven gerektirmeyez kesinlik, iyimser toplamaların bir niteliğidir ve bir işlemin, geçerli olduğu sürece sonunda kesinlikle onaylanacağını garanti eder. +Sahtekarlık kanıtları, iyimser toplamlarda _güven gerektirmeyen kesinliği_ kolaylaştırdıkları için önemlidir. Güven gerektirmeyez kesinlik, iyimser toplamaların bir niteliğidir ve bir işlemin, geçerli olduğu sürece sonunda kesinlikle onaylanacağını garanti eder. Kötü niyetli düğümler, sahte itirazlar başlatarak geçerli bir toplama bloğunun onaylanmasını geciktirmeye çalışabilir. Ancak sahtecilik kanıtları, eninde sonunda toplama bloğunun geçerliliğini kanıtlayacak ve onaylanmasını sağlayacaktır. -Bu, iyimser toplamaların başka bir güvenlik özelliği ile de ilgilidir: zincirin geçerliliği, dürüst _bir_ düğümün varlığına bağlıdır. Dürüst düğüm, geçerli savları yayımlayarak veya geçersiz savlara itiraz ederek zinciri doğru bir şekilde ilerletebilir. Her durumda, dürüst düğümle ihtilafa düşen kötü niyetli düğümler, sahtecilik kanıtlama süreci sırasında hisselerini kaybeder. +Bu aynı zamanda iyimser toplamaların başka bir güvenlik özelliğiyle de ilgilidir: zincirin geçerliliği _tek bir_ dürüst düğümün varlığına bağlıdır. Dürüst düğüm, geçerli savları yayımlayarak veya geçersiz savlara itiraz ederek zinciri doğru bir şekilde ilerletebilir. Her durumda, dürüst düğümle ihtilafa düşen kötü niyetli düğümler, sahtecilik kanıtlama süreci sırasında hisselerini kaybeder. ### L1/L2 birlikte çalışabilirliği {#l1-l2-interoperability} -İyimser toplamalar, Ethereum Ana Ağı ile birlikte çalışacak şekilde tasarlanmıştır ve kullanıcıların L1 ile L2 arasında mesaj ve keyfi veri iletimine izin verir. Ayrıca Ethereum Sanal Makinesi ile de uyumludurlar. Bu sayede mevcut [merkeziyetsiz uygulamaları](/developers/docs/dapps/) iyimser toplamalara taşıyabilir veya Ethereum geliştirme araçlarını kullanarak yeni merkeziyetsiz uygulamalar oluşturabilirsiniz. +İyimser toplamalar, Ethereum Ana Ağı ile birlikte çalışacak şekilde tasarlanmıştır ve kullanıcıların L1 ile L2 arasında mesaj ve keyfi veri iletimine izin verir. Ayrıca EVM ile de uyumludurlar, bu nedenle mevcut [merkeziyetsiz uygulamaları](/developers/docs/dapps/) iyimser toplamlara taşıyabilir veya Ethereum geliştirme araçlarını kullanarak yeni merkeziyetsiz uygulamalar oluşturabilirsiniz. #### 1. Varlık hareketi {#asset-movement} ##### Toplamaya giriş -Kullanıcılar, bir iyimser toplamayı kullanmak için ETH, ERC-20 jetonları ve diğer kabul edilen varlıkları toplamanın L1 üzerindeki [köprü](/developers/docs/bridges/) sözleşmesine yatırır. Köprü sözleşmesi, işlemi L2'ye iletir; burada eşdeğer bir miktar varlık üretilir ve iyimser toplamada kullanıcının seçtiği adrese gönderilir. +Bir iyimser toplamayı kullanmak için, kullanıcılar L1'deki toplamanın [köprü](/developers/docs/bridges/) sözleşmesine ETH, ERC-20 tokenleri ve diğer kabul edilen varlıkları yatırır. Köprü sözleşmesi, işlemi L2'ye iletir; burada eşdeğer bir miktar varlık üretilir ve iyimser toplamada kullanıcının seçtiği adrese gönderilir. -Kullanıcı tarafından oluşturulan işlemler (örneğin, L1 >> L2 yatırımı gibi) genellikle sıralayıcı bunları toplama sözleşmesine yeniden gönderene kadar sıraya alınır. Ancak sansür direncini korumak için iyimser toplamalar kullanıcılara, eğer işlem izin verilen maksimum sürenin ötesine taşınmışsa, işlemi doğrudan zincir üzerindeki toplama sözleşmesine gönderme imkanı sunar. +Kullanıcı tarafından oluşturulan işlemler (L1 > L2 para yatırma gibi) genellikle sıralayıcı bunları toplama sözleşmesine yeniden gönderene kadar sıraya alınır. Ancak, sansür direncini korumak için, iyimser toplamalar, izin verilen maksimum süreyi aşacak şekilde gecikmesi durumunda kullanıcıların işlemi doğrudan zincir üstü toplama sözleşmesine göndermesine olanak tanır. Bazı iyimser toplamalar, sıralayıcıların kullanıcıları sansürlemesini önlemek için daha basit bir yaklaşım benimser. Burada bir blok, toplama zincirinde işlenen işlemlere ek olarak önceki bloktan bu yana L1 sözleşmesine gönderilen tüm işlemler (örneğin, yatırımlar) tarafından tanımlanır. Eğer bir sıralayıcı bir L1 işlemini görmezden gelirse, (kanıtlanabilir şekilde) yanlış durum kökünü yayımlar; bu nedenle sıralayıcılar, L1 üzerinde yayımlandıktan sonra kullanıcı tarafından oluşturulan mesajları geciktiremezler. ##### Toplamadan çıkış -İyimser toplamadan Ethereum'a çekilmek, sahtecilik kanıtlama şeması nedeniyle daha zordur. Bir kullanıcı, L1'de emanet edilen fonları çekmek için L2 >> L1 işlemi başlattığında, yaklaşık yedi gün süren itiraz süresinin geçmesini beklemesi gerekir. Bununla birlikte, çekilme süreci oldukça basittir. +İyimser toplamadan Ethereum'a çekilmek, sahtecilik kanıtlama şeması nedeniyle daha zordur. Bir kullanıcı L1'de emanet edilen fonları çekmek için bir L2 > L1 işlemi başlatırsa, yaklaşık yedi gün süren meydan okuma süresinin sona ermesini beklemelidir. Bununla birlikte, çekilme süreci oldukça basittir. L2 toplaması üzerinde çekilme isteği başlatıldıktan sonra işlem, bir sonraki partiye dahil edilirken, kullanıcının toplamada bulunan varlıkları yakılır. Parti Ethereum üzerinde yayımlandıktan sonra kullanıcı, bir Merkle kanıtını hesaplayarak çıkış işleminin bloğa dahil edilmesini doğrulayabilir. Sonrasında ise işlemi L1'de tamamlamak ve fonları Ana Ağa çekmek için gecikme süresini beklemek gereklidir. -Ethereum'a fonları çekmeden önce bir hafta beklememek için iyimser toplama kullanıcıları bir **likidite sağlayıcısı** (LP) kullanabilir. Bir likidite sağlayıcısı, bekleyen bir L2 çekme işleminin sahipliğini üstlenir ve kullanıcıya L1 üzerinde ödeme yapar (bir ücret karşılığında). +Fonları Ethereum'a çekmeden önce bir hafta beklemekten kaçınmak için iyimser toplama kullanıcıları bir **likidite sağlayıcı** (LP) kullanabilir. Bir likidite sağlayıcısı, bekleyen bir L2 çekme işleminin sahipliğini üstlenir ve kullanıcıya L1 üzerinde ödeme yapar (bir ücret karşılığında). Likidite sağlayıcıları, fonları serbest bırakmadan önce kullanıcının çekme isteğinin geçerliliğini (zinciri kendileri yürüterek) kontrol edebilir. Bu şekilde, işlemin nihayetinde onaylanacağına dair güvenceleri olur (yani, güven gerektirmeyen kesinlik). -#### 2. ESM uyumluluğu {#evm-compatibility} +#### 2. EVM uyumluluğu {#evm-compatibility} -Geliştiriciler için iyimser toplamaların avantajı, [Ethereum Sanal Makinesi (EVM)](/developers/docs/evm/) ile uyumlulukları veya daha da iyi bir ifadeyle eşdeğerlikleridir. EVM uyumlu toplamalar, [Ethereum Sarı Kağıdı](https://ethereum.github.io/yellowpaper/paper.pdf)'ndaki spesifikasyonlara uyar ve EVM'yi bit kodu seviyesinde destekler. +Geliştiriciler için iyimser toplamaların avantajı, [Ethereum Sanal Makinesi (EVM)](/developers/docs/evm/) ile uyumlulukları veya daha da iyisi eşdeğerlikleridir. EVM uyumlu toplamalar, [Ethereum Sarı Bülteni](https://ethereum.github.io/yellowpaper/paper.pdf)'ndeki spesifikasyonlara uyar ve EVM'yi bayt kodu düzeyinde destekler. İyimser toplamalardaki EVM uyumluluğunun aşağıdaki avantajları vardır: @@ -182,7 +182,7 @@ ii. İyimser toplamaları kullanan geliştiriciler ve proje ekipleri, Ethereum a Mevcut araçları kullanmak, bu araçların yıllar boyunca kapsamlı şekilde denetlendiği, hata ayıkladığı ve geliştirildiği göz önünde bulunduruldduğunda önemlidir. Aynı zamanda Ethereum geliştiricilerinin tamamen yeni bir geliştirme yığınıyla geliştirme yapacaklarını öğrenme ihtiyaçlarını ortadan kaldırır. -#### 3. Çapraz zincir sözleşme çağrıları {#cross-chain-contract-calls} +#### 3. Zincirler arası sözleşme çağrıları {#cross-chain-contract-calls} Kullanıcılar (dışarıdan sahip olunan hesaplar), bir işlemi toplama sözleşmesine göndererek veya bunu bir sıralayıcı veya doğrulayıcıya yaptırarak L2 sözleşmeleriyle etkileşime geçerler. İyimser toplamalar ayrıca, Ethereum'daki sözleşme hesaplarının L1 ile L2 arasında mesaj iletimi ve veri aktarımı yapmak için köprüleme sözleşmeleri kullanarak L2 sözleşmeleri ile etkileşime geçmesine olanak tanır. Bu, Ethereum Ana Ağı'nda bir L1 sözleşmesinin, bir L2 iyimser toplaması üzerindeki sözleşmelere ait fonksiyonları çağırmak üzere programlanabileceği anlamına gelir. @@ -190,64 +190,64 @@ Kullanıcılar (dışarıdan sahip olunan hesaplar), bir işlemi toplama sözle Çapraz zincir sözleşme çağrısının bir örneği, daha önce açıklanan jeton yatırımıdır. L1'deki bir sözleşme, kullanıcının jetonlarını emanete koyar ve eşlenen bir L2 sözleşmesine toplamada eşdeğer bir miktar jetonun üretilmesi yönünde bir mesaj gönderir. -Çapraz zincir mesaj çağrıları sözleşme yürütümüne yol açtığı için hesaplamanın [gaz masraflarını](/developers/docs/gas/) genellikle göndericinin karşılaması gerekir. İşlemin hedef zincirde başarısız olmasını önlemek için yüksek bir gaz limiti belirlenmesi önerilir. Jeton köprüleme senaryosu bunun iyi bir örneğidir; işlemin L1 tarafı (jetonları yatırmak) çalışıyorsa ancak L2 tarafı (yeni jetonlar üretme) düşük gaz nedeniyle başarısız olursa, yatırım geri alınamaz hale gelir. +Zincirler arası mesaj çağrıları sözleşmenin yürütülmesiyle sonuçlandığından, göndericinin genellikle hesaplama için [gaz maliyetlerini](/developers/docs/gas/) karşılaması gerekir. İşlemin hedef zincirde başarısız olmasını önlemek için yüksek bir gaz limiti belirlenmesi önerilir. Jeton köprüleme senaryosu bunun iyi bir örneğidir; işlemin L1 tarafı (jetonları yatırmak) çalışıyorsa ancak L2 tarafı (yeni jetonlar üretme) düşük gaz nedeniyle başarısız olursa, yatırım geri alınamaz hale gelir. -Son olarak, sözleşmeler arasındaki L2 > L1 mesaj çağrıları, gecikmeleri de hesaba katılmalıdır (L1 > L2 çağrıları tipik olarak birkaç dakika sonra yürütülür). Bunun nedeni, iyimser toplamadan Ana Ağ'a gönderilen mesajların itiraz dönemi sona erene kadar yürütülememesidir. +Son olarak, sözleşmeler arasındaki L2 > L1 mesaj çağrılarının gecikmeleri hesaba katması gerektiğini unutmamalıyız (L1 > L2 çağrıları genellikle birkaç dakika sonra yürütülür). Bunun nedeni, iyimser toplamadan Ana Ağ'a gönderilen mesajların itiraz dönemi sona erene kadar yürütülememesidir. -## İyimser toplamalar nasıl çalışır? {#how-do-optimistic-rollup-fees-work} +## İyimser toplamalar nasıl çalışır? İyimser toplama ücretleri nasıl çalışır? {#how-do-optimistic-rollup-fees-work} -İyimser toplamalar, tıpkı Ethereum gibi kullanıcıların işlem başına ne kadar ödeyeceğini belirtmek için bir gaz ücreti şeması kullanır. İyimser toplamalarda tahsil edilen ücretler aşağıdaki bileşenlere bağlıdır: +İyimser toplamalar, tıpkı Ethereum gibi kullanıcıların işlem başına ne kadar ödeyeceğini belirtmek için bir gaz ücreti şeması kullanır. İyimser toplamlarda alınan ücretler aşağıdaki bileşenlere bağlıdır: -1. **Durum yazımı:** İyimser toplamalar, işlem verilerini ve blok başlıklarını (önceki blok başlığı karması, durum kökü, parti kökünden oluşur) Ethereum'da `blob` veya "ikili büyük nesne" olarak yayımlar. [EIP-4844](https://eips.ethereum.org/EIPS/eip-4844), verileri zincir üstünde bulundurmaya yarayan uygun maliyetli bir çözümü piyasaya sundu. `Blob`, toplamaların sıkıştırılmış durum geçiş verilerini Ethereum L1'e göndermesine olanak tanıyan yeni bir işlem alanıdır. Blob'lar, sonsuza kadar zincir üstünde kalan`calldata`'nın aksine kısa ömürlüdür ve istemcilerden [4096 dönem](https://github.com/ethereum/consensus-specs/blob/81f3ea8322aff6b9fb15132d050f8f98b16bdba4/configs/mainnet.yaml#L147) (yaklaşık 18 gün) sonra temizlenir. İyimser toplamalar, sıkıştırılmış işlemlerin toplu halde gönderilmesinde blob'ları kullanarak L1'e işlem yazma maliyetini önemli ölçüde azaltabilir. +1. **Durum yazma**: İyimser toplamalar, işlem verilerini ve blok başlıklarını (önceki blok başlığı karması, durum kökü, grup kökünden oluşan) Ethereum'a bir `blob` veya "ikili büyük nesne" olarak yayımlar. [EIP-4844](https://eips.ethereum.org/EIPS/eip-4844) verileri zincir üstünde dahil etmek için uygun maliyetli bir çözüm getirdi. `blob`, toplamaların sıkıştırılmış durum geçiş verilerini Ethereum L1'e göndermesine olanak tanıyan yeni bir işlem alanıdır. Kalıcı olarak zincir üstünde kalan `calldata`'nın aksine, bloblar kısa ömürlüdür ve [4096 dönemden](https://github.com/ethereum/consensus-specs/blob/81f3ea8322aff6b9fb15132d050f8f98b16bdba4/configs/mainnet.yaml#L147) (yaklaşık 18 gün) sonra istemcilerden budanabilir. İyimser toplamalar, sıkıştırılmış işlemlerin toplu halde gönderilmesinde blob'ları kullanarak L1'e işlem yazma maliyetini önemli ölçüde azaltabilir. -2. **Blob'ların harcadığı gaz**: Blob'lu işlemlerde, [EIP-1559](https://eips.ethereum.org/EIPS/eip-1559) tarafından tanıtılan mekanizmaya benzer dinamik bir ücret mekanizması kullanılır. Tip-3 işlemleri için gaz ücreti hesaplanırken ağ tarafından blob alanı talebine ve gönderilen işlemin blob alanı kullanımına bağlı olarak belirlenen blob'lar için ana ücret göz önünde bulundurulur. +2. **Kullanılan blob gazı**: Blob taşıyan işlemler, [EIP-1559](https://eips.ethereum.org/EIPS/eip-1559) tarafından getirilen mekanizmaya benzer dinamik bir ücret mekanizması kullanır. Tip-3 işlemleri için gaz ücreti hesaplanırken ağ tarafından blob alanı talebine ve gönderilen işlemin blob alanı kullanımına bağlı olarak belirlenen blob'lar için ana ücret göz önünde bulundurulur. -3. **L2 operatör ücretleri**: Bu, Ethereum'daki gaz ücretleri gibi işlem gerçekleştirirken ortaya çıkan bilgi işlem maliyetleri karşılığında toplama düğümlerine ödenen miktarı ifade eder. L2'ler daha yüksek işleme kapasitelerine sahip olduğundan ve Ethereum'daki doğrulayıcıları daha yüksek ücretli işlemlere öncelik vermeye zorlayan ağ tıkanıklıklarıyla karşılaşmadığından, toplama düğümleri daha düşük işlem ücretleri alır. +3. **L2 operatör ücretleri**: Bu, tıpkı Ethereum'daki gaz ücretleri gibi, işlemleri işlerken ortaya çıkan hesaplama maliyetlerinin telafisi olarak toplama düğümlerine ödenen tutardır. L2'ler daha yüksek işleme kapasitelerine sahip olduğundan ve Ethereum'daki doğrulayıcıları daha yüksek ücretli işlemlere öncelik vermeye zorlayan ağ tıkanıklıklarıyla karşılaşmadığından, toplama düğümleri daha düşük işlem ücretleri alır. -İyimser toplamalar, kullanıcıların ödeyeceği ücretleri azaltmak için işlemleri birleştirme ve `calldata`'yı sıkıştırarak veri yayımlama maliyetlerini düşürme gibi birkaç mekanizma uygular. Ethereum tabanlı iyimser toplamaları kullanmanın maliyetine ilişkin gerçek zamanlı bir genel bakış için [L2 ücret izleyici](https://l2fees.info/)ye göz atabilirsiniz. +İyimser toplamalar, veri yayımlama maliyetlerini azaltmak için işlemleri gruplama ve `calldata`'yı sıkıştırma da dahil olmak üzere, kullanıcılar için ücretleri azaltmaya yönelik çeşitli mekanizmalar uygular. Ethereum tabanlı iyimser toplamaları kullanmanın ne kadara mal olduğuna dair gerçek zamanlı bir genel bakış için [L2 ücret izleyicisini](https://l2fees.info/) kontrol edebilirsiniz. -## İyimser toplamalar Ethereum'u nasıl ölçeklendirir? {#scaling-ethereum-with-optimistic-rollups} +## İyimser toplamalar Ethereum'u nasıl ölçeklendirir? Ethereum'u iyimser toplamalarla ölçeklendirme {#scaling-ethereum-with-optimistic-rollups} -Açıklandığı gibi, iyimser toplamalar, veri erişilebilirliğini garanti etmek için Ethereum'a sıkıştırılmış işlem verileri yayımlar. Zincir üstünde yayımlanan verileri sıkıştırabilme yeteneği, iyimser toplamalar ile Ethereum'da ölçeklendirme hacmini artırmak açısından önemlidir. +Açıklandığı gibi, iyimser toplamalar, veri erişilebilirliğini garanti etmek için Ethereum'a sıkıştırılmış işlem verileri yayımlar. Zincir üstünde yayımlanan verileri sıkıştırma yeteneği, iyimser toplamalarla Ethereum'da verimi ölçeklendirmek için çok önemlidir. -Ana Ethereum zinciri, blokların ne kadar veriyi tutabileceğine dair sınırlamalar getirir ve bu, gaz birimleriyle ifade edilir ([ortalama blok boyutu](/developers/docs/blocks/#block-size) 15 milyon gazdır). Bu, her işlemin ne kadar gaz kullanabileceğini kısıtlasa da, aynı zamanda her işlemle ilişkili veriyi azaltarak blok başına işlenen işlem sayısını artırabileceğimiz anlamına gelir ve bu durum ölçeklenebilirliği doğrudan artırır. +Ana Ethereum zinciri, blokların ne kadar veri tutabileceğine dair, gaz birimleri cinsinden ifade edilen sınırlar koyar ([ortalama blok boyutu](/developers/docs/blocks/#block-size) 15 milyon gazdır). Bu, her işlemin ne kadar gaz kullanabileceğini kısıtlasa da, aynı zamanda her işlemle ilişkili veriyi azaltarak blok başına işlenen işlem sayısını artırabileceğimiz anlamına gelir ve bu durum ölçeklenebilirliği doğrudan artırır. -İyimser toplamalar, işlem verisi sıkıştırmasını gerçekleştirmek ve TPS oranlarını artırmak için birkaç teknik kullanır. Örneğin [bu makale](https://vitalik.eth.limo/general/2021/01/05/rollup.html), temel bir kullanıcı işleminin (ether gönderme) Ana Ağda ürettiği veri miktarı ile aynı işlemin bir toplamada ürettiği veri miktarını karşılaştırıyor: +İyimser toplamalar, işlem verisi sıkıştırmasını gerçekleştirmek ve TPS oranlarını artırmak için birkaç teknik kullanır. Örneğin, bu [makale](https://vitalik.eth.limo/general/2021/01/05/rollup.html), temel bir kullanıcı işleminin (ether gönderme) Ana Ağ'da ürettiği veriyi, aynı işlemin bir toplamada ürettiği veriyle karşılaştırır: -| Parametre | Ethereum (L1) | Toplama (L2) | -| ---------- | ----------------------- | ------------ | -| Nonce | ~3 | 0 | -| Gaz fiyatı | ~8 | 0-0,5 | -| Gaz | 3 | 0-0,5 | -| Kime | 21 | 4 | -| Değer | 9 | ~3 | -| İmza | ~68 (2 + 33 + 33) | ~0,5 | -| Kimden | 0 (imzadan kurtarılmış) | 4 | -| **Toplam** | **~112 bayt** | **~12 bayt** | +| Parametre | Ethereum (L1) | Toplama (L2) | +| ---------- | ---------------------------------------------------- | ------------------------------- | +| Nonce | ~3 | 0 | +| Gaz fiyatı | ~8 | 0-0,5 | +| Gaz | 3 | 0-0,5 | +| Kime | 21 | 4 | +| Değer | 9 | ~3 | +| İmza | ~68 (2 + 33 + 33) | ~0,5 | +| Kimden | 0 (imzadan kurtarılmış) | 4 | +| **Toplam** | **~112 bayt** | **~12 bayt** | Bu veriler üzerinde yapılan yaklaşık hesaplamalar, iyimser toplamanın sağladığı ölçeklenebilirlik iyileştirmelerini göstermeye yardımcı olabilir: 1. Her blok için hedeflenen boyut 15 milyon gaz ve bir bayt veriyi doğrulamanın maliyeti 16 gazdır. Ortalama blok boyutunu 16 gaza bölmek (15.000.000/16), ortalama bir bloğun **937.500 bayt veri** tutabileceğini gösterir. -2. Temel bir toplama işlemi 12 bayt kullanıyorsa, ortalama bir Ethereum bloğu **78.125 toplama işlemi ** (937.500/12) veya (her parti ortalama 2,000 işlem içeriyorsa) **39 toplama partisi** işleyebilir. -3. Ethereum'da her 15 saniyede bir yeni bir blok üretilirse, toplamanın işleme hızı yaklaşık olarak **saniyede 5.208 işlem** olur. Bu, bir Ethereum bloğunun tutabileceği toplama işlemlerinin sayısını (**78.125**) ortalama blok süresine (**15 saniye**) bölerek hesaplanır. +2. Temel bir toplama işlemi 12 bayt kullanıyorsa, ortalama bir Ethereum bloğu **78.125 toplama işlemi** (937.500/12) veya **39 toplama grubu** (her grup ortalama 2.000 işlem içeriyorsa) işleyebilir. +3. Ethereum'da her 15 saniyede bir yeni bir blok üretilirse, toplamanın işlem hızı kabaca **saniyede 5.208 işlem** olur. Bu, bir Ethereum bloğunun tutabileceği temel toplama işlemlerinin sayısını (**78.125**) ortalama blok süresine (**15 saniye**) bölerek yapılır. Bu, iyimser toplama işlemlerinin asla tam bir Ethereum bloğunu oluşturamayacağı göz önüne alındığında, oldukça iyimser bir tahmindir. Bununla birlikte, iyimser toplamaların Ethereum kullanıcılarına ne kadar ölçeklenebilirlik kazancı sağlayabileceği hakkında yaklaşık bir fikir verebilir (mevcut uygulamalar 2.000 TPS'ye kadar sunar). -[Veri parçalamanın](/roadmap/danksharding/) Ethereum'da iyimser toplamalarda ölçeklenebilirliği artırması beklenmektedir. Toplama işlemleri, blok alanını toplama olmayan diğer işlemlerle paylaşmak zorunda olduğundan işleme kapasiteleri, ana Ethereum zincirindeki veri hacmiyle sınırlıdır. Danksharding, L2 zincirlerinin veri yayımlamak için kullanabileceği blok başına alanı artırırken pahalı, kalıcı `CALLDATA` yerine daha ucuz, geçici "blob" depolama kullanacaktır. +Ethereum'da [veri parçalamanın](/roadmap/danksharding/) getirilmesinin, iyimser toplamlarda ölçeklenebilirliği iyileştirmesi beklenmektedir. Toplama işlemleri, blok alanını toplama olmayan diğer işlemlerle paylaşmak zorunda olduğundan işleme kapasiteleri, ana Ethereum zincirindeki veri hacmiyle sınırlıdır. Danksharding, pahalı ve kalıcı `CALLDATA` yerine daha ucuz, geçici "blob" depolamayı kullanarak L2 zincirlerinin blok başına veri yayımlaması için mevcut alanı artıracaktır. ### İyimser toplamaların artıları ve eksileri {#optimistic-rollups-pros-and-cons} -| Artıları | Eksileri | -| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Artıları | Eksileri | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | Güvenlikten veya güven gerektirmezlikten ödün vermeden ölçeklenebilirlikte büyük iyileştirmeler sunar. | Potansiyel sahtecilik zorlukları nedeniyle işlemin kesinleştirilmesinde gecikmeler. | -| İşlem verileri katman 1 zincirinde depolanır, bu da şeffaflığı, güvenliği, sansür direncini ve merkeziyetsizliği artırır. | Merkezi toplama operatörleri (sıralayıcılar), işlem sıralamasını etkileyebilir. | +| İşlem verileri katman 1 zincirinde depolanır, bu da şeffaflığı, güvenliği, sansür direncini ve merkeziyetsizliği artırır. | Merkezi toplama operatörleri (sıralayıcılar), işlem sıralamasını etkileyebilir. | | Sahteciliğin kanıtlanması, güven gerektirmez kesinliği garanti eder ve dürüst azınlıkların zinciri güvence altına almasına olanak tanır. | Dürüst düğüm yoksa, kötü niyetli bir operatör geçersiz bloklar ve durum taahhütleri yayımlayarak fonları çalabilir. | -| Sahtecilik kanıtlarının hesaplanması, özel donanım gerektiren doğruluk kanıtlarının (ZK toplamalarında kullanılan) aksine, normal L2 düğümüne açıktır. | Güvenlik modeli, en az bir dürüst düğümün toplama işlemlerini yürütmesine ve geçersiz durum geçişlerine karşı sahtekarlık kanıtlarını sunmasına dayanır. | -| Toplamalar "güvenilmez canlılıktan" yararlanır (herkes işlemleri yürüterek ve savlar yayımlayarak zinciri ilerlemeye zorlayabilir) | Kullanıcılar, fonları Ethereum'a geri çekmek için bir haftalık itiraz süresinin sona ermesini beklemelidir. | -| İyimser toplamalar, zincirdeki güvenliği artırmak için iyi tasarlanmış kriptoekonomik teşviklere güvenir. | Toplamaların tüm işlem verilerini zincir üzerinde yayımlaması gerekir, bu da maliyetleri artırabilir. | -| EVM ve Solidity ile uyumluluk, geliştiricilerin Ethereum'a özgü akıllı sözleşmeleri toplamalara taşımasına veya yeni merkeziyetsiz uygulamalar oluşturmak için mevcut araçları kullanmasına olanak tanır. | | +| Sahtecilik kanıtlarının hesaplanması, özel donanım gerektiren doğruluk kanıtlarının (ZK toplamalarında kullanılan) aksine, normal L2 düğümüne açıktır. | Güvenlik modeli, en az bir dürüst düğümün toplama işlemlerini yürütmesine ve geçersiz durum geçişlerine karşı sahtekarlık kanıtlarını sunmasına dayanır. | +| Toplamalar "güvenilmez canlılıktan" yararlanır (herkes işlemleri yürüterek ve savlar yayımlayarak zinciri ilerlemeye zorlayabilir) | Kullanıcılar, fonları Ethereum'a geri çekmek için bir haftalık itiraz süresinin sona ermesini beklemelidir. | +| İyimser toplamalar, zincirdeki güvenliği artırmak için iyi tasarlanmış kriptoekonomik teşviklere güvenir. | Toplamaların tüm işlem verilerini zincir üstünde yayımlaması gerekir, bu da maliyetleri artırabilir. | +| EVM ve Solidity ile uyumluluk, geliştiricilerin Ethereum'a özgü akıllı sözleşmeleri toplamalara taşımasına veya yeni merkeziyetsiz uygulamalar oluşturmak için mevcut araçları kullanmasına olanak tanır. | | -### İyimser toplamaların görsel açıklaması {#optimistic-video} +### İyimser toplamaların görsel bir açıklaması {#optimistic-video} Görerek öğrenmeyi mi tercih ediyorsunuz? Finematics'in iyimser toplamalar hakkındaki açıklamasını izleyin: @@ -255,9 +255,11 @@ Görerek öğrenmeyi mi tercih ediyorsunuz? Finematics'in iyimser toplamalar hak ## İyimser toplamalara dair daha fazlası -- [İyimser toplamalar nasıl çalışır? (Tam klavuz)](https://www.alchemy.com/overviews/optimistic-rollups) -- [Blokzincir Toplaması nedir? Teknik Giriş](https://www.ethereum-ecosystem.com/blog/what-is-a-blockchain-rollup-a-technical-introduction) -- [Temel Arbitrum Rehberi](https://www.bankless.com/the-essential-guide-to-arbitrum) -- [Optimism'in Toplaması aslında nasıl çalışıyor?](https://www.paradigm.xyz/2021/01/how-does-optimism-s-rollup-really-work) -- [OVM Deep Dive](https://medium.com/ethereum-optimism/ovm-deep-dive-a300d1085f52) -- [İyimser Sanal Makine nedir?](https://www.alchemy.com/overviews/optimistic-virtual-machine) +- [İyimser toplamalar nasıl çalışır (Kapsamlı rehber)](https://www.alchemy.com/overviews/optimistic-rollups) +- [Blokzincir Toplaması nedir? Teknik Bir Giriş](https://www.ethereum-ecosystem.com/blog/what-is-a-blockchain-rollup-a-technical-introduction) +- [Arbitrum için Temel Rehber](https://www.bankless.com/the-essential-guide-to-arbitrum) +- [Ethereum Toplamaları için Pratik Rehber](https://web.archive.org/web/20241108192208/https://research.2077.xyz/the-practical-guide-to-ethereum-rollups) +- [Ethereum L2'lerinde Sahtekarlık Kanıtlarının Durumu](https://web.archive.org/web/20241124154627/https://research.2077.xyz/the-state-of-fraud-proofs-in-ethereum-l2s) +- [Optimism'in Toplaması Gerçekten Nasıl Çalışır?](https://www.paradigm.xyz/2021/01/how-does-optimism-s-rollup-really-work) +- [OVM Derinlemesine İnceleme](https://medium.com/ethereum-optimism/ovm-deep-dive-a300d1085f52) +- [İyimser Sanal Makine Nedir?](https://www.alchemy.com/overviews/optimistic-virtual-machine) diff --git a/public/content/translations/tr/developers/docs/scaling/plasma/index.md b/public/content/translations/tr/developers/docs/scaling/plasma/index.md index a500b1ef2d0..937fb09c5d7 100644 --- a/public/content/translations/tr/developers/docs/scaling/plasma/index.md +++ b/public/content/translations/tr/developers/docs/scaling/plasma/index.md @@ -1,48 +1,48 @@ --- title: Plazma zincirleri -description: Şu anda Ethereum topluluğu tarafından kullanılan bir ölçeklendirme çözümü olarak plazma zincirlerine giriş. +description: "Şu anda Ethereum topluluğu tarafından kullanılan bir ölçeklendirme çözümü olarak plazma zincirlerine giriş." lang: tr incomplete: true sidebarDepth: 3 --- -Plazma zinciri, Ethereum Ana Ağı'na bağlı ayrı bir blokzincirdir fakat işlemleri kendi blok doğrulama mekanizmasıyla zincir dışında yürütür. Plazma zincirleri, esasen Ethereum Ana Ağı'nın daha küçük kopyaları oldukları için bazen "alt" zincirler olarak adlandırılır. Plazma zincirleri, uyuşmazlıkları çözüme kavuşturmak için [sahtecilik kanıtlarını](/glossary/#fraud-proof) ([iyimser toplamalar gibi](/developers/docs/scaling/optimistic-rollups/)) kullanır. +Plazma zinciri, Ethereum Ana Ağı'na bağlı ayrı bir blokzincirdir fakat işlemleri kendi blok doğrulama mekanizmasıyla zincir dışında yürütür. Plazma zincirleri, esasen Ethereum Ana Ağı'nın daha küçük kopyaları oldukları için bazen "alt" zincirler olarak adlandırılır. Plazma zincirleri, anlaşmazlıkları çözmek için ([iyimser toplamalar](/developers/docs/scaling/optimistic-rollups/) gibi) [sahtecilik kanıtları](/glossary/#fraud-proof) kullanır. Merkle ağaçları, üst zincirlerdeki (Ethereum Ana Ağı dahil) bant genişliğini boşaltmak için bu zincirlerin sınırsız bir yığınının oluşturulmasını sağlar. Bununla birlikte, bu zincirler Ethereum'dan bir miktar güvenlik (sahtecilik kanıtları aracılığıyla) edinse de, güvenlikleri ve verimlilikleri birkaç tasarım kısıtlamasından etkilenir. -## Ön koşullar {#prerequisites} +## Ön Koşullar {#prerequisites} -Temeli oluşturan tüm konuları iyi anlamalı ve [Ethereum ölçeklendirmesi](/developers/docs/scaling/) konusunda ileri düzeyde bilgiye sahip olmalısınız. +Tüm temel konuları iyi anlamalı ve [Ethereum ölçeklendirmesi](/developers/docs/scaling/) hakkında üst düzey bir anlayışa sahip olmalısınız. ## Plazma nedir? -Plazma, Ethereum gibi halka açık blokzincirlerdeki ölçeklendirmeyi geliştirmek için oluşturulan bir yapıdır. Orijinal [Plazma tanıtım belgesi](http://plasma.io/plasma.pdf)nde belirtildiği gibi, Plazma zincirleri başka bir blokzincirini üstüne inşa edilmiştir (buna "kök zincir" denir). Her "alt zincir" kök zincirden büyür ve genelde üst zincirde dağıtılmış bir akıllı sözleşme tarafından yönetilir. +Plazma, Ethereum gibi halka açık blokzincirlerdeki ölçeklendirmeyi geliştirmek için oluşturulan bir yapıdır. Orijinal [Plazma tanıtım belgesinde](http://plasma.io/plasma.pdf) belirtildiği gibi, Plazma zincirleri ("kök zincir" adı verilen) başka bir blokzincirinin üzerine inşa edilmiştir. Her "alt zincir" kök zincirden büyür ve genelde üst zincirde dağıtılmış bir akıllı sözleşme tarafından yönetilir. -Plazma sözleşmesi diğer şeylerin arasında kullanıcıların Ethereum Ana Ağından Plazma zincirine kaynaklarını taşımalarına yarayan bir [köprü](/developers/docs/bridges/) görevi görür. Bu onları [yan zincirler](/developers/docs/scaling/sidechains/)e benzer bir hale getirse de plazma zincirler, en azından bir yere kadar, Ethereum Ana Ağı'nın güvenliğinden faydalanırlar. Bu, kendi güvenliğinden tamamen kendi sorumlu olan yan zincirlerden farklıdır. +Plazma sözleşmesi, diğer şeylerin yanı sıra, kullanıcıların varlıklarını Ethereum Ana Ağı ile plazma zinciri arasında taşımasına olanak tanıyan bir [köprü](/developers/docs/bridges/) işlevi görür. Bu onları [yan zincirlere](/developers/docs/scaling/sidechains/) benzer kılsa da plazma zincirleri en azından bir ölçüde Ethereum Ana Ağı'nın güvenliğinden yararlanır. Bu, kendi güvenliğinden tamamen kendi sorumlu olan yan zincirlerden farklıdır. ## Plazma nasıl çalışır? Plazma yapısının basit bileşenleri şunlardır: -### Zincir dışında hesaplama {#off-chain-computation} +### Zincir dışı hesaplama {#offchain-computation} -Ethereum'un şu andaki işlem hızı saniye başına ~ 15-20 işlemle sınırlandırılmıştır, bu da daha fazla kullanıcıyı idare etmek için ölçeklendirmenin kısa vadeli olasılığını azaltır. Bu problem çoğunlukla Ethereum'un [mutabakat mekanizmasının](/developers/docs/consensus-mechanisms/) blokzincirin durumundaki her güncellemeyi onaylamak için çok fazla eşler arası düğüme ihtiyaç duymasından kaynaklıdır. +Ethereum'un şu andaki işlem hızı saniye başına ~ 15-20 işlemle sınırlandırılmıştır, bu da daha fazla kullanıcıyı idare etmek için ölçeklendirmenin kısa vadeli olasılığını azaltır. Bu sorun temel olarak Ethereum'un [mutabakat mekanizmasının](/developers/docs/consensus-mechanisms/) blokzincirinin durumuna ilişkin her güncellemeyi doğrulamak için çok sayıda eşler arası düğüm gerektirmesinden kaynaklanmaktadır. Ethereum'un mutabakat mekanizması güvenlik için gerekli olsa da, bu her olası olay durum için geçerli olmayabilir. Örnek olarak, iki tarafta da belli bir güven ilişkisi olduğu durumlarda Alice, Bob'a yaptığı günlük kahve ödemesinin Ethereum Ağı'nın tamamı tarafından doğrulanmasına ihtiyaç duymayabilir. Plazma, Ethereum Ana Ağı'nın tüm işlemleri doğrulamasına gerek olmadığını varsayar. Bunun yerine düğümleri her işlemi doğrulama zorunluluğundan kurtararak işlemleri Ana Ağ dışından yapabiliriz. -Zincir dışında hesaplama, Plazma zincirlerinin hız ve masraflar için optimize edilebilmesi için gereklidir. Örnek olarak, Plazma işlemlerin düzenlenmesi ve yürütülmesi için tekli bir operatör kullanabilir; çoğu zaman da böyle olur. İşlemleri doğrulayan sadece bir varlık olunca, plazma zincirindeki işleme süreleri Ethereum Ana Ağı'na göre daha hızlı hale gelir. +Plazma zincirleri hız ve maliyet için optimize edilebildiğinden zincir dışı hesaplama gereklidir. Örnek olarak, Plazma işlemlerin düzenlenmesi ve yürütülmesi için tekli bir operatör kullanabilir; çoğu zaman da böyle olur. İşlemleri doğrulayan sadece bir varlık olunca, plazma zincirindeki işleme süreleri Ethereum Ana Ağı'na göre daha hızlı hale gelir. ### Durum taahhütleri {#state-commitments} -Plazma işlemleri zincir dışında yapsa da, işlemler Ethereum yürütüm katmanındadır; aksi takdirde, Plazma zincirleri Ethereum'un güvenlik garantilerinden faydalanamaz. Fakat zincir dışında işlemleri plazma zincirinin durumunu bilmeden kesinleştirmek, güvenlik modeliyle çelişecek ve geçersiz işlemleri yaygınlaştıracaktır. Bu yüzden plazma zincirinde blokları oluşturmaktan sorumlu yapı olan operatör, Ethereum'da periyodik olarak "durum taahhütleri" yayımlamalıdır. +Plazma, işlemleri zincir dışında yürütürken, bunlar ana Ethereum yürütme katmanında sonuçlandırılır; aksi takdirde Plazma zincirleri, Ethereum'un güvenlik garantilerinden yararlanamaz. Ancak zincir dışı işlemleri plazma zincirinin durumunu bilmeden sonuçlandırmak güvenlik modelini bozar ve geçersiz işlemlerin yayılmasına neden olur. Bu yüzden plazma zincirinde blokları oluşturmaktan sorumlu yapı olan operatör, Ethereum'da periyodik olarak "durum taahhütleri" yayımlamalıdır. -Bir [ taahhüt şeması](https://en.wikipedia.org/wiki/Commitment_scheme), bir ifade ya da değeri başka bir kişiye göstermeden girmeye yönelik kriptografik bir tekniktir. Taahhütler siz içine girdikten sonra ifadeleri ya da değerleri değiştiremeyeceğiniz şekilde "bağlayıcı"dır. Plazmadaki durum taahhütleri ([Merkle ağacından](/whitepaper/#merkle-trees) türetilen) "Merkle kökleri" formunu alır, bunu da operatör belli zamanlarda Ethereum Zincirindeki Plazma Sözleşmesine gönderir. +Bir [taahhüt şeması](https://en.wikipedia.org/wiki/Commitment_scheme), bir değeri veya beyanı başka bir tarafa açıklamadan taahhüt etmek için kullanılan kriptografik bir tekniktir. Taahhütler siz içine girdikten sonra ifadeleri ya da değerleri değiştiremeyeceğiniz şekilde "bağlayıcı"dır. Plazma'daki durum taahhütleri, operatörün belirli aralıklarla Ethereum zincirindeki Plazma sözleşmesine gönderdiği ([Merkle ağacından](/whitepaper/#merkle-trees) türetilen) "Merkle kökleri" biçimini alır. -Merkle kökleri büyük miktarda bilgiyi sıkıştırmaya yarayan kriptografik parçalardır. Bir Merkle kökü (bu durumda "blok kökü" de denir) bir bloktaki tüm işlemleri temsil edebilir. Merkle kökleri ayrıca küçük bir veri parçasının daha büyük bir veri setinin bir parçası olduğunu doğrulamayı da kolaylaştırır. Örnek olarak, bir kullanıcı bir işlemin spesifik bir bloğa dahil olduğunu kanıtlamak için bir [Merkle ispatı](/developers/tutorials/merkle-proofs-for-offline-data-integrity/#main-content) oluşturabilir. +Merkle kökleri büyük miktarda bilgiyi sıkıştırmaya yarayan kriptografik parçalardır. Bir Merkle kökü (bu durumda "blok kökü" de denir) bir bloktaki tüm işlemleri temsil edebilir. Merkle kökleri ayrıca küçük bir veri parçasının daha büyük bir veri setinin bir parçası olduğunu doğrulamayı da kolaylaştırır. Örneğin, bir kullanıcı, bir işlemin belirli bir blokta yer aldığını kanıtlamak için bir [Merkle kanıtı](/developers/tutorials/merkle-proofs-for-offline-data-integrity/#main-content) üretebilir. -Merkle kökleri Ethereum'a zincir dışı ile ilgili bilgi sağlamak için önemlidir. Merkle köklerini "kayıt noktaları" olarak düşünebilirsiniz: Operatör şunu söyler: "Plazma zincirinin zamanda x noktasındaki durumu budur ve bu da kanıtı olan Merkle köküdür." Operatör, plazma zincirinin _güncel durumuna_ Merkle köküyle işlenir, bu yüzden de buna "durum taahhüdü" denir. +Merkle kökleri, Ethereum'a zincir dışı durum hakkında bilgi sağlamak için önemlidir. Merkle köklerini "kayıt noktaları" olarak düşünebilirsiniz: Operatör şunu söyler: "Plazma zincirinin zamanda x noktasındaki durumu budur ve bu da kanıtı olan Merkle köküdür." Operatör, bir Merkle kökü ile plazma zincirinin _mevcut durumunu_ taahhüt eder, bu nedenle buna "durum taahhüdü" denir. ### Girişler ve çıkışlar {#entries-and-exits} @@ -50,11 +50,11 @@ Ethereum kullanıcılarının Plazmadan faydalanabilmesi için varlıkları Ana Plazma, kullanıcı giriş ve çıkışlarını işlemek için Ethereum'da bir ana sözleşme kullanır. Bu ana sözleşme ayrıca durum taahhütlerini takip etmede (daha önce açıklanmıştır) ve sahtecilik kanıtıyla (bu konuda başka açıklamalar da yapılacak) sahtecilik davranışlarını cevalandırmaktan da sorumludur. -#### Plazma zincirine girme {#entering-the-plasma-chain} +#### Plazma zincirine giriş {#entering-the-plasma-chain} Plazma zincirine girmek için Alice (kullanıcı) plazma sözleşmesine ETH ya da herhangi bir ERC-20 jetonu yatırmak zorunda olacaktır. Plazma operatörü, sözleşme depozitolarını inceler, Alice'in başlangıçta yatırdığı miktara eşit bir miktarı yeniden yaratır ve bunu plazma zincirindeki adresine bırakır. Alice, alt zincirde bu fonları aldığını tasdik etmek zorundadır ve bunun ardından bu fonları işlemler için kullanabilir. -#### Plazma zincirinden çıkma {#exiting-the-plasma-chain} +#### Plazma zincirinden çıkış {#exiting-the-plasma-chain} Plazma zincirinden çıkmak, birkaç sebepten dolayı girmekten daha karmaşıktır. Bunlardan en büyüğü, Ethereum'un plazma zincirinin durumundan haberdar olmasına karşın, bu bilginin doğru olup olmadığını kanıtlayamamasıdır. Kötü niyetli bir kullanıcı yanlış bir savda ("1000 ETH'm var) bulunabilir ve savını sahte kanıtlarla desteklemesi yanına kalabilir. @@ -62,17 +62,17 @@ Bu kötü niyetli çekimleri engellemek için bir "itiraz dönemi" devreye alın Buna rağmen, kullanıcılar genelde dürüsttür ve sahip oldukları fonlarla ilgili genelde doğru iddialarda bulunurlar. Bu senaryoda, Alice plazma zincirine bir işlem göndererek kök zincirden (Ethereum) bir çekim talebi oluşturacaktır. -Ayrıca Plazma zincirinde fonlarını yaratan işlemin bir bloğa dahil edildiğini de bir Merkle ispatıyla doğrulamak zorundadır. Bu, bir [Harcanmamış İşlem Çıktısı (UTXO)](https://en.wikipedia.org/wiki/Unspent_transaction_output) modeli kullanan [Plazma MVP](https://www.learnplasma.org/en/learn/mvp.html) gibi plazma yinelemeleri için gereklidir. +Ayrıca Plazma zincirinde fonlarını yaratan işlemin bir bloğa dahil edildiğini de bir Merkle ispatıyla doğrulamak zorundadır. Bu, [Harcanmamış İşlem Çıktısı (UTXO)](https://en.wikipedia.org/wiki/Unspent_transaction_output) modelini kullanan [Plazma MVP](https://www.learnplasma.org/en/learn/mvp.html) gibi Plazma yinelemeleri için gereklidir. -[Plasma Cash](https://www.learnplasma.org/en/learn/cash.html) gibi diğerleri, UTXO'lar yerine [değiştirilemez jetonlar](/developers/docs/standards/tokens/erc-721/) gibi fonları temsil eder. Bu durumda çekme, Plazma zincirinde jetona sahip olunduğuna dair bir kanıt gerektirir. Bu, jetonu içinde bulunduran son 2 işlemi gönderip bu işlemlerin bir bloğa dahil olduğunu doğrulayan bir Merkle ispatı sağlayarak yapılır. +[Plazma Cash](https://www.learnplasma.org/en/learn/cash.html) gibi diğerleri, fonları UTXO'lar yerine [değiştirilemez jetonlar](/developers/docs/standards/tokens/erc-721/) olarak temsil eder. Bu durumda çekme, Plazma zincirinde jetona sahip olunduğuna dair bir kanıt gerektirir. Bu, jetonu içinde bulunduran son 2 işlemi gönderip bu işlemlerin bir bloğa dahil olduğunu doğrulayan bir Merkle ispatı sağlayarak yapılır. Kullanıcı, çekim talebine dürüst davranışın garantisi olarak bir teminat eklemek zorundadır. İtiraz eden kişi, Alice'in çekim talebinin geçersiz olduğunu kanıtlarsa, teminatı kesilir ve bir kısmı ödül olarak itiraz edene gider. İtiraz süresi herhangi biri sahtecilik kanıtı sağlamadan sona ererse, Alice'in geri çekim talebi geçerli sayılır, bu da yatırdıklarını Ethereum üzerindeki Plazma sözleşmesinden geri almasını sağlar. -### Uyuşmazlık hakemliği {#dispute-arbitration} +### Anlaşmazlık tahkimi {#dispute-arbitration} -Her blokzincir gibi, plazma zincirleri de katılımcıların kötü niyetli davranışları (örn. fonları çift harcamak) ihtimaline karşı işlemlerin dürüstlüğünü şart koşan bir mekanizmaya ihtiyaç duyar. Bunun için plazma zincirleri durum işlemlerinin doğruluğunu ölçmek ve kötü davranışlara cevaplar vermek amacıyla yaptığı uyuşmazlık hakemliklerinde sahtecilik kanıtlarını kullanır. Sahtecilik kanıtları, Plazma alt zincirlerinin üst zincire ya da kök zincire şikayetler sunması şeklinde bir mekanizma olarak kullanılır. +Her blokzincir gibi, plazma zincirlerinin de katılımcıların kötü niyetli davranması (ör. fonları çifte harcama) durumunda işlemlerin bütünlüğünü sağlamak için bir mekanizmaya ihtiyacı vardır. Bunun için plazma zincirleri durum işlemlerinin doğruluğunu ölçmek ve kötü davranışlara cevaplar vermek amacıyla yaptığı uyuşmazlık hakemliklerinde sahtecilik kanıtlarını kullanır. Sahtecilik kanıtları, Plazma alt zincirlerinin üst zincire ya da kök zincire şikayetler sunması şeklinde bir mekanizma olarak kullanılır. Bir Sahtecilik kanıtı basitçe belli bir işlemin durumunun geçersiz olduğu iddiasıdır. Bir kullanıcının (Alice) aynı fonları iki kere harcamaya çalışması örnek olarak verilebilir. Belki UTXO'sunu Bob'la yaptığı bir işlemde harcamış ve aynı UTXO'yu (artık Bob'un olan) başka bir işlemde harcamak istiyordur. @@ -80,17 +80,17 @@ Bu çekimi engellemek için Bob, Alice'in bir önceki işlemde UTXO'yu harcadı Bob'un itirazı başarılı olursa, Alice'in çekim talebi iptal edilir. Bununla birlikte, bu yaklaşım Bob'un çekim taleplerini görmek için zinciri takip etme becerisine dayalıdır. Bob çevrimdışı ise, Alice bu kötü niyetli çekimini itiraz süresi dolduğunda işleme koyabilir. -## Plazmadaki toplu çıkış problemi {#the-mass-exit-problem-in-plasma} +## Plazmadaki toplu çıkış sorunu {#the-mass-exit-problem-in-plasma} -Toplu çıkış problemi, çok sayıda kullanıcı plazma zincirinden aynı anda çekim yapmayı denediğinde gerçekleşir. Bu problemin var olma sebebi, Plazma'nın en büyük problemlerinden biriyle alakalıdır: **veri erişilemezliği**. +Toplu çıkış problemi, çok sayıda kullanıcı plazma zincirinden aynı anda çekim yapmayı denediğinde gerçekleşir. Bu sorunun var olmasının nedeni, Plazma'nın en büyük sorunlarından biriyle ilgilidir: **veri kullanılamazlığı**. Veri kullanılabilirliği, önerilen bir bloğun blokzincir ağında gerçekten yayımlandığına dair bilginin doğrulanması olanağıdır. Bir blok eğer üretici, bloğun kendisini yayımlar fakat bloğun oluşturulmasında kullanılan veriyi saklarsa "erişilemez" olarak adlandırılır. -Bloklar, düğümler bloğu indirebiliyor ve işlemlerin geçerliliğini doğrulayabiliyorsa erişilebilir olmak zorundadır. Blokzincirler veri kullanılabilirliğini, blok üreticilerinin tüm işlem verilerini zincir üstünde yayımlamasını şart koşarak sağlar. +Bloklar, düğümler bloğu indirebiliyor ve işlemlerin geçerliliğini doğrulayabiliyorsa erişilebilir olmak zorundadır. Blokzincirler, blok üreticilerini tüm işlem verilerini zincir üstünde yayınlamaya zorlayarak veri kullanılabilirliğini sağlar. -Veri kullanılabilirliği ayrıca Ethereum'un temel katmanında inşa edilen zincir dışı ölçeklendirme protokollerinin güvenliğine de katkı sağlar. Bu zincirlerdeki operatörlerin işlem verilerini Ethereum'da yayımlamasını şart koşarak dileyen herkes geçersiz bloklara zincirin doğru durumunu referans alan sahtecilik kanıtları hazırlayarak itiraz edebilir. +Veri kullanılabilirliği, Ethereum'un temel katmanı üzerine inşa edilen zincir dışı ölçeklendirme protokollerinin güvenliğini sağlamaya da yardımcı olur. Bu zincirlerdeki operatörlerin işlem verilerini Ethereum'da yayımlamasını şart koşarak dileyen herkes geçersiz bloklara zincirin doğru durumunu referans alan sahtecilik kanıtları hazırlayarak itiraz edebilir. -Plazma zincirleri öncelikli olarak işlem verisini operatörle birlikte depolarlar ve **Ana Ağ'da hiçbir veri paylaşmazlar** (periyodik durum taahhütleri dışında). Bu, eğer kullanıcıların geçersiz işlemlere itiraz sahtecilik kanıtları oluşturmaları gerekiyorsa, bunun operatörün blok verisi sağlayıp sağlamadığına bağlı olduğu anlamına gelir. Eğer bu sistem çalışırsa, kullanıcılar kaynakları güvende tutmak için sahtecilik kanıtlarını her zaman kullanabilirler. +Plazma zincirleri, işlem verilerini öncelikli olarak operatörde depolar ve **Ana Ağ'da hiçbir veri yayımlamaz** (yani, periyodik durum taahhütleri dışında). Bu, eğer kullanıcıların geçersiz işlemlere itiraz sahtecilik kanıtları oluşturmaları gerekiyorsa, bunun operatörün blok verisi sağlayıp sağlamadığına bağlı olduğu anlamına gelir. Eğer bu sistem çalışırsa, kullanıcılar kaynakları güvende tutmak için sahtecilik kanıtlarını her zaman kullanabilirler. Problem, kötü niyetli davranan taraf herhangi bir kullanıcı değil, operatör olduğunda başlar. Blokzincirin kontrolü operatörün elinde olduğu için işin içine daha büyük ölçekte geçersiz durumda işlem sokmak adına plazma zincirindeki kullanıcıların sahip olduğu fonları çalmak gibi daha fazla gerekçesi vardır. @@ -98,7 +98,7 @@ Böyle bir durumda, klasik sahtecilik kanıtı sistemini kullanmak işe yaramaz. Bu yüzden, en iyimser çözüm yolu bir plazma zincirden kullanıcı "toplu çıkışı" denemesidir. Toplu çıkış, kötü niyetli operatörün fon çalma planını yavaşlatır ve kullanıcılara belli bir ölçüde güvenlik sağlar. Geri çekim talepleri her bir UTXO'nun (ya da jeton) oluşturulma zamanına göre sıralanarak kötü niyetli operatörlerin dürüst kullanıcılara front-running yapmasını engeller. -Yine de, toplu çıkış sürecindeki geri çekim taleplerinin doğruluğunu onaylamak için bir yola ihtiyacımız vardır; fırsatçı bireylerin geçersiz çıkışlar işlenirken kaostan para kazanmasını engelleyen bir yola. Çözüm basittir: kullanıcılara paralarını çıkarmak için zincirin son **geçerli durumunu** gönderme zorunluluğu koymak. +Yine de, toplu çıkış sürecindeki geri çekim taleplerinin doğruluğunu onaylamak için bir yola ihtiyacımız vardır; fırsatçı bireylerin geçersiz çıkışlar işlenirken kaostan para kazanmasını engelleyen bir yola. Çözüm basittir: kullanıcıların fonlarını çekmek için **zincirin son geçerli durumunu** göndermelerini gerektirmek. Ama bu yaklaşımın hala sorunları vardır. Örnek olarak, plazma zincirindeki tüm kullanıcıların çıkması gerekiyorsa (kötü niyetli operatör durumunda bu mümkündür), plazma zincirinin bütün geçerli durumu hemen Ethereum'un temel katmanına boşaltılmak zorundadır. Plazma zincirlerinin keyfi boyutları (yüksek hacim = daha fazla veri) ve Ethereum'daki işleme hızı kısıtlamalarıyla bu pek de ideal bir çözüm değildir. @@ -106,29 +106,29 @@ Ama bu yaklaşımın hala sorunları vardır. Örnek olarak, plazma zincirindeki ## Plazmanın artıları ve eksileri {#pros-and-cons-of-plasma} -| Artıları | Eksileri | -| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Yüksek verim ve işlem başına düşük maliyet sunar. | Genel bilgi işlemi desteklemez (akıllı sözleşmeleri çalıştıramaz). Yüklem mantığı aracılığıyla yalnızca temel token aktarımları, takaslar ve diğer birkaç işlem türü desteklenir. | -| Rastgele kullanıcılar arasındaki işlemler için iyi (her ikisi de plazma zincirinde kuruluysa, kullanıcı çifti başına ek yük yoktur) | Fonlarınızın güvenliğini sağlamak için ağı periyodik olarak izlemeniz (canlılık gereksinimi) veya bu sorumluluğu başka birine devretme ihtiyacı. | -| Plazma zincirleri, ana zincirle ilgisi olmayan spesifik kullanım durumlarına uyarlanabilir. İşletmeler dahil herkes, farklı bağlamlarda çalışan ölçeklenebilir altyapı sağlamak için Plazma akıllı sözleşmelerini özelleştirebilir. | Verileri depolamak ve talep üzerine sunmak için bir veya daha fazla operatöre ihtiyaç duyar. | -| Bilgi işlemi ve depolamayı zincir dışına taşıyarak Ethereum Ana Ağı'ndaki yükü azaltır. | Zorluklara izin vermek için para çekme işlemleri birkaç gün ertelenir. Geri ödenebilir varlıklar için bu, likidite sağlayıcıları tarafından hafifletilebilir, ancak bununla ilişkili bir sermaye maliyeti vardır. | -| | Çok fazla kullanıcı aynı anda çıkmaya çalışırsa, Ethereum Mainnet'i tıkanabilir. | +| Artıları | Eksileri | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Yüksek verim ve işlem başına düşük maliyet sunar. | Genel amaçlı hesaplamayı desteklemez (akıllı sözleşmeleri çalıştıramaz). Yüklem mantığı aracılığıyla yalnızca temel token aktarımları, takaslar ve diğer birkaç işlem türü desteklenir. | +| Rastgele kullanıcılar arasındaki işlemler için iyi (her ikisi de plazma zincirinde kuruluysa, kullanıcı çifti başına ek yük yoktur) | Fonlarınızın güvenliğini sağlamak için ağı periyodik olarak izlemeniz (canlılık gereksinimi) veya bu sorumluluğu başka birine devretme ihtiyacı. | +| Plazma zincirleri, ana zincirle ilgisi olmayan spesifik kullanım durumlarına uyarlanabilir. İşletmeler dahil herkes, farklı bağlamlarda çalışan ölçeklenebilir altyapı sağlamak için Plazma akıllı sözleşmelerini özelleştirebilir. | Verileri depolamak ve talep üzerine sunmak için bir veya daha fazla operatöre ihtiyaç duyar. | +| Hesaplama ve depolamayı zincir dışına taşıyarak Ethereum Ana Ağı üzerindeki yükü azaltır. | Zorluklara izin vermek için para çekme işlemleri birkaç gün ertelenir. Geri ödenebilir varlıklar için bu, likidite sağlayıcıları tarafından hafifletilebilir, ancak bununla ilişkili bir sermaye maliyeti vardır. | +| | Çok fazla kullanıcı aynı anda çıkmaya çalışırsa, Ethereum Mainnet'i tıkanabilir. | -## Plazma ile katman 2 ölçeklendirme protokolleri karşılaştırması {#plasma-vs-layer-2} +## Plazma ve katman 2 ölçeklendirme protokolleri {#plasma-vs-layer-2} -Plazma bir zamanlar Ethereum için kullanışlı bir ölçeklendirme çözümü olarak görülüyordu ancak [katman 2 (L2)](/layer-2/)'ye geçiş yapmak amacıyla bu çözümden vazgeçildi. L2 ölçeklendirme çözümleri, Plazma'nın birkaç problemini çözüyor: +Plazma bir zamanlar Ethereum için kullanışlı bir ölçeklendirme çözümü olarak kabul edilse de o zamandan beri [katman 2 (L2) ölçeklendirme protokolleri](/layer-2/) lehine kullanımdan kaldırılmıştır. L2 ölçeklendirme çözümleri, Plazma'nın birkaç problemini çözüyor: ### Verimlilik {#efficiency} -[Sıfır Bilgi toplamaları](/developers/docs/scaling/zk-rollups), zincir dışında işlenen her bir işlem grubunun geçerliliğine ilişkin kriptografik kanıtlar üretir. Bu, kullanıcıların (ve operatörlerin) geçersiz durum geçişlerini ilerletmesini önleyerek itiraz dönemlerine ve çıkış senaryolarına olan ihtiyacı ortadan kaldırır. Bu, aynı zamanda kullanıcıların fonlarını güvence altına almak için zinciri periyodik olarak izlemelerine gerek kalmayacağı anlamına da gelir. +[Sıfır bilgi toplamaları](/developers/docs/scaling/zk-rollups), zincir dışında işlenen her işlem grubunun geçerliliğine dair kriptografik kanıtlar oluşturur. Bu, kullanıcıların (ve operatörlerin) geçersiz durum geçişlerini ilerletmesini önleyerek itiraz dönemlerine ve çıkış senaryolarına olan ihtiyacı ortadan kaldırır. Bu, aynı zamanda kullanıcıların fonlarını güvence altına almak için zinciri periyodik olarak izlemelerine gerek kalmayacağı anlamına da gelir. -### Akıllı sözleşme desteği {#support-for-smart-contracts} +### Akıllı sözleşmeler için destek {#support-for-smart-contracts} -Plazma yapısıyla ilgili bir diğer sorun da [Ethereum akıllı sözleşmelerinin yürütümüne destek olamamaktı](https://ethresear.ch/t/why-smart-contracts-are-not-feasible-on-plasma/2598/4). Sonuç olarak, Plazma uygulamalarının çoğu çoğunlukla basit ödemeler veya ERC-20 jetonlarının değişimi için oluşturuldu. +Plazma çerçevesiyle ilgili bir başka sorun da [Ethereum akıllı sözleşmelerinin yürütülmesini destekleyememesiydi](https://ethresear.ch/t/why-smart-contracts-are-not-feasible-on-plasma/2598/4). Sonuç olarak, Plazma uygulamalarının çoğu çoğunlukla basit ödemeler veya ERC-20 jetonlarının değişimi için oluşturuldu. -Tersine iyimser toplamalar, [Ethereum Sanal Makinası](/developers/docs/evm/) ile uyumludur ve Ethereum'a özgü [akıllı sözleşmeleri](/developers/docs/smart-contracts/) çalıştırabilir, bu da onları [merkezi olmayan uygulamaları](/developers/docs/dapps/) ölçeklendirmek için kullanışlı ve _güvenli_ bir çözüm haline getirir. Benzer şekilde, ZK toplamaların keyfi mantığı işlemesine ve akıllı sözleşmeleri yürütmesine olanak tanıyan bir [sıfır bilgi uygulaması olan EVM'yi (zkEVM)](https://ethresear.ch/t/a-zk-evm-specification/11549) oluşturma planları geliştirilmeye devam ediyor. +Tersine, iyimser toplamalar [Ethereum Sanal Makinesi](/developers/docs/evm/) ile uyumludur ve Ethereum'a özgü [akıllı sözleşmeleri](/developers/docs/smart-contracts/) çalıştırabilir, bu da onları [merkeziyetsiz uygulamaları](/developers/docs/dapps/) ölçeklendirmek için kullanışlı ve _güvenli_ bir çözüm haline getirir. Benzer şekilde, ZK-toplamaların isteğe bağlı mantığı işlemesine ve akıllı sözleşmeleri yürütmesine olanak tanıyacak [EVM'nin (zkEVM) sıfır bilgili bir uygulamasını oluşturma](https://ethresear.ch/t/a-zk-evm-specification/11549) planları devam etmektedir. -### Veri erişilemezliği {#data-unavailability} +### Veri kullanılamazlığı {#data-unavailability} Daha önce açıklandığı gibi plazmada veri kullanılabilirliği sorunu vardır. Eğer kötü niyetli bir operatör, geçersiz bir geçişi plazma zincirinde ilerletirse sahtecilik kanıtı oluşturmak için gereken verileri saklayabileceği için kullanıcılar buna itiraz edemez. Toplamalar, operatörleri Ethereum'a işlem verilerini göndermeye zorlayarak bu sorunu çözer, böylece herhangi birinin zincirin durumunu doğrulayabilmesine ve gerektiğinde sahtecilik kanıtları oluşturabilmesine olanak tanır. @@ -142,9 +142,10 @@ Benzer şekilde iyimser toplamalar, çekimler üzerinde bir gecikme süresi uygu Plazma, yan zincirler ve parçalama oldukça benzerdir, çünkü hepsi bir şekilde Ethereum Ana Ağı'na bağlanır. Ancak, bu bağlantıların düzeyi ve gücü değişiklik gösterir ve bu da her ölçeklendirme çözümünün güvenlik özelliklerini etkiler. -### Plazma ile yan zincirler karşılaştırması {#plasma-vs-sidechains} +### Plazma ve yan zincirler {#plasma-vs-sidechains} -Bir [yan zincir](/developers/docs/scaling/sidechains/), Ethereum Ana Ağı'na iki yönlü bir köprü aracılığıyla bağlanan, bağımsız olarak çalışan bir blokzincirdir. [Köprüler](/bridges/) kullanıcıların yan zincirde işlem yapmak için iki blokzincir arasında jeton alışverişi yapmasına izin vererek Ethereum Ana Ağı'ndaki tıkanıklığı azaltır ve ölçeklenebilirliği artırır. Yan zincirler ayrı bir mutabakat mekanizması kullanır ve genellikle Ethereum Ana Ağı'ndan çok daha küçüktür. Sonuç olarak, varlıkları bu zincirlere bağlamak, artan risk içerir; yan zincir modelinde Ethereum Ana Ağı'ndan devralınan güvenlik garantilerinin olmaması göz önüne alındığında, kullanıcılar yan zincire yapılacak bir saldırıda fon kaybını riske etmiş olur. +Bir [yan zincir](/developers/docs/scaling/sidechains/), Ethereum Ana Ağı'na iki yönlü bir köprü aracılığıyla bağlanan, bağımsız olarak işletilen bir blokzincirdir. [Köprüler](/bridges/), kullanıcıların iki blokzincir arasında jeton alışverişi yaparak yan zincirde işlem yapmalarını sağlar, bu da Ethereum Ana Ağı'ndaki sıkışıklığı azaltır ve ölçeklenebilirliği artırır. +Yan zincirler ayrı bir mutabakat mekanizması kullanır ve genellikle Ethereum Ana Ağı'ndan çok daha küçüktür. Sonuç olarak, varlıkları bu zincirlere bağlamak, artan risk içerir; yan zincir modelinde Ethereum Ana Ağı'ndan devralınan güvenlik garantilerinin olmaması göz önüne alındığında, kullanıcılar yan zincire yapılacak bir saldırıda fon kaybını riske etmiş olur. Bunun tersine, plazma zincirleri güvenliklerini Ana Ağ'dan alırlar. Bu, onları yan zincirlerden ölçülebilir şekilde daha güvenli hale getirir. Hem yan zincirler hem de plazma zincirleri farklı mutabakat protokollerine sahip olabilir, ancak aradaki fark, plazma zincirlerinin Ethereum Ana Ağı'ndaki her blok için Merkle kökleri yayımlamasıdır. Blok kökleri, bir plazma zincirinde gerçekleşen işlemler hakkındaki bilgileri doğrulamak için kullanabileceğimiz küçük bilgi parçalarıdır. Plazma zincirine bir saldırı olursa, kullanıcılar uygun kanıtları kullanarak fonlarını güvenli bir şekilde Ana Ağ'a geri çekebilir. @@ -156,20 +157,20 @@ Parça zincirleri, Ana Ağ'a her bir veri parçası hakkında ayrıntılı bilgi Plazma farklıdır; çünkü Ana Ağ, alt zincirlerin durumu hakkında yalnızca minimum düzeyde bilgi alır. Bu, Ana Ağ'ın alt zincirler üzerinde gerçekleştirilen işlemleri etkin bir şekilde doğrulayamadığı ve onları daha az güvenli hale getirdiği anlamına gelir. -Ethereum blokzincirini parçalamanın artık yol haritasında yer almadığını **unutmayın**. Yerini, toplamalar ve [Danksharding](/roadmap/danksharding) aracılığıyla ölçeklendirme almıştır. +**Not:** Ethereum blokzincirini parçalama artık yol haritasında yer almıyor. Onun yerini toplamalar ve [Danksharding](/roadmap/danksharding) yoluyla ölçeklendirme almıştır. ### Plazma kullanın {#use-plasma} Birden çok proje, merkeziyetsiz uygulamalarınıza entegre edebileceğiniz Plazma uygulamaları sağlar: -- [Polygon](https://polygon.technology/) (önceden Matic Network) +- [Polygon](https://polygon.technology/) (önceki adıyla Matic Network) -## Daha fazla okuma {#further-reading} +## Daha fazla kaynak {#further-reading} -- [Plazma'yı öğrenin](https://www.learnplasma.org/en/) -- ["Paylaşılan güvenliğin" ne anlama geldiğine ve neden bu kadar önemli olduğuna dair kısa bir hatırlatma](https://old.reddit.com/r/ethereum/comments/sgd3zt/a_quick_reminder_of_what_shared_security_means/) -- [Yan Zincirler - Plazma - Parçalama](https://vitalik.eth.limo/general/2019/06/12/plasma_vs_sharding.html) -- [Plazma'yı Anlamak, Bölüm 1: Temeller](https://www.theblockcrypto.com/amp/post/10793/understanding-plasma-part-1-the-basics) -- [Plazma'nın Yaşamı ve Ölümü](https://medium.com/dragonfly-research/the-life-and-death-of-plasma-b72c6a59c5ad#) +- [Plazma hakkında bilgi edinin](https://www.learnplasma.org/en/) +- ["Paylaşılan güvenliğin" ne anlama geldiği ve neden bu kadar önemli olduğuna dair hızlı bir hatırlatma](https://old.reddit.com/r/ethereum/comments/sgd3zt/a_quick_reminder_of_what_shared_security_means/) +- [Yan Zincirler, Plazma ve Parçalama Karşılaştırması](https://vitalik.eth.limo/general/2019/06/12/plasma_vs_sharding.html) +- [Plazma'yı Anlamak, Bölüm 1: Temel Bilgiler](https://www.theblockcrypto.com/amp/post/10793/understanding-plasma-part-1-the-basics) +- [Plazma'nın Doğuşu ve Ölümü](https://medium.com/dragonfly-research/the-life-and-death-of-plasma-b72c6a59c5ad#) -_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/scaling/sidechains/index.md b/public/content/translations/tr/developers/docs/scaling/sidechains/index.md index 0639b214511..c73c3a48861 100644 --- a/public/content/translations/tr/developers/docs/scaling/sidechains/index.md +++ b/public/content/translations/tr/developers/docs/scaling/sidechains/index.md @@ -1,13 +1,13 @@ --- title: Yan zincirler -description: Şu anda Ethereum topluluğu tarafından kullanılan bir ölçeklendirme çözümü olarak yan zincirlere giriş. +description: "Şu anda Ethereum topluluğu tarafından kullanılan bir ölçeklendirme çözümü olarak yan zincirlere giriş." lang: tr sidebarDepth: 3 --- -Yan zincir, Ethereum'dan bağımsız çalışan ve Ethereum Ana Ağı'na bir köprü ile bağlı olan ayrı bir blokzincirdir. Yan zincirler farklı blok parametrelerine ve genellikle işlemlerin verimli işlenmesi için tasarlanmış [mutabakat algoritmalarına](/developers/docs/consensus-mechanisms/) sahip olabilirler. Ethereum'un güvenlik özelliklerini taşımadığı için yan zincir kullanmanın artıları ve eksileri vardır. [Katman 2 ölçeklendirme çözümlerinin](/layer-2/) aksine, yan zincirler işlem bilgilerini ve durum değişikliklerini Ethereum Ana Ağı'na göndermezler. +Yan zincir, Ethereum'dan bağımsız çalışan ve Ethereum Ana Ağı'na bir köprü ile bağlı olan ayrı bir blokzincirdir. Yan zincirler, ayrı blok parametrelerine ve genellikle işlemlerin verimli işlenmesi için tasarlanmış [mutabakat algoritmalarına](/developers/docs/consensus-mechanisms/) sahip olabilirler. Ethereum'un güvenlik özelliklerini taşımadığı için yan zincir kullanmanın artıları ve eksileri vardır. [Katman 2 ölçeklendirme çözümlerinin](/layer-2/) aksine, yan zincirler durum değişikliklerini ve işlem verilerini Ethereum Ana Ağı'na geri göndermezler. -Yan zincirler, yüksek verim elde etmek için merkeziyetsizlik veya güvenlikten de bir miktar ödün verirler ([ölçeklendirme üçlü çelişmesi](https://vitalik.eth.limo/general/2021/05/23/scaling.html)). Bununla birlikte, yükseltmeler için [vizyon bildirisinde](/roadmap/vision/) özetlendiği üzere Ethereum, merkeziyetsizlikten ve güvenlikten ödün vermeyen ölçeklendirme amacıyla geliştirilmiştir. +Yan zincirler ayrıca yüksek verim elde etmek için bir miktar merkeziyetsizlik veya güvenlikten de ödün verir ([ölçeklenebilirlik üçlemi](https://vitalik.eth.limo/general/2021/05/23/scaling.html)). Ancak Ethereum, merkeziyetsizlik ve güvenlikten ödün vermeden ölçeklenmeye kararlıdır. ## Yan zincirler nasıl çalışır? {#how-do-sidechains-work} @@ -17,57 +17,57 @@ Yan zincirler farklı geçmişleri, geliştirme yol haritaları ve tasarım hass Yan zincirleri özel yapan niteliklerden biri (yani Ethereum'dan farklı) kullandığı mutabakat algoritmasıdır. Yan zincirler mutabakat konusunda Ethereum'a dayanmadıkları için kendi ihtiyaçlarını karşılayan alternatif mutabakat protokollerini seçebilirler. Yan zincirler tarafından kullanılan bazı mutabakat algoritmaları şunlardır: -- [Yetki kanıtı](/developers/docs/consensus-mechanisms/poa/) -- [Yetkilendirilmiş hisse ispatı](https://en.bitcoin.it/wiki/Delegated_proof_of_stake) +- [Otorite İspatı](/developers/docs/consensus-mechanisms/poa/) +- [Delege edilmiş hisse ispatı](https://en.bitcoin.it/wiki/Delegated_proof_of_stake) - [Bizans hata toleransı](https://decrypt.co/resources/byzantine-fault-tolerance-what-is-it-explained). Ethereum gibi yan zincirler de işlemleri doğrulayan ve işleyen, bloklar üreten ve blokzincir durumunu depolayan doğrulama düğümlerine sahiptir. Doğrulayıcılar, mutabakatı ağ genelinde sürdürmek ve kötü niyetli saldırılara karşı korumakla yükümlüdür. #### Blok parametreleri {#block-parameters} -Ethereum, [blok sürelerine](/developers/docs/blocks/#block-time) (örn. yeni blok üretimi için kullandığı zamana) ve [blok boyutlarına](/developers/docs/blocks/#block-size) (örn. gaz cinsinden blok başına düşen veri miktarına) limit koyar. Bunun aksine yan zincirler, yüksek verimlilik, hızlı işlemler ve düşük ücret için genelde daha hızlı blok süreleri ve daha yüksek gaz limitleri gibi farklı parametreler kullanır. +Ethereum, [blok sürelerine](/developers/docs/blocks/#block-time) (yani, yeni bloklar üretmek için gereken süre) ve [blok boyutlarına](/developers/docs/blocks/#block-size) (yani, gaz cinsinden ifade edilen blok başına içerilen veri miktarı) sınırlar koyar. Bunun aksine yan zincirler, yüksek verimlilik, hızlı işlemler ve düşük ücret için genelde daha hızlı blok süreleri ve daha yüksek gaz limitleri gibi farklı parametreler kullanır. Bunun bazı faydaları olsa da, ağın merkeziyetsizliği ve güvenliği açısından önemli sonuçları da vardır. Hızlı blok süreleri ve büyük blok boyutları gibi blok parametreleri, tam bir düğümü çalıştırmanın zorluğunu arttırır ve zincirin güvenliğinden birkaç "süper düğümü" sorumlu bırakır. Böyle bir senaryoda, doğrulayıcı danışıklı dövüşü veya zincirin kötü niyetli bir şekilde ele geçirilmesi olasılığı artar. -Blokzincirlerin merkeziyetsizliğe zarar vermeden ölçeklendirme yapması bir düğüm çalıştırmanın herkese açık olması gerekir; özel donanıma sahip taraflarla sınırlı olmamalıdır. Bu yüzden, Ethereum ağında herkesin [tam düğüm çalıştırabilmesini](/developers/docs/nodes-and-clients/#why-should-i-run-an-ethereum-node) mümkün kılmaya yönelik çabalar sürdürülüyor. +Blokzincirlerin merkeziyetsizliğe zarar vermeden ölçeklendirme yapması bir düğüm çalıştırmanın herkese açık olması gerekir; özel donanıma sahip taraflarla sınırlı olmamalıdır. Bu yüzden Ethereum ağında herkesin [tam bir düğüm çalıştırabilmesini](/developers/docs/nodes-and-clients/#why-should-i-run-an-ethereum-node) sağlamak için çalışmalar devam etmektedir. -### Ethereum Sanal Makinesi uyumluluğu {#evm-compatibility} +### EVM uyumluluğu {#evm-compatibility} -Bazı yan zincirler EVM uyumludur ve [Ethereum Sanal Makinesi (EVM)](/developers/docs/evm/) için geliştirilmiş sözleşmeleri yürütebilir. EVM uyumlu yan zincirler [Solidity'de yazılmış](/developers/docs/smart-contracts/languages/) akıllı sözleşmeleri destekledikleri gibi, diğer EVM akıllı sözleşme dillerini de desteklerler, yani Ethereum Ana Ağı için yazılmış akıllı sözleşmeler EVM uyumlu yan zincirlerde de çalışır. +Bazı yan zincirler EVM uyumludur ve [Ethereum Sanal Makinesi (EVM)](/developers/docs/evm/) için geliştirilmiş sözleşmeleri yürütebilir. EVM uyumlu yan zincirler [Solidity dilinde yazılmış](/developers/docs/smart-contracts/languages/) akıllı sözleşmelerin yanı sıra diğer EVM akıllı sözleşme dillerini de destekler; bu da Ethereum Ana Ağı için yazılmış akıllı sözleşmelerin EVM uyumlu yan zincirlerde de çalışacağı anlamına gelir. -Bu, [merkezi olmayan uygulamanızı](/developers/docs/dapps/) bir yan zincirde kullanmak istiyorsanız, [akıllı sözleşmenizi](/developers/docs/smart-contracts/) yan zincire dağıtmanızın yeterli olduğu anlamına gelir. Tıpkı Ana Ağ gibi görünür, hissettirir ve davranır; Solidity'de sözleşmeler yazarsınız ve zincirle RPC yan zincirleri aracılığıyla etkileşime girersiniz. +Bu, [merkeziyetsiz uygulamanızı](/developers/docs/dapps/) bir yan zincirde kullanmak istiyorsanız, [akıllı sözleşmenizi](/developers/docs/smart-contracts/) bu yan zincire dağıtmanızın yeterli olduğu anlamına gelir. Tıpkı Ana Ağ gibi görünür, hissettirir ve davranır; Solidity'de sözleşmeler yazarsınız ve zincirle RPC yan zincirleri aracılığıyla etkileşime girersiniz. -Yan zincirler, EVM uyumluluğuna sahip olduğundan Ethereum'a özgü merkeziyetsiz uygulamalar için kullanışlı bir [ölçeklendirme çözümü](/developers/docs/scaling/) olarak görülür. Merkeziyetsiz uygulamanız yan zincirdeyken kullanıcılar, özellikle de Ana Ağ tıkanmışsa daha düşük gaz ücretleri ve daha hızlı işlemlerden faydalanabilir. +Yan zincirler EVM uyumlu olduğundan, Ethereum'a özgü merkeziyetsiz uygulamalar için kullanışlı bir [ölçeklendirme çözümü](/developers/docs/scaling/) olarak kabul edilirler. Merkeziyetsiz uygulamanız yan zincirdeyken kullanıcılar, özellikle de Ana Ağ tıkanmışsa daha düşük gaz ücretleri ve daha hızlı işlemlerden faydalanabilir. Ancak önceden açıklandığı üzere, yan zincir kullanmanın önemli avantajları ve dezavantajları vardır. Her yan zincir kendi güvenliğinden sorumludur ve Ethereum'un güvenlik özelliklerini kullanmaz. Bu, kullanıcılarınızı etkileyebilecek ya da fonlarını riske atabilecek kötü niyetli davranış ihtimalini arttırır. ### Varlık hareketi {#asset-movement} -Ayrı bir blokzincirin Ethereum Ana Ağı'na bir yan zincir olması için varlıkların Ethereum Ana Ağı'na/Ağı'ndan transferlerini kolaylaştırma yeteneği olmalıdır. Bu Ethereum ile birlikte çalışabilirlik özelliği, bir blokzincir köprüsü kullanılarak elde edilir. [Köprüler](/bridges/), Ethereum Ana Ağı'nda dağıtılmış akıllı sözleşmeler ve aralarında fon akışı için köprü işlevini kontrol etmek için bir yan zincir kullanır. +Ayrı bir blokzincirin Ethereum Ana Ağı'na bir yan zincir olması için varlıkların Ethereum Ana Ağı'na/Ağı'ndan transferlerini kolaylaştırma yeteneği olmalıdır. Bu Ethereum ile birlikte çalışabilirlik özelliği, bir blokzincir köprüsü kullanılarak elde edilir. [Köprüler](/bridges/), aralarındaki fon transferini kontrol etmek için Ethereum Ana Ağı'na ve bir yan zincire dağıtılmış akıllı sözleşmeleri kullanır. -Köprüler, kullanıcıların Ethereum ve yan zincir arasında fon taşımalarına yardımcı olsa da, varlıklar fiziksel olarak iki zincir arasında taşınmaz. Bunun yerine, zincirler arası değer aktarımı için genelde basım ve yakım içeren mekanizmalar kullanılır. [Köprülerin çalışma şekli](/developers/docs/bridges/#how-do-bridges-work) ile ilgili daha fazla bilgi. +Köprüler, kullanıcıların Ethereum ve yan zincir arasında fon taşımalarına yardımcı olsa da, varlıklar fiziksel olarak iki zincir arasında taşınmaz. Bunun yerine, zincirler arası değer aktarımı için genelde basım ve yakım içeren mekanizmalar kullanılır. [Köprülerin nasıl çalıştığı](/developers/docs/bridges/#how-do-bridges-work) hakkında daha fazlası. -## Yan zincirlerin artı ve eksileri {#pros-and-cons-of-sidechains} +## Yan zincirlerin avantajları ve dezavantajları {#pros-and-cons-of-sidechains} -| Artıları | Eksileri | -| -------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | -| Yan zincirlerin temelini oluşturan teknoloji köklüdür ve kapsamlı araştırmalar ile tasarım iyileştirmelerinden yararlanır. | Yan zincirler, ölçeklenebilirliğe karşılık merkeziyetsizlik ve güven gerektirmezlikten bir miktar feragat eder. | -| Yan zincirler genel hesaplamayı destekler ve EVM uyumluluğu sunar (yan zincirler Ethereum'a özgü merkeziyetsiz uygulamaları çalıştırabilir). | Yan zincirler, ayrı bir mutabakat mekanizması kullanır ve Ethereum'un güvenlik garantilerinden yararlanamaz. | -| Yan zincirler, işlemleri etkin bir şekilde işlemek ve kullanıcılar için işlem ücretlerini azaltmak için farklı mutabakat modelleri kullanır. | Yan zincirler daha yüksek güven varsayımları gerektirir (örn. kötü niyetli yan zincir doğruyucularının bir çoğunluğu sahtekarlık yapabilir). | -| EVM uyumlu yan zincirler, merkeziyetsiz uygulamaların ekosistemlerini genişletmelerine izin verirler. | | +| Artıları | Eksileri | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Yan zincirlerin temelini oluşturan teknoloji köklüdür ve kapsamlı araştırmalar ile tasarım iyileştirmelerinden yararlanır. | Yan zincirler, ölçeklenebilirliğe karşılık merkeziyetsizlik ve güven gerektirmezlikten bir miktar feragat eder. | +| Yan zincirler genel hesaplamayı destekler ve EVM uyumluluğu sunar (yan zincirler Ethereum'a özgü merkeziyetsiz uygulamaları çalıştırabilir). | Yan zincirler, ayrı bir mutabakat mekanizması kullanır ve Ethereum'un güvenlik garantilerinden yararlanamaz. | +| Yan zincirler, işlemleri etkin bir şekilde işlemek ve kullanıcılar için işlem ücretlerini azaltmak için farklı mutabakat modelleri kullanır. | Yan zincirler daha yüksek güven varsayımları gerektirir (örn. kötü niyetli yan zincir doğruyucularının bir çoğunluğu sahtekarlık yapabilir). | +| EVM uyumlu yan zincirler, merkeziyetsiz uygulamaların ekosistemlerini genişletmelerine izin verirler. | | -### Yan zincirler kullanın {#use-sidechains} +### Yan Zincirleri Kullanın {#use-sidechains} Merkeziyetsiz uygulamalarınıza entegre edebileceğiniz yan zincirlere ilişkin uygulamalar sağlayan birden çok proje mevcuttur: - [Polygon PoS](https://polygon.technology/solutions/polygon-pos) - [Skale](https://skale.network/) -- [Gnosis Zinciri (eskiden xDai)](https://www.gnosischain.com/) +- [Gnosis Chain (eski adıyla xDai)](https://www.gnosischain.com/) - [Loom Network](https://loomx.io/) - [Metis Andromeda](https://www.metis.io/) -## Daha fazla bilgi {#further-reading} +## Daha fazla kaynak {#further-reading} -- [Ethereum merkeziyetsiz uygulamalarını Yan Zincirler üzerinden ölçeklendirme](https://medium.com/loom-network/dappchains-scaling-ethereum-dapps-through-sidechains-f99e51fff447) _8 Şubat 2018 - Georgios Konstantopoulos_ +- [Yan Zincirler Aracılığıyla Ethereum Merkeziyetsiz Uygulamalarını Ölçeklendirme](https://medium.com/loom-network/dappchains-scaling-ethereum-dapps-through-sidechains-f99e51fff447) _8 Şubat 2018 - Georgios Konstantopoulos_ _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/scaling/state-channels/index.md b/public/content/translations/tr/developers/docs/scaling/state-channels/index.md index 142b138a1b2..13efd8b7254 100644 --- a/public/content/translations/tr/developers/docs/scaling/state-channels/index.md +++ b/public/content/translations/tr/developers/docs/scaling/state-channels/index.md @@ -1,71 +1,71 @@ --- -title: Durum Kanalları -description: Şu anda Ethereum topluluğu tarafından kullanılan bir ölçeklendirme çözümü olarak durum kanallarına ve ödeme kanallarına giriş. +title: "Durum Kanalları" +description: "Şu anda Ethereum topluluğu tarafından kullanılan bir ölçeklendirme çözümü olarak durum kanallarına ve ödeme kanallarına giriş." lang: tr sidebarDepth: 3 --- -Özel kanallar, Ethereum Ana Ağı ile etkileşimi minimumda tutarak katılımcıların zincir dışında güvenli bir şekilde işlem yapmasına olanak tanır. Kanal eşleri, kanalı aşıp kapatmak için zincir üstünde sadece iki tane işlem gönderirken, zincir dışında isteğe bağlı sayıda işlem yapabilirler. Bu, kullanıcılar için son derece yüksek işlem verimine izin verir ve daha düşük maliyetler ile sonuçlanır. +Özel kanallar, katılımcıların Ethereum Mainnet ile etkileşimini en aza indirirken zincir dışında güvenli bir şekilde işlem yapmalarını sağlar. Kanal eşleri, kanalı açmak ve kapatmak için yalnızca iki zincir üstü işlem gönderirken, zincir dışında isteğe bağlı sayıda işlem gerçekleştirebilir. Bu, kullanıcılar için son derece yüksek işlem verimine izin verir ve daha düşük maliyetler ile sonuçlanır. ## Ön Koşullar {#prerequisites} -[Ethereum scaling](/developers/docs/scaling/) ve [katman 2](/layer-2/) hakkındaki sayfalarımızı okuyup anlamış olmalısınız. +[Ethereum ölçeklendirme](/developers/docs/scaling/) ve [katman 2](/layer-2/) sayfalarımızı okumuş ve anlamış olmalısınız. ## Kanallar nedir? {#what-are-channels} -Ethereum gibi halka açık blok zincirleri, dağılmış mimarilerinden dolayı ölçeklenebilirlik zorluklarıyla karşılaşır: zincir üstü işlemler tüm düğümler tarafından yürütülmelidir. Düğümler mütevazi bir donanım kullanarak bir bloktaki işlem hacmini işleyebilmeli ve ağın işlem hacmine bir sınır koyarak merkeziyetsizliğini korumalıdır. Blokzincir kanalları, nihai uzlaşma için hala ana zincirin güvenliğine dayanırken, kullanıcıların zincir dışında etkileşime girmesine izin vererek bu sorunu çözer. +Ethereum gibi halka açık blokzincirler, dağıtık mimarileri nedeniyle ölçeklenebilirlik zorluklarıyla karşılaşır: zincir üstü işlemlerin tüm düğümler tarafından yürütülmesi gerekir. Düğümler mütevazi bir donanım kullanarak bir bloktaki işlem hacmini işleyebilmeli ve ağın işlem hacmine bir sınır koyarak merkeziyetsizliğini korumalıdır. Blokzincir kanalları, nihai uzlaşma için ana zincirin güvenliğine dayanırken kullanıcıların zincir dışında etkileşim kurmasına olanak tanıyarak bu sorunu çözer. -Kanallar, iki tarafın birbirleri arasında birçok işlem yapmasına ve ardından sadece nihai sonuçları blokzincire göndermesine izin veren basit eşler arası protokollerdir. Kanal, ürettiği özet verilerin gerçekten geçerli bir dizi işlemin sonucu olduğunu kriptografi kullanarak gösterir. ["Çok imzalı"](/developers/docs/smart-contracts/#multisig) akıllı sözleşme, işlemlerin doğru taraflarca imzalanmasını sağlar. +Kanallar, iki tarafın birbirleri arasında birçok işlem yapmasına ve ardından sadece nihai sonuçları blokzincire göndermesine izin veren basit eşler arası protokollerdir. Kanal, ürettiği özet verilerin gerçekten geçerli bir dizi işlemin sonucu olduğunu kriptografi kullanarak gösterir. Bir ["çoklu imzalı"](/developers/docs/smart-contracts/#multisig) akıllı sözleşme, işlemlerin doğru taraflarca imzalanmasını sağlar. Kanallar sayesinde, durum değişiklikleri ilgili taraflar tarafından yürütülür ve doğrulanır, bu da Ethereum'un yürütüm katmanındaki hesaplamayı en aza indirir. Bu, Ethereum'daki yoğunluğu azaltır ve aynı zamanda kullanıcılar için işlem sürecini hızlandırır. -Her bir kanal, Ethereum üzerinde çalıştırılan bir [çok imzalı akıllı sözleşme](/developers/docs/smart-contracts/#multisig) tarafından yönetilir. Bir kanal açmak için katılımcılar kanal sözleşmesini zincir üstünde dağıtır ve içine fon yatırır. Her iki taraf, kanalın durumunu başlatmak için bir durum güncellemesini toplu olarak imzalar ve daha sonra hızlı ve özgür bir şekilde zincir dışında işlem yapabilir. +Her kanal, Ethereum üzerinde çalışan bir [çoklu imzalı akıllı sözleşme](/developers/docs/smart-contracts/#multisig) tarafından yönetilir. Bir kanal açmak için, katılımcılar kanal sözleşmesini zincir üstünde dağıtır ve içine fon yatırır. Her iki taraf da kanalın durumunu başlatmak için bir durum güncellemesini toplu olarak imzalar, ardından zincir dışında hızlı ve serbestçe işlem yapabilirler. -Kanalı kapatmak için katılımcılar kanalın üzerinde son anlaşılan durumu zincir üstünde gönderir. Sonrasında akıllı sözleşme, kilitli olan fonları kanalın son durumundaki her katılımcısının bakiyesine göre dağıtır. +Kanalı kapatmak için katılımcılar, kanalın üzerinde anlaşılan son durumunu zincir üstünde gönderir. Sonrasında akıllı sözleşme, kilitli olan fonları kanalın son durumundaki her katılımcısının bakiyesine göre dağıtır. Eşler arası kanallar, önceden tanımlanan bazı katılımcıların, görünür bir ek yüke maruz kalmadan yüksek sıklıkta işlem yapmak isteyeceği durumlar için kullanışlıdır. Blokzincir kanalları iki kategoriye ayrılır: **ödeme kanalları** ve **özel kanallar**. ## Ödeme kanalları {#payment-channels} -Bir ödeme kanalı en iyi, iki kullanıcının birlikte tuttuğu "iki yönlü ledger" olarak tanımlanabilir. Ledger'in ilk bakiyesi, kanal açma aşamasında zincir üstü sözleşmeye kilitlenen mevduatın toplamıdır. Ödeme kanalı transferleri, zincirin kendisi dışında herhangi bir zincir katılımı olmadan anında gerçekleştirilebilir, sadece zincir üstünde tek sefere mahsus ilk oluşturma ve sonunda kanalı kapatma işlemlerini gerektirir. +Bir ödeme kanalı en iyi, iki kullanıcının birlikte tuttuğu "iki yönlü ledger" olarak tanımlanabilir. Defterin ilk bakiyesi, kanal açılış aşamasında zincir üstü sözleşmeye kilitlenen mevduatların toplamıdır. Ödeme kanalı transferleri, ilk tek seferlik zincir üstü oluşturma ve nihai kanal kapatma işlemi haricinde, asıl blokzincirin katılımı olmadan anında gerçekleştirilebilir. Ledger'in bakiyesinde güncelleme yapılması (örn. ödeme kanalının durumu) için kanalda bulunan tüm tarafların onayı gerekir. Tüm katılımcıların imzaladığı bir kanal güncellemesi, tıpkı Ethereum'daki bir işlem gibi tamamlanmış olarak kabul edilir. -Ödeme kanalları, basit kullanıcı etkileşimlerinin (örn. ETH transferleri, atomik takaslar, mikro ödemeler) yüksek maliyetli zincir üstü faaliyetini en aza indirmek için tasarlanmış olan ilk ölçeklendirme çözümlerinden biri olmuştur. Kanalın katılımcıları, transferlerinin net toplamı yatırılmış jetonları aşmadığı takdirde birbirleri arasında sınırsız miktarda işlemi anında ve ücretsiz yapabilir. +Ödeme kanalları, basit kullanıcı etkileşimlerinin (ör. ETH transferleri, atomik takaslar, mikro ödemeler) maliyetli zincir üstü faaliyetlerini en aza indirmek için tasarlanan ilk ölçeklendirme çözümleri arasındaydı. Kanalın katılımcıları, transferlerinin net toplamı yatırılmış jetonları aşmadığı takdirde birbirleri arasında sınırsız miktarda işlemi anında ve ücretsiz yapabilir. -## Durum kanalları {#state-channels} +## Özel kanallar {#state-channels} -Zincir dışı ödemeleri desteklemenin yanı sıra, ödeme kanallarının genel durum geçiş mantığını işlemede ödeme kanallarının kullanışlı olup olmadığı kanıtlanmamıştır. Özel kanallar, bu sorunu çözmek için ve kanalları genel amaçlı hesaplamayı ölçeklendirmek için kullanışlı hale getirmek amacıyla oluşturuldu. +Zincir dışı ödemeleri desteklemenin yanı sıra, ödeme kanallarının genel durum geçiş mantığını yönetmek için kullanışlı olduğu kanıtlanmamıştır. Özel kanallar, bu sorunu çözmek için ve kanalları genel amaçlı hesaplamayı ölçeklendirmek için kullanışlı hale getirmek amacıyla oluşturuldu. Özel kanallar hala ödeme kanalları ile birçok ortak özelliğe sahiptir. Örnek olarak, kullanıcılar diğer kanalların katılımcılarının da imzalaması gereken imzalanmış kriptografik mesajları (işlemler) takas ederek etkileşim kurarlar. Önerilen bir durum güncellemesi tüm katılımcılar tarafından imzalanmazsa geçersiz olur. Ancak kanal, kullanıcı bakiyelerini depolamanın yanında, sözleşmenin mevcut durumunu da takip eder (örn. sözleşme değişkenlerinin değerleri). -Bu, iki kullanıcı arasında zincir dışında bir akıllı sözleşme yürütmeyi mümkün hale getirir. Bu senaryoda, akıllı sözleşmenin dahili durumunda yapılmakta olan güncellemeler için sadece kanalı oluşturan eşlerin onayı gerekir. +Bu, iki kullanıcı arasında zincir dışında bir akıllı sözleşme yürütmeyi mümkün kılar. Bu senaryoda, akıllı sözleşmenin dahili durumunda yapılmakta olan güncellemeler için sadece kanalı oluşturan eşlerin onayı gerekir. -Bu, daha önce açıklanmış olan ölçeklenebilirlik sorununu çözmüş olsa da güvenlik konusunda sonuçları vardır. Ethereum'da durum geçişlerinin geçerliliği, ağın mutabakat protokolü tarafından uygulanmaktadır. Bu, bir akıllı sözleşmenin durumuna geçerli olmayan bir güncelleme önermeyi ya da akıllı sözleşmenin yürütülmesini değiştirmeyi imkansız hale getirir. +Bu, daha önce açıklanmış olan ölçeklenebilirlik sorununu çözmüş olsa da güvenlik konusunda sonuçları vardır. Ethereum'da durum geçişlerinin geçerliliği, ağın mutabakat protokolü tarafından zorunlu kılınır. Bu, bir akıllı sözleşmenin durumuna geçerli olmayan bir güncelleme önermeyi ya da akıllı sözleşmenin yürütülmesini değiştirmeyi imkansız hale getirir. -Özel kanallar, aynı güvenlik garantilerine sahip değildir. Özel kanallar, bir ölçüde Ana Ağ'ın minyatür bir versiyonudur. Kuralları uygulayan katılımcı sayısının sınırlı olması, kötü niyetli davranış olasılığını (örn. geçersiz durum güncellemeleri önerme) artırır. Özel kanalların güvenliğinin temelini, [sahtecilik kanıtlarını](/glossary/#fraud-proof) temel alan bir uyuşmazlık hakemliği sistemi oluşturur. +Özel kanallar, aynı güvenlik garantilerine sahip değildir. Özel kanallar, bir ölçüde Ana Ağ'ın minyatür bir versiyonudur. Kuralları uygulayan katılımcı sayısının sınırlı olması, kötü niyetli davranış olasılığını (örn. geçersiz durum güncellemeleri önerme) artırır. Özel kanallar, güvenliklerini [sahtekarlık kanıtlarına](/glossary/#fraud-proof) dayalı bir uyuşmazlık tahkim sisteminden alırlar. ## Özel kanallar nasıl çalışır? {#how-state-channels-work} -Temel olarak, bir özel kanaldaki faaliyet kullanıcıları ve blokzincir sistemini kapsayan bir etkileşim oturumudur. Kullanıcılar çoğunlukla birbirleriyle zincir dışında iletişime girer ve sadece kanalı açmak, kapatmak veya katılımcıların arasındaki potansiyel anlaşmazlıkları çözmek için ve sadece temeldeki blokzincir ile etkileşime girer. +Temel olarak, bir özel kanaldaki faaliyet kullanıcıları ve blokzincir sistemini kapsayan bir etkileşim oturumudur. Kullanıcılar çoğunlukla birbirleriyle zincir dışında iletişim kurar ve yalnızca kanalı açmak, kapatmak veya katılımcılar arasındaki potansiyel anlaşmazlıkları çözmek için temel blokzincir ile etkileşime girer. Aşağıdaki bölüm, özel kanalın temel iş akışını ana hatlarıyla açıklar: ### Kanalı açma {#opening-the-channel} -Bir kanal açmak için katılımcıların Ana Ağ'da akıllı sözleşmeye fon girmesi gerekir. Fon yatırma aynı zamanda bir sanal sekme işlevi görür, böylece katılımcı aktörler ödemeleri acilen yapma ihtiyacı hissetmeden özgürce işlem yapabilir. Sadece kanal zincir üstünde sonlandığında, taraflar birbiriyle anlaşır ve sekmelerinden geriye kalanı çekerler. +Bir kanal açmak için katılımcıların Ana Ağ'da akıllı sözleşmeye fon girmesi gerekir. Fon yatırma aynı zamanda bir sanal sekme işlevi görür, böylece katılımcı aktörler ödemeleri acilen yapma ihtiyacı hissetmeden özgürce işlem yapabilir. Taraflar, yalnızca kanal zincir üstünde kesinleştiğinde birbirleriyle uzlaşır ve hesaplarından kalanı çeker. Bu yatırma işlemi aynı zamanda, her bir katılımcının dürüst davranacağını garanti altına almak için bir teminattır. Depozito sahipleri, uyuşmazlığın çözümü aşamasında kötü niyetli eylemlerden suçlu bulunacak olursa sözleşme, yatırdıklarından kesinti yapar. Kanal eşleri, tamamının kabul ettiği bir başlangıç durumunu imzalamak zorundadır. Bu, özel kanalın başlangıcı görevi görür ve sonrasında kullanıcılar işlem yapmaya başlayabilir. -### Kanalın kullanımı {#using-the-channel} +### Kanalı kullanma {#using-the-channel} Eşler, kanalın durumunu başlattıktan sonra işlemleri imzalayarak ve birbirlerine göndererek onay için birbirleriyle etkileşime girerler. Katılımcılar bu işlemlerle durum yükseltmelerini başlatır ve diğerlerinin durum güncellemelerini imzalar. Her işlem aşağıdakilerden oluşur: -- İşlemler için eşsiz bir kimlik görevi gören ve tekrar saldırılarını önleyen bir **nonce**. Aynı zamanda, durum güncellemelerinin olduğu sırayı da tanımlar (bu durum, uyuşmazlık çözümü için önemlidir.) +- İşlemler için benzersiz bir kimlik görevi gören ve tekrar saldırılarını önleyen bir **nonce**. Aynı zamanda, durum güncellemelerinin olduğu sırayı da tanımlar (bu durum, uyuşmazlık çözümü için önemlidir.) - Kanalın eski durumu @@ -73,11 +73,11 @@ Eşler, kanalın durumunu başlattıktan sonra işlemleri imzalayarak ve birbirl - Durum geçişini tetikleyen işlem (örn. Alice'in Bob'a 5 ETH göndermesi) -Kanaldaki durum güncellemeleri, normalde kullanıcıların Ana Ağ'da etkileşimde bulunduğu gibi, durum kanallarının zincir üzerindeki etkiyi minimuma indirme hedefiyle uyumlu şekilde zincir üzerinde yayınlanmaz. Katılımcılar durum yükseltmeleri konusunda aynı fikirde olduğu sürece, bu yükseltmeler Ethereum işlemleri kadar nihai niteliktedir. Katılımcılar sadece bir anlaşmazlık durumunda Ana Ağ'ın mutabakatına bağımlı olmak zorundadır. +Kanaldaki durum güncellemeleri, kullanıcıların Mainnet'te etkileşime girmesinin aksine, zincir üstünde yayınlanmaz. Bu, özel kanalların zincir üstü ayak izini en aza indirme hedefiyle uyumludur. Katılımcılar durum yükseltmeleri konusunda aynı fikirde olduğu sürece, bu yükseltmeler Ethereum işlemleri kadar nihai niteliktedir. Katılımcılar sadece bir anlaşmazlık durumunda Ana Ağ'ın mutabakatına bağımlı olmak zorundadır. ### Kanalı kapatma {#closing-the-channel} -Bir durum kanalını kapatmak, kanalın fikir birliğine varılmış son durumunun zincir üstü akıllı sözleşmeye gönderilmesini gerektirir. Durum güncellemesinde referans alınan detaylar, her bir katılımcının hareketlerini ve onaylanmış işlemlerinin sayısının bir listesini içerir. +Bir özel kanalı kapatmak, kanalın üzerinde anlaşmaya varılmış son durumunu zincir üstü akıllı sözleşmeye göndermeyi gerektirir. Durum güncellemesinde referans alınan detaylar, her bir katılımcının hareketlerini ve onaylanmış işlemlerinin sayısının bir listesini içerir. Durum güncellemesinin geçerli olduğu doğrulandıktan sonra (yani, tüm taraflarca imzalanmış olması) akıllı sözleşme, kanalı sonlandırır ve kilitli fonları kanalın sonucuna göre dağıtır. Zincir dışında yapılan ödemeler Ethereum'un durumuna uygulanır ve her katılımcı kilitli fonların kalan kısmını alır. @@ -87,35 +87,35 @@ Yukarıda açıklanmış olan senaryo, olumlu durumda neler olduğunu gösterir. - Katılımcılar geçerli durum güncellemelerini imzalamayı reddederler -- Katılımcılar zincir üstündeki sözleşmeye eski bir durum güncellemesi önererek kanalı sonlandırmaya çalışırlar +- Katılımcılar, zincir üstü sözleşmeye eski bir durum güncellemesi önererek kanalı kesinleştirmeye çalışırlar - Katılımcılar başkalarının imzalaması için geçersiz durum güncellemeleri önerirler Bir kanalda katılımcı aktörlerin arasındaki mutabakat bozulduğu zaman son seçenek, kanalın son, geçerli durumunu uygulamak için Ana Ağ'ın mutabakatına güvenmektir. Bu durumda özel kanalın kapatılması, anlaşmazlıkların zincir üstünde çözülmesini gerektirir. -### Uyuşmazlıkları çözme {#settling-disputes} +### Anlaşmazlıkları çözme {#settling-disputes} -Tipik olarak, bir kanaldaki taraflar önceden kanalı kapatmak konusunda fikir birliğine varır ve akıllı sözleşmeye gönderdikleri son durum geçişini birlikte imzalar. Güncelleme zincir üstünde onaylandığında, zincir dışı akıllı sözleşme yürütmesi biter ve katılımcılar paraları ile birlikte kanaldan çıkar. +Tipik olarak, bir kanaldaki taraflar önceden kanalı kapatmak konusunda fikir birliğine varır ve akıllı sözleşmeye gönderdikleri son durum geçişini birlikte imzalar. Güncelleme zincir üstünde onaylandığında, zincir dışı akıllı sözleşmenin yürütülmesi sona erer ve katılımcılar paralarıyla kanaldan çıkarlar. -Ancak, bir taraf akıllı sözleşmenin yürütülmesini bitirmek ve kanalı sonlandırmak için karşı tarafın onayını beklemeden zincir üstünde bir istek gönderebilir. Daha önce açıklanan herhangi bir mutabakat bozucu durum gerçekleşecek olursa, her iki taraf da kanalı kapatma ve fonları dağıtma için zincir üstünde anlaşmayı tetikleyebilir. Bu, **güven gerektirmezliği** ortaya çıkararak dürüst tarafların, herhangi bir noktada diğer tarafın aksiyonlarından bağımsız şekilde mevduatlarını çıkarabilmelerine olanak sağlar. +Ancak taraflardan biri, karşı tarafın onayını beklemeden akıllı sözleşmenin yürütülmesini sonlandırmak ve kanalı kesinleştirmek için zincir üstü bir talep gönderebilir. Daha önce açıklanan mutabakatı bozan durumlardan herhangi biri meydana gelirse, taraflardan herhangi biri kanalı kapatmak ve fonları dağıtmak için zincir üstü sözleşmeyi tetikleyebilir. Bu, dürüst tarafların diğer tarafın eylemlerinden bağımsız olarak herhangi bir noktada mevduatlarını çekebilmelerini sağlayan **güven gerektirmezlik** ortamı sunar. Kanaldan çıkma işlemini gerçekleştirmek için kullanıcı, uygulamanın son geçerli durum güncellemesini zincir üstü sözleşmeye göndermek zorundadır. Bunun yapıldığı doğrulanırsa (yani, tüm tarafların imzasını taşıyorsa), fonlar kendi lehlerine yeniden dağıtılır. -Ancak, tek kullanıcılı çıkma isteklerinin yürütülmesinde gecikme vardır. Eğer kanalı sonuçlandırma isteği oy birliği ile kabul edilmişse, zincir üstü çıkış işlemi hemen gerçekleştirilir. +Ancak, tek kullanıcılı çıkma isteklerinin yürütülmesinde gecikme vardır. Kanalı sonlandırma talebi oybirliğiyle onaylanırsa, zincir üstü çıkış işlemi derhal yürütülür. -Gecikme, sahtecilik eylemleri olasılığı sebebiyle tek kullanıcılı çıkışlarda devreye girer. Örneğin, bir kanal katılımcısı eski durum güncellemesini zincir üstünde önererek Ethereum üzerinde kanal sonlandırmayı deneyebilir. +Gecikme, sahtecilik eylemleri olasılığı sebebiyle tek kullanıcılı çıkışlarda devreye girer. Örneğin, bir kanal katılımcısı eski bir durum güncellemesini zincir üstünde göndererek kanalı Ethereum'da kesinleştirmeye çalışabilir. -Bir karşı önlem olarak özel kanallar, dürüst kullanıcıların zincirin en son geçerli durumlarını zincir üstü kanallara göndererek itiraz etmelerine olanak tanır. Özel kanallar, üzerinde fikir birliğine varılan durum güncellemelerinin eski durum güncellemelerinden baskın çıkacağı şekilde tasarlanmıştır. +Bir karşı önlem olarak özel kanallar, dürüst kullanıcıların kanalın en son geçerli durumunu zincir üstünde göndererek geçersiz durum güncellemelerine itiraz etmelerine olanak tanır. Özel kanallar, üzerinde fikir birliğine varılan durum güncellemelerinin eski durum güncellemelerinden baskın çıkacağı şekilde tasarlanmıştır. -Bir eş bir kere zincir üstü uyuşmazlık çözme sistemini harekete geçirdiğinde, diğer tarafın sınırlı bir sürede yanıt vermesi gereklidir (itiraz süresi olarak adlandırılır). Bu, özellikle diğer taraf eski bir güncelleme kullanıyorsa, kullanıcıların çıkış işlemine itiraz etmesine olanak tanır. +Bir eş, zincir üstü anlaşmazlık çözüm sistemini tetiklediğinde, diğer tarafın belirli bir zaman sınırı içinde (meydan okuma penceresi olarak adlandırılır) yanıt vermesi gerekir. Bu, özellikle diğer taraf eski bir güncelleme kullanıyorsa, kullanıcıların çıkış işlemine itiraz etmesine olanak tanır. -Bu durumda her ne olursa olsun, kanal kullanıcıları her zaman güçlü bir kesinlik garantisine sahiptir: eğer sahip oldukları durum geçişi tüm üyeler tarafından imzalanmışsa ve en son güncelleme ise, düzenli zincir üstü bir işlem ile eşit kesinliğe sahiptir. Hala zincir üstünde diğer tarafa itiraz etmek zorunda olsalar da, olası tek sonuç ellerindeki son geçerli durumu sonlandırmaktır. +Durum ne olursa olsun, kanal kullanıcıları her zaman güçlü kesinlik garantilerine sahiptir: eğer ellerindeki durum geçişi tüm üyeler tarafından imzalanmışsa ve en son güncellemeyse, o zaman normal bir zincir üstü işlemle eşit kesinliğe sahiptir. Yine de diğer tarafa zincir üstünde itiraz etmek zorundadırlar, ancak olası tek sonuç ellerinde tuttukları son geçerli durumu kesinleştirmektir. ### Özel kanallar Ethereum ile nasıl etkileşime girer? {#how-do-state-channels-interact-with-ethereum} -Özel kanallar, zincir dışı protokoller olarak var olmalarına rağmen, bir zincir üstü bileşene sahiptir: kanal açılırken Ethereum'da dağıtılan akıllı sözleşme. Bu sözleşme, kanala yatırılan varlıkları kontrol eder, durum güncellemelerini doğrular ve katılımcılar arasındaki uyuşmazlıklarda hakemlik yapar. +Özel kanallar, zincir dışı protokoller olarak var olmalarına rağmen, zincir üstü bir bileşene sahiptirler: kanal açılırken Ethereum'da dağıtılan akıllı sözleşme. Bu sözleşme, kanala yatırılan varlıkları kontrol eder, durum güncellemelerini doğrular ve katılımcılar arasındaki uyuşmazlıklarda hakemlik yapar. -Özel kanallar, [katman 2](/layer-2/) ölçeklendirme çözümlerinin aksine işlem verilerini ya da durum taahhütlerini Ana Ağ'da yayımlamaz. Ancak, bunlar [yan zincirlere](/developers/docs/scaling/sidechains/) göre Ana Ağ'a daha bağlıdır ve bu onları daha güvenli kılar. +Özel kanallar, [katman 2](/layer-2/) ölçeklendirme çözümlerinin aksine, işlem verilerini veya durum taahhütlerini Mainnet'te yayımlamaz. Ancak [yan zincirlere](/developers/docs/scaling/sidechains/) kıyasla Mainnet'e daha bağlıdırlar, bu da onları bir nebze daha güvenli kılar. Özel kanallar, aşağıdakiler için ana Ethereum protokolüne güvenir: @@ -127,47 +127,47 @@ Kanalı açarken dağıtılan zincir üstü sözleşme, kanalın işlevselliğin Özel kanallar, güvenliği sağlamak ve kullanıcıları kötü niyetli eşlerden korumak için bir yere kadar Ethereum'a güvenir. Daha sonraki bölümlerde açıklanacağı üzere kanallar, kullanıcıların geçersiz veya eski bir güncelleme ile kanalı sonlandırmaya yönelik girişimlere itiraz etmesine olanak tanıyan bir sahtecilik kanıtı mekanizması kullanır. -Bu durumda dürüst taraf, en son geçerli kanal durumunu sahtecilik kanıtı olarak zincir üstü sözleşmeye sunarak doğrular. Sahtecilik kanıtı, güvensiz tarafların süreç içinde fonlarını riske atmadan karşılıklı şekilde zincir dışı işlemler yapmalarını sağlar. +Bu durumda dürüst taraf, doğrulama için kanalın en son geçerli durumunu bir sahtekarlık kanıtı olarak zincir üstü sözleşmeye sunar. Sahtekarlık kanıtları, birbirine güvenmeyen tarafların süreçte fonlarını riske atmadan zincir dışı işlemler yapmalarını sağlar. -#### 3. Nihayet {#finality} +#### 3. Kesinlik {#finality} -Kanal kullanıcıarı tarafından topluca imzalanan durum güncellemeleri, zincir üstü işlemler kadar iyi kabul edilir. Ancak yine de, tüm kanal içi faaliyetler sadece kanal Ethereum'da kapatıldığında gerçek kesinliğe ulaşır. +Kanal kullanıcıları tarafından toplu olarak imzalanan durum güncellemeleri, zincir üstü işlemler kadar iyi kabul edilir. Ancak yine de, tüm kanal içi faaliyetler sadece kanal Ethereum'da kapatıldığında gerçek kesinliğe ulaşır. -İyimser senaryoda, iki taraf da işbirliği yapabilir ve son durum güncellemesini imzalar ve kanalı kapatmak için zincir üzerine gönderir, daha sonra fonlar kanalın son durumuna göre dağıtılır. Kötümser senaryoda, zincir üstünde yanlış durum güncellemesi yayınlayarak sahtekarlık yapmaya çalışılır ve itiraz süresi geçene kadar işlem sonlandırılmaz. +İyimser durumda, her iki taraf da işbirliği yapabilir ve son durum güncellemesini imzalayıp kanalı kapatmak için zincir üstünde gönderebilir, ardından fonlar kanalın son durumuna göre dağıtılır. Kötümser durumda, birisi zincir üstünde yanlış bir durum güncellemesi yayınlayarak hile yapmaya çalıştığında, meydan okuma penceresi dolana kadar işlemi kesinleştirilmez. ## Sanal özel kanallar {#virtual-state-channels} -Bir özel kanalın basit uygulaması, iki kullanıcının bir uygulamayı zincir dışı yürütmeyi dilediği durumlarda yeni bir sözleşmeyi uygulamaktır. Bu sadece mantıksız olmakla kalmayıp, bir de özel kanalların maliyet verimliliğini negatif yönde etkiler (zincir üstü işlem maliyetleri hızla artabilir). +Bir özel kanalın basit uygulaması, iki kullanıcının bir uygulamayı zincir dışı yürütmek istediğinde yeni bir sözleşme dağıtmasıdır. Bu sadece olanaksız olmakla kalmaz, aynı zamanda özel kanalların maliyet etkinliğini de ortadan kaldırır (zincir üstü işlem maliyetleri hızla artabilir). -Bu sorunu çözmek için "sanal kanallar" yaratılmıştır. Sanal kanallar, normal kanallardan farklı olarak zincir üstü işlemlerin açılmasını ve sonlandırılmasını gerektirmez ve ana zincirle etkileşime girmeden açılabilir, yürütülebilir ve sonlandırılabilir. Hatta bu yöntemle uyuşmazlıkları zincir dışında çözmek bile mümkündür. +Bu sorunu çözmek için "sanal kanallar" yaratılmıştır. Açmak ve sonlandırmak için zincir üstü işlemler gerektiren normal kanalların aksine, sanal bir kanal ana zincirle etkileşime girmeden açılabilir, yürütülebilir ve kesinleştirilebilir. Bu yöntemle anlaşmazlıkları zincir dışında çözmek bile mümkündür. -Bu sistem, zincir üzerinde finanse edilmiş "ledger kanalları" olarak adlandırılan kanalların varlığına dayanır. İki taraf arasındaki sanal kanallar ledger kanalının sahiplerinin aracı olarak görevi gördüğü mevcut bir ledger defter kanalının üzerine kurulabilir. +Bu sistem, zincir üstünde finanse edilmiş olan "defter kanalları" (ledger channels) olarak adlandırılan kanalların varlığına dayanır. İki taraf arasındaki sanal kanallar ledger kanalının sahiplerinin aracı olarak görevi gördüğü mevcut bir ledger defter kanalının üzerine kurulabilir. -Her sanal kanaldaki kullanıcılar, yeni bir sözleşme örneği aracılığıyla etkileşime girer ve ledger kanalı birden çok sözleşme örneğini destekleyebilir. Ledger kanalının durumu aynı zamanda birden fazla sözleşme depolama durumunu içerir ve bu sayede farklı kullanıcılar arasında zincir dışı uygulamaların paralel yürütülmesi mümkün olur. +Her sanal kanaldaki kullanıcılar, yeni bir sözleşme örneği aracılığıyla etkileşime girer ve ledger kanalı birden çok sözleşme örneğini destekleyebilir. Defter kanalının durumu ayrıca birden fazla sözleşme depolama durumu içerir, bu da farklı kullanıcılar arasında uygulamaların zincir dışında paralel olarak yürütülmesine olanak tanır. -Kullanıcılar, tıpkı normal kanallardaki gibi durum makinesini ilerletmek için durum güncellemelerini takas eder. Bir uyuşmazlık ortaya çıkmadığı takdirde, aracı ile sadece kanalı açarken ya da kapatırken iletişime girilmesi gerekir. +Kullanıcılar, tıpkı normal kanallardaki gibi durum makinesini ilerletmek için durum güncellemelerini takas eder. Bir anlaşmazlık ortaya çıkmadığı sürece, aracıyla yalnızca kanalı açarken veya sonlandırırken iletişime geçilmesi gerekir. ### Sanal ödeme kanalları {#virtual-payment-channels} -Sanal ödeme kanalları, sanal özel kanallar ile aynı fikir üzerine geliştirilmiştir: aynı ağa bağlı katılımcılar, katılımcılar zincir üstünde yeni bir kanal açmaya ihtiyaç duymadan mesajları iletebilir. Sanal ödeme kanallarında, değer transferleri bir veya daha fazla aracı ile yönlendirilir ve transfer edilen fonların yalnızca amaçlanan alıcı tarafından alınması garanti edilir. +Sanal ödeme kanalları, sanal özel kanallarla aynı fikirde çalışır: aynı ağa bağlı katılımcılar, zincir üstünde yeni bir kanal açmaya gerek duymadan mesajlaşabilir. Sanal ödeme kanallarında, değer transferleri bir veya daha fazla aracı ile yönlendirilir ve transfer edilen fonların yalnızca amaçlanan alıcı tarafından alınması garanti edilir. -## Özel kanalın uygulama alanları {#applications-of-state-channels} +## Özel kanalların uygulamaları {#applications-of-state-channels} ### Ödemeler {#payments} -İlk zamanlardaki blokzincir kanalları, iki katılımcının Ana Ağ'da yüksek işlem ücretleri ödemek zorunda kalmadan zincir dışında hızlı, düşük ücretli transferler gerçekleştirmesine izin veren basit protokollerdi. Günümüzdeki ödeme kanalları, ether ve jeton takas etmek ve yatırmak için tasarlanmış uygulamalar için hala kullanışlıdır. +İlk blokzincir kanalları, iki katılımcının Mainnet'te yüksek işlem ücretleri ödemek zorunda kalmadan zincir dışında hızlı, düşük ücretli transferler yapmasına olanak tanıyan basit protokollerdi. Günümüzdeki ödeme kanalları, ether ve jeton takas etmek ve yatırmak için tasarlanmış uygulamalar için hala kullanışlıdır. Kanal esaslı ödemelerde aşağıdaki avantajlar vardır: -1. **Verim**: Her bir kanal başına zincir dışı işlem miktarı, özellikle blok boyutu ve blok zamanı gibi çeşitli faktörlerden etkilenen Ethereum verimi ile bağlantılı değildir. İşlemleri zincir dışı yürüterek blokzincir kanalları daha büyük verim elde edebilir. +1. **Verim**: Kanal başına düşen zincir dışı işlem sayısı, özellikle blok boyutu ve blok süresi gibi çeşitli faktörlerden etkilenen Ethereum'un veriminden bağımsızdır. Blokzincir kanalları, işlemleri zincir dışında yürüterek daha yüksek verim elde edebilir. -2. **Gizlilik**: Kanallar zincir dışında var olduğundan, katılımcılar arasındaki etkileşimlerin detayları Ethereum'un halka açık blokzincirinde kayıt altına alınmaz. Kanal kullanıcıları sadece kanallara fon dağıtırken ve kanalları kapatırken ya da anlaşmazlıkları çözerken zincir üstünde etkileşim kurmak zorundadır. Bu sebeple kanallar, daha gizli işlemler isteyen kişiler için kullanışlıdır. +2. **Gizlilik**: Kanallar zincir dışında var olduğu için, katılımcılar arasındaki etkileşimlerin ayrıntıları Ethereum'un halka açık blokzincirine kaydedilmez. Kanal kullanıcılarının yalnızca kanalları finanse ederken, kapatırken veya anlaşmazlıkları çözerken zincir üstünde etkileşimde bulunmaları gerekir. Bu sebeple kanallar, daha gizli işlemler isteyen kişiler için kullanışlıdır. -3. **Gecikme**: Kanal katılımcıları arasında yürütülen zincir dışı işlemler, iki taraf da iş birliği yaptığı takdirde hemen çözüme kavuşturulabilir ve böylelikle gecikmeler azalır. Buna karşılık olarak Ana Ağ üzerinden işlem göndermek için düğümlerin işlemi tamamlamasının, işlemle yeni bir blok oluşturmasının ve mutabakata varılmasının beklenmesi gerekir. Kullanıcılar aynı zamanda, işlemi sonlandırılmış olarak kabul etmeden önce başka blok onaylarını beklemek zorunda kalabilir. +3. **Gecikme**: Kanal katılımcıları arasında yürütülen zincir dışı işlemler, her iki taraf da işbirliği yaparsa anında sonuçlandırılarak gecikmeleri azaltabilir. Buna karşılık olarak Ana Ağ üzerinden işlem göndermek için düğümlerin işlemi tamamlamasının, işlemle yeni bir blok oluşturmasının ve mutabakata varılmasının beklenmesi gerekir. Kullanıcılar aynı zamanda, işlemi sonlandırılmış olarak kabul etmeden önce başka blok onaylarını beklemek zorunda kalabilir. -4. **Maliyet**: Özel kanallar, bir grup katılımcının uzun bir süre boyunca birçok durum güncellemesini takas edeceği durumlarda özellikle kullanışlıdır. Ortaya çıkan tek maliyet, özel kanal akıllı sözleşmesinin açılış ve kapanış maliyetidir; kanalın açılışı ve kapanışı arasındaki her durum değişikliği uzlaşma maliyeti ona göre dağıtıldığı için bir öncekinden daha ucuz olacaktır. +4. **Maliyet**: Özel kanallar, bir grup katılımcının uzun bir süre boyunca çok sayıda durum güncellemesi yapacağı durumlarda özellikle kullanışlıdır. Ortaya çıkan tek maliyet, özel kanal akıllı sözleşmesinin açılış ve kapanış maliyetidir; kanalın açılışı ve kapanışı arasındaki her durum değişikliği uzlaşma maliyeti ona göre dağıtıldığı için bir öncekinden daha ucuz olacaktır. -[Toplamalar](/developers/docs/scaling/#rollups) gibi katman 2 çözümlerinde özel kanalların kullanılması, bu kanalları ödemeler için daha çekici hale getirebilir. Kanallar ucuz ödemeler sunarken, Ana Ağ'da açılış aşamasında zincir üstü sözleşme kurulmasının maliyetleri, özellikle gaz fiyatları yükseldiğinde pahalıya gelebilir. Ethereum tabanlı toplamalar [düşük işlem ücretleri](https://l2fees.info/) sunar ve kurulum ücretlerini aşağı çekerek kanal katılımcılarının yükünü azaltabilir. +Özel kanalları [toplamalar](/developers/docs/scaling/#rollups) gibi katman 2 çözümlerinde uygulamak, onları ödemeler için daha da çekici hale getirebilir. Kanallar ucuz ödemeler sunsa da, açılış aşamasında Mainnet üzerinde zincir üstü sözleşme kurma maliyetleri, özellikle gas ücretleri aniden yükseldiğinde pahalı olabilir. Ethereum tabanlı toplamalar [daha düşük işlem ücretleri](https://l2fees.info/) sunar ve kurulum ücretlerini düşürerek kanal katılımcıları için ek yükü azaltabilir. ### Mikro işlemler {#microtransactions} @@ -179,21 +179,21 @@ Kanalı açma ve kapatma maliyetinin ötesinde, katılımcılar mikro işlemlerd ### Merkeziyetsiz uygulamalar {#decentralized-applications} -Tıpkı ödeme kanalları gibi özel kanallar da durum makinesinin son durumlarına göre koşullu ödemeler yapabilir. Özel kanallar aynı zamanda keyfi durum geçiş mantığını destekleyebilir, bu durum onları zincir dışı genel uygulamaları yürütmek için kullanışlı hale getirir. +Tıpkı ödeme kanalları gibi özel kanallar da durum makinesinin son durumlarına göre koşullu ödemeler yapabilir. Özel kanallar ayrıca isteğe bağlı durum geçiş mantığını da destekleyebilir, bu da onları genel uygulamaları zincir dışında çalıştırmak için kullanışlı hale getirir. -Özel kanallar sıklıkla basit sıra tabanlı uygulamalarla sınırlıdır ve bu, zincir dışı sözleşmeye girilmiş fonların yönetilmesini kolaylaştırır. Aynı zamanda, belirli aralıklarla zincir dışı uygulamaların durumunu güncelleyen sınırlı sayıda taraf olduğundan dürüst olmayan davranışı cezalandırmak nispeten daha basittir. +Özel kanallar genellikle basit, sıra tabanlı uygulamalarla sınırlıdır, çünkü bu, zincir üstü sözleşmeye taahhüt edilen fonların yönetimini kolaylaştırır. Ayrıca, zincir dışı uygulamanın durumunu belirli aralıklarla güncelleyen sınırlı sayıda taraf varken, dürüst olmayan davranışları cezalandırmak nispeten basittir. -Bir özel kanal uygulamasının verimliliği aynı zamanda onun tasarımına da bağlıdır. Örneğin, bir geliştirici uygulama kanalı sözleşmesini zincir üstünde bir kez dağıtabilir ve diğer oyuncuların zincir üstünde bulunmak zorunda olmadan uygulamayı yeniden kullanmalarına izin verebilir. Bu durumda ilk uygulama kanalı, her biri uygulamanın zincir dışı akıllı sözleşmesinin yeni bir örneğini yürüten birden fazla sanal kanalı destekleyen bir ledger kanalı olarak hizmet eder. +Bir özel kanal uygulamasının verimliliği aynı zamanda onun tasarımına da bağlıdır. Örneğin, bir geliştirici, uygulama kanalı sözleşmesini bir kez zincir üstünde dağıtabilir ve diğer oyuncuların zincir üstüne çıkmak zorunda kalmadan uygulamayı yeniden kullanmalarına izin verebilir. Bu durumda, ilk uygulama kanalı, her biri uygulamanın akıllı sözleşmesinin yeni bir örneğini zincir dışında çalıştıran birden çok sanal kanalı destekleyen bir defter kanalı (ledger channel) görevi görür. -Özel kanal uygulamaları için potansiyel bir kullanım durumu, fonların oyunun sonucuna göre dağıtıldığı basit iki oyunculu oyunlardır. Buradaki fayda, oyuncuların birbirlerine güvenmek zorunda olmaması (güven gerektirmezlik) ve fonların tahsisini ve uyuşmazlıkların çözümünü (merkeziyetsizlik) oyuncuların değil, zincir üstü sözleşmenin kontrol etmesidir. +Özel kanal uygulamaları için potansiyel bir kullanım durumu, fonların oyunun sonucuna göre dağıtıldığı basit iki oyunculu oyunlardır. Buradaki fayda, oyuncuların birbirine güvenmek zorunda olmaması (güven gerektirmezlik) ve fonların tahsisini ve anlaşmazlıkların çözümünü (merkeziyetsizlik) oyuncuların değil, zincir üstü sözleşmenin kontrol etmesidir. Özel kanal uygulamaları için diğer olası kullanım durumları, ENS isim sahipliğini, NFT ledger'lerini ve daha fazlasını içerir. ### Atomik transferler {#atomic-transfers} -Erken dönemlerdeki ödeme kanallarının işlevi, iki taraf arasındaki transferlerle kısıtlıydı ve dolayısıyla kullanılabilirlikleri sınırlıydı. Ancak sanal kanalların devreye alınması, kişilerin transferleri aracılar üzerinden (örn. birden çok p2p kanalı) zincir üstünde yeni kanal açmaya gerek kalmadan yönlendirmesine olanak tanıdı. +Erken dönemlerdeki ödeme kanallarının işlevi, iki taraf arasındaki transferlerle kısıtlıydı ve dolayısıyla kullanılabilirlikleri sınırlıydı. Ancak sanal kanalların kullanıma sunulması, bireylerin yeni bir kanalı zincir üstünde açmaya gerek kalmadan aracılar (yani birden çok P2P kanalı) aracılığıyla transferleri yönlendirmesine olanak tanıdı. -Genellikle "çok atlamalı transferler" olarak tanımlanan yönlendirilmiş ödemeler atomiktir (yani, ya işlemlerin tüm bölümleri başarılı olur ya da hep birlikte başarısız olur). Atomik transferler, ödemenin yalnızca belirli koşullar sağlandığı takdirde serbest bırakıldığından emin olmak ve böylece karşı tarafın riskini azaltmak için [Karma Zaman Kilidi Sözleşmelerini (HTLC'ler)](https://en.bitcoin.it/wiki/Hash_Time_Locked_Contracts) kullanır. +Genellikle "çok atlamalı transferler" olarak tanımlanan yönlendirilmiş ödemeler atomiktir (yani, ya işlemlerin tüm bölümleri başarılı olur ya da hep birlikte başarısız olur). Atomik transferler, ödemenin yalnızca belirli koşullar karşılandığında serbest bırakılmasını sağlamak için [Karma Zaman Kilitli Sözleşmeler (HTLC'ler)](https://en.bitcoin.it/wiki/Hash_Time_Locked_Contracts) kullanır, böylece karşı taraf riskini azaltır. ## Özel kanalları kullanmanın dezavantajları {#drawbacks-of-state-channels} @@ -203,43 +203,43 @@ Genellikle "çok atlamalı transferler" olarak tanımlanan yönlendirilmiş öde Gerçekte, kullanıcılar kendi kontrolleri dışındaki sebeplerden çevrimdışı kalabilirler (örn. zayıf internet bağlantısı, mekanik arızalar, vb.). Eğer dürüst bir kullanıcı çevrimdışı kalırsa kötü niyetli bir eş, eski ara durumları hakem sözleşmesine sunabilir ve taahhüt edilen fonları çalarak durumdan faydalanabilir. -Bazı kanallar, başkaları adına zincir üstü uyuşmazlık olaylarını izlemek ve ilgili tarafları uyarmak gibi gerekli aksiyonlardan sorumlu varlıklar olan "gözetleme kulelerini" kullanır. Ancak bu, özel kanal kullanmanın maliyetini arttırır. +Bazı kanallar, başkaları adına zincir üstü anlaşmazlık olaylarını izlemekten ve ilgili tarafları uyarmak gibi gerekli eylemleri yapmaktan sorumlu olan "gözetleme kuleleri" (watchtowers) kullanır. Ancak bu, özel kanal kullanmanın maliyetini arttırır. -### Veri erişilemezliği {#data-unavailability} +### Veri kullanılamazlığı {#data-unavailability} Daha önce açıklandığı üzere geçersiz bir uyuşmazlığa itiraz etmek, özel kanalın en son geçerli halini sunmayı gerektirir. Bu da, kullanıcıların kanalın en son durumuna eriştiği vasayımına dayanan bir diğer kuraldır. -Kanal kullanıcılarının zincir dışı uygulamaların durumunun kopyalarını depolamasını beklemek mantıklı olmasına rağmen, bu veriler hata ya da mekanik arıza sebebiyle kaybolabilir. Kullanıcı veriyi yedeklememişse yapabileceği tek şey, diğer tarafın kendi sahip olduğu eski durum geçişlerini kullanarak geçersiz bir çıkış talebini sonlandırmamasını ummaktır. +Kanal kullanıcılarından zincir dışı uygulama durumunun kopyalarını saklamalarını beklemek makul olsa da, bu veriler hata veya mekanik arıza nedeniyle kaybolabilir. Kullanıcı veriyi yedeklememişse yapabileceği tek şey, diğer tarafın kendi sahip olduğu eski durum geçişlerini kullanarak geçersiz bir çıkış talebini sonlandırmamasını ummaktır. Ağ, veri kullanılabilirliği üzerine kuralları uyguladığı için Ethereum kullanıcılarının bu problemle baş etmesi gerekmez. İşlem verileri, tüm düğümler tarafından depolanıp yayımlanır ve gerekli olduğu takdirde kullanıcıların indirmesi için hazırdır. ### Likidite sorunları {#liquidity-issues} -Bir blokzincir kanalı kurmak için, katılımcılar kanalın yaşam döngüsü süresince fonları zincir üstü akıllı sözleşmeye kitlemeye ihtiyaç duyar. Bu, kanal kullanıcılarının likiditesini azaltır ve aynı zamanda kanalları, Ana Ağ'da fonları kilitli tutmaya gücü yetenlerle sınırlandırır. +Bir blokzincir kanalı oluşturmak için, katılımcıların kanalın yaşam döngüsü boyunca bir zincir üstü akıllı sözleşmeye fon kilitlemeleri gerekir. Bu, kanal kullanıcılarının likiditesini azaltır ve aynı zamanda kanalları, Ana Ağ'da fonları kilitli tutmaya gücü yetenlerle sınırlandırır. -Ancak, ledger kanalları (bir zincir dışı hizmet sağlayıcısı (OSP) tarafından işletilen), kullanıcılar için likidite sorunlarını azaltabilir. Ledger kanalına bağlı iki eş bir sanal kanal oluşturabilir, bu kanalı istedikleri herhangi bir zaman tamamen zincir dışında açabilir ve sonlandırabilir. +Ancak, bir zincir dışı hizmet sağlayıcısı (OSP) tarafından işletilen defter kanalları (ledger channels), kullanıcılar için likidite sorunlarını azaltabilir. Bir defter kanalına bağlı iki eş, istedikleri zaman tamamen zincir dışında açıp kesinleştirebilecekleri bir sanal kanal oluşturabilir. -Zincir dışı hizmet sağlayıcılar aynı zamanda, ödemeleri yönlendirmeyi daha kullanışlı hale getirmek için birden çok eşle kanal açabilir. Elbette kullanıcılar, OSP'lere hizmetleri için ödeme yapmak zorundadır; bu, bazıları için istenmeyen bir durum olabilir. +Zincir dışı hizmet sağlayıcıları, ödemeleri yönlendirmek için kullanışlı hale getirmek amacıyla birden fazla eşle de kanallar açabilir. Elbette kullanıcılar, OSP'lere hizmetleri için ödeme yapmak zorundadır; bu, bazıları için istenmeyen bir durum olabilir. -### Griefing saldırıları {#griefing-attacks} +### Tasa saldırıları {#griefing-attacks} Griefing saldırıları, sahtecilik kanıtı tabanlı sistemlerin ortak bir özelliğidir. Bir griefing saldırısı salgırgana direkt olarak bir yarar sağlamaz ancak kurbanın grief'e maruz kalmasına (zarara uğramasına) sebep olur ve adı da buradan gelir. -Sahteciliğin kanıtlanması, griefing saldırılarına kolay edef olur; çünkü dürüst taraf her uyuşmazlığa, hatta geçersiz olanlara bile yanıt vermek zorundadır, aksi takdirde fonlarını kaybetme riskiyle karşı karşıyadır. Kötü niyetli bir katılımcı zincir üzerinde eski durum geçişlerini zincire tekrar tekrar göndermeye karar vererek dürüst tarafı geçerli durum ile yanıt vermeye zorlayabilir. Bu zincir üstü işlemlerin maliyeti süreçte hızla artabilir ve dürüst tarafların süreçte kaybetmesine sebep olabilir. +Sahteciliğin kanıtlanması, griefing saldırılarına kolay edef olur; çünkü dürüst taraf her uyuşmazlığa, hatta geçersiz olanlara bile yanıt vermek zorundadır, aksi takdirde fonlarını kaybetme riskiyle karşı karşıyadır. Kötü niyetli bir katılımcı, dürüst tarafı geçerli durumla yanıt vermeye zorlayarak, eski durum geçişlerini zincir üstünde tekrar tekrar yayınlamaya karar verebilir. Bu zincir üstü işlemlerin maliyeti hızla artabilir ve bu da dürüst tarafların süreçte kayba uğramasına neden olabilir. -### Önceden tanımlanmış katılımcı kümeleri {#predefined-participant-sets} +### Önceden tanımlanmış katılımcı setleri {#predefined-participant-sets} -Bir özel kanalı oluşturan katılımcı sayısı, tasarımı gereği kullanım ömrü boyunca sabittir. Bunun sebebi, katılımcı kümesinin güncellenmesinin, özellikle kanala fon sağlanırken ya da anlaşmazlıkları çözerken kanalın işleyişini zorlaştırmasıdır. Katılımcı eklemek ya da çıkarmak da ekstra zincir üstü faaliyet gerektirir ve bu, kullanıcıların yükünü arttırır. +Bir özel kanalı oluşturan katılımcı sayısı, tasarımı gereği kullanım ömrü boyunca sabittir. Bunun sebebi, katılımcı kümesinin güncellenmesinin, özellikle kanala fon sağlanırken ya da anlaşmazlıkları çözerken kanalın işleyişini zorlaştırmasıdır. Katılımcı eklemek veya kaldırmak ek zincir üstü etkinlik gerektirir, bu da kullanıcılar için ek yükü artırır. Bu, özel kanallar hakkında fikir yürütmeyi kolaylaştırsa da kanal tasarımlarının uygulama geliştiricileri için kullanışlılığını sınırlar. Bu, özel kanalların neden toplamalar gibi diğer ölçeklendirme çözümlerine tercih edilmediğini kısmen açıklar. -### Paralel işlem süreci {#parallel-transaction-processing} +### Paralel işlem işleme {#parallel-transaction-processing} -Özel kanaldaki katılımcılar, durum güncellemelerini sırayla gönderirler, bu sebeple en çok "sıra tabanlı uygulamalarda" (örn. iki kişilik bir satranç oyunu) işe yararlar. Bu, eş zamanlı durum güncellemelerini ele alma ihtiyacını ortadan kaldırır ve zincir üstü sözleşmelerin eski güncelleme göndericilerini cezalandırmak için yapması gereken işi azaltır. Ancak, bu tasarımın yan etkisi işlemlerin birbirlerine bağlı hale gelmesidir. Bu da gecikmeyi artırır ve genel kullanıcı deneyimini olumsuz etkiler. +Özel kanaldaki katılımcılar, durum güncellemelerini sırayla gönderirler, bu sebeple en çok "sıra tabanlı uygulamalarda" (örn. iki kişilik bir satranç oyunu) işe yararlar. Bu, eş zamanlı durum güncellemelerini ele alma ihtiyacını ortadan kaldırır ve zincir üstü sözleşmenin eski güncelleme gönderenleri cezalandırmak için yapması gereken işi azaltır. Ancak, bu tasarımın yan etkisi işlemlerin birbirlerine bağlı hale gelmesidir. Bu da gecikmeyi artırır ve genel kullanıcı deneyimini olumsuz etkiler. -Bazı özel kanallar bu problemi, zincir dışı durumu iki adet tek yönlü "tek yönlü" duruma dönüştüren ve eş zamanlı durum güncellemelerine izin veren "tam çift yönlü" tasarım kullanarak çözer. Bunun gibi tasarımlar zincir dışı verimi arttırır ve işlem gecikmelerini azaltır. +Bazı özel kanallar bu sorunu, zincir dışı durumu iki tek yönlü "simpleks" duruma ayıran ve eş zamanlı durum güncellemelerine izin veren "tam çift yönlü" (full-duplex) bir tasarım kullanarak çözer. Bu tür tasarımlar zincir dışı verimi artırır ve işlem gecikmelerini azaltır. -## Durum kanallarını kullanın {#use-state-channels} +## Özel kanalları kullanma {#use-state-channels} Merkeziyetsiz uygulamalarınıza entegre edebileceğiniz özel kanallara ilişkin uygulamalar sağlayan birden çok proje mevcuttur: @@ -249,13 +249,13 @@ Merkeziyetsiz uygulamalarınıza entegre edebileceğiniz özel kanallara ilişki - [Raiden](https://raiden.network/) - [Statechannels.org](https://statechannels.org/) -## Daha fazla okuma {#further-reading} +## Daha fazla kaynak {#further-reading} -**Durum kanalları** +**Özel kanallar** -- [Ethereum'un Katman 2 Ölçeklendirme Çözümlerini Anlama: Özel Kanallar, Plazma ve Truebit](https://medium.com/l4-media/making-sense-of-ethereums-layer-2-scaling-solutions-state-channels-plasma-and-truebit-22cb40dcc2f4) _– Josh Stark, 12 Şubat 2018_ -- [Özel Kanallar - bir açıklama](https://www.jeffcoleman.ca/state-channels/) _6 Kasım 2015 - Jeff Coleman_ +- [Ethereum’un Katman 2 Ölçeklendirme Çözümlerini Anlamak: Özel Kanallar, Plazma ve Truebit](https://medium.com/l4-media/making-sense-of-ethereums-layer-2-scaling-solutions-state-channels-plasma-and-truebit-22cb40dcc2f4) _– Josh Stark, 12 Şubat 2018_ +- [Özel Kanallar - bir açıklama](https://www.jeffcoleman.ca/state-channels/) _6 Kas 2015 - Jeff Coleman_ - [Özel Kanalların Temelleri](https://education.district0x.io/general-topics/understanding-ethereum/basics-state-channels/) _District0x_ -- [Blokzincir Özel Kanalları: Son Teknoloji Ürünü](https://ieeexplore.ieee.org/document/9627997) +- [Blokzincir Özel Kanalları: Son Teknoloji](https://ieeexplore.ieee.org/document/9627997) -_Size yardımcı olan bir topluluk kaynağı mı biliyorsunuz? Bu sayfayı düzenleyin ve ekleyin!_ \ No newline at end of file +_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/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..eb1ca5f5dfd 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) diff --git a/public/content/translations/tr/developers/docs/standards/tokens/index.md b/public/content/translations/tr/developers/docs/standards/tokens/index.md index 2a937811b34..96a00d1cab1 100644 --- a/public/content/translations/tr/developers/docs/standards/tokens/index.md +++ b/public/content/translations/tr/developers/docs/standards/tokens/index.md @@ -1,39 +1,41 @@ --- -title: Token Standartları -description: +title: "Token Standartları" +description: "Misli ve eşsiz jetonlar için ERC-20, ERC-721 ve ERC-1155 dahil olmak üzere Ethereum jeton standartlarını keşfedin." lang: tr incomplete: true --- ## Giriş {#introduction} -Birçok Ethereum geliştirme standardı, jeton arayüzlerine odaklanır. Bu standartlar akıllı sözleşmelerin birleştirilebilir kalmasını sağlamaya yardımcı olur: Örneğin yeni bir proje bir token çıkardığı zaman token'ın mevcut merkeziyetsiz borsalarla uyumlu kalması gibi. +Birçok Ethereum geliştirme standardı, jeton arayüzlerine odaklanır. Bu standartlar, akıllı sözleşmelerin birleştirilebilir kalmasını sağlamaya yardımcı olur; böylece yeni bir proje bir jeton çıkardığında, jeton mevcut merkeziyetsiz borsalar ve uygulamalarla uyumlu kalır. + +Jeton standartları, jetonların Ethereum ekosistemi genelinde nasıl davrandığını ve etkileşime girdiğini tanımlar. Bu standartlar, geliştiricilerin tekerleği yeniden icat etmeden geliştirme yapmalarını kolaylaştırır ve jetonların cüzdanlar, borsalar ve DeFi platformları ile sorunsuz bir şekilde çalışmasını sağlar. İster oyun, ister yönetişim veya diğer kullanım durumlarında olsun, bu standartlar tutarlılık sağlar ve Ethereum'u daha birbiriyle bağlantılı hâle getirir. ## Ön Koşullar {#prerequisites} - [Ethereum geliştirme standartları](/developers/docs/standards/) - [Akıllı sözleşmeler](/developers/docs/smart-contracts/) -## Token standartları {#token-standards} +## Jeton standartları {#token-standards} Bunlar Ethereum'daki en popüler token standartlarından bazılarıdır: -- [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-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. ### NFT standartları {#nft-standards} -- [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-1155](/developers/docs/standards/tokens/erc-1155/) - ERC-1155, daha verimli alım satımlara ve işlemlerin gruplandırılmasına olanak tanır: Böylece maliyetlerden tasarruf sağlar. Bu jeton standardı, hem yardımcı jetonların ($BNB veya $BAT gibi) hem de CryptoPunks gibi Eşsiz Jetonların oluşturulmasına olanak tanır. +- [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-1155](/developers/docs/standards/tokens/erc-1155/) - ERC-1155, daha verimli alım satımlara ve işlemlerin gruplandırılmasına olanak tanıyarak maliyetlerden tasarruf sağlar. Bu jeton standardı, hem yardımcı jetonların ($BNB veya $BAT gibi) hem de CryptoPunks gibi Eşsiz Jetonların oluşturulmasına olanak tanır. -[ERC](https://eips.ethereum.org/erc) önerilerinin tam listesi. +[ERC](https://eips.ethereum.org/erc) tekliflerinin tam listesi. -## daha fazla okuma {#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!_ ## İlgili öğreticiler {#related-tutorials} -- [Token entegrasyonu kontrol listesi](/developers/tutorials/token-integration-checklist/) _– Token'larla etkileşim kurarken göz önünde bulundurulması gerekenleri içeren bir kontrol listesi._ -- [ERC20 token akıllı sözleşmesini anlayın](/developers/tutorials/understand-the-erc-20-token-smart-contract/) _– İlk akıllı sözleşmenizi bir Ethereum test ağında dağıtmaya giriş._ -- [ERC20 token'larının bir Solidity akıllı sözleşmesinden transferleri ve onaylanması](/developers/tutorials/transfers-and-approval-of-erc-20-tokens-from-a-solidity-smart-contract/) _– Solidity dilini kullanarak bir token'la etkileşim kurmak için bir akıllı sözleşme nasıl kullanılır?_ -- [Bir ERC721 pazarının uygulanması [nasıl yapılır kılavuzu]](/developers/tutorials/how-to-implement-an-erc721-market/) _– Merkeziyetsiz bir ilan panosunda token'laştırılmış ürünler nasıl satışa sunulur?_ +- [Jeton entegrasyon kontrol listesi](/developers/tutorials/token-integration-checklist/) _– Jetonlarla etkileşim kurarken göz önünde bulundurulması gerekenleri içeren bir kontrol listesi._ +- [ERC20 jeton akıllı sözleşmesini anlama](/developers/tutorials/understand-the-erc-20-token-smart-contract/) _– İlk akıllı sözleşmenizi bir Ethereum test ağında dağıtmaya giriş._ +- [ERC20 jetonlarının bir Solidity akıllı sözleşmesinden transferleri ve onaylanması](/developers/tutorials/transfers-and-approval-of-erc-20-tokens-from-a-solidity-smart-contract/) _– Solidity dilini kullanarak bir jetonla etkileşim kurmak için bir akıllı sözleşme nasıl kullanılır._ +- [Bir ERC721 pazarının uygulanması [nasıl yapılır kılavuzu]](/developers/tutorials/how-to-implement-an-erc721-market/) _– Merkeziyetsiz bir ilan panosunda jetonlaştırılmış ürünler nasıl satışa sunulur._ diff --git a/public/content/translations/tr/developers/docs/storage/index.md b/public/content/translations/tr/developers/docs/storage/index.md index 7765950f7b2..81515a62c32 100644 --- a/public/content/translations/tr/developers/docs/storage/index.md +++ b/public/content/translations/tr/developers/docs/storage/index.md @@ -1,12 +1,12 @@ --- title: Merkeziyetsiz Depolama -description: Merkeziyetsiz depolamanın ne olduğuna ve onu bir dapp'ye entegre etmeye yarayan mevcut araçlara genel bakış. +description: "Merkeziyetsiz depolamanın ne olduğuna ve onu bir dapp'ye entegre etmeye yarayan mevcut araçlara genel bakış." lang: tr --- Tek bir şirket veya kuruluş tarafından işletilen merkezi bir sunucunun aksine, merkeziyetsiz depolama sistemleri, genel verilerin bir bölümünü tutan ve esnek bir dosya depolama paylaşım sistemi oluşturan eşler arası bir kullanıcı operatörleri ağından oluşur. Bunlar, blok zinciri tabanlı bir uygulamada veya herhangi bir eşler arası tabanlı ağda olabilir. -Tüm akıllı sözleşmelerde kod depolaması söz konusu olduğunda, Ethereum'un kendisi merkeziyetsiz bir depolama sistemi olarak kullanılabilir. Ancak, büyük miktarda veri söz konusu olduğunda, Ethereum'un tasarımı buna uygun değildir. Zincir istikrarlı bir şekilde büyüse de bu yazının yazıldığı sırada Ethereum zinciri 500 GB - 1 TB ([istemciye bağlı olarak](https://etherscan.io/chartsync/chaindefault)) civarında bir boyuta sahiptir ve ağdaki her düğümün tüm verileri depolayabilmesi gerekir. Zincir büyük miktarda veriye (diyelim ki 5 TB) genişleyecek olsaydı, tüm düğümlerin çalışmaya devam etmesi mümkün olmazdı. Ayrıca, bu kadar çok veriyi Mainnet'e dağıtmanın maliyeti, [gaz](/developers/docs/gas) ücretleri nedeniyle aşırı derecede pahalı olurdu. +Tüm akıllı sözleşmelerde kod depolaması söz konusu olduğunda, Ethereum'un kendisi merkeziyetsiz bir depolama sistemi olarak kullanılabilir. Ancak, büyük miktarda veri söz konusu olduğunda, Ethereum'un tasarımı buna uygun değildir. Zincir istikrarlı bir şekilde büyüyor, ancak bu yazının yazıldığı sırada Ethereum zinciri yaklaşık 500 GB - 1 TB ([istemciye bağlı olarak](https://etherscan.io/chartsync/chaindefault)) ve ağdaki her düğümün tüm verileri depolayabilmesi gerekiyor. Zincir büyük miktarda veriye (diyelim ki 5 TB) genişleyecek olsaydı, tüm düğümlerin çalışmaya devam etmesi mümkün olmazdı. Ayrıca, bu kadar çok veriyi Ana Ağ'a dağıtmanın maliyeti, [gaz](/developers/docs/gas) ücretleri nedeniyle aşırı derecede pahalı olacaktır. Bu kısıtlamalar nedeniyle, büyük miktarda veriyi merkeziyetsiz bir şekilde depolamak için farklı bir zincire veya metodolojiye ihtiyacımız var. @@ -25,7 +25,7 @@ Bir veri parçasının sonsuza kadar kalıcı olması için bir kalıcılık mek Bu, **blok zinciri tabanlı** kalıcılık olarak bilinir. -Blok zinciri tabanlı kalıcılık ile ilgili sıkıntı, zincirin muhafaza edilemeyecek ve tüm verinin makul bir şekilde depolanamayacak kadar büyüyebilecek olmasıdır (örneğin [birçok kaynak](https://healthit.com.au/how-big-is-the-internet-and-how-do-we-measure-it/), internetin 40 Zetabayttan fazla depolama kapasitesine gerek duyacağını tahmin ediyor). +Blok zinciri tabanlı kalıcılıkla ilgili sorun, zincirin, tüm verilerin bakımının yapılamayacağı ve makul bir şekilde depolanamayacağı kadar büyüyebilmesidir (örneğin, [birçok kaynak](https://healthit.com.au/how-big-is-the-internet-and-how-do-we-measure-it/), İnternet'in 40 Zettabayttan fazla depolama kapasitesi gerektireceğini tahmin etmektedir). Blok zinciri ayrıca bir tür teşvik yapısına sahip olmalıdır. Block zincir tabanlı süreklilik için, doğrulayıcıya ödeme yapılır. Veri zincire eklendiğinde, doğrulayıcılar zincire eklenmesi için ödeme yapar. @@ -36,40 +36,40 @@ Blok zinciri tabanlı kalıcılığa sahip platformlar: ### Sözleşme tabanlı {#contract-based} -**Sözleşme tabanlı** kalıcılık, verinin her düğüm tarafından kopyalanıp sonsuza kadar depolanamayacağını öngörür, buna göre bunun yerine sözleşme anlaşmaları ile idame edilmelidir. Bunlar, belirli bir süre için bir veri parçasını tutma sözü veren birden fazla düğümle yapılan sözleşmelerdir. Verilerin kalıcı olmasını sağlamak için bittiklerinde iade edilmeleri veya yenilenmeleri gerekir. +**Sözleşme tabanlı** kalıcılık, verilerin her düğüm tarafından kopyalanamayacağı ve sonsuza kadar saklanamayacağı, bunun yerine sözleşme anlaşmalarıyla sürdürülmesi gerektiği anlayışına dayanır. Bunlar, belirli bir süre için bir veri parçasını tutma sözü veren birden fazla düğümle yapılan sözleşmelerdir. Verilerin kalıcı olmasını sağlamak için bittiklerinde iade edilmeleri veya yenilenmeleri gerekir. -Çoğu durumda, tüm verileri zincir üzerinde depolamak yerine, verilerin bir zincirde bulunduğu yerin hash değeri depolanır. Bu şekilde, tüm verileri tutmak için tüm zincirin ölçeklenmesi gerekmez. +Çoğu durumda, tüm verileri zincir üstünde depolamak yerine, verilerin bir zincirde bulunduğu yerin hash değeri depolanır. Bu şekilde, tüm verileri tutmak için tüm zincirin ölçeklenmesi gerekmez. Sözleşme tabanlı kalıcılığa sahip platformlar: -- [Filecoin](https://docs.filecoin.io/about-filecoin/what-is-filecoin/) -- [Skynet](https://siasky.net/) +- [Filecoin](https://docs.filecoin.io/basics/what-is-filecoin) +- [Skynet](https://sia.tech/) - [Storj](https://storj.io/) - [Züs](https://zus.network/) - [Crust Network](https://crust.network) - [Swarm](https://www.ethswarm.org/) - [4EVERLAND](https://www.4everland.org/) -### Göz önüne almanız gereken ek kavramlar {#additional-consideration} +### Ek hususlar {#additional-consideration} IPFS; dosyaları, web sitelerini, uygulamaları ve verileri depolamaya ve bunlara erişmeye yarayan dağıtılmış bir sistemdir. Dahili bir teşvik düzenine sahip değildir ama bunun yerine yukarıdaki sözleşme esaslı teşvik çözümlerinin herhangi biriyle daha uzun süreli kalıcılık için kullanılabilir. IPFS üzerinde veriyi kalıcı kılmanın başka bir yolu ise verinizi sizin için "iliştirecek" bir iliştirme hizmeti ile çalışmaktır. Kendinizin ve/veya başkalarının verilerini kalıcı kılmak için kendi IPFS düğümünüzü bile çalıştırıp ağa katkı sağlayabilirsiniz! - [IPFS](https://docs.ipfs.io/concepts/what-is-ipfs/) -- [Pinata](https://www.pinata.cloud/) _(IPFS iliştirme hizmeti)_ -- [web3.storage](https://web3.storage/) _(IPFS/Filecoin iliştirme hizmeti)_ -- [Infura](https://infura.io/product/ipfs) _(IPFS iliştirme hizmeti)_ -- [IPFS Tarama](https://ipfs-scan.io) _(IPFS iliştime arayıcı)_ -- [4EVERLAND](https://www.4everland.org/) _ (IPFS iliştirme hizmeti)_ -- [Filebase](https://filebase.com) _(IPFS İliştirme Hizmeti)_ -- [Spheron Ağı](https://spheron.network/) _(IPFS/Filecoin pimleme servisi)_ +- [Pinata](https://www.pinata.cloud/) _(IPFS sabitleme hizmeti)_ +- [web3.storage](https://web3.storage/) _(IPFS/Filecoin sabitleme hizmeti)_ +- [Infura](https://infura.io/product/ipfs) _(IPFS sabitleme hizmeti)_ +- [IPFS Scan](https://ipfs-scan.io) _(IPFS sabitleme gezgini)_ +- [4EVERLAND](https://www.4everland.org/)_(IPFS sabitleme hizmeti)_ +- [Filebase](https://filebase.com) _(IPFS Sabitleme Hizmeti)_ +- [Spheron Network](https://spheron.network/) _(IPFS/Filecoin sabitleme hizmeti)_ SWARM, bir depolama teşvik sistemi ve bir depolama fiyatı kahinine sahip merkeziyetsiz bir veri depolama dağıtım teknolojisidir. -## Veri tutma {#data-retention} +## Veri saklama {#data-retention} Sistemlerin verileri tutmak için verilerin tutulduğundan emin olmalarını sağlayan bir tür mekanizmaya sahip olmaları gerekir. -### Zorluk mekanizması {#challenge-mechanism} +### Meydan okuma mekanizması {#challenge-mechanism} Verilerin tutulduğundan emin olmanın en popüler yollarından biri, hâlâ verilere sahip olduklarından emin olmak için düğümlere verilen bir tür kriptografik sorgulama kullanmaktır. Arweave'in erişim ispatına bakarak basit bir yöntemi görebilirsiniz. Hem en son blokta hem de geçmişte rastgele bir blokta verilere sahip olup olmadıklarını görmek için düğümlere bir meydan okuma gönderirler. Düğüm, cevabı bulamazsa cezalandırılır. @@ -88,7 +88,6 @@ Platformların merkeziyetsizlik düzeyini ölçmek için pek iyi araçlar olmasa KYC'siz merkeziyetsiz araçlar: -- Züs (KYC'siz bir sürüm kullanır) - Skynet - Arweave - Filecoin @@ -99,7 +98,7 @@ KYC'siz merkeziyetsiz araçlar: ### Mutabakat {#consensus} -Bu araçların çoğu kendi [mutabakat mekanizması](/developers/docs/consensus-mechanisms/) versiyonuna sahiptir ancak genellikle ya [**iş ispatı (PoW)**](/developers/docs/consensus-mechanisms/pow/) ya da [**hisse ispatı (PoS)**](/developers/docs/consensus-mechanisms/pos/) üzerine kuruludur. +Bu araçların çoğunun kendi [mutabakat mekanizması](/developers/docs/consensus-mechanisms/) sürümü vardır, ancak bunlar genellikle ya [**İş İspatı'na (PoW)**](/developers/docs/consensus-mechanisms/pow/) ya da [**Hisse İspatı'na (PoS)**](/developers/docs/consensus-mechanisms/pos/) dayanır. İş ispatı tabanlı: @@ -115,103 +114,103 @@ Hisse ispatı tabanlı: ## İlgili araçlar {#related-tools} -**IPFS - _InterPlanetary File System (Gezegenler Arası Dosya Sistemi), Ethereum için merkeziyetsiz bir depolama ve dosya referans sistemidir._** +**IPFS - _InterPlanetary File System (Gezegenlerarası Dosya Sistemi), Ethereum için merkeziyetsiz bir depolama ve dosya referanslama sistemidir._** - [Ipfs.io](https://ipfs.io/) -- [Belgeler](https://docs.ipfs.io/) +- [Dökümanlar](https://docs.ipfs.io/) - [GitHub](https://github.com/ipfs/ipfs) -**Storj DCS - _Geliştiriciler için güvenli, özel ve S3 uyumlu merkeziyetsiz bulut nesnesi deposu._** +**Storj DCS - _Geliştiriciler için güvenli, özel ve S3 uyumlu merkeziyetsiz bulut nesne depolaması._** - [Storj.io](https://storj.io/) -- [Belgeler](https://docs.storj.io/) +- [Dökümanlar](https://docs.storj.io/) - [GitHub](https://github.com/storj/storj) -**Skynet - _Skynet, merkeziyetsiz bir ağa özel, merkeziyetsiz bir iş ispatı zinciridir._** +**Sia - _Alıcıların ve satıcıların doğrudan işlem yapmasına olanak tanıyan, güven gerektirmeyen bir bulut depolama pazar yeri oluşturmak için kriptografiden yararlanır._** -- [Skynet.net](https://siasky.net/) -- [Belgeler](https://siasky.net/docs/) -- [GitHub](https://github.com/SkynetLabs/) +- [Skynet.net](https://sia.tech/) +- [Dökümanlar](https://docs.sia.tech/) +- [GitHub](https://github.com/SiaFoundation/) -**Filecoin - _Filecoin, IPFS'nin ardındaki aynı ekip tarafından oluşturuldu. IPFS ideallerine ek olarak bir teşvik katmanıdır._** +**Filecoin - _Filecoin, IPFS'nin ardındaki aynı ekip tarafından oluşturuldu._** IPFS ideallerine ek olarak bir teşvik katmanıdır._\*\* - [Filecoin.io](https://filecoin.io/) -- [Belgeler](https://docs.filecoin.io/) +- [Dökümanlar](https://docs.filecoin.io/) - [GitHub](https://github.com/filecoin-project/) **Arweave - _Arweave, veri depolamaya yarayan bir dStorage platformudur._** - [Arweave.org](https://www.arweave.org/) -- [Belgeler](https://docs.arweave.org/info/) +- [Dökümanlar](https://docs.arweave.org/info/) - [Arweave](https://github.com/ArweaveTeam/arweave/) -**Züs - _Züs, parçalama ve balonlayıcılara (blobber) sahip bir hisse ispatı dStorage platformudur._** +**Züs - _Züs, parçalama ve blobber'lara sahip, bir hisse ispatı dStorage platformudur._** - [zus.network](https://zus.network/) -- [Belgeler](https://0chaindocs.gitbook.io/zus-docs) +- [Dökümanlar](https://docs.zus.network/zus-docs/) - [GitHub](https://github.com/0chain/) -**Crust Network - _Crust IPFS üzerine kurulmuş bir merkeziyetsiz depolama platformudur_** +**Crust Network - _Crust, IPFS üzerine kurulu bir dStorage platformudur._** -- [Crust ağı](https://crust.network) -- [Belgeler](https://wiki.crust.network) +- [Crust.network](https://crust.network) +- [Dökümanlar](https://wiki.crust.network) - [GitHub](https://github.com/crustio) **Swarm - _Ethereum web3 yığını için dağıtılmış bir depolama platformu ve içerik dağıtım hizmeti._** - [EthSwarm.org](https://www.ethswarm.org/) -- [Belgeler](https://docs.ethswarm.org/docs/) +- [Dökümanlar](https://docs.ethswarm.org/) - [GitHub](https://github.com/ethersphere/) -**OrbitDB - _IPFS'ye ek olarak merkeziyetsiz bir eşler arası veri tabanı._** +**OrbitDB - _IPFS üzerinde çalışan, merkeziyetsiz bir eşler arası veritabanı._** - [OrbitDB.org](https://orbitdb.org/) -- [Belgeler](https://github.com/orbitdb/field-manual/) +- [Dökümanlar](https://github.com/orbitdb/field-manual/) - [GitHub](https://github.com/orbitdb/orbit-db/) -**Aleph.im - _Merkeziyetsiz bulut projesi (veri tabanı, dosya depolama, bilgi işlem ve DID). Zincir dışı ve zincir üstü eşler arası teknolojinin benzersiz bir karışımı. IPFS ve çoklu zincir uyumluluğu._** +**Aleph.im - _Merkeziyetsiz bulut projesi (veritabanı, dosya depolama, bilgi işlem ve DID)._** Zincir dışı ve zincir üstü eşler arası teknolojinin benzersiz bir karışımı. IPFS ve çoklu zincir uyumluluğu._\*\* -- [Aleph.im](https://aleph.im/) -- [Belgeler](https://aleph.im/#/developers/) +- [Aleph.im](https://aleph.cloud/) +- [Dökümanlar](https://docs.aleph.cloud/) - [GitHub](https://github.com/aleph-im/) -**Ceramic - _Veri açısından zengin ve etkileşimli uygulamalar için kullanıcı kontrollü IPFS veri tabanı depolaması._** +**Ceramic - _Veri açısından zengin ve etkileşimli uygulamalar için kullanıcı kontrollü IPFS veritabanı depolaması._** - [Ceramic.network](https://ceramic.network/) -- [Belgeler](https://developers.ceramic.network/learn/welcome/) +- [Dökümanlar](https://developers.ceramic.network/) - [GitHub](https://github.com/ceramicnetwork/js-ceramic/) -**Filebase - _ S3 uyumlu merkeziyetsiz depolama ve coğrafi olarak yedekli IPFS iliştirme hizmetidir. Filebase aracılığıyla IPFS'e yüklenen tüm dosyalar, dünya çapında 3x kopyalanarak otomatik olarak Filebase altyapısına eklenir._** +**Filebase - _S3 uyumlu merkeziyetsiz depolama ve coğrafi olarak yedekli IPFS sabitleme hizmeti. Filebase aracılığıyla IPFS'ye yüklenen tüm dosyalar, dünya çapında 3 kat çoğaltma ile otomatik olarak Filebase altyapısına sabitlenir._** - [Filebase.com](https://filebase.com/) - [Dökümanlar](https://docs.filebase.com/) - [GitHub](https://github.com/filebase) -**4EVERLAND - _Depolama, hesaplama ve ağ çekirdek kabiliyetlerini entegre eden, S3 uyumlu ve IPFS ve Arweave gibi merkeziyetsiz depolama ağlarında senkronize veri depolaması sağlayan bir Web 3.0 bulut bilişimi platformu._** +**4EVERLAND - _Depolama, hesaplama ve ağ oluşturma temel yeteneklerini entegre eden, S3 uyumlu olan ve IPFS ve Arweave gibi merkeziyetsiz depolama ağlarında senkronize veri depolaması sağlayan bir Web 3.0 bulut bilişim platformu._** - [4everland.org](https://www.4everland.org/) -- [Dokümanlar](https://docs.4everland.org/) +- [Dökümanlar](https://docs.4everland.org/) - [GitHub](https://github.com/4everland) -**Kaleido - _Tek tıkla IPFS düğümleri olan bir servis olarak blok zincir platformu_** +**Kaleido - _Tek tıkla çalışan IPFS Düğümlerine sahip bir Hizmet Olarak Blok Zinciri platformu_** - [Kaleido](https://kaleido.io/) -- [Dokümanlar](https://docs.kaleido.io/kaleido-services/ipfs/) +- [Dökümanlar](https://docs.kaleido.io/kaleido-services/ipfs/) - [GitHub](https://github.com/kaleido-io) -**Spheron Ağı- _Spheron, uygulamalarını merkeziyetsiz altyapı üzerinde en iyi performansla başlatmak isteyen merkeziyetsiz uygulamalar için tasarlanmış bir platform servisidir (PaaS). Anında hesaplama, merkeziyetsiz depolama, CDN ve web barındırma hizmeti sunar._** +**Spheron Network - _Spheron, uygulamalarını en iyi performansla merkeziyetsiz altyapıda başlatmak isteyen merkeziyetsiz uygulamalar için tasarlanmış bir hizmet olarak platformdur (PaaS). Anında hesaplama, merkeziyetsiz depolama, CDN ve web barındırma hizmeti sunar._** - [spheron.network](https://spheron.network/) -- [Dokümanlar](https://docs.spheron.network/) +- [Dökümanlar](https://docs.spheron.network/) - [GitHub](https://github.com/spheronFdn) -## Daha fazla bilgi {#further-reading} +## Daha fazla kaynak {#further-reading} -- [Merkeziyetsiz Depolama Nedir?](https://coinmarketcap.com/alexandria/article/what-is-decentralized-storage-a-deep-dive-by-filecoin) - _CoinMarketCap_ -- [Merkeziyetsiz Depolamayla İlgili Beş Yaygın Mitin Çürütülmesi](https://www.storj.io/blog/busting-five-common-myths-about-decentralized-storage) - _Storj_ +- [Merkeziyetsiz Depolama Nedir?](https://coinmarketcap.com/academy/article/what-is-decentralized-storage-a-deep-dive-by-filecoin) - _CoinMarketCap_ +- [Merkeziyetsiz Depolama Hakkında Beş Yaygın Efsaneyi Çürütmek](https://www.storj.io/blog/busting-five-common-myths-about-decentralized-storage) - _Storj_ -_Size yardımcı olan bir topluluk kaynağı biliyor musunuz? Bu sayfayı düzenleyin ve ekleyin!_ +_Size yardımcı olan bir topluluk kaynağı biliyor musunuz? Bu sayfayı düzenleyin ve onu ekleyin!_ -## İlgili konular {#related-topics} +## Alakalı başlıklar {#related-topics} - [Geliştirme çerçeveleri](/developers/docs/frameworks/) diff --git a/public/content/translations/tr/developers/docs/transactions/index.md b/public/content/translations/tr/developers/docs/transactions/index.md index 44dc747dc0e..c0ddbd789c3 100644 --- a/public/content/translations/tr/developers/docs/transactions/index.md +++ b/public/content/translations/tr/developers/docs/transactions/index.md @@ -1,12 +1,12 @@ --- -title: İşlemler -description: Ethereum işlemlerine genel bir bakış - nasıl çalışırlar, veri yapıları ve bir uygulama aracılığıyla nasıl gönderilirler. +title: "İşlemler" +description: "Ethereum işlemlerine genel bir bakış - nasıl çalışırlar, veri yapıları ve bir uygulama aracılığıyla nasıl gönderilirler." lang: tr --- -İşlemler, hesaplardan kriptografik olarak imzalanmış talimatlardır. Bir hesap, Ethereum ağının durumunu güncellemek için bir işlem başlatacaktır. En basit işlem ETH'yi bir hesaptan diğerine aktarmaktır. +İşlemler, hesaplardan gelen kriptografik olarak imzalanmış talimatlardır. Bir hesap, Ethereum ağının durumunu güncellemek için bir işlem başlatacaktır. En basit işlem ETH'yi bir hesaptan diğerine aktarmaktır. -## Ön koşullar {#prerequisites} +## Ön Koşullar {#prerequisites} Bu sayfayı daha iyi anlamanıza yardımcı olmak için önce [Hesaplar](/developers/docs/accounts/) ve [Ethereum'a giriş](/developers/docs/intro-to-ethereum/) bölümlerini okumanızı öneririz. @@ -14,7 +14,8 @@ Bu sayfayı daha iyi anlamanıza yardımcı olmak için önce [Hesaplar](/develo Bir Ethereum işlemi, harici olarak sahiplenilmiş bir hesap tarafından başlatılan bir eylemi ifade eder, başka bir deyişle, bir sözleşme değil, bir insan tarafından yönetilen bir hesap. Örneğin Bob, Alice'e 1 ETH gönderirse, Bob'un hesabı borçlandırılmalı ve Alice'inki alacaklandırılmalıdır. Bu durum değiştirme eylemi bir işlem içinde gerçekleşir. -![Bir işlemin durum değişikliği yaptığını gösteren diyagram](./tx.png) _Diyagram [Ethereum EVM resmediciden](https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf) uyarlanmıştır_ +![Bir işlemin durum değişikliğine neden olduğunu gösteren diyagram](./tx.png) +_[Ethereum EVM illustrated](https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf) kaynağından uyarlanan diyagram_ EVM'nin durumunu değiştiren işlemlerin tüm ağa yayınlanması gerekir. Herhangi bir düğüm, Ethereum Sanal Makinesinde ugulanacak işlemleri yayınlamak için talepte bulunabilir, bu olduktan sonra da, doğrulayıcı işlemi uygulayacak ve ortaya çıkan durum değişikliğini ağın geri kalanına yayacaktır. @@ -22,17 +23,17 @@ EVM'nin durumunu değiştiren işlemlerin tüm ağa yayınlanması gerekir. Herh Gönderilen bir işlem aşağıdaki bilgileri içerir: -- `from` - işlemi imzalayacak olan göndericinin adresi. Bu sözleşme hesapları işlem gönderemeyeceği için harici olarak sahiplenilmiş bir hesap olacaktır. -- `to` - alıcı adres (harici olarak sahiplenilmiş bir hesapsa, işlem değeri aktaracaktır. Eğer bir sözleşme hesabıysa, işlem sözleşme kodunu yürütecektir) -- `signature` - gönderenin tanımlayıcısı. Bu, gönderenin özel anahtarı işlemi imzaladığında ve gönderenin bu işleme yetki verdiğini doğruladığında oluşturulur +- `from` – işlemi imzalayacak olan göndericinin adresi. Bu sözleşme hesapları işlem gönderemeyeceği için harici olarak sahiplenilmiş bir hesap olacaktır +- `to` – alıcı adres (harici olarak sahiplenilmiş bir hesapsa, işlem değeri aktaracaktır. Eğer bir sözleşme hesabıysa, işlem sözleşme kodunu yürütecektir) +- `signature` – gönderenin tanımlayıcısı. Bu, gönderenin özel anahtarı işlemi imzaladığında ve gönderenin bu işleme yetki verdiğini doğruladığında oluşturulur - `nonce` - hesabın işlem sayısını belirten ve ardışık olarak artan bir sayaç -- `value` - göndericiden alıcıya aktarılacak ETH miktarı (WEI şeklinde birimlendirilmiştir, 1ETH 1e+18wei'ye eşittir) -- `giriş verileri` - keyfi verileri dahil etmek için opsiyonel alan -- `gasLimit` - işlem tarafından tüketilebilecek maksimum gaz birimi miktarı. [EVM](/developers/docs/evm/opcodes) her bir hesaplık adım için gereken gaz birimini belirtir +- `value` – göndericiden alıcıya aktarılacak ETH miktarı (WEI şeklinde birimlendirilmiştir, 1ETH 1e+18wei'ye eşittir) +- `input data` – keyfi verileri dahil etmek için isteğe bağlı alan +- `gasLimit` – işlem tarafından tüketilebilecek maksimum gaz birimi miktarı. [EVM](/developers/docs/evm/opcodes), her bir hesaplama adımı için gereken gaz birimlerini belirtir - `maxPriorityFeePerGas` - doğrulayıcıya bir bahşiş olarak eklenmesi için harcanan gazın maksimum fiyatı -- `maxFeePerGas` - işlem için ödenebilecek gaz birimi başına maksimum ücret (`baseFeePerGas` ve `maxPriorityFeePerGas`'ı kapsayıcıdır) +- `maxFeePerGas` - işlem için ödenecek gaz birimi başına maksimum ücret (`baseFeePerGas` ve `maxPriorityFeePerGas` dahil) -Gaz, işlemin bir doğrulayıcı tarafından işlenmesi için gereken hesaplamaya bir referanstır. Kullanıcılar bu hesaplama için bir ücret ödemek zorundadır. `gasLimit` ve `maxPriorityFeePerGas` doğrulayıcıya ödenen maksimum işlem ücretini belirler. [Gaz hakkında daha fazla bilgi](/developers/docs/gas/). +Gaz, işlemin bir doğrulayıcı tarafından işlenmesi için gereken hesaplamaya bir referanstır. Kullanıcılar bu hesaplama için bir ücret ödemek zorundadır. `gasLimit` ve `maxPriorityFeePerGas`, doğrulayıcıya ödenen maksimum işlem ücretini belirler. [Gaz hakkında daha fazla bilgi](/developers/docs/gas/). İşlem nesnesi biraz şuna benzer: @@ -52,7 +53,7 @@ Ancak, gönderenin özel anahtarı kullanılarak bir işlem nesnesinin imzalanma Geth gibi bir Ethereum istemcisi bu imzalama sürecini yerine getirir. -[JSON-RPC](/developers/docs/apis/json-rpc) çağrısı örneği: +Örnek [JSON-RPC](/developers/docs/apis/json-rpc) çağrısı: ```json { @@ -99,22 +100,26 @@ Yanıt örneği: } ``` -- `raw` [Özyinelemeli Uzunluk Ön Eki (RLP)](/developers/docs/data-structures-and-encoding/rlp) şeklinde şifrelenmiş imzalı işlemdir -- `tx`, imzalanmış işlemin JSON biçimidir +- `raw`, [Tekrarlamalı Uzunluk Öneki (RLP)](/developers/docs/data-structures-and-encoding/rlp) kodlanmış formdaki imzalı işlemdir +- `tx`, JSON formundaki imzalı işlemdir İmza hash değeri ile işlemin göndericiden geldiği ve ağa gönderildiği kriptografik olarak kanıtlanabilir. ### Veri alanı {#the-data-field} -İşlemlerin büyük bir çoğunluğu, bir sözleşmeye dıştan sahiplenilmiş bir hesaptan erişir. Çoğu sözleşme Solidity ile yazılmıştır ve veri alanlarını [uygulama ikili arayüzü (ABI)](/glossary/#abi) ile uyumlu olacak şekilde yorumlar. +İşlemlerin büyük bir çoğunluğu, bir sözleşmeye dıştan sahiplenilmiş bir hesaptan erişir. +Çoğu sözleşme Solidity ile yazılmıştır ve veri alanlarını [uygulama ikili arayüzü (ABI)](/glossary/#abi) ile uyumlu olacak şekilde yorumlar. -İlk dört bayt, fonksiyonun isminin ve argümanlarının hash değerini kullanarak hangi fonksiyonun çağrılacağını belirler. Bazen seçiciden [bu veri tabanını](https://www.4byte.directory/signatures/) kullanarak fonksiyonu tespit edebilirsiniz. +İlk dört bayt, fonksiyonun isminin ve argümanlarının hash değerini kullanarak hangi fonksiyonun çağrılacağını belirler. +Bazen [bu veritabanını](https://www.4byte.directory/signatures/) kullanarak seçiciden işlevi tanımlayabilirsiniz. -Çağrı verisinin geri kalanı, [ABI şartnamesine uygun şekilde şifrelenmiş olan](https://docs.soliditylang.org/en/latest/abi-spec.html#formal-specification-of-the-encoding) argümanlardır. +Çağrı verisinin geri kalanı, [ABI özelliklerinde belirtildiği gibi kodlanmış](https://docs.soliditylang.org/en/latest/abi-spec.html#formal-specification-of-the-encoding) bağımsız değişkenlerdir. -Örnek olarak, [bu işleme](https://etherscan.io/tx/0xd0dcbe007569fcfa1902dae0ab8b4e078efe42e231786312289b1eee5590f6a1) bakalım. Çağrı verisini görmek için **Click to see More** düğmesini kullanın. +Örneğin, [şu işleme](https://etherscan.io/tx/0xd0dcbe007569fcfa1902dae0ab8b4e078efe42e231786312289b1eee5590f6a1) bir bakalım. +Çağrı verisini görmek için **Click to see More** seçeneğini kullanın. -`0xa9059cbb` fonksiyon seçicisidir. [Bu imza ile bilinen birkaç fonksiyon](https://www.4byte.directory/signatures/?bytes4_signature=0xa9059cbb) var. Bu durumda [sözleşme kaynak kodu](https://etherscan.io/address/0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48#code) Etherscan'e yüklenmiş, yani fonksiyonun `transfer(address,uint256)` olduğunu biliyoruz. +İşlev seçici `0xa9059cbb`'dir. Bu imzaya sahip birkaç [bilinen işlev](https://www.4byte.directory/signatures/?bytes4_signature=0xa9059cbb) vardır. +Bu durumda [sözleşme kaynak kodu](https://etherscan.io/address/0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48#code) Etherscan'e yüklenmiştir, bu nedenle işlevin `transfer(address,uint256)` olduğunu biliyoruz. Verinin geri kalanı: @@ -123,7 +128,9 @@ Verinin geri kalanı: 000000000000000000000000000000000000000000000000000000003b0559f4 ``` -ABI koşullarına göre, tamsayı değerleri (20 bayt tamsayılar olan adresler gibi) ABI içinde 32 bayt kelimelerin önü sıfırlarla doldurulmuş şekilde bulunurlar. Yani `to` adresinin [`4f6742badb049791cd9a37ea913f2bac38d01279`](https://etherscan.io/address/0x4f6742badb049791cd9a37ea913f2bac38d01279) olduğunu biliyoruz. `value` ise 0x3b0559f4 = 990206452'dir. +ABI koşullarına göre, tamsayı değerleri (20 bayt tamsayılar olan adresler gibi) ABI içinde 32 bayt kelimelerin önü sıfırlarla doldurulmuş şekilde bulunurlar. +Yani `to` adresinin [`4f6742badb049791cd9a37ea913f2bac38d01279`](https://etherscan.io/address/0x4f6742badb049791cd9a37ea913f2bac38d01279) olduğunu biliyoruz. +`value` değeri 0x3b0559f4 = 990206452'dir. ## İşlem türleri {#types-of-transactions} @@ -135,9 +142,9 @@ Ethereum'da birkaç farklı işlem türü vardır: ### Gaz hakkında {#on-gas} -Belirtildiği gibi, işlemlerin yürütülmesi [gaz](/developers/docs/gas/) harcar. Basit transfer işlemleri 21.000 birim Gaz gerektirir. +Belirtildiği gibi, işlemlerin yürütülmesi için [gaz](/developers/docs/gas/) gerekir. Basit transfer işlemleri 21.000 birim Gaz gerektirir. -Dolayısıyla Bob'un 1 ETH'yi Alice'e 190 gwei `baseFeePerGas` ve 10 gwei `maxPriorityFeePerGas` ile göndermesi için Bob'un aşağıdaki ücreti ödemesi gerekir: +Dolayısıyla Bob'un Alice'e 1 ETH'yi 190 gwei `baseFeePerGas` ve 10 gwei `maxPriorityFeePerGas` ile göndermesi için aşağıdaki ücreti ödemesi gerekir: ``` (190 + 10) * 21.000 = 4.200.000 gwei @@ -147,14 +154,14 @@ Dolayısıyla Bob'un 1 ETH'yi Alice'e 190 gwei `baseFeePerGas` ve 10 gwei `maxPr Bob'un hesabı **-1,0042 ETH** borçlandırılacaktır (Alice için 1 ETH + gaz ücretleri için 0,0042 ETH) -Alice'in hesabı **+1,0 ETH** alacaklandırılır +Alice'in hesabına **+1,0 ETH** alacak kaydedilecektir Taban ücret yakılacaktır **-0,00399 ETH** -Doğrulayıcı **+0,000210 ETH** bahşişi tutar +Doğrulayıcı bahşişi tutar **+0,000210 ETH** - -![Kullanılmayan gazın nasıl iade edildiğini gösteren diyagram](./gas-tx.png) _Diyagram [Ethereum EVM resmediciden](https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf) uyarlanmıştır_ +![Kullanılmayan gazın nasıl iade edildiğini gösteren diyagram](./gas-tx.png) +_[Ethereum EVM illustrated](https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf) kaynağından uyarlanan diyagram_ İşlemde kullanılmayan gaz, kullanıcı hesabına iade edilir. @@ -162,34 +169,37 @@ Doğrulayıcı **+0,000210 ETH** bahşişi tutar Akıllı sözleşme içeren herhangi bir işlem için gaz gereklidir. -Akıllı sözleşmeler, sözleşmenin durumunu değiştirmeyen [`view`](https://docs.soliditylang.org/en/latest/contracts.html#view-functions) ya da [`pure`](https://docs.soliditylang.org/en/latest/contracts.html#pure-functions) olarak adlandırılan fonksiyonlar da içerebilir. Bu nedenle bu fonksiyonların bir EOA tarafından çağrılması için herhangi bir gaz gerekmez. Bu senaryoda kullanılan temel RPC çağrısı [`"eth_call"`](/developers/docs/apis/json-rpc#eth_call) olarak adlandırılır +Akıllı sözleşmeler, sözleşmenin durumunu değiştirmeyen [`view`](https://docs.soliditylang.org/en/latest/contracts.html#view-functions) veya [`pure`](https://docs.soliditylang.org/en/latest/contracts.html#pure-functions) işlevleri olarak bilinen işlevleri de içerebilir. Bu nedenle bu fonksiyonların bir EOA tarafından çağrılması için herhangi bir gaz gerekmez. Bu senaryo için temel RPC çağrısı [`eth_call`](/developers/docs/apis/json-rpc#eth_call) şeklindedir. -Bu `view` veya `pure` fonksiyonları, `eth_call` kullanılarak erişildiği durumun aksine, genellikle dahili olarak (yani sözleşmenin kendisinden veya başka bir sözleşmeden) çağrılır ve bu da gaz maliyetine yol açmaz. +`eth_call` kullanılarak erişilmesinin aksine, bu `view` veya `pure` işlevleri dahili olarak da (yani sözleşmenin kendisinden veya başka bir sözleşmeden) yaygın olarak çağrılır ve bu da gaza mal olur. ## İşlem yaşam döngüsü {#transaction-lifecycle} İşlem gönderildikten sonra aşağıdakiler gerçekleşir: -1. Bir işlem şifresi kriptografik olarak oluşturulur: `0x97d99bc7729211111a21b12c933c949d4f31684f1d6954ff477d0477538ff017` +1. Bir işlem karması kriptografik olarak oluşturulur: + `0x97d99bc7729211111a21b12c933c949d4f31684f1d6954ff477d0477538ff017` 2. İşlem sonrasında ağa yayınlanır ve diğer bekleyen ağ işlemlerinden oluşan işlem havuzuna eklenir. 3. Bir doğrulayıcı, işlemi doğrulamak ve "başarılı" olarak değerlendirmek için işleminizi seçmeli ve bir bloka eklemelidir. -4. Zaman geçtikçe işleminizi taşıyan blok önce "kanıtlanmış" sonrasında "kesinleştirilmiş" şeklinde güncellenecektir. Bu yükseltmeler işleminizin başarılı olduğunu ve asla değiştirilemeyeceğini daha netleştirir. Bir blok "kesinleştirildikten" sonra sadece milyarlarca dolar maliyetinde ağ seviyesinde bir saldırı ile değiştirilebilir. +4. Zaman geçtikçe işleminizi taşıyan blok önce "kanıtlanmış" sonrasında "kesinleştirilmiş" şeklinde güncellenecektir. Bu yükseltmeler, işleminizin başarılı olduğunu ve asla değiştirilmeyeceğini çok + daha netleştirir. Bir blok "kesinleştirildikten" sonra, yalnızca milyarlarca dolara mal olacak bir + ağ düzeyindeki saldırı ile değiştirilebilir. ## Görsel bir demo {#a-visual-demo} -Austin'in işlemlerde, gazda ve madencilikte size yol göstermesini izleyin. +Austin'in işlemleri, gazı ve madenciliği açıklamasını izleyin. -## Yazılan İşlem Zarfı {#typed-transaction-envelope} +## Tür Belirtilmiş İşlem Zarfı {#typed-transaction-envelope} -Ethereum'un başlangıçta işlemler için tek bir formatı vardı. Her işlem, adres, değer, veri, v, r ve s için nonce, gaz fiyatı, gaz limiti içeriyordu. Bu alanlar [RLP ile şifrelenmiştir](/developers/docs/data-structures-and-encoding/rlp/), şuna benzer bir şekilde görünür: +Ethereum'un başlangıçta işlemler için tek bir formatı vardı. Her işlem, adres, değer, veri, v, r ve s için nonce, gaz fiyatı, gaz limiti içeriyordu. Bu alanlar, şuna benzer bir görünüme sahip olacak şekilde [RLP kodludur](/developers/docs/data-structures-and-encoding/rlp/): `RLP([nonce, gasPrice, gasLimit, to, value, data, v, r, s])` -Ethereum, erişim listelerini ve [EIP-1559](https://eips.ethereum.org/EIPS/eip-1559)'un eski işlem formatlarını etkilemeden uygulanmasını mümkün kılmak için birçok işlem türünü destekleyecek şekilde evrildi. +Ethereum, eski işlem formatlarını etkilemeden erişim listeleri ve [EIP-1559](https://eips.ethereum.org/EIPS/eip-1559) gibi yeni özelliklerin uygulanmasına olanak tanımak için birden fazla işlem türünü destekleyecek şekilde gelişmiştir. -[EIP-2718](https://eips.ethereum.org/EIPS/eip-2718) bu davranışa izin verendir. İşlemler şu şekilde yorumlanır: +Bu davranışa izin veren [EIP-2718](https://eips.ethereum.org/EIPS/eip-2718)'dir. İşlemler şu şekilde yorumlanır: `TransactionType || TransactionPayload` @@ -198,24 +208,26 @@ Burada alanlar şu şekilde tanımlanır: - `TransactionType` - toplam 128 olası işlem türü için 0 ile 0x7f arasında bir sayı. - `TransactionPayload` - işlem türü tarafından tanımlanan rastgele bir bayt dizisi. -`TransactionType` değerine göre, bir işlem şöyle sınıflandırılabilir +`TransactionType` değerine bağlı olarak, bir işlem şu şekilde sınıflandırılabilir: -1. **Tip 0 (Eski) İşlemler:** Ethereum'un başlatılmasından itibaren kullanılan orijinal işlem formatıdır. [EIP-1559](https://eips.ethereum.org/EIPS/eip-1559)'dan gelen dinamik gaz ücreti hesaplamaları veya akıllı sözleşmeler için erişim listeleri gibi özellikler içermezler. Eski işlemler, [Tekrarlamalı Uzunluk Öneki (RLP)](/developers/docs/data-structures-and-encoding/rlp) kodlaması kullanıldığında `0xf8` baytıyla başlayarak serileştirilmiş formlarında türlerini belirten belirli bir öneke sahip değildir. Bu işlemler için TransactionType değeri `0x0`'dır. +1. **Tip 0 (Eski) İşlemler:** Ethereum'un lansmanından bu yana kullanılan orijinal işlem formatı. Akıllı sözleşmeler için dinamik gaz ücreti hesaplamaları veya erişim listeleri gibi [EIP-1559](https://eips.ethereum.org/EIPS/eip-1559) özellikleri içermezler. Eski işlemler, serileştirilmiş biçimlerinde türlerini belirten özel bir önekten yoksundur ve [Tekrarlamalı Uzunluk Öneki (RLP)](/developers/docs/data-structures-and-encoding/rlp) kodlaması kullanıldığında `0xf8` baytı ile başlarlar. Bu işlemler için TransactionType değeri `0x0`'dır. -2. **Tip 1 İşlemler:** Ethereum'un [Berlin Yükseltmesi](/ethereum-forks/#berlin)'nin bir parçası olarak [EIP-2930](https://eips.ethereum.org/EIPS/eip-2930)'da kullanıma açılan bu işlemler bir `accessList` parametresi içerir. Bu liste, işlemin erişmeyi beklediği adresleri ve depolama anahtarlarını belirtir, bu da akıllı sözleşmelerle ilgili karmaşık işlemler için [gaz](/developers/docs/gas/) maliyetlerinin potansiyel olarak azaltılmasına yardımcı olur. EIP-1559 ücret piyasası değişiklikleri Tip 1 işlemlere dahil değildir. Tip 1 işlemler buna ek olarak, secp256k1 imzasının y değerinin paritesini gösteren `0x0` veya `0x1` olabilen bir `yParity` parametresi de içerir. Bu işlemler, `0x01` baytıyla başladıkları için kolayca tanınır ve TransactionType değerleri `0x1`'dir. +2. **Tip 1 İşlemler:** Ethereum'un [Berlin Yükseltmesi](/ethereum-forks/#berlin) kapsamında [EIP-2930](https://eips.ethereum.org/EIPS/eip-2930) ile tanıtılan bu işlemler bir `accessList` parametresi içerir. Bu liste, işlemin erişmeyi beklediği adresleri ve depolama anahtarlarını belirtir ve akıllı sözleşmeleri içeren karmaşık işlemler için [gaz](/developers/docs/gas/) maliyetlerini potansiyel olarak azaltmaya yardımcı olur. EIP-1559 ücret piyasası değişiklikleri Tip 1 işlemlere dahil değildir. Tip 1 işlemler ayrıca, secp256k1 imzasının y-değerinin paritesini gösteren `0x0` veya `0x1` olabilen bir `yParity` parametresi içerir. `0x01` baytı ile başlamalarıyla tanımlanırlar ve TransactionType değerleri `0x1`'dir. -3. **Tip 2 İşlemler**, sıklıkla EIP-1559 işlemleri olarak adlandırılır ve Ethereum'un [Londra Yükseltmesi](/ethereum-forks/#london)'nde [EIP-1559](https://eips.ethereum.org/EIPS/eip-1559) dahilinde tanıtılan işlemlerdir. Bu işlemler, Ethereum ağında standart işlem tipi haline gelmiştir. Bu işlemler, işlem ücretini ana ücret ve öncelik ücreti olarak ayıran öngörülebilirliği artıran yeni bir ücret piyasası mekanizması sunar. `0x02` baytı ile başlarlar ve `maxPriorityFeePerGas` ile `maxFeePerGas` gibi alanları içerirler. Tip 2 işlemler, esneklikleri ve verimlilikleri nedeniyle varsayılan seçenek durumuna gelmiştir. Özellikle yüksek ağ tıkanıklığı dönemlerinde kullanıcıların işlem ücretlerini daha öngörülebilir şekilde yönetmelerine yardımcı olma yetenekleri nedeniyle tercih edilirler. Bu işlemler için TransactionType değeri `0x2`'dir. +3. Genellikle EIP-1559 işlemleri olarak adlandırılan **Tip 2 İşlemler**, Ethereum'un [Londra Yükseltmesi](/ethereum-forks/#london) kapsamında [EIP-1559](https://eips.ethereum.org/EIPS/eip-1559) ile tanıtılan işlemlerdir. Bu işlemler, Ethereum ağında standart işlem tipi haline gelmiştir. Bu işlemler, işlem ücretini ana ücret ve öncelik ücreti olarak ayıran öngörülebilirliği artıran yeni bir ücret piyasası mekanizması sunar. `0x02` baytı ile başlarlar ve `maxPriorityFeePerGas` ile `maxFeePerGas` gibi alanlar içerirler. Tip 2 işlemler, esneklikleri ve verimlilikleri nedeniyle varsayılan seçenek durumuna gelmiştir. Özellikle yüksek ağ tıkanıklığı dönemlerinde kullanıcıların işlem ücretlerini daha öngörülebilir şekilde yönetmelerine yardımcı olma yetenekleri nedeniyle tercih edilirler. Bu işlemler için TransactionType değeri `0x2`'dir. +4. **Tip 3 (Blob) İşlemler**, Ethereum'un [Dencun Yükseltmesi](/ethereum-forks/#dencun) kapsamında [EIP-4844](https://eips.ethereum.org/EIPS/eip-4844) ile tanıtılmıştır. Bu işlemler, "blob" verilerini (İkili Büyük Nesneler) daha verimli bir şekilde işlemek için tasarlanmıştır ve özellikle Ethereum ağına daha düşük bir maliyetle veri göndermenin bir yolunu sağlayarak Katman 2 toplamalarına fayda sağlar. Blob işlemleri, `blobVersionedHashes`, `maxFeePerBlobGas` ve `blobGasPrice` gibi ek alanlar içerir. `0x03` baytı ile başlarlar ve TransactionType değerleri `0x3`'tür. Blob işlemleri, Ethereum'un veri kullanılabilirliği ve ölçeklendirme yeteneklerinde önemli bir gelişmeyi temsil eder. +5. **Tip 4 İşlemler**, Ethereum'un [Pectra Yükseltmesi](/roadmap/pectra/) kapsamında [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702) ile tanıtılmıştır. Bu işlemler, hesap soyutlaması ile ileriye dönük uyumlu olacak şekilde tasarlanmıştır. EOA'ların orijinal işlevselliklerinden ödün vermeden geçici olarak akıllı sözleşme hesapları gibi davranmalarına olanak tanırlar. EOA'nın yetkisini devrettiği akıllı sözleşmeyi belirten bir `authorization_list` parametresi içerirler. İşlemden sonra, EOA'nın kod alanı, yetki devredilen akıllı sözleşmenin adresine sahip olacaktır. -## Daha fazla bilgi {#further-reading} +## Daha fazla kaynak {#further-reading} -- [EIP-2718: Yazılan İşlem Zarfı](https://eips.ethereum.org/EIPS/eip-2718) +- [EIP-2718: Tür Belirtilmiş İşlem Zarfı](https://eips.ethereum.org/EIPS/eip-2718) -_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!_ -## İlgili konular {#related-topics} +## Alakalı başlıklar {#related-topics} - [Hesaplar](/developers/docs/accounts/) -- [Ethereum sanal makinesi (EVM)](/developers/docs/evm/) +- [Ethereum Sanal Makinesi (EVM)](/developers/docs/evm/) - [Gaz](/developers/docs/gas/) diff --git a/public/content/translations/tr/developers/docs/web2-vs-web3/index.md b/public/content/translations/tr/developers/docs/web2-vs-web3/index.md index 0dec277786c..1b3ecfce1f1 100644 --- a/public/content/translations/tr/developers/docs/web2-vs-web3/index.md +++ b/public/content/translations/tr/developers/docs/web2-vs-web3/index.md @@ -1,14 +1,14 @@ --- title: Web2 ve Web3 -description: +description: "Merkezi Web2 hizmetlerini, Ethereum blokzincir teknolojisi üzerine kurulu merkeziyetsiz Web3 uygulamaları ile karşılaştırın." lang: tr --- Web2, bugün bir çoğumuzun bildiği internet sürümünü ifade eder. Kişisel verilerinizin karşılığında, size hizmet sağlayan şirketlerin hakim olduğu bir internet. Web3 ise Ethereum bağlamında, blok zincirinde çalışan merkeziyetsiz uygulamaları ifade eder. Bu uygulamalar, kişisel verileri parasallaştırmadan, herkesin katılmasına izin veren uygulamalardır. -Yeni başlayanlar için daha uygun bir kaynak mı arıyorsunuz? [web3'e girişimize](/web3/) bakın. +Yeni başlayanlar için daha uygun bir kaynak mı arıyorsunuz? [Web3'e giriş](/web3/) yazımıza bakın. -## Web3'ün faydaları {#web3-benefits} +## Web3 avantajları {#web3-benefits} Birçok Web3 geliştiricisi, Ethereum'un yerleşik merkeziyetsizliği nedeniyle dapp'ler oluşturmaya karar verdi: @@ -19,15 +19,15 @@ Birçok Web3 geliştiricisi, Ethereum'un yerleşik merkeziyetsizliği nedeniyle ## Pratik karşılaştırmalar {#practical-comparisons} -| Web2 | Web3 | -| --------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ | -| Twitter herhangi bir hesabı veya tweeti sansürleyebilir | Web3 tweet'leri, kontrol merkeziyetsiz olduğu için sansürlenemez | -| Ödeme hizmeti, belirli iş türleri için ödeme yapılmasına izin vermemeye karar verebilir | Web3 ödeme uygulamaları hiçbir kişisel veri gerektirmez ve ödemeleri engelleyemez | +| Web2 | Web3 | +| --------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | +| Twitter herhangi bir hesabı veya tweeti sansürleyebilir | Web3 tweet'leri, kontrol merkeziyetsiz olduğu için sansürlenemez | +| Ödeme hizmeti, belirli iş türleri için ödeme yapılmasına izin vermemeye karar verebilir | Web3 ödeme uygulamaları hiçbir kişisel veri gerektirmez ve ödemeleri engelleyemez | | Tek seferlik iş uygulamalarının sunucuları çökebilir ve çalışan gelirini etkileyebilir | Web3 sunucuları çökemez: Arka uç olarak 1000'lerce bilgisayardan oluşan merkeziyetsiz bir ağ olan Ethereum'u kullanırlar | Bu, tüm hizmetlerin bir dapp'ee dönüştürülmesi gerektiği anlamına gelmez. Bu örnekler, web2 ve web3 hizmetleri arasındaki temel farklı açıklamaktadır. -## Web3 sınırlamaları {#web3-limitations} +## Web3 sınırlılıkları {#web3-limitations} Web3'ün şu anda bazı sınırlamaları var: @@ -36,27 +36,27 @@ Web3'ün şu anda bazı sınırlamaları var: - Erişilebilirlik - modern web tarayıcılarındaki entegrasyon eksikliği, web3'ü birçok kullanıcı için daha az erişilebilir kılar. - Maliyet – çoğu başarılı dapp, pahalı olduğu için kodlarının çok küçük kısımlarını blok zincirine koyar. -## Merkezilik ve Merkeziyetsizlik karşılaştırması {#centralization-vs-decentralization} +## Merkeziyet ve merkeziyetsizlik {#centralization-vs-decentralization} Aşağıdaki tabloda, merkezi ve merkeziyetsiz dijital ağların geniş kapsamlı avantaj ve dezavantajlarından bazılarını listeledik. -| Merkezi Sistemler | Merkeziyetsiz Sistemler | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Düşük ağ çapı (tüm katılımcılar merkezi bir otoriteye bağlıdır); yayma işlemi çok sayıda bilgi işlem kaynağına sahip merkezi bir otorite tarafından yapıldığından, bilgi hızla yayılır. | Ağdaki en uzaktaki katılımcılar, potansiyel olarak birbirinden çok uzakta olabilir. Ağın bir tarafından yayınlanan bilgilerin diğer tarafa ulaşması uzun zaman alabilir. | -| Genellikle daha yüksek performans (daha yüksek verim, daha az toplam bilgi işlem kaynağı harcaması) ve daha kolay uygulama. | Genellikle daha düşük performans (daha düşük verim, daha fazla toplam bilgi işlem kaynağı harcaması) ve daha karmaşık uygulama. | -| Verilerin çelişmesi durumunda çözüm açık ve kolaydır: gerçeğin nihai kaynağı merkezi otoritedir. | Eşler, katılımcıların senkronize olması gereken verilerin durumu hakkında çelişkili iddiaları bulunursa, anlaşmazlık çözümü için bir protokol (genellikle karmaşıktır) gereklidir. | -| Tek başarısızlık noktası: Kötü niyetli aktörler, merkezi otoriteyi hedef alarak ağı çökertebilir. | Tek bir başarısızlık noktası yok: Katılımcıların büyük bir kısmı saldırıya uğrasa/alt edilse bile ağ hâlâ çalışabilir. | +| Merkezi Sistemler | Merkeziyetsiz Sistemler | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Düşük ağ çapı (tüm katılımcılar merkezi bir otoriteye bağlıdır); yayma işlemi çok sayıda bilgi işlem kaynağına sahip merkezi bir otorite tarafından yapıldığından, bilgi hızla yayılır. | Ağdaki en uzaktaki katılımcılar, potansiyel olarak birbirinden çok uzakta olabilir. Ağın bir tarafından yayınlanan bilgilerin diğer tarafa ulaşması uzun zaman alabilir. | +| Genellikle daha yüksek performans (daha yüksek verim, daha az toplam bilgi işlem kaynağı harcaması) ve daha kolay uygulama. | Genellikle daha düşük performans (daha düşük verim, daha fazla toplam bilgi işlem kaynağı harcaması) ve daha karmaşık uygulama. | +| Verilerin çelişmesi durumunda çözüm açık ve kolaydır: gerçeğin nihai kaynağı merkezi otoritedir. | Eşler, katılımcıların senkronize olması gereken verilerin durumu hakkında çelişkili iddiaları bulunursa, anlaşmazlık çözümü için bir protokol (genellikle karmaşıktır) gereklidir. | +| Tek başarısızlık noktası: Kötü niyetli aktörler, merkezi otoriteyi hedef alarak ağı çökertebilir. | Tek bir başarısızlık noktası yok: Katılımcıların büyük bir kısmı saldırıya uğrasa/alt edilse bile ağ hâlâ çalışabilir. | | Ağ katılımcıları arasındaki koordinasyon çok daha kolaydır ve merkezi bir otorite tarafından yürütülür. Merkezi otorite, ağ katılımcılarını çok az sürtüşmeyle yükseltmeleri, protokol güncellemelerini vb. benimsemeye zorlayabilir. | Ağ düzeyindeki kararlarda, protokol yükseltmelerinde vb. konularda son söz hiçbir aracıya ait olmadığı için koordinasyon genellikle zordur. En kötü durumda, protokol değişiklikleriyle ilgili anlaşmazlıklar olduğunda ağ kırılmaya eğilimlidir. | -| Merkezi otorite verileri sansürleyebilir, potansiyel olarak ağın bölümlerinin ağın geri kalanıyla etkileşimini kesebilir. | Bilginin ağda yayılmasının birçok yolu olduğundan sansürlemek çok daha zordur. | -| Ağa katılım, merkezi otorite tarafından kontrol edilir. | Ağa herkes katılabilir; "kapı bekçileri" yoktur. İdeal olarak, katılım maliyeti çok düşüktür. | +| Merkezi otorite verileri sansürleyebilir, potansiyel olarak ağın bölümlerinin ağın geri kalanıyla etkileşimini kesebilir. | Bilginin ağda yayılmasının birçok yolu olduğundan sansürlemek çok daha zordur. | +| Ağa katılım, merkezi otorite tarafından kontrol edilir. | Ağa herkes katılabilir; "kapı bekçileri" yoktur. İdeal olarak, katılım maliyeti çok düşüktür. | Bunların, her ağda geçerli olmayabilecek genel kalıplar olduğunu unutmayın. Ayrıca, gerçekte bir ağın merkezileşme/merkeziyetsizlik derecesi bir spektrumda yer alır; hiçbir ağ tamamen merkezileştirilmiş veya tamamen merkeziyetsiz değildir. -## Daha fazla bilgi {#further-reading} +## Daha fazla kaynak {#further-reading} -- [Web3 nedir?](/web3/) - _ethereum.org_ +- [Web3 Nedir?](/web3/) - _ethereum.org_ - [Bir Web 3.0 uygulamasının mimarisi](https://www.preethikasireddy.com/post/the-architecture-of-a-web-3-0-application) - _Preethi Kasireddy_ -- [Merkeziyetsizliğin Anlamı](https://medium.com/@VitalikButerin/the-meaning-of-decentralization-a0c92b76a274) _ 6 Şubat 2017 - Vitalik Buterin_ -- [Merkeziyetsizlik Neden Önemlidir](https://medium.com/s/story/why-decentralization-matters-5e3f79f7638e) _18 Şubat 2018 - Chris Dixon_ +- [Merkeziyetsizliğin Anlamı](https://medium.com/@VitalikButerin/the-meaning-of-decentralization-a0c92b76a274) _6 Şubat 2017 - Vitalik Buterin_ +- [Merkeziyetsizlik Neden Önemlidir](https://onezero.medium.com/why-decentralization-matters-5e3f79f7638e) _18 Şubat 2018 - Chris Dixon_ - [Web 3.0 Nedir ve Neden Önemlidir](https://medium.com/fabric-ventures/what-is-web-3-0-why-it-matters-934eb07f3d2b) _31 Aralık 2019 - Max Mersch ve Richard Muirhead_ -- [Neden Web 3.0'a İhtiyacımız Var?](https://medium.com/@gavofyork/why-we-need-web-3-0-5da4f2bf95ab)_12 Eylül 2018 - Gavin Wood_ +- [Neden Web 3.0'a İhtiyacımız Var?](https://gavofyork.medium.com/why-we-need-web-3-0-5da4f2bf95ab) _12 Eylül 2018 - Gavin Wood_ diff --git a/public/content/translations/tr/developers/docs/wrapped-eth/index.md b/public/content/translations/tr/developers/docs/wrapped-eth/index.md index df42b98d3ac..825a7316dd2 100644 --- a/public/content/translations/tr/developers/docs/wrapped-eth/index.md +++ b/public/content/translations/tr/developers/docs/wrapped-eth/index.md @@ -1,6 +1,6 @@ --- -title: Sarılı ETH (WETH) Nedir? -description: Ether (ETH) için ERC20 uyumlu bir sarıcı olan Sarılı ethere (WETH) giriş. +title: "Sarılı ETH (WETH) Nedir?" +description: "Ether (ETH) için ERC20 uyumlu bir sarıcı olan Sarılı ethere (WETH) giriş." lang: tr --- @@ -35,19 +35,16 @@ WETH akıllı sözleşmesini kullanarak WETH'yi ETH'ye çevirebilirsiniz. WETH a WETH sözleşmesini kullanarak ETH'yi sarmak veya çözmek için gaz ücreti ödersiniz. - WETH, basit ve test edilmiş bir akıllı sözleşmeye dayandığı için genellikle güvenli kabul edilir. WETH sözleşmesi resmen doğrulanmıştır. Bu, Ethereum'da akıllı sözleşmelere yönelik en yüksek güvenlik standardıdır. - Bu sayfada açıklanan [WETH'nin kanonik uygulamasının](https://etherscan.io/token/0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2) yanı sıra, başka varyantları da vardır. Bunlar, uygulama geliştiricileri tarafından oluşturulan özel jetonlar veya diğer blokzincirlerde yayımlanmış sürümler olabilir ve farklı davranabilir ya da farklı güvenlik özelliklerine sahip olabilir. **Hangi WETH uygulaması ile etkileşimde olduğunuzu öğrenmek için jeton bilgilerini her zaman iki kez kontrol edin.** - @@ -55,7 +52,6 @@ Bu sayfada açıklanan [WETH'nin kanonik uygulamasının](https://etherscan.io/t - [Ethereum Ana Ağı](https://etherscan.io/token/0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2) - [Arbitrum](https://arbiscan.io/token/0x82af49447d8a07e3bd95bd0d56f35241523fbab1) - [Optimism](https://optimistic.etherscan.io/token/0x4200000000000000000000000000000000000006) - ## Daha fazla kaynak {#further-reading} diff --git a/public/content/translations/tr/developers/tutorials/a-developers-guide-to-ethereum-part-one/index.md b/public/content/translations/tr/developers/tutorials/a-developers-guide-to-ethereum-part-one/index.md index c347785407d..deac665eea4 100644 --- a/public/content/translations/tr/developers/tutorials/a-developers-guide-to-ethereum-part-one/index.md +++ b/public/content/translations/tr/developers/tutorials/a-developers-guide-to-ethereum-part-one/index.md @@ -1,33 +1,32 @@ --- -title: Python Geliştiricileri için Ethereum'a Giriş, Bölüm 1 -description: Özellikle Python programlama dili hakkında bilgi sahibi olanlar için yararlı olan Ethereum geliştirmeye giriş +title: "Bir Python geliştiricisi için Ethereum'a giriş, bölüm 1" +description: "Özellikle Python programlama dilini bilenler için faydalı olan Ethereum geliştirmeye bir giriş." author: Marc Garreau lang: tr -tags: - - "python" - - "web3.js" +tags: [ "python", "web3.py" ] skill: beginner published: 2020-09-08 source: Snake charmers sourceUrl: https://snakecharmers.ethereum.org/a-developers-guide-to-ethereum-pt-1/ --- -Şu Ethereum denen şeyi duydunuz ve konuya daha derinlemesine inmeye hazır mı hissediyorsunuz? Bu gönderi, bazı blok zinciri temellerini hızlı bir şekilde ele alacak, ardından sizi simüle edilmiş bir Ethereum düğümü ile etkileşime sokarak blok verilerini okuyacak, hesap bakiyelerini kontrol edecek ve işlemleri gönderecektir. Bu arada, uygulama oluşturmanın geleneksel yolları ile bu yeni merkeziyetsiz paradigma arasındaki farkları vurgulayacağız. +Şu Ethereum denen şeyi duydunuz ve konuya daha derinlemesine inmeye hazır mı hissediyorsunuz? Bu gönderi, bazı blokzinciri temellerini hızlıca ele alacak, ardından simüle edilmiş bir Ethereum düğümü ile etkileşim kurarak blok verilerini okumanızı, hesap bakiyelerini kontrol etmenizi ve işlem göndermenizi sağlayacaktır. Bu arada, uygulama oluşturmanın geleneksel yolları ile bu yeni merkeziyetsiz paradigma arasındaki farkları vurgulayacağız. -## (Hafif) ön koşullar {#soft-prerequisites} +## (Esnek) Ön Koşullar {#soft-prerequisites} -Bu gönderi, birçok türden geliştiricileri için ulaşılabilir olmayı arzulamaktadır. [Python araçları](/developers/docs/programming-languages/python/) kullanılacaktır, ama sadece fikirler için bir araç olacaklardır: Bir Python geliştiricisi değilseniz de sorun olmaz. Gelgelelim, Ethereum ile ilgili kısımlara hızlıca geçebilmemiz için bazı şeyleri bildiğinizi varsayacağım. +Bu gönderi, geniş bir geliştirici yelpazesi için erişilebilir olmayı hedeflemektedir. [Python araçları](/developers/docs/programming-languages/python/) kullanılacaktır, ama sadece fikirler için bir araç olacaklardır: Bir Python geliştiricisi değilseniz de sorun olmaz. Gelgelelim, Ethereum ile ilgili kısımlara hızlıca geçebilmemiz için bazı şeyleri bildiğinizi varsayacağım. Varsayımlar: - Bir terminalde gezinebildiğiniz, - Birkaç satır Python kodu yazdığınız, -- Python'un 3.6 ya da daha yüksek bir sürümü cihazınızda yüklüdür (bir [sanal ortam](https://realpython.com/effective-python-environment/#virtual-environments) kullanılması teşvik edilmektedir), ve -- Python’un paket indiricisi `pip`'i kullandığınız varsayılır. Buna karşın, eğer varsayımlardan herhangi biri doğru değilse, veya bu makaledeki kodu yeniden uygulamayı düşünmüyorsanız, büyük ihtimalle yine de gayet iyi şekilde takip edebilirsiniz. +- Python'un 3.6 ya da daha yüksek bir sürümü cihazınızda yüklüdür (bir [sanal ortam](https://realpython.com/effective-python-environment/#virtual-environments) kullanılması şiddetle tavsiye edilir), ve +- Python’un paket yükleyicisi olan `pip`'i kullandığınız varsayılır. + Buna karşın, eğer varsayımlardan herhangi biri doğru değilse veya bu makaledeki kodu yeniden uygulamayı düşünmüyorsanız, büyük ihtimalle yine de gayet iyi şekilde takip edebilirsiniz. -## Kısaca blok zincirleri {#blockchains-briefly} +## Kısaca Blokzincirler {#blockchains-briefly} -Ethereum'u tanımlamanın birçok yolu bulunsa da Ethereum, özünde bir blok zinciridir. Blok zincirleri bir dizi bloktan oluşur, bu yüzden oradan başlayalım. En basit şekilde, Ethereum blok zincirindeki her bir blok sadece birtakım meta veri ve bir dizi işlemdir. JSON formatında, şöyle bir şeye benzer: +Ethereum'u tanımlamanın birçok yolu bulunsa da Ethereum, özünde bir blokzincirdir. Blokzincirler bir dizi bloktan oluşur, bu yüzden oradan başlayalım. En basit şekilde, Ethereum blokzincirindeki her bir blok sadece birtakım meta veri ve bir işlemler listesidir. JSON formatında, şöyle bir şeye benzer: ```json { @@ -39,39 +38,39 @@ Ethereum'u tanımlamanın birçok yolu bulunsa da Ethereum, özünde bir blok zi } ``` -Her [blok](/developers/docs/blocks/) kendinden önceki bloğa doğru bir referansa sahiptir; `parentHash` kısaca önceki bloğun hash değeridir. +Her [blok](/developers/docs/blocks/) kendinden önceki bloğa doğru bir referansa sahiptir; `parentHash` kısaca önceki bloğun karmasıdır. -Not: Ethereum, hash fonksiyonlarını sürekli sabit büyüklükteki değerler ("hash değerleri") oluşturmak için kullanır. Hash değerleri, Ethereum'da büyük bir rol oynar ama şimdilik onları benzersiz kimlikler olarak düşünebilirsiniz. +Not: Ethereum, sabit boyutlu değerler ("karmalar") üretmek için düzenli olarak karma fonksiyonlarını kullanır. Karmalar, Ethereum'da önemli bir rol oynar, ancak şimdilik onları benzersiz kimlikler olarak düşünebilirsiniz. -![Her bloğun içindeki verileri içeren bir blok zincirini gösteren bir diyagram](./blockchain-diagram.png) +![Her bloğun içindeki verileri içeren bir blokzincirini gösteren bir diyagram](./blockchain-diagram.png) -_Bir blok zinciri aslen bağlantılı bir dizidir; her bir blok önceki bloğa doğru bir referansa sahiptir._ +_Bir blokzincir esasen bağlantılı bir listedir; her blok, önceki bloğa bir referans içerir._ Bu veri yapısı yeni bir şey değildir ama ağı yöneten kurallar (yani eşler arası protokoller) öyledir. Merkezi bir otorite yoktur; eşler ağı, ağı sürdürmek için iş birliği yapmalı ve bir sonraki bloğa hangi işlemlerin dahil edileceğine karar vermek için rekabet etmelidir. Bu nedenle, bir arkadaşınıza biraz para göndermek istediğinizde, bu işlemi ağa yayınlamanız ve ardından gelecek bir bloğa eklenmesini beklemeniz gerekir. -Blok zincirinin, paranın bir kullanıcıdan diğerine gerçekten gönderildiğini doğrulamasının tek yolu, o blok zincirine özgü (yani, blok zinciri tarafından oluşturulan ve yönetilen) bir para birimi kullanmaktır. Ethereum'da bu para birimine ether denir ve Ethereum blok zinciri, hesap bakiyelerinin tek resmi kaydını içerir. +Blokzincirinin, paranın bir kullanıcıdan diğerine gerçekten gönderildiğini doğrulamasının tek yolu, o blokzincirine özgü (yani, blokzinciri tarafından oluşturulan ve yönetilen) bir para birimi kullanmaktır. Ethereum'da bu para birimine ether denir ve Ethereum blokzinciri, hesap bakiyelerinin tek resmi kaydını içerir. ## Yeni bir paradigma {#a-new-paradigm} Bu merkeziyetsiz yeni teknoloji yığını, yeni geliştirici araçları ortaya çıkardı. Bu tür araçlar birçok programlama dilinde mevcuttur, ancak biz Python merceğinden bakacağız. Tekrarlamak gerekirse: Python tercih ettiğiniz dil olmasa bile, takip etmek çok zor olmayacaktır. -Ethereum ile etkileşim kurmak isteyen Python geliştiricilerinin [Web3.py](https://web3py.readthedocs.io/).'ye ulaşması muhtemeldir. Web3.py, bir Ethereum düğümüne bağlanma ve ondan veri gönderme ve alma şeklinizi büyük ölçüde basitleştiren bir kütüphanedir. +Ethereum ile etkileşim kurmak isteyen Python geliştiricileri büyük ihtimalle [Web3.py](https://web3py.readthedocs.io/) kullanacaktır. Web3.py, bir Ethereum düğümüne bağlanma ve ondan veri gönderme ve alma şeklinizi büyük ölçüde basitleştiren bir kütüphanedir. -Not: “Ethereum düğümü” ve “Ethereum istemcisi” birbirinin yerine kullanılan terimlerdir. Her iki durumda da, Ethereum ağındaki bir katılımcının çalıştırdığı yazılım ifade edilir. Bu yazılım blok verilerini okuyabilir, zincire yeni bloklar eklendiğinde güncellemeler alabilir, yeni işlemler yayımlayabilir ve daha fazlasını yapabilir. Teknik olarak istemci yazılımdır, düğüm ise yazılımı çalıştıran bilgisayardır. +Not: “Ethereum düğümü” ve “Ethereum istemcisi” birbirinin yerine kullanılabilir. Her iki durumda da, Ethereum ağındaki bir katılımcının çalıştırdığı yazılım ifade edilir. Bu yazılım blok verilerini okuyabilir, zincire yeni bloklar eklendiğinde güncellemeler alabilir, yeni işlemler yayımlayabilir ve daha fazlasını yapabilir. Teknik olarak istemci yazılımdır, düğüm ise yazılımı çalıştıran bilgisayardır. -[Ethereum istemcileri](/developers/docs/nodes-and-clients/); [IPC](https://wikipedia.org/wiki/Inter-process_communication), HTTP veya Websocket'ler tarafından erişilebilir olacak şekilde yapılandırılabilir, bu nedenle Web3.py'nin bu yapılandırmayı yansıtması gerekecek. Web3.py, bu bağlanma seçeneklerini **sağlayıcı** (provider) olarak ifade eder. Web3.py örneğini düğümünüze bağlamak için üç sağlayıcıdan birini seçmeniz gerekir. +[Ethereum istemcileri](/developers/docs/nodes-and-clients/), [IPC](https://wikipedia.org/wiki/Inter-process_communication), HTTP veya Websocket'ler tarafından erişilebilir olacak şekilde yapılandırılabilir, bu nedenle Web3.py'nin bu yapılandırmayı yansıtması gerekir. Web3.py bu bağlantı seçeneklerine **sağlayıcılar** adını verir. Web3.py örneğini düğümünüze bağlamak için üç sağlayıcıdan birini seçmeniz gerekir. ![Web3.py'nin uygulamanızı bir Ethereum düğümüne bağlamak için IPC'yi nasıl kullandığını gösteren bir diyagram](./web3py-and-nodes.png) _Ethereum düğümünü ve Web3.py'yi aynı protokol aracılığıyla iletişim kuracak şekilde yapılandırın, örneğin bu şemadaki IPC gibi._ -Web3.py uygun şekilde yapılandırıldıktan sonra blok zinciri ile etkileşime başlayabilirsiniz. İşte karşılaşacaklarımızın bir ön izlemesi olarak birkaç Web3.py kullanım örneği: +Web3.py uygun şekilde yapılandırıldıktan sonra blokzinciri ile etkileşime başlayabilirsiniz. İşte karşılaşacaklarımızın bir ön izlemesi olarak birkaç Web3.py kullanım örneği: ```python -# read block data: +# blok verisini oku: w3.eth.get_block('latest') -# send a transaction: +# bir işlem gönder: w3.eth.send_transaction({'from': ..., 'to': ..., 'value': ...}) ``` @@ -79,9 +78,9 @@ w3.eth.send_transaction({'from': ..., 'to': ..., 'value': ...}) Bu örnekte, sadece bir Python yorumlayıcısı içinde çalışacağız. Herhangi bir dizin, dosya, sınıf veya fonksiyon oluşturmayacağız. -Not: Aşağıdaki örneklerde "$" ile başlayan komutların terminalde çalıştırılması amaçlanmıştır. ("$" işaretini yazmayınız, bu sadece satır başlangıcını belli etmek içindir.) +Not: Aşağıdaki örneklerde `$` ile başlayan komutların terminalde çalıştırılması amaçlanmıştır. (`$` işaretini yazmayın, bu sadece satırın başlangıcını belirtir.) -İlk olarak, deney yapabileceğiniz kullanıcı dostu bir ortam yaratmak için [IPython](https://ipython.org/) indirin. IPython, diğer özelliklerin yanı sıra tab tuşu ile tamamlama özelliği sunarak Web3.py içinde nelerin mümkün olduğunu görmeyi çok daha kolaylaştırır. +İlk olarak, içinde keşif yapabileceğiniz kullanıcı dostu bir ortam için [IPython](https://ipython.org/) yükleyin. IPython, diğer özelliklerin yanı sıra sekme ile tamamlama özelliği sunarak Web3.py içinde nelerin mümkün olduğunu görmeyi çok daha kolaylaştırır. ```bash pip install ipython @@ -93,7 +92,7 @@ Web3.py, `web3` adı altında yayınlanmıştır. Şu şekilde kurun: pip install web3 ``` -Bir şey daha: Daha sonra birkaç bağımlılık gerektiren bir blok zinciri simüle edeceğiz. Bunları şu şekilde yükleyebilirsiniz: +Bir şey daha var: Daha sonra birkaç bağımlılık gerektiren bir blokzinciri simüle edeceğiz. Bunları şu şekilde yükleyebilirsiniz: ```bash pip install 'web3[tester]' @@ -101,11 +100,11 @@ pip install 'web3[tester]' Başlamaya hazırsınız! -Not: `web3[tester]` paketi Python 3.10.xx sürümüne kadar çalışır +Not: `web3[tester]` paketi Python 3.10.xx sürümüne kadar çalışır. -## Bir sanal alan (sandbox) başlatın {#spin-up-a-sandbox} +## Bir sanal alan başlatın {#spin-up-a-sandbox} -Terminalinizde `ipython` çalıştırarak yeni bir Python ortamı açın. Bu, `python` çalıştırmakla benzerdir ancak başka kullanışlı özellikleri de beraberinde getirir. +Terminalinizde `ipython` çalıştırarak yeni bir Python ortamı açın. Bu, `python` çalıştırmaya benzer, ancak daha fazla kullanışlı özellikle birlikte gelir. ```bash ipython @@ -123,24 +122,24 @@ In [1]: In [1]: from web3 import Web3 ``` -## Web3 modülü ile tanışın {#introducing-the-web3-module} +## Web3 modülüne giriş {#introducing-the-web3-module} -[Web3](https://web3py.readthedocs.io/en/stable/overview.html#base-api) modülü, Ethereum'a bir geçit olmanın yanı sıra birkaç kolaylık fonksiyonu sunar. Birkaçını keşfedelim. +Ethereum'a bir geçit olmasının yanı sıra, [Web3](https://web3py.readthedocs.io/en/stable/overview.html#base-api) modülü birkaç kolaylaştırıcı fonksiyon sunar. Birkaçını keşfedelim. -Bir Ethereum uygulamasında, genellikle para birimlerini dönüştürmeniz gerekir. Web3 modülü bunun için birkaç yardımcı yöntem sağlar: [wei_den](https://web3py.readthedocs.io/en/stable/web3.main.html#web3.Web3.from_wei) ve [wei_ye](https://web3py.readthedocs.io/en/stable/web3.main.html#web3.Web3.to_wei). +Bir Ethereum uygulamasında, genellikle para birimi birimlerini dönüştürmeniz gerekir. Web3 modülü, tam da bunun için birkaç yardımcı metot sunar: [from_wei](https://web3py.readthedocs.io/en/stable/web3.main.html#web3.Web3.from_wei) ve [to_wei](https://web3py.readthedocs.io/en/stable/web3.main.html#web3.Web3.to_wei). -Not: Bilgisayarlar, ondalık matematiği işlemede çok kötüdür. Bunu aşmak için geliştiriciler genellikle dolar tutarlarını sent olarak saklar. Örneğin fiyatı $5,99 olan bir ürün veritabanında 599 olarak saklanabilir. +Not: Bilgisayarlar, ondalık matematiği işlemede çok kötüdür. Bunu aşmak için geliştiriciler genellikle dolar tutarlarını sent olarak saklar. Örneğin fiyatı $5.99 olan bir ürün veritabanında 599 olarak saklanabilir. -Ether bazındaki işlemler işlenirken benzer bir model kullanılır. Ancak, ether'da iki ondalık nokta yerine 18 ondalık nokta bulunur! Ether'ın en küçük birimine wei denir, bu nedenle işlem gönderirken belirtilen değer budur. +ether cinsinden işlemler gerçekleştirilirken de benzer bir düzen kullanılır. Ancak ether, iki ondalık basamak yerine 18 ondalık basamağa sahiptir! Ether'ın en küçük birimine wei denir, bu nedenle işlem gönderirken belirtilen değer budur. 1 ether = 1000000000000000000 wei -1 wei = 0,000000000000000001 ether +1 wei = 0.000000000000000001 ether -Bazı değerleri wei'ye ve wei'den dönüştürmeyi deneyin. Ether ve wei [arasındaki çok sayıda birim için isimler olduğunu](https://web3py.readthedocs.io/en/stable/troubleshooting.html#how-do-i-convert-currency-denominations) unutmayın. Bunlar arasında daha iyi bilinenlerden biri **gwei**'dir, çünkü genellikle işlem ücretleri bu şekilde gösterilir. +Bazı değerleri wei'ye ve wei'den dönüştürmeyi deneyin. Ether ve wei arasında [birçok para birimi birimi için isimler olduğunu](https://web3py.readthedocs.io/en/stable/troubleshooting.html#how-do-i-convert-currency-denominations) unutmayın. Bunlar arasında daha iyi bilinenlerden biri **gwei**'dir, çünkü genellikle işlem ücretleri bu şekilde gösterilir. ```python In [2]: Web3.to_wei(1, 'ether') @@ -150,7 +149,7 @@ In [3]: Web3.from_wei(500000000, 'gwei') Out[3]: Decimal('0.5') ``` -Web3 modülündeki diğer yardımcı program yöntemleri arasında veri formatı dönüştürücüleri (örneğin, [`toHex`](https://web3py.readthedocs.io/en/stable/web3.main.html#web3.Web3.toHex)), adres yardımcıları (örneğin, [`isAddress`](https://web3py.readthedocs.io/en/stable/web3.main.html#web3.Web3.isAddress)) ve karma fonksiyonları (örneğin, [`keccak`](https://web3py.readthedocs.io/en/stable/web3.main.html#web3.Web3.keccak)) bulunur. Bunların çoğu serinin devamında ele alınacaktır. Kullanılabilir tüm yöntemleri ve özellikleri görüntülemek için `Web3`. yazıp noktadan sonra iki kez tab tuşuna basarak IPython'un otomatik tamamlama özelliğinden faydalanın. +Web3 modülündeki diğer yardımcı metotlar arasında veri biçimi dönüştürücüleri (örneğin, [`toHex`](https://web3py.readthedocs.io/en/stable/web3.main.html#web3.Web3.toHex)), adres yardımcıları (örneğin, [`isAddress`](https://web3py.readthedocs.io/en/stable/web3.main.html#web3.Web3.isAddress)) ve karma fonksiyonları (örneğin, [`keccak`](https://web3py.readthedocs.io/en/stable/web3.main.html#web3.Web3.keccak)) bulunur. Bunların çoğu serinin devamında ele alınacaktır. Kullanılabilir tüm yöntemleri ve özellikleri görüntülemek için `Web3.` yazıp noktadan sonra iki kez sekme tuşuna basarak IPython'un otomatik tamamlama özelliğinden faydalanın. ## Zincirle konuşun {#talk-to-the-chain} @@ -158,37 +157,38 @@ Kolaylık sağlayan bu yöntemler güzel olsa da artık blokzincire geçelim. So Bu yolu kullanmayacağız ancak HTTP Sağlayıcısını kullanan eksiksiz bir iş akışı örneği şöyle görünebilir: -- Bir Ethereum düğümü indirin, örneğin [Geth](https://geth.ethereum.org/). -- Geth'i bir terminal penceresinde başlatın ve ağı senkronize etmesini bekleyin. Varsayılan HTTP portu `8545`'tir, ancak bu değiştirilebilir. -- Web3.py'ye `localhost:8545` üzerindeki HTTP aracılığıyla düğüme bağlanmasını söyleyin. `w3 = Web3(Web3.HTTPProvider('http://127.0.0.1:8545'))` -- Düğüm ile etkileşime geçmek için `w3` oluşumunu kullanın. +- Bir Ethereum düğümü indirin, örneğin, [Geth](https://geth.ethereum.org/). +- Geth'i bir terminal penceresinde başlatın ve ağı senkronize etmesini bekleyin. Varsayılan HTTP bağlantı noktası `8545`'tir, ancak yapılandırılabilir. +- Web3.py'ye HTTP aracılığıyla `localhost:8545` üzerindeki düğüme bağlanmasını söyleyin. + `w3 = Web3(Web3.HTTPProvider('http://127.0.0.1:8545'))` +- Düğümle etkileşim kurmak için `w3` örneğini kullanın. -Bu, bunu yapmanın "gerçek" bir yolu olsa da, senkronizasyon işlemi saatler sürer ve yalnızca bir geliştirme ortamı istiyorsanız gereksizdir. Web3.py bu amaç için dördüncü bir sağlayıcı sunar: **EthereumTesterProvider**. Bu test sağlayıcısı, rahat izinlere ve oynamak için sahte para birimine sahip simüle edilmiş bir Ethereum düğümüne bağlanır. +Bu, bunu yapmanın "gerçek" bir yolu olsa da, senkronizasyon işlemi saatler sürer ve yalnızca bir geliştirme ortamı istiyorsanız gereksizdir. Web3.py bu amaçla dördüncü bir sağlayıcı sunar: **EthereumTesterProvider**. Bu test sağlayıcısı, rahat izinlere ve oynamak için sahte para birimine sahip simüle edilmiş bir Ethereum düğümüne bağlanır. -![Web3.py uygulamanızı simüle edilmiş bir Ethereum düğümüne bağlayan EthereumTesterProvider'ı gösteren bir diyagram](./ethereumtesterprovider.png) +![web3.py uygulamanızı simüle edilmiş bir Ethereum düğümüne bağlayan EthereumTesterProvider'ı gösteren bir diyagram](./ethereumtesterprovider.png) _EthereumTesterProvider, simüle edilmiş bir düğüme bağlanır ve hızlı geliştirme ortamları için kullanışlıdır._ -Bu simüle edilmiş düğüme [eth-tester](https://github.com/ethereum/eth-tester) denir; bu düğümü, `pip install web3[tester]` komutunun bir parçası olarak kurduk. Web3.py'yi bu test sağlayıcısını kullanacak şekilde yapılandırmak şu kadar basittir: +Bu simüle edilmiş düğüme [eth-tester](https://github.com/ethereum/eth-tester) denir ve biz onu `pip install 'web3[tester]'` komutunun bir parçası olarak kurduk. Web3.py'yi bu test sağlayıcısını kullanacak şekilde yapılandırmak şu kadar basittir: ```python In [4]: w3 = Web3(Web3.EthereumTesterProvider()) ``` -Artık zincirde sörf yapmaya hazırsınız! İnsanlar buna sörf yapmak demezler. Bunu az önce kafamdan uydurdum. Hadi hızlı bir tur atalım. +Artık zincirde sörf yapmaya hazırsınız! İnsanlar böyle bir şey söylemez. Bunu az önce kafamdan uydurdum. Hadi hızlı bir tur atalım. ## Hızlı tur {#the-quick-tour} -İlk önce önemli bir şeyi aradan çıkaralım, bir akıl sağlığı kontrolü: +Her şeyden önce, hızlı bir kontrol yapalım: ```python -In [5]: w3.isConnected() +In [5]: w3.is_connected() Out[5]: True ``` -Test sağlayıcısını kullandığımız için bu çok değerli bir test değildir ancak başarısız olursa, muhtemelen `w3` değişkenini başlatırken yanlış bir şeyler yazmışsınızdır. İç parantezleri dahil ettiğinizi iki kez kontrol edin, yani `Web3.EthereumTesterProvider()` şeklinde olsun. +Test sağlayıcısını kullandığımız için bu çok değerli bir test değildir ancak başarısız olursa, muhtemelen `w3` değişkenini başlatırken yanlış bir şeyler yazmışsınızdır. İç parantezleri eklediğinizden emin olun, yani `Web3.EthereumTesterProvider()`. -## 1. tur durağı: [hesaplar](/developers/docs/accounts/) {#tour-stop-1-accounts} +## Tur durağı #1: [hesaplar](/developers/docs/accounts/) {#tour-stop-1-accounts} Kolaylık sağlamak için test sağlayıcısı bazı hesaplar oluşturdu ve bunları test ether'i ile önceden yükledi. @@ -201,7 +201,7 @@ Out[6]: ['0x7E5F4552091A69125d5DfCb7b8C2659029395Bdf', '0x6813Eb9362372EEF6200f3b1dbC3f819671cBA69', ...] ``` -Bu komutu çalıştırırsanız, `0x` ile başlayan on dizelik bir liste görmelisiniz. Her biri bir **herkese açık adrestir** ve bazı yönlerden çek hesabındaki hesap numarasına benzer. Bu adresi size ether göndermek isteyen birine verirsiniz. +Bu komutu çalıştırırsanız `0x` ile başlayan on diziden oluşan bir liste görmelisiniz. Her biri bir **açık adrestir** ve bazı yönlerden bir çek hesabındaki hesap numarasına benzer. Bu adresi size ether göndermek isteyen birine verirsiniz. Belirtildiği gibi, test sağlayıcısı bu hesapların her birine bir miktar test ether'ini önceden yüklemiştir. İlk hesapta ne kadar olduğunu öğrenelim: @@ -210,18 +210,18 @@ In [7]: w3.eth.get_balance(w3.eth.accounts[0]) Out[7]: 1000000000000000000000000 ``` -Bir sürü sıfır var! Güle oynaya sahte bankaya doğru gitmeden önce para birimleriyle ilgili eski dersi hatırlayın. Ether değerleri, en küçük birim olan wei ile temsil edilir. Bunu ether'e çevirin: +Bir sürü sıfır var! Güle oynaya sahte bankaya gitmeden önce, daha önceki para birimi birimleri dersini hatırlayın. Ether değerleri, en küçük birim olan wei ile temsil edilir. Bunu ether'e çevirin: ```python In [8]: w3.from_wei(1000000000000000000000000, 'ether') Out[8]: Decimal('1000000') ``` -Bir milyon test ether'ı, yine de az buz para değil. +Bir milyon test ether'i — yine de fena değil. -## 2. tur durağı: blok verisi {#tour-stop-2-block-data} +## Tur durağı #2: blok verisi {#tour-stop-2-block-data} -Simüle edilmiş blok zincirinin durumuna bir göz atalım: +Simüle edilmiş blokzincirinin durumuna bir göz atalım: ```python In [9]: w3.eth.get_block('latest') @@ -236,13 +236,13 @@ Out[9]: AttributeDict({ Bir blok hakkında birçok bilgi döndürülür, ancak burada dikkat edeceğimiz sadece birkaç şey var: -- Test cihazı sağlayıcısını ne kadar süre önce yapılandırmış olursanız olun, blok numarası sıfırdır . Yaklaşık her 12 saniyede bir yeni bir blok oluşturan gerçek Ethereum ağının aksine, bu simülasyon, siz ona biraz iş verene kadar bekleyecektir. -- Henüz hiçbir şey yapmadığımız için `transactions` da aynı nedenden dolayı boş bir listedir. Bu ilk blok, sadece zinciri başlatmak için kullanılan bir **boş bloktur**. -- `parentHash`'in sadece birkaç tane boş bayt olduğuna dikkat edin. Bu, **başlangıç bloğu** (genesis block) olarak da bilinen, zincirdeki ilk blok olduğu anlamına gelir. +- Test sağlayıcısını ne kadar süre önce yapılandırmış olursanız olun, blok numarası sıfırdır. Her 12 saniyede bir yeni blok ekleyen gerçek Ethereum ağının aksine, bu simülasyon siz ona yapacak bir iş verene kadar bekleyecektir. +- `transactions` boş bir listedir, aynı nedenle: henüz hiçbir şey yapmadık. Bu ilk blok, sadece zinciri başlatmak için kullanılan bir **boş bloktur**. +- `parentHash`'in sadece bir yığın boş bayttan ibaret olduğuna dikkat edin. Bu, zincirdeki ilk blok olduğunu ve **genesis blok** olarak da bilindiğini gösterir. -## 3. tur durağı: [işlemler](/developers/docs/transactions/) {#tour-stop-3-transactions} +## Tur durağı #3: [işlemler](/developers/docs/transactions/) {#tour-stop-3-transactions} -Bekleyen bir işlem olana kadar sıfır blokta kalacağımız için ona bir işlem verelim. Bir hesaptan diğerine birkaç test ether'ı gönderin: +Bekleyen bir işlem olana kadar sıfırıncı blokta kalacağımız için ona bir işlem verelim. Bir hesaptan diğerine birkaç test ether'ı gönderin: ```python In [10]: tx_hash = w3.eth.send_transaction({ @@ -255,9 +255,12 @@ In [10]: tx_hash = w3.eth.send_transaction({ Bu noktada genellikle işleminizin yeni bir bloğa dahil edilmesi için birkaç saniye beklersiniz. Tam süreç hemen hemen şöyle işler: -1. Bir işlem gönderin ve işlem hash değerini tutun. İşlemi içeren blok oluşturulup yayınlanıncaya kadar işlem "beklemede" kalır. `tx_hash = w3.eth.send_transaction({ … })` -2. İşlemin bir bloğa dahil edilmesini bekleyin: `w3.eth.wait_for_transaction_receipt(tx_hash)` -3. Uygulama mantığına devam edin. Başarılı işlemi görüntülemek için: `w3.eth.get_transaction(tx_hash)` +1. Bir işlem gönderin ve işlem karmasını saklayın. İşlemi içeren blok oluşturulup yayınlanıncaya kadar işlem "beklemede" kalır. + `tx_hash = w3.eth.send_transaction({ … })` +2. İşlemin bir bloğa dahil edilmesini bekleyin: + `w3.eth.wait_for_transaction_receipt(tx_hash)` +3. Uygulama mantığına devam edin. Başarılı işlemi görüntülemek için: + `w3.eth.get_transaction(tx_hash)` Simüle edilmiş ortamımız, işlemi anında yeni bir bloğa ekleyecektir, böylece işlemi hemen görebiliriz: @@ -274,7 +277,7 @@ Out[11]: AttributeDict({ }) ``` -Burada bazı tanıdık ayrıntılar göreceksiniz: `from`, `to`, ve ` value` alanları, `send_transaction` çağrımızın girdileriyle eşleşmelidir. Diğer güven verici kısım, bu işlemin 1 numaralı blok içindeki ilk işlem (`'transactionIndex': 0`) olarak dahil edilmiş olmasıdır. +Burada bazı tanıdık ayrıntılar göreceksiniz: `from`, `to` ve `value` alanları `send_transaction` çağrımızın girdileriyle eşleşmelidir. Diğer güven verici kısım ise bu işlemin 1 numaralı blok içindeki ilk işlem (`'transactionIndex': 0`) olarak dahil edilmiş olmasıdır. Ayrıca, ilgili iki hesabın bakiyelerini kontrol ederek bu işlemin başarısını kolayca doğrulayabiliriz. Üç ether, birinden diğerine geçmiş olmalıdır. @@ -286,12 +289,12 @@ In [13]: w3.eth.get_balance(w3.eth.accounts[1]) Out[13]: 1000003000000000000000000 ``` -İkincisi iyi gözüküyor! Bakiye, 1.000.000'dan 1.000.003 ether'a döndü. Peki ilk hesaba ne oldu? Üç ether'dan biraz daha fazlasını kaybetmiş görünüyor. Ne yazık ki, hayatta hiçbir şey bedava değildir ve Ethereum genel ağını kullanmak, eşlerinizi destekleyici rolleri için tazmin etmenizi gerektirir. İşlemi gönderen hesaptan küçük bir işlem ücreti kesildi - bu ücret, yakılan gaz miktarı (ETH transferi için 21000 birim gaz), ağ etkinliğine göre değişen bir taban ücret ile çarpılır ve işlemi bloğa ekleyen doğrulayıcıya giden bir bahşiş eklenerek hesaplanır. +İkincisi iyi gözüküyor! Bakiye, 1.000.000'dan 1.000.003 ether'a döndü. Peki ilk hesaba ne oldu? Üç ether'dan biraz daha fazlasını kaybetmiş görünüyor. Ne yazık ki, hayatta hiçbir şey bedava değildir ve Ethereum genel ağını kullanmak, eşlerinizi destekleyici rolleri için tazmin etmenizi gerektirir. İşlemi gönderen hesaptan küçük bir işlem ücreti kesildi. Bu ücret, yakılan gaz miktarı (bir ETH transferi için 21.000 birim gaz) ile ağ etkinliğine göre değişen bir taban ücretin çarpımına, işlemi bloğa dahil eden doğrulayıcıya giden bir bahşişin eklenmesiyle hesaplanır. [Gaz](/developers/docs/gas/#post-london) hakkında daha fazla bilgi -Not: Genel ağda işlem ücretleri, ağ talebine ve bir işlemin ne kadar hızlı işlenmesini istediğinize göre değişir. Ücretlerin nasıl hesaplandığına dair bir belge görmek istiyorasanız, işlemlerin bir bloğa nasıl dahil edildiğine ilişkin önceki gönderime göz atabilirsiniz. +Not: Genel ağda işlem ücretleri, ağ talebine ve bir işlemin ne kadar hızlı işlenmesini istediğinize göre değişir. Ücretlerin nasıl hesaplandığının ayrıntılı bir dökümüyle ilgileniyorsanız işlemlerin bir bloğa nasıl dahil edildiğiyle ilgili önceki gönderime göz atın. -## Ve derin bir nefes alın {#and-breathe} +## Biraz soluklanalım {#and-breathe} -Bir süredir bu işle uğraştığımız için şu anda biraz mola vermek iyi gelebilir. Derine dalmaya devam ediyoruz ve bu serinin ikinci bölümünde keşfe devam edeceğiz. Yakında ele alacağımız bazı kavramlar: gerçek bir düğüme bağlanma, akıllı sözleşmeler ve jetonlar. Yukarıdakilerle ilgili sorularınız mı var? Bana sorabilirsiniz! Geribildiriminiz konunun ilerleyişini etkileyecektir. [Twitter](https://twitter.com/wolovim) aracılığıyla isteklerinizi iletebilirsiniz. +Bir süredir bu işle uğraştığımız için şu anda biraz mola vermek iyi gelebilir. Derine dalmaya devam ediyoruz ve bu serinin ikinci bölümünde keşfe devam edeceğiz. Yakında ele alacağımız bazı kavramlar: gerçek bir düğüme bağlanma, akıllı sözleşmeler ve jetonlar. Yukarıdakilerle ilgili sorularınız mı var? Bana sorabilirsiniz! Geribildiriminiz konunun ilerleyişini etkileyecektir. İsteklerinizi [Twitter](https://twitter.com/wolovim) üzerinden iletebilirsiniz. diff --git a/public/content/translations/tr/developers/tutorials/all-you-can-cache/index.md b/public/content/translations/tr/developers/tutorials/all-you-can-cache/index.md index 3684fd9b77d..a4de740cb4e 100644 --- a/public/content/translations/tr/developers/tutorials/all-you-can-cache/index.md +++ b/public/content/translations/tr/developers/tutorials/all-you-can-cache/index.md @@ -1,31 +1,28 @@ --- title: "Önbelleğe alabileceğiniz her şey" -description: Daha ucuz toplama işlemleri için önbelleğe alma sözleşmesi oluşturmayı ve kullanmayı öğrenin +description: "Daha ucuz toplama işlemleri için bir önbelleğe alma sözleşmesi oluşturmayı ve kullanmayı öğrenin" author: Ori Pomerantz -tags: - - "katman 2" - - "önbelleğe alma" - - "depolama" +tags: [ "katman 2", "önbelleğe alma", "depolama" ] skill: intermediate published: 2022-09-15 lang: tr --- -İşlemdeki bir baytın maliyeti, toplama kullanırken depolama yuvası kullanımına göre çok daha pahalıdır. Bu nedenle, zincirde mümkün olduğu kadar çok bilgiyi önbelleğe almak mantıklıdır. +Toplamaları kullanırken bir işlemdeki bir baytın maliyeti, bir depolama yuvasının maliyetinden çok daha pahalıdır. Bu nedenle, mümkün olduğunca çok bilgiyi zincir üstünde önbelleğe almak mantıklıdır. -Bu makalede, birden fazla kez kullanılması olası olan herhangi bir parametre değerinin nasıl önbelleğe alınacağını ve daha az bellek (ilk kez kullanıldıktan sonra) kullanacak şekilde nasıl kullanıma hazır hale getirileceğini öğrenecek ve ayrıca bu önbelleği kullanan zincir dışı kodu yazmayı da öğrenmiş olacaksınız. +Bu makalede, birden çok kez kullanılması muhtemel herhangi bir parametre değerinin önbelleğe alınacağı ve (ilk seferden sonra) çok daha az sayıda bayt ile kullanıma sunulacağı şekilde bir önbelleğe alma sözleşmesinin nasıl oluşturulacağını ve kullanılacağını ve bu önbelleği kullanan zincir dışı kodun nasıl yazılacağını öğreneceksiniz. -Makaleyi atlayıp doğrudan kaynak kodunu görmek istiyorsanız [buraya](https://github.com/qbzzt/20220915-all-you-can-cache) tıklayabilirsiniz. Geliştirme yığını [Foundry](https://book.getfoundry.sh/getting-started/installation)'dir. +Makaleyi atlayıp yalnızca kaynak kodunu görmek isterseniz, [buradadır](https://github.com/qbzzt/20220915-all-you-can-cache). Geliştirme yığını [Foundry](https://getfoundry.sh/introduction/installation/)'dir. ## Genel tasarım {#overall-design} -Kolay anlaşılması için tüm işlem parametrelerinin 32 bayt uzunluğunda ve `uint256` tipinde olduğunu varsayacağız. Bir işlem aldığımızda parametreleri şu şekilde ayrıştıracağız: +Basitlik adına, tüm işlem parametrelerinin `uint256` olduğunu ve 32 bayt uzunluğunda olduğunu varsayacağız. Bir işlem aldığımızda, her bir parametreyi şu şekilde ayrıştıracağız: -1. İlk bayt `0xFF` ise, sonraki 32 baytı parametre değeri olarak alın ve önbelleğe yazın. +1. İlk bayt `0xFF` ise sonraki 32 baytı bir parametre değeri olarak alın ve önbelleğe yazın. -2. İlk bayt `0xFE` ise, sonraki 32 baytı parametre değeri olarak alın ancak önbelleğe _yazmayın_. +2. İlk bayt `0xFE` ise sonraki 32 baytı bir parametre değeri olarak alın ancak önbelleğe _yazmayın_. -3. Başka herhangi bir değer için ilk dört biti ek bayt sayısı ve son dört biti önbellek anahtarının en önemli bitleri olarak alın. İşte bazı örnekler: +3. Diğer herhangi bir değer için, ilk dört biti ek bayt sayısı olarak ve son dört biti önbellek anahtarının en anlamlı bitleri olarak alın. İşte bazı örnekler: | Calldata'daki baytlar | Önbellek anahtarı | | :-------------------- | ----------------: | @@ -36,7 +33,7 @@ Kolay anlaşılması için tüm işlem parametrelerinin 32 bayt uzunluğunda ve ## Önbellek manipülasyonu {#cache-manipulation} -Önbellek [`Cache.sol`](https://github.com/qbzzt/20220915-all-you-can-cache/blob/main/src/Cache.sol) içinde uygulanır. Hadi satır satır inceleyelim. +Önbellek, [`Cache.sol`](https://github.com/qbzzt/20220915-all-you-can-cache/blob/main/src/Cache.sol) içinde uygulanmıştır. Satır satır üzerinden geçelim. ```solidity // SPDX-License-Identifier: UNLICENSED @@ -49,22 +46,22 @@ contract Cache { bytes1 public constant DONT_CACHE = 0xFE; ``` -Bu sabitler, tüm bilgileri sağladığımız ve önbelleğe yazılmasını isteyip istemediğimiz özel durumları yorumlamak için kullanılır. Önbelleğe yazdırmak için her birisine 22100 gaz ücreti ödeyerek daha önce kullanılmayan depolama yuvalarına iki [`SSTORE`](https://www.evm.codes/#55) işlemi yapılması gerekir; bu nedenle isteğe bağlı hale getiririz. +Bu sabitler, tüm bilgileri sağladığımız ve önbelleğe yazılmasını isteyip istemediğimiz özel durumları yorumlamak için kullanılır. Önbelleğe yazma, daha önce kullanılmamış depolama yuvalarına her biri 22100 gaz maliyetinde iki [`SSTORE`](https://www.evm.codes/#55) işlemi gerektirir, bu yüzden bunu isteğe bağlı hâle getiriyoruz. ```solidity mapping(uint => uint) public val2key; ``` -Değerler ile anahtarları arasında [eşleme](https://www.geeksforgeeks.org/solidity-mappings/). Bu bilgi, işlemi göndermeden önce değerleri kodlayabilmek için gereklidir. +Değerler ve anahtarları arasında bir [eşleme](https://www.geeksforgeeks.org/solidity/solidity-mappings/). Bu bilgi, işlemi göndermeden önce değerleri kodlamak için gereklidir. ```solidity - // Location n has the value for key n+1, because we need to preserve - // zero as "not in the cache". + // Konum n, n+1 anahtarının değerine sahiptir, çünkü sıfırı "önbellekte değil" olarak + // korumamız gerekir. uint[] public key2val; ``` -Anahtarları atadığımızdan anahtarlardan değerlere eşleme için bir dizi kullanabiliriz ve basitlik için bunu sırayla yaparız. +Anahtarları atadığımız için anahtarlardan değerlere eşleme için bir dizi kullanabiliriz ve basitlik adına bunu sıralı olarak yaparız. ```solidity function cacheRead(uint _key) public view returns (uint) { @@ -73,69 +70,69 @@ Anahtarları atadığımızdan anahtarlardan değerlere eşleme için bir dizi k } // cacheRead ``` -Önbellekten değer okuma. +Önbellekten bir değer okuyun. ```solidity - // Write a value to the cache if it's not there already - // Only public to enable the test to work + // Değer zaten mevcut değilse önbelleğe bir değer yazın + // Testin çalışmasını sağlamak için yalnızca public function cacheWrite(uint _value) public returns (uint) { - // If the value is already in the cache, return the current key + // Değer zaten önbellekteyse mevcut anahtarı döndürün if (val2key[_value] != 0) { return val2key[_value]; } ``` -Aynı değeri önbelleğe birden fazla kez koymanın hiçbir anlamı yoktur. Değer zaten oradaysa mevcut anahtarı döndürmeniz yeterli olur. +Aynı değeri önbelleğe birden fazla kez koymanın bir anlamı yoktur. Değer zaten oradaysa, sadece mevcut anahtarı döndürün. ```solidity - // Since 0xFE is a special case, the largest key the cache can - // hold is 0x0D followed by 15 0xFF's. If the cache length is already that - // large, fail. + // 0xFE özel bir durum olduğundan, önbelleğin tutabileceği en büyük anahtar + // 0x0D ve ardından 15 adet 0xFF'tir. Önbellek uzunluğu zaten bu kadar + // büyükse başarısız olur. // 1 2 3 4 5 6 7 8 9 A B C D E F require(key2val.length+1 < 0x0DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF, - "cache overflow"); + "önbellek taşması"); ``` -Hiçbir zaman bu kadar büyük bir önbelleğe sahip olacağımızı sanmıyorum (yaklaşık 1,8\*1037 giriş, yani depolamak için 1027TB gerektirir). Aynı zamanda da ["640 kB her zaman yeterli olacaktır"](https://quoteinvestigator.com/2011/09/08/640k-enough/)lafını da hatırlayacak kadar yaşlıyım. Bu test oldukça ucuz. +Hiçbir zaman bu kadar büyük bir önbelleğe sahip olacağımızı sanmıyorum (yaklaşık 1,8\*1037 giriş, bu da depolamak için yaklaşık 1027 TB gerektirir). Ancak, ["640kB her zaman yeterli olacaktır"](https://quoteinvestigator.com/2011/09/08/640k-enough/) sözünü hatırlayacak kadar yaşlıyım. Bu test çok ucuzdur. ```solidity - // Write the value using the next key + // Değeri bir sonraki anahtarı kullanarak yazın val2key[_value] = key2val.length+1; ``` -Geriye doğru aramayı ekleyin (değerden anahtara doğru). +Ters aramayı ekleyin (değerden anahtara). ```solidity key2val.push(_value); ``` -İleriye doğru aramayı ekleyin (anahtardan değere doğru). Değerleri sırayla atadığımız için onu son dizi değerinden sonra ekleyebiliriz. +İleriye doğru aramayı ekleyin (anahtardan değere). Değerleri sıralı olarak atadığımız için onu son dizi değerinden sonra ekleyebiliriz. ```solidity return key2val.length; } // cacheWrite ``` -Yeni değerin depolandığı hücre olan `key2val`'in yeni uzunluğunu döndürün. +Yeni değerin depolandığı hücre olan `key2val` öğesinin yeni uzunluğunu döndürün. ```solidity function _calldataVal(uint startByte, uint length) private pure returns (uint) ``` -Bu işlev, isteğe bağlı uzunluktaki çağrı verisinden bir değer okur (en fazla 32 bayt, kelime boyutu). +Bu işlev, calldata'dan rastgele uzunlukta (en fazla 32 bayt, kelime boyutu) bir değer okur. ```solidity { uint _retVal; require(length < 0x21, - "_calldataVal length limit is 32 bytes"); + "_calldataVal uzunluk sınırı 32 bayttır"); require(length + startByte <= msg.data.length, - "_calldataVal trying to read beyond calldatasize"); + "_calldataVal calldatasize'ın ötesini okumaya çalışıyor"); ``` -Bu, dahili bir fonksiyondur, yani kodun geri kalanı doğru yazılırsa bu testlere ihtiyaç olmaz. Ancak pek de fazla masraflı değiller, yani yine de kullanabiliriz. +Bu işlev dahili olduğu için kodun geri kalanı doğru yazılırsa bu testler gerekli değildir. Ancak, maliyetleri çok yüksek olmadığı için kullanabiliriz. ```solidity assembly { @@ -143,56 +140,56 @@ Bu, dahili bir fonksiyondur, yani kodun geri kalanı doğru yazılırsa bu testl } ``` -Bu kod [Yul](https://docs.soliditylang.org/en/v0.8.16/yul.html)'da yazılmıştır. Çağrı verisinden 32 baytlık bir değer okur. Bu, çağrı verisi `startByte+32`'den önce dursa bile çalışır, çünkü EVM'de başlatılmamış olan bu alan 0 olarak değerlendilir. +Bu kod [Yul](https://docs.soliditylang.org/en/v0.8.16/yul.html) dilindedir. Calldata'dan 32 baytlık bir değer okur. Bu, calldata `startByte+32`'den önce dursa bile çalışır çünkü EVM'deki başlatılmamış alanın sıfır olduğu kabul edilir. ```solidity _retVal = _retVal >> (256-length*8); ``` -İlla da 32 baytlık bir değer istemiyoruz. Bu kod, fazlalık baytlardan kurtulur. +İlla ki 32 baytlık bir değer istemiyoruz. Bu, fazla baytları ortadan kaldırır. ```solidity return _retVal; } // _calldataVal - // Read a single parameter from the calldata, starting at _fromByte + // Calldata'dan _fromByte'tan başlayarak tek bir parametre okuyun function _readParam(uint _fromByte) internal returns (uint _nextByte, uint _parameterValue) { ``` -Çağrı verisinden tekli bir parametre okuyun. Sadece okuduğumuz değeri değil, ayrıca sonraki baytın da konumunu okumamız gerektiğine dikkat edin, çünkü parametrelerin uzunluğu 1 bayt ile 33 bayt arasında değişebilir. +Calldata'dan tek bir parametre okuyun. Parametreler 1 bayt ile 33 bayt arasında değişebileceğinden, yalnızca okuduğumuz değeri değil, aynı zamanda sonraki baytın konumunu da döndürmemiz gerektiğini unutmayın. ```solidity - // The first byte tells us how to interpret the rest + // İlk bayt bize gerisini nasıl yorumlayacağımızı söyler uint8 _firstByte; _firstByte = uint8(_calldataVal(_fromByte, 1)); ``` -Solidity, tehlikeli olma potansiyeli taşıyan [dahili tip dönüşümleri](https://docs.soliditylang.org/en/v0.8.16/types.html#implicit-conversions) engelleyerek hataların sayısını azaltmaya çalışır. Bir düşürme, örnek olarak 256 bitten 8 bite düşürme açık olmalıdır. +Solidity, potansiyel olarak tehlikeli [örtük tür dönüşümlerini](https://docs.soliditylang.org/en/v0.8.16/types.html#implicit-conversions) yasaklayarak hata sayısını azaltmaya çalışır. Örneğin 256 bitten 8 bite bir tür küçültme işleminin açık olması gerekir. ```solidity - // Read the value, but do not write it to the cache + // Değeri okuyun, ancak önbelleğe yazmayın if (_firstByte == uint8(DONT_CACHE)) return(_fromByte+33, _calldataVal(_fromByte+1, 32)); - // Read the value, and write it to the cache + // Değeri okuyun ve önbelleğe yazın if (_firstByte == uint8(INTO_CACHE)) { uint _param = _calldataVal(_fromByte+1, 32); cacheWrite(_param); return(_fromByte+33, _param); } - // If we got here it means that we need to read from the cache + // Buraya geldiysek, önbellekten okuma yapmamız gerektiği anlamına gelir - // Number of extra bytes to read + // Okunacak ek bayt sayısı uint8 _extraBytes = _firstByte / 16; ``` -Alt [nibble](https://en.wikipedia.org/wiki/Nibble)'ı alın ve önbellekten değeri okuyabilmek için diğer baytlarla birleştirin. +Alt [nibble](https://en.wikipedia.org/wiki/Nibble)'ı alın ve değeri önbellekten okumak için diğer baytlarla birleştirin. ```solidity uint _key = (uint256(_firstByte & 0x0F) << (8*_extraBytes)) + @@ -203,17 +200,17 @@ Alt [nibble](https://en.wikipedia.org/wiki/Nibble)'ı alın ve önbellekten değ } // _readParam - // Read n parameters (functions know how many parameters they expect) + // n parametrelerini okuyun (fonksiyonlar kaç parametre beklediklerini bilirler) function _readParams(uint _paramNum) internal returns (uint[] memory) { ``` -Sahip olduğumuz parametrelerin sayısını çağrı verisinin kendisinden de alabiliriz, fakat bize çağrı yapan fonksiyonlar ne kadar parametre beklediklerini bilmektedir. Onların bize söylemesine izin vermek daha kolaydır. +Sahip olduğumuz parametre sayısını calldata'nın kendisinden alabiliriz, ancak bizi çağıran fonksiyonlar kaç parametre beklediklerini bilir. Bize söylemelerine izin vermek daha kolaydır. ```solidity - // The parameters we read + // Okuduğumuz parametreler uint[] memory params = new uint[](_paramNum); - // Parameters start at byte 4, before that it's the function signature + // Parametreler 4. baytta başlar, ondan öncesi fonksiyon imzasıdır uint _atByte = 4; for(uint i=0; i<_paramNum; i++) { @@ -221,14 +218,14 @@ Sahip olduğumuz parametrelerin sayısını çağrı verisinin kendisinden de al } ``` -İhtiyacınız olan sayıya ulaşana kadar parametreleri okumaya devam edin. Eğer çağrı verisinin sonunun ötesine geçersek, `_readParams` aramayı eski haline döndürecektir. +İhtiyacınız olan sayıya ulaşana kadar parametreleri okuyun. Calldata'nın sonunu geçersek, `_readParams` çağrıyı geri alır. ```solidity return(params); } // readParams - // For testing _readParams, test reading four parameters + // _readParams'ı test etmek için, dört parametrenin okunmasını test edin function fourParam() public returns (uint256,uint256,uint256,uint256) { @@ -238,45 +235,45 @@ Sahip olduğumuz parametrelerin sayısını çağrı verisinin kendisinden de al } // fourParam ``` -Foundry'nin bir büyük faydası testlerin Solidity'de ([aşağıdaki Önbelleğin test edilmesi bölümüne bakın)](#testing-the-cache) yazılmasına izin vermesidir. Bu, birim testlerini çok daha kolay hale getiriyor. Bu, testin doğru olduklarını onaylayabilmesi için dört parametreyi okuyan ve döndüren bir fonksiyondur. +Foundry'nin büyük bir avantajı, testlerin Solidity'de yazılmasına izin vermesidir ([aşağıdaki Önbelleği test etme bölümüne bakın](#testing-the-cache)). Bu, birim testlerini çok daha kolaylaştırır. Bu, testin doğru olduklarını doğrulayabilmesi için dört parametreyi okuyan ve döndüren bir fonksiyondur. ```solidity - // Get a value, return bytes that will encode it (using the cache if possible) + // Bir değer alın, onu kodlayacak baytları döndürün (mümkünse önbelleği kullanarak) function encodeVal(uint _val) public view returns(bytes memory) { ``` -`encodeVal`, zincir dışı kodların önbelleği kullanan çağrı verileri oluşturmak için yardım istediklerinde çağırdığı bir fonksiyondur. Tek bir değer alır ve onu şifreleyen baytları verir. Bu fonksiyon bir `view` fonksiyonudur; bu yüzden bir işleme ihtiyaç duymaz ve harici olarak çağrıldığında hiç gaz harcamaz. +`encodeVal`, önbelleği kullanan calldata oluşturmaya yardımcı olmak için zincir dışı kodun çağırdığı bir fonksiyondur. Tek bir değer alır ve onu kodlayan baytları döndürür. Bu fonksiyon bir `view` fonksiyonudur, bu nedenle bir işlem gerektirmez ve harici olarak çağrıldığında herhangi bir gaz maliyeti yoktur. ```solidity uint _key = val2key[_val]; - // The value isn't in the cache yet, add it + // Değer henüz önbellekte değil, ekleyin if (_key == 0) return bytes.concat(INTO_CACHE, bytes32(_val)); ``` -[EVM](/developers/docs/evm/)'de, başlatılmamış her depolamanın sıfır olduğu varsayılır. Yani eğer orada olmayan bir değerin anahtarını ararsak bir sıfır alırız. Bu durumda şifrelemeyi yapan baytlar, `INTO_CACHE` şeklindedir (yani bir dahaki sefere önbelleğe alınacaktır) ve ardından asıl değer gelir. +[EVM](/developers/docs/evm/)'de tüm başlatılmamış depolamanın sıfır olduğu varsayılır. Yani, orada olmayan bir değerin anahtarını ararsak sıfır elde ederiz. Bu durumda, onu kodlayan baytlar `INTO_CACHE` (böylece bir sonraki sefere önbelleğe alınacaktır), ardından gerçek değer gelir. ```solidity - // If the key is <0x10, return it as a single byte + // Anahtar <0x10 ise tek bir bayt olarak döndürün if (_key < 0x10) return bytes.concat(bytes1(uint8(_key))); ``` -Tek baytlar en kolay olanlardır. Bir `bytes` tipini herhangi bir uzunluktaki bir bayt dizisine dönüştürmek için [`bytes.concat`](https://docs.soliditylang.org/en/v0.8.16/types.html#the-functions-bytes-concat-and-string-concat) kullanırız. İsmine rağmen, sadece bir bağımsız değişken sağlandığında bile normal bir şekilde çalışır. +Tek baytlar en kolay olanlardır. Herhangi bir uzunlukta olabilen bir `bytes` türünü bir bayt dizisine dönüştürmek için [`bytes.concat`](https://docs.soliditylang.org/en/v0.8.16/types.html#the-functions-bytes-concat-and-string-concat) kullanırız. İsmine rağmen, yalnızca bir argümanla sağlandığında gayet iyi çalışır. ```solidity - // Two byte value, encoded as 0x1vvv + // İki baytlık değer, 0x1vvv olarak kodlanmış if (_key < 0x1000) return bytes.concat(bytes2(uint16(_key) | 0x1000)); ``` -163'den daha az bir anahtarımız olduğunda, onu 2 baytta ifade edebiliriz. Önce 256 bitlik bir değer olan `_key` öğesini 16 bitlik değere çevirir ve mantık kullanırız veya ek baytların sayısını ilk bayta ekleriz. Sonra `bytes2` değerine dönüştürürüz, bu da `bytes`'a dönüştürülebilir. +163'ten küçük bir anahtarımız olduğunda, bunu iki baytla ifade edebiliriz. Önce 256 bitlik bir değer olan `_key`'i 16 bitlik bir değere dönüştürürüz ve ilk bayta ek bayt sayısını eklemek için mantıksal veya kullanırız. Sonra onu, `bytes`'a dönüştürülebilen bir `bytes2` değerine dönüştürürüz. ```solidity - // There is probably a clever way to do the following lines as a loop, - // but it's a view function so I'm optimizing for programmer time and - // simplicity. + // Muhtemelen aşağıdaki satırları bir döngü olarak yapmanın zekice bir yolu vardır, + // ancak bu bir view fonksiyonu olduğundan programcı zamanı ve + // basitlik için optimize ediyorum. if (_key < 16*256**2) return bytes.concat(bytes3(uint24(_key) | (0x2 * 16 * 256**2))); @@ -291,14 +288,14 @@ Tek baytlar en kolay olanlardır. Bir `bytes` tipini herhangi bir uzunluktaki return bytes.concat(bytes16(uint128(_key) | (0xF * 16 * 256**15))); ``` -Diğer değerler (3 bayt, 4 bayt, vs.) aynı şekilde, fakat farklı alan boyutlarıyla işlenir. +Diğer değerler (3 bayt, 4 bayt vb.) farklı alan boyutlarıyla aynı şekilde ele alınır. ```solidity - // If we get here, something is wrong. - revert("Error in encodeVal, should not happen"); + // Buraya gelirsek, bir şeyler yanlış demektir. + revert("encodeVal'da hata, olmamalıydı"); ``` -Eğer buraya geldiysek, 16\*25615'ten az olmayan bir anahtar aldık demektir. Fakat `cacheWrite` anahtarları sınırlar, bu yüzden 14\*25616'ya bile çıkamayız (bunun da bir 0xFE tarzında bir ilk baytı olurdu, yani `DONT_CACHE` gibi görünürdü). Fakat ilerde bir programcı girip de bir hata tanımlar diye bir test yapmak bize pek de pahalıya patlamaz. +Buraya gelirsek, 16\*25615'ten küçük olmayan bir anahtar aldığımız anlamına gelir. Ancak `cacheWrite` anahtarları sınırlar, bu yüzden 14\*25616'ya bile ulaşamayız (bunun ilk baytı 0xFE olurdu, yani `DONT_CACHE` gibi görünürdü). Ancak gelecekteki bir programcının bir hata eklemesi durumunda bir test eklemek bize çok pahalıya mal olmaz. ```solidity } // encodeVal @@ -308,7 +305,7 @@ Eğer buraya geldiysek, 16\*25615'ten az olmayan bir anahtar aldık d ### Önbelleği test etme {#testing-the-cache} -Foundry'nin faydalarından biri de, testleri [testleri Solidity'de yazmanıza izin vermesidir](https://book.getfoundry.sh/forge/tests), bu sayede birim testi yazma kolaylaşır. `Cache` sınıfı için olan testler [buradadır](https://github.com/qbzzt/20220915-all-you-can-cache/blob/main/test/Cache.t.sol). Test kodu, testlerin kendileri de bu eğilimde olduğu gibi kendini tekrar eden bir konu olduğu için bu belge sadece ilgi çekici kısımları anlatacaktır. +Foundry'nin avantajlarından biri, [testleri Solidity'de yazmanıza izin vermesidir](https://getfoundry.sh/forge/tests/overview/), bu da birim testleri yazmayı kolaylaştırır. `Cache` sınıfının testleri [buradadır](https://github.com/qbzzt/20220915-all-you-can-cache/blob/main/test/Cache.t.sol). Test kodu, testlerin olma eğiliminde olduğu gibi tekrarlayıcı olduğundan, bu makale yalnızca ilginç kısımları açıklamaktadır. ```solidity // SPDX-License-Identifier: UNLICENSED @@ -317,17 +314,17 @@ pragma solidity ^0.8.13; import "forge-std/Test.sol"; -// Need to run `forge test -vv` for the console. +// Konsol için `forge test -vv` komutunu çalıştırmanız gerekir. import "forge-std/console.sol"; ``` -Bu, sadece test paketini ve `console.log`'u kullanmak için gerekli bir standarttır. +Bu, sadece test paketini ve `console.log`'u kullanmak için gerekli olan standart bir koddur. ```solidity import "src/Cache.sol"; ``` -Test ettiğimiz sözleşmeyi bilmemiz gerekir. +Test ettiğimiz sözleşmeyi bilmemiz gerekiyor. ```solidity contract CacheTest is Test { @@ -338,13 +335,13 @@ contract CacheTest is Test { } ``` -`setUp` fonksiyonu her testten önce çağrılır. Bu durumda sadece yeni bir önbellek oluşturacağız ki, testlerimiz birbirini etkilemesin. +`setUp` fonksiyonu her testten önce çağrılır. Bu durumda sadece yeni bir önbellek oluştururuz, böylece testlerimiz birbirini etkilemez. ```solidity function testCaching() public { ``` -Testler, adları `test` ile başlayan fonksiyonlardır. Bu fonksiyon, değerler yazarak ve onları tekrar okuyarak temel önbellek işlevselliğini kontrol eder. +Testler, adları `test` ile başlayan fonksiyonlardır. Bu fonksiyon, değerleri yazıp tekrar okuyarak temel önbellek işlevselliğini kontrol eder. ```solidity for(uint i=1; i<5000; i++) { @@ -355,15 +352,15 @@ Testler, adları `test` ile başlayan fonksiyonlardır. Bu fonksiyon, değerler assertEq(cache.cacheRead(i), i*i); ``` -[`assert...` fonksiyonları](https://book.getfoundry.sh/reference/forge-std/std-assertions) kullanarak asıl testi işte böyle yaparsınız. Bu durumda, yazdığımız değerin okuduğumuz değer olduğunu doğrularız. `cache.cacheWrite` sonucunu atabiliriz, çünkü önbellek anahtarlarının doğrusal olarak atandığını biliyoruz. +Gerçek testi [`assert...` fonksiyonlarını](https://getfoundry.sh/reference/forge-std/std-assertions/) kullanarak bu şekilde yaparsınız. Bu durumda, yazdığımız değerin okuduğumuz değer olduğunu kontrol ederiz. `cache.cacheWrite` sonucunu atabiliriz çünkü önbellek anahtarlarının doğrusal olarak atandığını biliyoruz. ```solidity } } // testCaching - // Cache the same value multiple times, ensure that the key stays - // the same + // Aynı değeri birden çok kez önbelleğe alın, anahtarın aynı + // kaldığından emin olun function testRepeatCaching() public { for(uint i=1; i<100; i++) { uint _key1 = cache.cacheWrite(i); @@ -372,7 +369,7 @@ Testler, adları `test` ile başlayan fonksiyonlardır. Bu fonksiyon, değerler } ``` -Önce, her bir değeri önbelleğe yazarız ve anahtarların aynı olduğundan emin oluruz (ikinci yazmanın gerçekleşmediği anlamına gelir). +Önce her değeri önbelleğe iki kez yazarız ve anahtarların aynı olduğundan emin oluruz (yani ikinci yazma işlemi gerçekten gerçekleşmemiştir). ```solidity for(uint i=1; i<100; i+=3) { @@ -382,20 +379,20 @@ Testler, adları `test` ile başlayan fonksiyonlardır. Bu fonksiyon, değerler } // testRepeatCaching ``` -Teoride, ardışık önbellek yazılarını etkilemeyen bir hata mevcut olabilir. Bu yüzden ardışık olmayan bazı yazılar yazacağız ve değerlerin hala yeniden yazılmamış olup olmadığını göreceğiz. +Teoride, ardışık önbellek yazımlarını etkilemeyen bir hata olabilir. Bu yüzden burada ardışık olmayan bazı yazımlar yapıyoruz ve değerlerin hala yeniden yazılmadığını görüyoruz. ```solidity - // Read a uint from a memory buffer (to make sure we get back the parameters - // we sent out) + // Bir bellek arabelleğinden bir uint okuyun (gönderdiğimiz parametreleri + // geri aldığımızdan emin olmak için) function toUint256(bytes memory _bytes, uint256 _start) internal pure returns (uint256) ``` -Bir `bytes memory` arabelleğinden 256 bitlik bir kelime okuyun. Bu yardımcı fonksiyon, önbelleği kullanan bir fonksiyon çağrısı yaptığımızda doğru sonuçları aldığımızı onaylamamızı sağlar. +`bytes memory` arabelleğinden 256 bitlik bir kelime okuyun. Bu yardımcı fonksiyon, önbelleği kullanan bir fonksiyon çağrısı çalıştırdığımızda doğru sonuçları aldığımızı doğrulamamızı sağlar. ```solidity { - require(_bytes.length >= _start + 32, "toUint256_outOfBounds"); + require(_bytes.length >= _start + 32, "toUint256_sınır_dışı"); uint256 tempUint; assembly { @@ -403,31 +400,31 @@ Bir `bytes memory` arabelleğinden 256 bitlik bir kelime okuyun. Bu yardımcı f } ``` -Yul `uint256` öğesinin ötesindeki veri yapılarını desteklemez; yani `_bytes` bellek arabelleği gibi daha sofistike bir veri yapısına başvurduğunuzda o yapının adresini alırsınız. Solidity `bytes memory` değerlerini uzunluğu içeren 32 baytlık bir kelime olarak depolar. Ardından asıl baytlar gelir, yani bayt numarasını `_start` almak için `_bytes+32+_start` değerini hesaplamamız gerekir. +Yul, `uint256`'nın ötesindeki veri yapılarını desteklemez, bu nedenle `_bytes` bellek arabelleği gibi daha karmaşık bir veri yapısına atıfta bulunduğunuzda, o yapının adresini alırsınız. Solidity, `bytes memory` değerlerini uzunluğu içeren 32 baytlık bir kelime olarak ve ardından gerçek baytları depolar, bu nedenle `_start` bayt numarasını almak için `_bytes+32+_start`'ı hesaplamamız gerekir. ```solidity return tempUint; } // toUint256 - // Function signature for fourParams(), courtesy of - // https://www.4byte.directory/signatures/?bytes4_signature=0x3edc1e6d + // fourParams() için fonksiyon imzası, + // https://www.4byte.directory/signatures/?bytes4_signature=0x3edc1e6d izniyle bytes4 constant FOUR_PARAMS = 0x3edc1e6d; - // Just some constant values to see we're getting the correct values back + // Doğru değerleri geri aldığımızı görmek için sadece bazı sabit değerler uint256 constant VAL_A = 0xDEAD60A7; uint256 constant VAL_B = 0xBEEF; uint256 constant VAL_C = 0x600D; uint256 constant VAL_D = 0x600D60A7; ``` -Test için ihtiyacımız olan bazı sabit değerler. +Test için ihtiyacımız olan bazı sabitler. ```solidity function testReadParam() public { ``` -`fourParams()` çağrısı, parametreleri doğru okuyabilmemiz için `readParams`'ı kullanan bir fonksiyondur. +Parametreleri doğru bir şekilde okuyabildiğimizi test etmek için `readParams` kullanan bir fonksiyon olan `fourParams()`'ı çağırın. ```solidity address _cacheAddr = address(cache); @@ -436,23 +433,23 @@ Test için ihtiyacımız olan bazı sabit değerler. bytes memory _callOutput; ``` -Önbelleği kullanan bir fonksiyonu çağırmak için normal ABI mekanizmasını kullanamayız, bu yüzden düşük seviye olan [`
.call()`](https://docs.soliditylang.org/en/v0.8.16/types.html#members-of-addresses) mekanizmasını kullanmamız gerekir. Bu mekanizma `bytes memory`'yi girdi olarak alır ve çıktı olarak (bir Boole değeri ile birlikte) verir. +Önbelleği kullanarak bir fonksiyon çağırmak için normal ABI mekanizmasını kullanamayız, bu yüzden düşük seviyeli [`
.call()`](https://docs.soliditylang.org/en/v0.8.16/types.html#members-of-addresses) mekanizmasını kullanmamız gerekir. Bu mekanizma, girdi olarak bir `bytes memory` alır ve bunu (bir Boole değeri ile birlikte) çıktı olarak döndürür. ```solidity - // First call, the cache is empty + // İlk çağrı, önbellek boş _callInput = bytes.concat( FOUR_PARAMS, ``` -Aynı sözleşmenin hem önbelleklenmiş fonksiyonları (işlemlerden doğrudan gelen çağrılar için) hem de önbelleklenmemiş fonksiyonları (diğer akıllı sözleşmelerden gelen çağrılar için) desteklemesi kullanışlıdır. Bunu yapabilmek için Solidity mekanizmasının her şeyi [a `fallback` fonksiyonuna](https://docs.soliditylang.org/en/v0.8.16/contracts.html#fallback-function) koymasının yerine doğru fonksiyonu çağıracağına güvenmeye devam etmemiz gerekir. Bunu yapmak, birleştirilebilirliği çok daha kolay hale getirir. Fonksiyonu tanımlamak için çoğu durumda tek bir bayt yeterlidir, yani üç baytı (16\*3=48 gaz) boşa harcıyoruz. Bununla birlikte, ben bunu yazarken 48 gaz 0,07 sent ediyor, bu da daha basit, daha az hataya yatkın bir kod için makul bir ücrettir. +Aynı sözleşmenin hem önbelleğe alınmış fonksiyonları (doğrudan işlemlerden gelen çağrılar için) hem de önbelleğe alınmamış fonksiyonları (diğer akıllı sözleşmelerden gelen çağrılar için) desteklemesi kullanışlıdır. Bunu yapmak için, her şeyi [bir `fallback` fonksiyonuna](https://docs.soliditylang.org/en/v0.8.16/contracts.html#fallback-function) koymak yerine doğru fonksiyonu çağırmak için Solidity mekanizmasına güvenmeye devam etmemiz gerekir. Bunu yapmak birleştirilebilirliği çok daha kolaylaştırır. Çoğu durumda fonksiyonu tanımlamak için tek bir bayt yeterli olacaktır, bu yüzden üç bayt (16\*3=48 gaz) israf ediyoruz. Ancak, ben bunu yazarken bu 48 gazın maliyeti 0,07 sent, bu da daha basit, daha az hataya açık kod için makul bir maliyettir. ```solidity - // First value, add it to the cache + // İlk değer, önbelleğe ekleyin cache.INTO_CACHE(), bytes32(VAL_A), ``` -İlk değer: Önbelleğe yazılması gerekenin tam bir değer olduğunu söyleyen bir işaret ve ardından gelen değerin 32 baytlık kısmı. `VAL_B`'ın önbelleğe yazılmaması ve `VAL_C`'nin hem üçüncü hem de dördüncü parametre olması dışında diğer üç değer benzerdir. +İlk değer: Önbelleğe yazılması gereken tam bir değer olduğunu söyleyen bir bayrak, ardından değerin 32 baytı. Diğer üç değer benzerdir, ancak `VAL_B` önbelleğe yazılmaz ve `VAL_C` hem üçüncü hem de dördüncü parametredir. ```solidity . @@ -462,20 +459,20 @@ Aynı sözleşmenin hem önbelleklenmiş fonksiyonları (işlemlerden doğrudan (_success, _callOutput) = _cacheAddr.call(_callInput); ``` -Burası, `Cache` sözleşmesini asıl çağıracağımız yerdir. +Burası `Cache` sözleşmesini gerçekten çağırdığımız yerdir. ```solidity assertEq(_success, true); ``` -Çağrının başarılı olmasını umuyoruz. +Çağrının başarılı olmasını bekliyoruz. ```solidity assertEq(cache.cacheRead(1), VAL_A); assertEq(cache.cacheRead(2), VAL_C); ``` -Boş bir önbellekle başlıyor ve ardından `VAL_A` ile `VAL_C` öğelerini ekliyoruz. Birincinin anahtar 1'e, ikincinin de anahtar 2'ye sahip olmasını bekleriz. +Boş bir önbellekle başlarız ve ardından `VAL_A`'yı ve sonrasında `VAL_C`'yi ekleriz. Birincisinin anahtarının 1, ikincisinin ise 2 olmasını bekleriz. ``` assertEq(toUint256(_callOutput,0), VAL_A); @@ -484,25 +481,25 @@ Boş bir önbellekle başlıyor ve ardından `VAL_A` ile `VAL_C` öğelerini ekl assertEq(toUint256(_callOutput,96), VAL_C); ``` -Çıktımız, o 4 parametredir. Burada doğru olduğunu onaylıyoruz. +Çıktı dört parametredir. Burada doğru olduğunu doğruluyoruz. ```solidity - // Second call, we can use the cache + // İkinci çağrı, önbelleği kullanabiliriz _callInput = bytes.concat( FOUR_PARAMS, - // First value in the Cache + // Önbellekteki ilk değer bytes1(0x01), ``` -16'nın altında olan önbellek anahtarları sadece bir bayttır. +16'nın altındaki önbellek anahtarları yalnızca bir bayttır. ```solidity - // Second value, don't add it to the cache + // İkinci değer, önbelleğe eklemeyin cache.DONT_CACHE(), bytes32(VAL_B), - // Third and fourth values, same value + // Üçüncü ve dördüncü değerler, aynı değer bytes1(0x02), bytes1(0x02) ); @@ -512,13 +509,13 @@ Boş bir önbellekle başlıyor ve ardından `VAL_A` ile `VAL_C` öğelerini ekl } // testReadParam ``` -Çağrıdan sonra yapılan testler, ilk çağrıdan sonra yapılanlarla aynı. +Çağrıdan sonraki testler, ilk çağrıdan sonrakilerle aynıdır. ```solidity function testEncodeVal() public { ``` -Bu fonksiyon, `testReadParam` ile benzerdir, parametreleri doğrudan yazmak için `encodeVal()` kullanıyor olmamız dışında. +Bu fonksiyon, `testReadParam`'a benzer, ancak parametreleri açıkça yazmak yerine `encodeVal()` kullanırız. ```solidity . @@ -538,23 +535,23 @@ Bu fonksiyon, `testReadParam` ile benzerdir, parametreleri doğrudan yazmak içi } // testEncodeVal ``` -`testEncodeVal()`'deki tek ekstra test, `_callInput`'un uzunluğunun doğruluğunu onaylamaktır. İlk çağrı için bu değer 4+33\*4'tür. İkinci için ise, zaten tüm değerler önbellekte olduğundan 4+1\*4 şeklindedir. +`testEncodeVal()`'daki tek ek test, `_callInput`'un uzunluğunun doğru olduğunu doğrulamaktır. İlk arama için 4+33\*4'tür. İkincisi için, her değerin zaten önbellekte olduğu durumda, 4+1\*4'tür. ```solidity - // Test encodeVal when the key is more than a single byte - // Maximum three bytes because filling the cache to four bytes takes - // too long. + // Anahtarın tek bir bayttan fazla olduğu durumlarda encodeVal'ı test edin + // Önbelleği dört bayta kadar doldurmak çok uzun sürdüğü için + // en fazla üç bayt. function testEncodeValBig() public { - // Put a number of values in the cache. - // To keep things simple, use key n for value n. + // Önbelleğe bir dizi değer koyun. + // İşleri basit tutmak için, n değeri için n anahtarını kullanın. for(uint i=1; i<0x1FFF; i++) { cache.cacheWrite(i); } ``` -Yukarıdaki `testEncodeVal` fonksiyonu, önbelleğe sadece 4 değer yazarr, bu yüzden [fonksiyonun çoklu bayt değerleriyle ilgilenen kısımları](https://github.com/qbzzt/20220915-all-you-can-cache/blob/main/src/Cache.sol#L144-L171) kontrol edilmez. Fakat o kod karışık ve hataya açıktır. +Yukarıdaki `testEncodeVal` fonksiyonu önbelleğe yalnızca dört değer yazar, bu nedenle [fonksiyonun çok baytlı değerlerle ilgilenen kısmı](https://github.com/qbzzt/20220915-all-you-can-cache/blob/main/src/Cache.sol#L144-L171) kontrol edilmez. Ancak bu kod karmaşık ve hataya açıktır. -Bu fonksiyonun ilk kısmı, önbelleğe 1 ila 0x1FFF değerlerini sırayla yazan bir döngüdür, bu sayede bu değerleri şifreleyebilecek ve nereye gittiklerini bilebileceğiz. +Bu fonksiyonun ilk kısmı, 1'den 0x1FFF'ye kadar olan tüm değerleri sırayla önbelleğe yazan bir döngüdür, böylece bu değerleri kodlayabilir ve nereye gittiklerini bilebiliriz. ```solidity . @@ -563,14 +560,14 @@ Bu fonksiyonun ilk kısmı, önbelleğe 1 ila 0x1FFF değerlerini sırayla yazan _callInput = bytes.concat( FOUR_PARAMS, - cache.encodeVal(0x000F), // One byte 0x0F - cache.encodeVal(0x0010), // Two bytes 0x1010 - cache.encodeVal(0x0100), // Two bytes 0x1100 - cache.encodeVal(0x1000) // Three bytes 0x201000 + cache.encodeVal(0x000F), // Bir bayt 0x0F + cache.encodeVal(0x0010), // İki bayt 0x1010 + cache.encodeVal(0x0100), // İki bayt 0x1100 + cache.encodeVal(0x1000) // Üç bayt 0x201000 ); ``` -Bir bayt, iki bayt ve üç bayt değerlerini test edin. Yeterli yığın girdisini yazmak çok uzun süreceğinden (en az 0x10000000, yaklaşık olarak bir milyarın çeyreği) bunun ötesinde test yapmıyoruz. +Bir bayt, iki bayt ve üç baytlık değerleri test edin. Yeterli yığın girdisi yazmak çok uzun süreceğinden (en az 0x10000000, yaklaşık olarak çeyrek milyar) bunun ötesinde test yapmıyoruz. ```solidity . @@ -580,11 +577,11 @@ Bir bayt, iki bayt ve üç bayt değerlerini test edin. Yeterli yığın girdisi } // testEncodeValBig - // Test what with an excessively small buffer we get a revert + // Aşırı küçük bir arabellekle bir geri alma elde ettiğimizi test edin function testShortCalldata() public { ``` -Yeterli parametrenin olmadığı anormal durumda ne olduğunu test edin. +Yeterli parametre olmadığında anormal durumda ne olduğunu test edin. ```solidity . @@ -595,10 +592,10 @@ Yeterli parametrenin olmadığı anormal durumda ne olduğunu test edin. } // testShortCalldata ``` -Döndüğü için alacağımız sonuç `false` olmalıdır. +Geri döndüğü için alacağımız sonuç `false` olmalıdır. ``` - // Call with cache keys that aren't there + // Orada olmayan önbellek anahtarlarıyla çağrı yapın function testNoCacheKey() public { . . @@ -606,52 +603,52 @@ Döndüğü için alacağımız sonuç `false` olmalıdır. _callInput = bytes.concat( FOUR_PARAMS, - // First value, add it to the cache + // İlk değer, önbelleğe ekleyin cache.INTO_CACHE(), bytes32(VAL_A), - // Second value + // İkinci değer bytes1(0x0F), bytes2(0x1234), bytes11(0xA10102030405060708090A) ); ``` -Bu fonksiyon tamamen meşru dört parametre alır, önbelleğin boş olması sebebiyle okuyacak hiçbir değer olmaması dışında. +Bu fonksiyon dört tamamen meşru parametre alır, ancak önbellek boştur, bu nedenle okunacak değer yoktur. ```solidity . . . - // Test what with an excessively long buffer everything works file + // Aşırı uzun bir arabellekle her şeyin çalıştığını test edin function testLongCalldata() public { address _cacheAddr = address(cache); bool _success; bytes memory _callInput; bytes memory _callOutput; - // First call, the cache is empty + // İlk çağrı, önbellek boş _callInput = bytes.concat( FOUR_PARAMS, - // First value, add it to the cache + // İlk değer, önbelleğe ekleyin cache.INTO_CACHE(), bytes32(VAL_A), - // Second value, add it to the cache + // İkinci değer, önbelleğe ekleyin cache.INTO_CACHE(), bytes32(VAL_B), - // Third value, add it to the cache + // Üçüncü değer, önbelleğe ekleyin cache.INTO_CACHE(), bytes32(VAL_C), - // Fourth value, add it to the cache + // Dördüncü değer, önbelleğe ekleyin cache.INTO_CACHE(), bytes32(VAL_D), - // And another value for "good luck" + // Ve "iyi şans" için başka bir değer bytes4(0x31112233) ); ``` -Bu fonksiyon, 5 değer gönderir. Beşinci değerin görmezden gelindiğini biliyoruz çünkü geçerli bir önbellek girdisi değildir ve dahil edilmemiş olsa geri dönme surumuna neden olurdu. +Bu fonksiyon beş değer gönderir. Beşinci değerin, geçerli bir önbellek girişi olmadığı için yoksayıldığını biliyoruz; dahil edilmeseydi geri dönmeye neden olurdu. ```solidity (_success, _callOutput) = _cacheAddr.call(_callInput); @@ -665,13 +662,13 @@ Bu fonksiyon, 5 değer gönderir. Beşinci değerin görmezden gelindiğini bili ``` -## Bir örnek uygulama {#a-sample-app} +## Örnek bir uygulama {#a-sample-app} -Solidity'de test yazmak çok güzeldir fakat günün sonunda bir merkeziyetsiz uygulamanın kullanışlı olabilmesi için zincirin dışından talepleri işleyebilmesi gerekir. Bu belge "Bir Kez Yaz, Çok Kez Oku" anlamına gelen `WORM` ile bir merkeziyetsiz uygulamada önbelleğe almanın nasıl kullanacağını gösterir. Eğer bir anahtar henüz yazılmamışsa, ona bir değer yazabilirsiniz. Eğer anahtar çoktan yazılmışsa, bir geri dönüş alırsınız. +Solidity'de test yazmak çok iyidir, ancak günün sonunda bir merkeziyetsiz uygulamanın kullanışlı olması için zincir dışından gelen istekleri işleyebilmesi gerekir. Bu makale, "Bir Kez Yaz, Çok Kez Oku" anlamına gelen WORM ile bir merkeziyetsiz uygulamada önbelleğe almanın nasıl kullanılacağını göstermektedir. Bir anahtar henüz yazılmamışsa, ona bir değer yazabilirsiniz. Anahtar zaten yazılmışsa, bir geri alma alırsınız. ### Sözleşme {#the-contract} -[Sözleşme budur](https://github.com/qbzzt/20220915-all-you-can-cache/blob/main/src/WORM.sol). Genel olarak `Cache` ve `CacheTest` ile çoktan yapmış olduğumuz şeyleri tekrar ediyor olduğu için sadece ilgi çekici olan kısımları ele alacağız. +[Bu sözleşmedir](https://github.com/qbzzt/20220915-all-you-can-cache/blob/main/src/WORM.sol). Çoğunlukla `Cache` ve `CacheTest` ile zaten yaptıklarımızı tekrarlar, bu yüzden sadece ilginç olan kısımları ele alacağız. ```solidity import "./Cache.sol"; @@ -679,7 +676,7 @@ import "./Cache.sol"; contract WORM is Cache { ``` -`Cache`'i kullanmanın en kolay yolu, onu kendi sözleşmemize aktarmaktır. +`Cache` kullanmanın en kolay yolu, onu kendi sözleşmemize miras almaktır. ```solidity function writeEntryCached() external { @@ -688,59 +685,59 @@ contract WORM is Cache { } // writeEntryCached ``` -Bu fonksiyon, yukarıdaki `CacheTest`'in içindeki `fourParam`'a benzer. ABI spesifikasyonlarına uymadığımız için bu fonksiyonun içine herhangi bir parametre beyan etmememiz en iyisidir. +Bu fonksiyon, yukarıdaki `CacheTest`'teki `fourParam`'a benzer. ABI spesifikasyonlarını takip etmediğimiz için, fonksiyona herhangi bir parametre bildirmemek en iyisidir. ```solidity - // Make it easier to call us - // Function signature for writeEntryCached(), courtesy of - // https://www.4byte.directory/signatures/?bytes4_signature=0xe4e4f2d3 + // Bizi çağırmayı kolaylaştırın + // writeEntryCached() için Fonksiyon İmzası, + // https://www.4byte.directory/signatures/?bytes4_signature=0xe4e4f2d3 izniyle bytes4 constant public WRITE_ENTRY_CACHED = 0xe4e4f2d3; ``` -ABI spesifikasyonlarına uymadığımız için `writeEntryCached` öğesini çağıran harici kodun çağrı verisini `worm.writeEntryCached` kullanmak yerine manuel olarak yazması gerekecektir. Bu sabit değere sahip olmak yazmayı kolaylaştırıyor. +`writeEntryCached`'i çağıran harici kodun, ABI spesifikasyonlarına uymadığımız için `worm.writeEntryCached`'i kullanmak yerine calldata'yı manuel olarak oluşturması gerekecektir. Bu sabit değere sahip olmak sadece yazmayı kolaylaştırır. -`WRITE_ENTRY_CACHED` değerini bir durum değişkeni olarak tanımlamış olsak da, bunu harici olarak okuyabilmek için `worm.WRITE_ENTRY_CACHED()` getter fonksiyonunu kullanmanın gerekli olduğunu da not edin. +`WRITE_ENTRY_CACHED`'i bir durum değişkeni olarak tanımlasak da, harici olarak okumak için onun alıcı fonksiyonu olan `worm.WRITE_ENTRY_CACHED()`'i kullanmak gerektiğini unutmayın. ```solidity function readEntry(uint key) public view returns (uint _value, address _writtenBy, uint _writtenAtBlock) ``` -Okuma fonksiyonu bir `view`'dır, yani bir işleme ihtiyaç duymaz ve gaz harcamaz. Sonuç olarak, parametre için önbelleği kullanmanın bir faydası yoktur. Görünüm fonksiyonlarında daha basit olan standart mekanizmayı kullanmak en iyisidir. +Okuma fonksiyonu bir `view` fonksiyonudur, bu nedenle bir işlem gerektirmez ve gaz maliyeti yoktur. Sonuç olarak, parametre için önbelleği kullanmanın bir faydası yoktur. View fonksiyonlarında daha basit olan standart mekanizmayı kullanmak en iyisidir. ### Test kodu {#the-testing-code} -[ Bu, sözleşmenin test kodudur](https://github.com/qbzzt/20220915-all-you-can-cache/blob/main/test/WORM.t.sol). Yine sadece ilgi çekici olan kısma bakalım. +[Bu, sözleşmenin test kodudur](https://github.com/qbzzt/20220915-all-you-can-cache/blob/main/test/WORM.t.sol). Yine, sadece ilginç olanlara bakalım. ```solidity function testWReadWrite() public { worm.writeEntry(0xDEAD, 0x60A7); - vm.expectRevert(bytes("entry already written")); + vm.expectRevert(bytes("giriş zaten yazılmış")); worm.writeEntry(0xDEAD, 0xBEEF); ``` -[Bu (`vm.expectRevert`)](https://book.getfoundry.sh/cheatcodes/expect-revert#expectrevert), yeni çağrının başarısız olması gerektiğini ve bunun için belirtilen sebebi Foundry'de belirtme şeklimizdir. Bu, çağrı verisini oluşturup düşük seviye (`.call()`, vs.) arayüz kullanarak sözleşmeyi çağırmak yerine `.()` söz dizimini kullandığımız durumlarda geçerli olur. +[Bu (`vm.expectRevert`)](https://book.getfoundry.sh/cheatcodes/expect-revert#expectrevert), bir Foundry testinde bir sonraki çağrının başarısız olması gerektiğini ve başarısızlık için bildirilen nedeni bu şekilde belirtiriz. Bu, `.()` sözdizimini, calldata'yı oluşturup sözleşmeyi düşük seviyeli arayüzü (`.call()`, vb.) kullanarak çağırmak yerine kullandığımızda geçerlidir. ```solidity function testReadWriteCached() public { uint cacheGoat = worm.cacheWrite(0x60A7); ``` -Burada `cacheWrite`'ın önbellek anahtarını döndürmesi gerçeğinden faydalanıyoruz. Bu, oluşturma sürecinde kullanmayı beklediğimiz bir şey değil, çünkü `cacheWrite` durum değiştirir ve bu yüzden sadece bir işlem sırasında çağrılabilir. İşlemlerin dönüş değerleri yoktur, eğer sonuçları olursa bu sonuçların olaylar olarak ifade edilmiş olmaları gerekir. Yani `cacheWrite` dönüş değerine sadece zincir üstü kod tarafından erişilebilir ve zincir üstü kod, parametre önbelleğe alımını desteklemez. +Burada `cacheWrite`'ın önbellek anahtarını döndürmesi gerçeğini kullanıyoruz. Bu, üretimde kullanmayı bekleyeceğimiz bir şey değildir, çünkü `cacheWrite` durumu değiştirir ve bu nedenle yalnızca bir işlem sırasında çağrılabilir. İşlemlerin dönüş değerleri yoktur, eğer sonuçları varsa bu sonuçların olaylar olarak yayınlanması gerekir. Bu nedenle `cacheWrite` dönüş değerine yalnızca zincir üstü koddan erişilebilir ve zincir üstü kodun parametre önbelleğe almasına gerek yoktur. ```solidity (_success,) = address(worm).call(_callInput); ``` -`.call()`'un iki değeri varken sadece ilk değeri önemsediğimizi Solidity'ye bu şekilde ifade ederiz. +Bu, Solidity'ye `.call()`'un iki dönüş değeri olmasına rağmen, yalnızca ilkiyle ilgilendiğimizi söyleme şeklimizdir. ```solidity (_success,) = address(worm).call(_callInput); assertEq(_success, false); ``` -Düşük seviye `
.call()` fonksiyonunu kullanmamız sebebiyle, `vm.expectRevert()`'ü kullanamayız ve çağrıdan alacağımız boole başarı değerine bakmamız gerekir. +Düşük seviyeli `.call()` fonksiyonunu kullandığımız için, `vm.expectRevert()`'i kullanamayız ve çağrıdan aldığımız boole başarı değerine bakmak zorundayız. ```solidity event EntryWritten(uint indexed key, uint indexed value); @@ -756,13 +753,13 @@ Düşük seviye `
.call()` fonksiyonunu kullanmamız sebebiyle, `vm.expe (_success,) = address(worm).call(_callInput); ``` -Kodun Foundry'de [bir olayı doğru ifade ettiğini](https://book.getfoundry.sh/cheatcodes/expect-emit) bu şekilde doğrularız. +Bu, Foundry'de kodun [bir olayı doğru şekilde yaydığını](https://getfoundry.sh/reference/cheatcodes/expect-emit/) doğrulama şeklimizdir. ### İstemci {#the-client} -Solidity testleriyle sahip olamayacağınız tek şey, kendi uygulamanıza kesip yapıştırabileceğiniz JavaScript kodudur. O kodu yazmak için [Optimism'in](https://www.optimism.io/) yeni test ağı olan [Optimism Goerli](https://community.optimism.io/docs/useful-tools/networks/#optimism-goerli)'ye WORM dağıttım. [`0xd34335b1d818cee54e3323d3246bd31d94e6a78a`](https://goerli-optimism.etherscan.io/address/0xd34335b1d818cee54e3323d3246bd31d94e6a78a) adresindedir. +Solidity testleriyle elde edemeyeceğiniz bir şey, kendi uygulamanıza kesip yapıştırabileceğiniz JavaScript kodudur. Bu kodu yazmak için WORM'u [Optimism'in](https://www.optimism.io/) yeni test ağı olan [Optimism Goerli](https://community.optimism.io/docs/useful-tools/networks/#optimism-goerli)'ye dağıttım. Adresi [`0xd34335b1d818cee54e3323d3246bd31d94e6a78a`](https://goerli-optimism.etherscan.io/address/0xd34335b1d818cee54e3323d3246bd31d94e6a78a)'dır. -[İstemcinin Javascript kodunu burada görebilirsiniz](https://github.com/qbzzt/20220915-all-you-can-cache/blob/main/javascript/index.js). Kullanmak için: +[İstemci için JavaScript kodunu burada görebilirsiniz](https://github.com/qbzzt/20220915-all-you-can-cache/blob/main/javascript/index.js). Kullanmak için: 1. Git deposunu klonlayın: @@ -777,28 +774,28 @@ Solidity testleriyle sahip olamayacağınız tek şey, kendi uygulamanıza kesip yarn ``` -3. Kurulum dosyasını kopyalayın: +3. Yapılandırma dosyasını kopyalayın: ```sh cp .env.example .env ``` -4. Kurulumunuz için `.env`'i düzenleyin: +4. Yapılandırmanız için `.env` dosyasını düzenleyin: - | Parametre | Değer | - | ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | - | MNEMONIC-ANIMSATICI | Bir işleme ödeyebilmek için yeterli ETH bulunduran bir hesap için bir anımsatıcı. [You can get free ETH for the Optimism Goerli ağı için bedava ETH'yi buradan alabilirsiniz](https://optimismfaucet.xyz/). | - | OPTIMISM_GOERLI_URL | Optimisim Goerli'ye giden URL. Herkese açık bitiş noktası olan `https://goerli.optimism.io`, oran sınırlıdır fakat ihtiyacımız olan şey için yeterlidir | + | Parametre | Değer | + | ------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | + | MNEMONIC | Bir işlemi ödemek için yeterli ETH'ye sahip bir hesabın anımsatıcısı. [Optimism Goerli ağı için ücretsiz ETH'yi buradan alabilirsiniz](https://optimismfaucet.xyz/). | + | OPTIMISM_GOERLI_URL | Optimism Goerli'ye URL. Genel uç nokta, `https://goerli.optimism.io`, hız sınırlıdır ancak burada ihtiyacımız olan şey için yeterlidir | -5. `index.js` komutunu çalıştırın. +5. `index.js`'i çalıştırın. ```sh node index.js ``` - Bu örnek uygulama ilk olarak WORM'a bir girdi yazar ve çağrı verisi ile Etherscan'deki işlemin bağlantısını görüntüler. Sonra da bu girişi geri okur, kullandığı anahtarı ve girdideki değerleri gösterir (değer, blok numarası ve yazarı). + Bu örnek uygulama önce WORM'a bir giriş yazar, calldata'yı ve Etherscan'deki işleme bir bağlantıyı görüntüler. Sonra bu girişi geri okur ve kullandığı anahtarı ve girişteki değerleri (değer, blok numarası ve yazar) görüntüler. -Bu istemcinin çoğu normal Merkeziyetsiz Uygulama JavaScript'idir. Yani yine ilgi çekici kısımları ele alacağız. +İstemcinin çoğu normal merkeziyetsiz uygulama JavaScript'idir. Bu yüzden yine sadece ilginç kısımları ele alacağız. ```javascript . @@ -807,20 +804,20 @@ Bu istemcinin çoğu normal Merkeziyetsiz Uygulama JavaScript'idir. Yani yine il const main = async () => { const func = await worm.WRITE_ENTRY_CACHED() - // Need a new key every time + // Her seferinde yeni bir anahtar gerekir const key = await worm.encodeVal(Number(new Date())) ``` -Verilmiş olan bu yuvanın içine sadece bir kere yazılabildiğinden yuvaları yeniden kullanmadığımızdan emin olmak için zaman damgasını kullanırız. +Belirli bir yuvaya yalnızca bir kez yazılabilir, bu nedenle yuvaları yeniden kullanmadığımızdan emin olmak için zaman damgasını kullanırız. ```javascript const val = await worm.encodeVal("0x600D") -// Write an entry +// Bir giriş yazın const calldata = func + key.slice(2) + val.slice(2) ``` -Ether'ler çağrı verisinin bir onaltılık dizi olmasını, `0x` ve ardından da onaltılık bir çift sayı bekler. Hem `key` hem de `val` `0x` ile başladığından o başlıkları kaldırmamız gerekir. +Ethers, çağrı verisinin onaltılık bir dize, yani `0x` ve ardından çift sayıda onaltılık basamak olmasını bekler. Hem `key` hem de `val` `0x` ile başladığı için bu başlıkları kaldırmamız gerekir. ```javascript const tx = await worm.populateTransaction.writeEntryCached() @@ -829,39 +826,42 @@ tx.data = calldata sentTx = await wallet.sendTransaction(tx) ``` -Solidity test kodunda olduğu gibi, önbelleğe alınmış bir fonksiyonu normal şekilde çağıramayız. Bunun yerine, daha düşük seviyede bir mekanizma kullanmaya ihtiyacımız var. +Solidity test kodunda olduğu gibi, önbelleğe alınmış bir fonksiyonu normal şekilde çağıramayız. Bunun yerine daha düşük seviyeli bir mekanizma kullanmamız gerekiyor. ```javascript . . . - // Read the entry just written - const realKey = '0x' + key.slice(4) // remove the FF flag + // Az önce yazılan girişi okuyun + const realKey = '0x' + key.slice(4) // FF bayrağını kaldırın const entryRead = await worm.readEntry(realKey) . . . ``` -Girdileri okumak için normal mekanizmayı kullanabiliriz. Parametre önbelleklemesini `view` fonksiyonlarıyla kullanmaya gerek yoktur. +Girişleri okumak için normal mekanizmayı kullanabiliriz. `view` fonksiyonlarıyla parametre önbelleğe alma kullanmaya gerek yoktur. ## Sonuç {#conclusion} -Bu belgedeki kod, bir kavram ispatıdır; amaç, fikrin anlaşılmasını kolaylaştırmaktır. Oluşturmaya hazır bir sistem için biraz ilave işlevsellik eklemek isteyebilirsiniz: +Bu makaledeki kod bir kavram kanıtıdır, amaç fikri anlaşılır kılmaktır. Üretime hazır bir sistem için bazı ek işlevler uygulamak isteyebilirsiniz: -- `uint256` olmayan değerleri işleyin. Örnek olarak, dizeler. -- Küresel önbellek yerine belki kullanıcılar ile önbellekler arasında bir eşlemeye sahip olmak. Farklı kullanıcılar farklı değerler kullanır. -- Adresler için kullanılan değerler farklı amaçlar için kullanılanlardan bağımsızdır. Sadece adresler için ayrı bir önbelleğe sahip olmak mantıklı olabilir. -- Güncel olarak, önbellek anahtarları "ilk gelene en küçük anahtar" algoritmasına göre çalışmaktadır. İlk on altı değer tek bir bayt olarak gönderilebilir. Sonraki 4080 değer iki bayt olarak gönderilebilir. Sonraki yaklaşık bir milyon değer ise 3 bayt olarak gönderilebilir, vs. Bir oluşturma sistemi, önbellek girişleri için kullanım sayaçları tutmalıdır ve onları, _en yaygın_ on altı değerin bir bayt, sonraki 4080 en yaygın değerin iki bayt olacağı şekilde yeniden düzenlemelidir. +- `uint256` olmayan değerleri işleyin. Örneğin, dizeler. +- Genel bir önbellek yerine, belki kullanıcılar ve önbellekler arasında bir eşleme olabilir. Farklı kullanıcılar farklı değerler kullanır. +- Adresler için kullanılan değerler, diğer amaçlar için kullanılanlardan farklıdır. Sadece adresler için ayrı bir önbelleğe sahip olmak mantıklı olabilir. +- Şu anda, önbellek anahtarları "ilk gelen, en küçük anahtar" algoritmasına göredir. İlk on altı değer tek bir bayt olarak gönderilebilir. Sonraki 4080 değer iki bayt olarak gönderilebilir. Sonraki yaklaşık bir milyon değer üç bayttır, vb. Bir üretim sistemi, önbellek girişlerinde kullanım sayaçları tutmalı ve bunları, en yaygın on altı değerin bir bayt, sonraki 4080 en yaygın değerin iki bayt vb. olacak şekilde yeniden düzenlemelidir. - Yine de, bu risk barındıran bir işlemdir. Aşağıdaki olay dizisini hayal edin: + Ancak, bu potansiyel olarak tehlikeli bir işlemdir. Aşağıdaki olaylar dizisini hayal edin: - 1. Noam Naive, jeton göndermek istediği adresi şifrelemek için `encodeVal`'ı çağırır. O adres, uygulamada kullanan ilk adreslerden biridir, bu yüzden şifrelenmiş değer 0x06 olur. Bu, bir işlem değil, bir `view` fonksiyonudur. Yani Noam ile kullandığı düğüm arasındadır ve başka hiç kimse, hakkında bir bilgiye sahip değildir + 1. Noam Naive, jeton göndermek istediği adresi kodlamak için `encodeVal`'ı çağırır. Bu adres, uygulamada kullanılan ilklerden biridir, bu nedenle kodlanmış değer 0x06'dır. Bu bir `view` fonksiyonudur, bir işlem değildir, bu yüzden Noam ve kullandığı düğüm arasındadır ve başka kimse bunu bilmez - 2. Owen Owner, önbelleği yeniden düzenleme işlemini çalıştırıyor. Çok az kişi gerçek anlamda bu adresi kullanıyor, bu yüzden artık 0x201122 diye şifreleniyor. 0x06, farklı bir değere 1018 atanmış. + 2. Owen Owner, önbellek yeniden sıralama işlemini çalıştırır. Çok az insan bu adresi gerçekten kullanıyor, bu yüzden şimdi 0x201122 olarak kodlanıyor. Farklı bir değer olan 1018, 0x06'ya atanır. - 3. Noam Naive, jetonlarını 0x06'ya gönderiyor. `0x0000000000000000000000000de0b6b3a7640000` adresine gidiyorlar ve kimse bu adresin özel kodunu bilmediği için orada takılıp kalıyorlar. Noam _mutlu değil_. + 3. Noam Naive, jetonlarını 0x06'ya gönderir. Jetonlar `0x0000000000000000000000000de0b6b3a7640000` adresine gider ve kimse bu adresin özel anahtarını bilmediği için orada takılıp kalırlar. Noam _mutlu değil_. - Önbelleği yeniden düzenleme işlemi sırasında bu ve bellek havuzundaki bununla bağlantılı işlemler problemini çözmenin çok sayıda yolu olsa da, bunun farkında olmalısınız. + Bu sorunu ve önbellek yeniden sıralaması sırasında mempool'da bulunan işlemlerin ilgili sorununu çözmenin yolları vardır, ancak bunun farkında olmalısınız. + +Burada Optimism ile önbelleğe almayı gösterdim, çünkü ben bir Optimism çalışanıyım ve bu en iyi bildiğim toplamadır. Ancak, dahili işleme için minimum bir maliyet talep eden herhangi bir toplamayla çalışmalıdır, böylece karşılaştırmalı olarak işlem verilerini L1'e yazmak ana masraf olur. + +[Çalışmalarımdan daha fazlası için buraya bakın](https://cryptodocguy.pro/). -Burada Optimism ile önbelleklemeyi gösterdim, çünkü ben bir Optimism çalışanıyım ve bu da benim en iyi bildiğim toplamadır. Fakat dahili işlemeye minimum maliyet yükleyen her toplama için çalışması gerekir. Dolayısıyla karşılaştırma yaptığımızda işlem verilerini L1'e yazmak daha büyük maliyettir. diff --git a/public/content/translations/tr/developers/tutorials/app-plasma/index.md b/public/content/translations/tr/developers/tutorials/app-plasma/index.md new file mode 100644 index 00000000000..e08ad69ae66 --- /dev/null +++ b/public/content/translations/tr/developers/tutorials/app-plasma/index.md @@ -0,0 +1,1255 @@ +--- +title: "Gizliliği koruyan uygulamaya özel bir plazma yazın" +description: "Bu öğreticide, para yatırma işlemleri için yarı gizli bir banka oluşturuyoruz. Banka merkezi bir bileşendir; her kullanıcının bakiyesini bilir. Ancak bu bilgi zincir üstünde saklanmaz. Bunun yerine, banka durumun bir karmasını yayınlar. Bir işlem her gerçekleştiğinde, banka yeni karmayı, karma durumunu yeni duruma değiştiren imzalı bir işleme sahip olduğuna dair bir sıfır bilgi ispatı ile birlikte yayınlar. Bu öğreticiyi okuduktan sonra, sadece sıfır bilgi ispatlarının nasıl kullanılacağını değil, aynı zamanda neden kullanıldığını ve bunun nasıl güvenli bir şekilde yapılacağını da anlayacaksınız." +author: Ori Pomerantz +tags: [ "sıfır bilgi", "sunucu", "zincir dışında", "gizlilik" ] +skill: advanced +lang: tr +published: 2025-10-15 +--- + +## Giriş {#introduction} + +[Rollup'ların](/developers/docs/scaling/zk-rollups/) aksine, [plazmalar](/developers/docs/scaling/plasma) bütünlük için Ethereum ana ağını kullanır, ancak kullanılabilirlik için kullanmaz. Bu makalede, Ethereum'un bütünlüğü (yetkisiz değişiklikler olmaması) garanti ettiği ancak kullanılabilirliği (merkezi bir bileşen çökebilir ve tüm sistemi devre dışı bırakabilir) garanti etmediği, plazma gibi davranan bir uygulama yazıyoruz. + +Burada yazdığımız uygulama, gizliliği koruyan bir bankadır. Farklı adreslerin bakiyeli hesapları vardır ve diğer hesaplara para (ETH) gönderebilirler. Banka, durumun (hesaplar ve bakiyeleri) ve işlemlerin karmalarını yayınlar, ancak gerçek bakiyeleri gizli kalabilecekleri zincir dışında tutar. + +## Tasarım {#design} + +Bu, üretime hazır bir sistem değil, bir öğretim aracıdır. Bu nedenle, birkaç basitleştirici varsayımla yazılmıştır. + +- Sabit hesap havuzu. Belirli sayıda hesap vardır ve her hesap önceden belirlenmiş bir adrese aittir. Bu, çok daha basit bir sistem oluşturur çünkü sıfır bilgi ispatlarında değişken boyutlu veri yapılarını işlemek zordur. Üretime hazır bir sistem için, durum karması olarak [Merkle kökünü](/developers/tutorials/merkle-proofs-for-offline-data-integrity/) kullanabilir ve gerekli bakiyeler için Merkle ispatları sağlayabiliriz. + +- Bellek depolama. Bir üretim sisteminde, yeniden başlatma durumunda korumak için tüm hesap bakiyelerini diske yazmamız gerekir. Burada, bilginin basitçe kaybolması sorun değildir. + +- Sadece transferler. Bir üretim sistemi, bankaya varlık yatırmak ve bunları çekmek için bir yol gerektirir. Ancak buradaki amaç sadece konsepti göstermektir, bu nedenle bu banka transferlerle sınırlıdır. + +### Sıfır bilgi ispatları {#zero-knowledge-proofs} + +Temel düzeyde, bir sıfır bilgi ispatı, kanıtlayıcının bazı _Dataprivate_ verilerini bildiğini gösterir; öyle ki, bazı herkese açık veriler, _Datapublic_ ile _Dataprivate_ arasında bir _Relationship_ ilişkisi vardır. Doğrulayıcı, _Relationship_ ve _Datapublic_ bilir. + +Gizliliği korumak için, durumların ve işlemlerin gizli olması gerekir. Ancak bütünlüğü sağlamak için durumların [kriptografik karmasının](https://en.wikipedia.org/wiki/Cryptographic_hash_function) herkese açık olması gerekir. İşlem gönderen kişilere bu işlemlerin gerçekten gerçekleştiğini kanıtlamak için, işlem karmalarını da yayınlamamız gerekir. + +Çoğu durumda, _Dataprivate_, sıfır bilgi ispatı programının girdisi ve _Datapublic_ ise çıktısıdır. + +_Dataprivate_ içindeki bu alanlar: + +- _Staten_, eski durum +- _Staten+1_, yeni durum +- _İşlem_, eski durumdan yeni duruma geçen bir işlem. Bu işlem şu alanları içermelidir: + - Transferi alan _Hedef adres_ + - Transfer edilen _Tutar_ + - Her işlemin yalnızca bir kez işlenebilmesini sağlamak için _Nonce_. + Kaynak adresin işlemde olması gerekmez, çünkü imzadan kurtarılabilir. +- _İmza_, işlemi gerçekleştirmeye yetkili bir imza. Bizim durumumuzda, bir işlemi gerçekleştirmeye yetkili tek adres kaynak adrestir. Sıfır bilgi sistemimiz bu şekilde çalıştığı için, Ethereum imzasına ek olarak hesabın açık anahtarına da ihtiyacımız var. + +_Datapublic_ içindeki alanlar şunlardır: + +- _Karma(Durumn)_ eski durumun karması +- _Karma(Durumn+1)_ yeni durumun karması +- _Karma(İşlem)_ durumu _Durumn_ konumundan _Durumn+1_ konumuna değiştiren işlemin karması. + +İlişki birkaç koşulu kontrol eder: + +- Herkese açık karmalar gerçekten de özel alanlar için doğru karmalardır. +- İşlem, eski duruma uygulandığında yeni durumla sonuçlanır. +- İmza, işlemin kaynak adresinden gelir. + +Kriptografik karma işlevlerinin özellikleri nedeniyle, bu koşulları kanıtlamak bütünlüğü sağlamak için yeterlidir. + +### Veri yapıları {#data-structures} + +Birincil veri yapısı, sunucu tarafından tutulan durumdur. Her hesap için sunucu, [tekrarlama saldırılarını](https://en.wikipedia.org/wiki/Replay_attack) önlemek için kullanılan hesap bakiyesini ve bir [nonce'ı](https://en.wikipedia.org/wiki/Cryptographic_nonce) takip eder. + +### Bileşenler {#components} + +Bu sistem iki bileşen gerektirir: + +- İşlemleri alan, bunları işleyen ve sıfır bilgi ispatlarıyla birlikte zincire karmaları gönderen _sunucu_. +- Durum geçişlerinin meşru olduğundan emin olmak için karmaları depolayan ve sıfır bilgi ispatlarını doğrulayan bir _akıllı sözleşme_. + +### Veri ve kontrol akışı {#flows} + +Bunlar, çeşitli bileşenlerin bir hesaptan diğerine transfer için iletişim kurma yollarıdır. + +1. Bir web tarayıcısı, imzalayanın hesabından farklı bir hesaba transfer talebinde bulunan imzalı bir işlem gönderir. + +2. Sunucu, işlemin geçerli olduğunu doğrular: + + - İmzalayanın bankada yeterli bakiyeye sahip bir hesabı vardır. + - Alıcının bankada bir hesabı vardır. + +3. Sunucu, transfer edilen tutarı imzalayanın bakiyesinden çıkarıp alıcının bakiyesine ekleyerek yeni durumu hesaplar. + +4. Sunucu, durum değişikliğinin geçerli olduğuna dair bir sıfır bilgi ispatı hesaplar. + +5. Sunucu, Ethereum'a şunları içeren bir işlem gönderir: + + - Yeni durum karması + - İşlem karması (böylece işlem göndericisi işlendiğini bilebilir) + - Yeni duruma geçişin geçerli olduğunu kanıtlayan sıfır bilgi ispatı + +6. Akıllı sözleşme, sıfır bilgi ispatını doğrular. + +7. Sıfır bilgi ispatı kontrol edilirse, akıllı sözleşme şu eylemleri gerçekleştirir: + - Mevcut durum karmasını yeni durum karmasına güncelle + - Yeni durum karması ve işlem karması ile bir günlük girdisi yayınla + +### Araçlar {#tools} + +İstemci tarafı kodu için [Vite](https://vite.dev/), [React](https://react.dev/), [Viem](https://viem.sh/) ve [Wagmi](https://wagmi.sh/) kullanacağız. Bunlar endüstri standardı araçlardır; onlara aşina değilseniz [bu öğreticiyi](/developers/tutorials/creating-a-wagmi-ui-for-your-contract/) kullanabilirsiniz. + +Sunucunun büyük bir kısmı [Node](https://nodejs.org/en) kullanılarak JavaScript ile yazılmıştır. Sıfır bilgi kısmı [Noir](https://noir-lang.org/) dilinde yazılmıştır. `1.0.0-beta.10` sürümüne ihtiyacımız var, bu yüzden [Noir'ı talimatlara göre yükledikten](https://noir-lang.org/docs/getting_started/quick_start) sonra şunu çalıştırın: + +``` +noirup -v 1.0.0-beta.10 +``` + +Kullandığımız blokzincir, [Foundry](https://getfoundry.sh/introduction/installation)nin bir parçası olan yerel bir test blokzinciri olan `anvil`'dir. + +## Uygulama {#implementation} + +Bu karmaşık bir sistem olduğu için, onu aşamalar halinde uygulayacağız. + +### Aşama 1 - Manuel sıfır bilgi {#stage-1} + +İlk aşama için, tarayıcıda bir işlemi imzalayacak ve ardından bilgiyi manuel olarak sıfır bilgi ispatına sağlayacağız. Sıfır bilgi kodu, bu bilgiyi `server/noir/Prover.toml` dosyasında almayı bekler ([burada](https://noir-lang.org/docs/getting_started/project_breakdown#provertoml-1) belgelenmiştir). + +Çalışırken görmek için: + +1. [Node](https://nodejs.org/en/download) ve [Noir](https://noir-lang.org/install) uygulamasının yüklü olduğundan emin olun. Tercihen, bunları macOS, Linux veya [WSL](https://learn.microsoft.com/en-us/windows/wsl/install) gibi bir UNIX sistemine yükleyin. + +2. Aşama 1 kodunu indirin ve istemci kodunu sunmak için web sunucusunu başlatın. + + ```sh + git clone https://github.com/qbzzt/250911-zk-bank.git -b 01-manual-zk + cd 250911-zk-bank + cd client + npm install + npm run dev + ``` + + Burada bir web sunucusuna ihtiyacınız olmasının nedeni, belirli dolandırıcılık türlerini önlemek için birçok cüzdanın (MetaMask gibi) doğrudan diskten sunulan dosyaları kabul etmemesidir + +3. Cüzdanı olan bir tarayıcı açın. + +4. Cüzdanda yeni bir parola girin. Bunun mevcut parolanızı sileceğini unutmayın, bu yüzden _bir yedeğiniz olduğundan emin olun_. + + Parola, anvil için varsayılan test parolası olan `test test test test test test test test test test test junk`'tır. + +5. [İstemci tarafı koduna](http://localhost:5173/) göz atın. + +6. Cüzdana bağlanın ve hedef hesabınızı ve tutarınızı seçin. + +7. **İmzala**'ya tıklayın ve işlemi imzalayın. + +8. **Prover.toml** başlığı altında metin bulacaksınız. `server/noir/Prover.toml` dosyasını bu metinle değiştirin. + +9. Sıfır bilgi ispatını yürütün. + + ```sh + cd ../server/noir + nargo execute + ``` + + Çıktı şuna benzer olmalıdır: + + ``` + ori@CryptoDocGuy:~/noir/250911-zk-bank/server/noir$ nargo execute + + [zkBank] Circuit witness successfully solved + [zkBank] Witness saved to target/zkBank.gz + [zkBank] Circuit output: (0x199aa62af8c1d562a6ec96e66347bf3240ab2afb5d022c895e6bf6a5e617167b, 0x0cfc0a67cb7308e4e9b254026b54204e34f6c8b041be207e64c5db77d95dd82d, 0x450cf9da6e180d6159290554ae3d8787, 0x6d8bc5a15b9037e52fb59b6b98722a85) + ``` + +10. Mesajın doğru bir şekilde karıştırılıp karıştırılmadığını görmek için son iki değeri web tarayıcısında gördüğünüz karma ile karşılaştırın. + +#### `server/noir/Prover.toml` {#server-noir-prover-toml} + +[Bu dosya](https://github.com/qbzzt/250911-zk-bank/blob/01-manual-zk/server/noir/Prover.toml), Noir tarafından beklenen bilgi biçimini gösterir. + +```toml +mesaj="send 0x70997970C51812dc3A010C7d01b50e0d17dc79C8 500 finney (milliEth) 0 " +``` + +Mesaj, kullanıcının anlamasını (imzalama sırasında gereklidir) ve Noir kodunun ayrıştırmasını kolaylaştıran metin biçimindedir. Tutar, bir yandan kesirli transferlere olanak sağlamak, diğer yandan kolayca okunabilir olmak için finney cinsinden belirtilmiştir. Son sayı [nonce](https://en.wikipedia.org/wiki/Cryptographic_nonce)'tır. + +Dize 100 karakter uzunluğundadır. Sıfır bilgi ispatları değişken boyutlu verileri iyi işlemez, bu yüzden genellikle verileri doldurmak gerekir. + +```toml +pubKeyX=["0x83",...,"0x75"] +pubKeyY=["0x35",...,"0xa5"] +signature=["0xb1",...,"0x0d"] +``` + +Bu üç parametre, sabit boyutlu bayt dizileridir. + +```toml +[[accounts]] +address="0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266" +balance=100_000 +nonce=0 + +[[accounts]] +address="0x70997970C51812dc3A010C7d01b50e0d17dc79C8" +balance=100_000 +nonce=0 +``` + +Bu, bir yapı dizisini belirtmenin yoludur. Her giriş için adresi, bakiyeyi (milliETH yani [finney](https://cryptovalleyjournal.com/glossary/finney/)) ve bir sonraki nonce değerini belirtiriz. + +#### `client/src/Transfer.tsx` {#client-src-transfer-tsx} + +[Bu dosya](https://github.com/qbzzt/250911-zk-bank/blob/01-manual-zk/client/src/Transfer.tsx) istemci tarafı işlemeyi uygular ve `server/noir/Prover.toml` dosyasını (sıfır bilgi parametrelerini içeren) oluşturur. + +İşte daha ilginç kısımların açıklaması. + +```tsx +export default attrs => { +``` + +Bu işlev, diğer dosyaların içe aktarabileceği `Transfer` React bileşenini oluşturur. + +```tsx + const accounts = [ + "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", + "0x70997970C51812dc3A010C7d01b50e0d17dc79C8", + "0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC", + "0x90F79bf6EB2c4f870365E785982E1f101E93b906", + "0x15d34AAf54267DB7D7c367839AAf71A00a2C6A65", + ] +``` + +Bunlar hesap adresleridir, `test ...` tarafından oluşturulan adreslerdir. test junk` parolası. Kendi adreslerinizi kullanmak istiyorsanız, sadece bu tanımı değiştirin. + +```tsx + const account = useAccount() + const wallet = createWalletClient({ + transport: custom(window.ethereum!) + }) +``` + +Bu [Wagmi kancaları](https://wagmi.sh/react/api/hooks) [viem](https://viem.sh/) kütüphanesine ve cüzdana erişmemizi sağlar. + +```tsx + const message = `send ${toAccount} ${ethAmount*1000} finney (milliEth) ${nonce}`.padEnd(100, " ") +``` + +Bu, boşluklarla doldurulmuş mesajdır. [`useState`](https://react.dev/reference/react/useState) değişkenlerinden biri her değiştiğinde, bileşen yeniden çizilir ve `message` güncellenir. + +```tsx + const sign = async () => { +``` + +Bu işlev, kullanıcı **İmzala** düğmesine tıkladığında çağrılır. Mesaj otomatik olarak güncellenir, ancak imza cüzdanda kullanıcı onayı gerektirir ve gerekmedikçe bunu istemeyiz. + +```tsx + const signature = await wallet.signMessage({ + account: fromAccount, + message, + }) +``` + +Cüzdandan [mesajı imzalamasını](https://viem.sh/docs/accounts/local/signMessage) isteyin. + +```tsx + const hash = hashMessage(message) +``` + +Mesaj karmasını alın. Kullanıcıya (Noir kodunun) hata ayıklaması için sağlamak yararlıdır. + +```tsx + const pubKey = await recoverPublicKey({ + hash, + signature + }) +``` + +[Açık anahtarı alın](https://viem.sh/docs/utilities/recoverPublicKey). Bu, [Noir `ecrecover`](https://github.com/colinnielsen/ecrecover-noir) işlevi için gereklidir. + +```tsx + setSignature(signature) + setHash(hash) + setPubKey(pubKey) +``` + +Durum değişkenlerini ayarlayın. Bunu yapmak, bileşeni yeniden çizer (`sign` işlevi çıktıktan sonra) ve kullanıcıya güncellenmiş değerleri gösterir. + +```tsx + let proverToml = ` +``` + +`Prover.toml` için metin. + +```tsx +message="${message}" + +pubKeyX=${hexToArray(pubKey.slice(4,4+2*32))} +pubKeyY=${hexToArray(pubKey.slice(4+2*32))} +``` + +Viem bize açık anahtarı 65 baytlık bir onaltılık dize olarak sağlar. İlk bayt `0x04`, bir sürüm işaretçisidir. Bunu, açık anahtarın `x` değeri için 32 bayt ve ardından açık anahtarın `y` değeri için 32 bayt takip eder. + +Ancak Noir, bu bilgiyi biri `x` için ve diğeri `y` için olmak üzere iki baytlık diziler olarak almayı bekler. Bunu sıfır bilgi ispatının bir parçası olarak ayrıştırmak yerine burada istemcide ayrıştırmak daha kolaydır. + +Bunun genel olarak sıfır bilgi alanında iyi bir uygulama olduğunu unutmayın. Sıfır bilgi ispatı içindeki kod pahalıdır, bu nedenle sıfır bilgi ispatı dışında yapılabilecek herhangi bir işleme sıfır bilgi ispatı _dışında_ yapılmalıdır. + +```tsx +signature=${hexToArray(signature.slice(2,-2))} +``` + +İmza ayrıca 65 baytlık bir onaltılık dize olarak da sağlanır. Ancak, son bayt yalnızca açık anahtarı kurtarmak için gereklidir. Açık anahtar zaten Noir koduna sağlanacağından, imzayı doğrulamak için ona ihtiyacımız yoktur ve Noir kodu bunu gerektirmez. + +```tsx +${accounts.map(accountInProverToml).reduce((a,b) => a+b, "")} +` +``` + +Hesapları sağlayın. + +```tsx + setProverToml(proverToml) + } + + return ( + <> +

Transfer

+``` + +Bu, bileşenin HTML (daha doğrusu, [JSX](https://react.dev/learn/writing-markup-with-jsx)) biçimidir. + +#### `server/noir/src/main.nr` {#server-noir-src-main-nr} + +[Bu dosya](https://github.com/qbzzt/250911-zk-bank/blob/01-manual-zk/server/noir/src/main.nr) gerçek sıfır bilgi kodudur. + +``` +use std::hash::pedersen_hash; +``` + +[Pedersen karması](https://rya-sge.github.io/access-denied/2024/05/07/pedersen-hash-function/), [Noir standart kütüphanesi](https://noir-lang.org/docs/noir/standard_library/cryptographic_primitives/hashes#pedersen_hash) ile sağlanır. Sıfır bilgi ispatları genellikle bu karma işlevini kullanır. [Aritmetik devrelerde](https://rareskills.io/post/arithmetic-circuit) hesaplamak, standart karma işlevlerine kıyasla çok daha kolaydır. + +``` +use keccak256::keccak256; +use dep::ecrecover; +``` + +Bu iki işlev, [`Nargo.toml`](https://github.com/qbzzt/250911-zk-bank/blob/01-manual-zk/server/noir/Nargo.toml) dosyasında tanımlanan harici kütüphanelerdir. Bunlar tam olarak adlandırıldıkları şeydir, [keccak256 karmasını](https://emn178.github.io/online-tools/keccak_256.html) hesaplayan bir işlev ve Ethereum imzalarını doğrulayan ve imzalayanın Ethereum adresini kurtaran bir işlev. + +``` +global ACCOUNT_NUMBER : u32 = 5; +``` + +Noir, [Rust](https://www.rust-lang.org/) dilinden esinlenmiştir. Değişkenler varsayılan olarak sabittir. Genel yapılandırma sabitlerini bu şekilde tanımlarız. Özellikle, `ACCOUNT_NUMBER` sakladığımız hesap sayısıdır. + +`u` adlı veri türleri, o sayıdaki bitsiz, işaretsizdir. Desteklenen tek türler `u8`, `u16`, `u32`, `u64` ve `u128`'dir. + +``` +global FLAT_ACCOUNT_FIELDS : u32 = 2; +``` + +Bu değişken, aşağıda açıklandığı gibi, hesapların Pedersen karması için kullanılır. + +``` +global MESSAGE_LENGTH : u32 = 100; +``` + +Yukarıda açıklandığı gibi, mesaj uzunluğu sabittir. Burada belirtilmiştir. + +``` +global ASCII_MESSAGE_LENGTH : [u8; 3] = [0x31, 0x30, 0x30]; +global HASH_BUFFER_SIZE : u32 = 26+3+MESSAGE_LENGTH; +``` + +[EIP-191 imzaları](https://eips.ethereum.org/EIPS/eip-191), 26 baytlık bir önek, ardından ASCII cinsinden mesaj uzunluğu ve son olarak mesajın kendisiyle birlikte bir arabellek gerektirir. + +``` +struct Account { + balance: u128, + address: Field, + nonce: u32, +} +``` + +Bir hesap hakkında sakladığımız bilgiler. [`Field`](https://noir-lang.org/docs/noir/concepts/data_types/fields), sıfır bilgi ispatını uygulayan [aritmetik devrede](https://rareskills.io/post/arithmetic-circuit) doğrudan kullanılabilen, tipik olarak 253 bite kadar olan bir sayıdır. Burada, 160 bitlik bir Ethereum adresini depolamak için `Field` kullanıyoruz. + +``` +struct TransferTxn { + from: Field, + to: Field, + amount: u128, + nonce: u32 +} +``` + +Bir transfer işlemi için sakladığımız bilgiler. + +``` +fn flatten_account(account: Account) -> [Field; FLAT_ACCOUNT_FIELDS] { +``` + +Bir işlev tanımı. Parametre `Account` bilgisidir. Sonuç, uzunluğu `FLAT_ACCOUNT_FIELDS` olan bir `Field` değişkenleri dizisidir + +``` + let flat = [ + account.address, + ((account.balance << 32) + account.nonce.into()).into(), + ]; +``` + +Dizideki ilk değer hesap adresidir. İkincisi hem bakiyeyi hem de nonce'u içerir. `.into()` çağrıları bir sayıyı olması gereken veri türüne değiştirir. `account.nonce`, bir `u32` değeridir, ancak onu bir `u128` değeri olan `account.balance « 32`'ye eklemek için bir `u128` olması gerekir. Bu ilk `.into()`'dur. İkincisi, `u128` sonucunu diziye sığacak şekilde bir `Field`'e dönüştürür. + +``` + flat +} +``` + +Noir'da, işlevler yalnızca sonda bir değer döndürebilir (erken dönüş yoktur). Dönüş değerini belirtmek için, onu işlevin kapanış parantezinden hemen önce değerlendirirsiniz. + +``` +fn flatten_accounts(accounts: [Account; ACCOUNT_NUMBER]) -> [Field; FLAT_ACCOUNT_FIELDS*ACCOUNT_NUMBER] { +``` + +Bu işlev, hesaplar dizisini bir Petersen Karması'nın girdisi olarak kullanılabilecek bir `Field` dizisine dönüştürür. + +``` + let mut flat: [Field; FLAT_ACCOUNT_FIELDS*ACCOUNT_NUMBER] = [0; FLAT_ACCOUNT_FIELDS*ACCOUNT_NUMBER]; +``` + +Bu, bir sabit _olmayan_, yani değişken bir değişkeni belirtmenin yoludur. Noir'daki değişkenlerin her zaman bir değeri olmalıdır, bu nedenle bu değişkeni tümü sıfır olarak başlatırız. + +``` + for i in 0..ACCOUNT_NUMBER { +``` + +Bu bir `for` döngüsüdür. Sınırların sabit olduğunu unutmayın. Noir döngülerinin sınırlarının derleme zamanında bilinmesi gerekir. Bunun nedeni, aritmetik devrelerin akış kontrolünü desteklememesidir. Bir `for` döngüsünü işlerken, derleyici içindeki kodu, her yineleme için bir tane olmak üzere, birden çok kez koyar. + +``` + let fields = flatten_account(accounts[i]); + for j in 0..FLAT_ACCOUNT_FIELDS { + flat[i*FLAT_ACCOUNT_FIELDS + j] = fields[j]; + } + } + + flat +} + +fn hash_accounts(accounts: [Account; ACCOUNT_NUMBER]) -> Field { + pedersen_hash(flatten_accounts(accounts)) +} +``` + +Sonunda, hesaplar dizisini karma haline getiren işleve ulaştık. + +``` +fn find_account(accounts: [Account; ACCOUNT_NUMBER], address: Field) -> u32 { + let mut account : u32 = ACCOUNT_NUMBER; + + for i in 0..ACCOUNT_NUMBER { + if accounts[i].address == address { + account = i; + } + } + +``` + +Bu işlev, belirli bir adrese sahip hesabı bulur. Bu işlev standart kodda çok verimsiz olurdu çünkü adresi bulduktan sonra bile tüm hesaplar üzerinde yinelenir. + +Ancak sıfır bilgi ispatlarında akış kontrolü yoktur. Bir koşulu kontrol etmemiz gerekirse, her seferinde kontrol etmemiz gerekir. + +`if` ifadeleriyle benzer bir şey olur. Yukarıdaki döngüdeki `if` ifadesi bu matematiksel ifadelere çevrilir. + +_koşulsonuç = hesaplar[i].adres == adres_ // eşitlerse bir, değilse sıfır + +_hesapyeni = koşulsonuç\*i + (1-koşulsonuç)\*hesapeski_ + +```rust + assert (account < ACCOUNT_NUMBER, f"{address} does not have an account"); + + account +} +``` + +[`assert`](https://noir-lang.org/docs/dev/noir/concepts/assert) işlevi, iddia yanlışsa sıfır bilgi ispatının çökmesine neden olur. Bu durumda, ilgili adrese sahip bir hesap bulamazsak. Adresi bildirmek için bir [biçim dizesi](https://noir-lang.org/docs/noir/concepts/data_types/strings#format-strings) kullanırız. + +```rust +fn apply_transfer_txn(accounts: [Account; ACCOUNT_NUMBER], txn: TransferTxn) -> [Account; ACCOUNT_NUMBER] { +``` + +Bu işlev bir transfer işlemi uygular ve yeni hesaplar dizisini döndürür. + +```rust + let from = find_account(accounts, txn.from); + let to = find_account(accounts, txn.to); + + let (txnFrom, txnAmount, txnNonce, accountNonce) = + (txn.from, txn.amount, txn.nonce, accounts[from].nonce); +``` + +Noir'da bir biçim dizesi içindeki yapı elemanlarına erişemeyiz, bu yüzden kullanılabilir bir kopya oluştururuz. + +```rust + assert (accounts[from].balance >= txn.amount, + f"{txnFrom} does not have {txnAmount} finney"); + + assert (accounts[from].nonce == txn.nonce, + f"Transaction has nonce {txnNonce}, but the account is expected to use {accountNonce}"); +``` + +Bunlar bir işlemi geçersiz kılabilen iki koşuldur. + +```rust + let mut newAccounts = accounts; + + newAccounts[from].balance -= txn.amount; + newAccounts[from].nonce += 1; + newAccounts[to].balance += txn.amount; + + newAccounts +} +``` + +Yeni hesaplar dizisini oluşturun ve sonra onu döndürün. + +```rust +fn readAddress(messageBytes: [u8; MESSAGE_LENGTH]) -> Field +``` + +Bu işlev, adresi mesajdan okur. + +```rust +{ + let mut result : Field = 0; + + for i in 7..47 { +``` + +Adres her zaman 20 bayt (yani 40 onaltılık basamak) uzunluğundadır ve 7. karakterde başlar. + +```rust + result *= 0x10; + if messageBytes[i] >= 48 & messageBytes[i] <= 57 { // 0-9 + result += (messageBytes[i]-48).into(); + } + if messageBytes[i] >= 65 & messageBytes[i] <= 70 { // A-F + result += (messageBytes[i]-65+10).into() + } + if messageBytes[i] >= 97 & messageBytes[i] <= 102 { // a-f + result += (messageBytes[i]-97+10).into() + } + } + + result +} + +fn readAmountAndNonce(messageBytes: [u8; MESSAGE_LENGTH]) -> (u128, u32) +``` + +Tutar ve nonce'u mesajdan okuyun. + +```rust +{ + let mut amount : u128 = 0; + let mut nonce: u32 = 0; + let mut stillReadingAmount: bool = true; + let mut lookingForNonce: bool = false; + let mut stillReadingNonce: bool = false; +``` + +Mesajda, adresten sonraki ilk sayı transfer edilecek finney (yani ETH'nin binde biri) miktarıdır. İkinci sayı nonce'dır. Aralarındaki metinler dikkate alınmaz. + +```rust + for i in 48..MESSAGE_LENGTH { + if messageBytes[i] >= 48 & messageBytes[i] <= 57 { // 0-9 + let digit = (messageBytes[i]-48); + + if stillReadingAmount { + amount = amount*10 + digit.into(); + } + + if lookingForNonce { // We just found it + stillReadingNonce = true; + lookingForNonce = false; + } + + if stillReadingNonce { + nonce = nonce*10 + digit.into(); + } + } else { + if stillReadingAmount { + stillReadingAmount = false; + lookingForNonce = true; + } + if stillReadingNonce { + stillReadingNonce = false; + } + } + } + + (amount, nonce) +} +``` + +Bir [demet](https://noir-lang.org/docs/noir/concepts/data_types/tuples) döndürmek, Noir'ın bir işlevden birden çok değer döndürme yoludur. + +```rust +fn readTransferTxn(message: str) -> TransferTxn +{ + let mut txn: TransferTxn = TransferTxn { from: 0, to: 0, amount:0, nonce:0 }; + let messageBytes = message.as_bytes(); + + txn.to = readAddress(messageBytes); + let (amount, nonce) = readAmountAndNonce(messageBytes); + txn.amount = amount; + txn.nonce = nonce; + + txn +} +``` + +Bu işlev, mesajı baytlara dönüştürür, ardından tutarları bir `TransferTxn`'e dönüştürür. + +```rust +// The equivalent to Viem's hashMessage +// https://viem.sh/docs/utilities/hashMessage#hashmessage +fn hashMessage(message: str) -> [u8;32] { +``` + +Hesaplar için Pedersen Karması'nı kullanabildik çünkü bunlar yalnızca sıfır bilgi ispatı içinde karmalanır. Ancak, bu kodda tarayıcı tarafından oluşturulan mesajın imzasını kontrol etmemiz gerekiyor. Bunun için, [EIP 191](https://eips.ethereum.org/EIPS/eip-191)'deki Ethereum imzalama biçimini izlememiz gerekir. Bu, standart bir önek, ASCII cinsinden mesaj uzunluğu ve mesajın kendisiyle birleşik bir arabellek oluşturmamız ve onu karmalamak için Ethereum standardı olan keccak256'yı kullanmamız gerektiği anlamına gelir. + +```rust + // ASCII prefix + let prefix_bytes = [ + 0x19, // \x19 + 0x45, // 'E' + 0x74, // 't' + 0x68, // 'h' + 0x65, // 'e' + 0x72, // 'r' + 0x65, // 'e' + 0x75, // 'u' + 0x6D, // 'm' + 0x20, // ' ' + 0x53, // 'S' + 0x69, // 'i' + 0x67, // 'g' + 0x6E, // 'n' + 0x65, // 'e' + 0x64, // 'd' + 0x20, // ' ' + 0x4D, // 'M' + 0x65, // 'e' + 0x73, // 's' + 0x73, // 's' + 0x61, // 'a' + 0x67, // 'g' + 0x65, // 'e' + 0x3A, // ':' + 0x0A // '\n' + ]; +``` + +Bir uygulamanın kullanıcıdan bir işlem olarak veya başka bir amaçla kullanılabilecek bir mesajı imzalamasını istediği durumları önlemek için, EIP 191, tüm imzalı mesajların 0x19 karakteri (geçerli bir ASCII karakteri değil) ve ardından `Ethereum Signed Message:` ve bir yeni satır ile başlamasını belirtir. + +```rust + let mut buffer: [u8; HASH_BUFFER_SIZE] = [0u8; HASH_BUFFER_SIZE]; + for i in 0..26 { + buffer[i] = prefix_bytes[i]; + } + + let messageBytes : [u8; MESSAGE_LENGTH] = message.as_bytes(); + + if MESSAGE_LENGTH <= 9 { + for i in 0..1 { + buffer[i+26] = ASCII_MESSAGE_LENGTH[i]; + } + + for i in 0..MESSAGE_LENGTH { + buffer[i+26+1] = messageBytes[i]; + } + } + + if MESSAGE_LENGTH >= 10 & MESSAGE_LENGTH <= 99 { + for i in 0..2 { + buffer[i+26] = ASCII_MESSAGE_LENGTH[i]; + } + + for i in 0..MESSAGE_LENGTH { + buffer[i+26+2] = messageBytes[i]; + } + } + + if MESSAGE_LENGTH >= 100 { + for i in 0..3 { + buffer[i+26] = ASCII_MESSAGE_LENGTH[i]; + } + + for i in 0..MESSAGE_LENGTH { + buffer[i+26+3] = messageBytes[i]; + } + } + + assert(MESSAGE_LENGTH < 1000, "Messages whose length is over three digits are not supported"); +``` + +999'a kadar olan mesaj uzunluklarını ele alın ve daha büyükse başarısız olun. Mesaj uzunluğu sabit olmasına rağmen bu kodu ekledim, çünkü değiştirmeyi kolaylaştırıyor. Bir üretim sisteminde, muhtemelen daha iyi performans için `MESSAGE_LENGTH`'in değişmediğini varsayarsınız. + +```rust + keccak256::keccak256(buffer, HASH_BUFFER_SIZE) +``` + +Ethereum standardı `keccak256` işlevini kullanın. + +```rust +fn signatureToAddressAndHash( + message: str, + pubKeyX: [u8; 32], + pubKeyY: [u8; 32], + signature: [u8; 64] + ) -> (Field, Field, Field) // address, first 16 bytes of hash, last 16 bytes of hash +{ +``` + +Bu işlev, mesaj karmasını gerektiren imzayı doğrular. Daha sonra bize imzalayan adresi ve mesaj karmasını sağlar. Mesaj karması, programın geri kalanında bayt dizisinden daha kolay kullanılabildiği için iki `Field` değeri olarak verilir. + +İki `Alan` değeri kullanmamız gerekiyor çünkü alan hesaplamaları büyük bir sayıya [modulo](https://en.wikipedia.org/wiki/Modulo) yapılarak yapılır, ancak bu sayı genellikle 256 bitten azdır (aksi takdirde bu hesaplamaları EVM'de yapmak zor olurdu). + +```rust + let hash = hashMessage(message); + + let mut (hash1, hash2) = (0,0); + + for i in 0..16 { + hash1 = hash1*256 + hash[31-i].into(); + hash2 = hash2*256 + hash[15-i].into(); + } +``` + +`hash1` ve `hash2`'yi değiştirilebilir değişkenler olarak belirtin ve karmayı bayt bayt bunlara yazın. + +```rust + ( + ecrecover::ecrecover(pubKeyX, pubKeyY, signature, hash), +``` + +Bu, [Solidity'nin `ecrecover`](https://docs.soliditylang.org/en/v0.8.30/cheatsheet.html#mathematical-and-cryptographic-functions) işlevine benzer, ancak iki önemli farkı vardır: + +- İmza geçerli değilse, çağrı bir `assert`'i başarısız kılar ve program iptal edilir. +- Açık anahtar, imzadan ve karmadan kurtarılabilse de, bu harici olarak yapılabilecek bir işlemdir ve bu nedenle sıfır bilgi ispatı içinde yapmaya değmez. Biri bizi burada aldatmaya çalışırsa, imza doğrulaması başarısız olur. + +```rust + hash1, + hash2 + ) +} + +fn main( + accounts: [Account; ACCOUNT_NUMBER], + message: str, + pubKeyX: [u8; 32], + pubKeyY: [u8; 32], + signature: [u8; 64], + ) -> pub ( + Field, // Hash of old accounts array + Field, // Hash of new accounts array + Field, // First 16 bytes of message hash + Field, // Last 16 bytes of message hash + ) +``` + +Sonunda `main` işlevine ulaştık. Hesapların karmasını eski değerden yeni değere geçerli bir şekilde değiştiren bir işlemimiz olduğunu kanıtlamamız gerekiyor. Ayrıca, gönderen kişinin işleminin işlendiğini bilmesi için bu belirli işlem karmasına sahip olduğunu kanıtlamamız gerekir. + +```rust +{ + let mut txn = readTransferTxn(message); +``` + +`txn`'in değiştirilebilir olması gerekir çünkü gönderen adresini mesajdan değil, imzadan okuyoruz. + +```rust + let (fromAddress, txnHash1, txnHash2) = signatureToAddressAndHash( + message, + pubKeyX, + pubKeyY, + signature); + + txn.from = fromAddress; + + let newAccounts = apply_transfer_txn(accounts, txn); + + ( + hash_accounts(accounts), + hash_accounts(newAccounts), + txnHash1, + txnHash2 + ) +} +``` + +### Aşama 2 - Bir sunucu ekleme {#stage-2} + +İkinci aşamada, tarayıcıdan transfer işlemlerini alan ve uygulayan bir sunucu ekliyoruz. + +Çalışırken görmek için: + +1. Çalışıyorsa Vite'i durdurun. + +2. Sunucuyu içeren dalı indirin ve gerekli tüm modüllere sahip olduğunuzdan emin olun. + + ```sh + git checkout 02-add-server + cd client + npm install + cd ../server + npm install + ``` + + Noir kodunu derlemeye gerek yok, aşama 1 için kullandığınız kodla aynı. + +3. Sunucuyu başlatın. + + ```sh + npm run start + ``` + +4. Ayrı bir komut satırı penceresinde, tarayıcı kodunu sunmak için Vite'i çalıştırın. + + ```sh + cd client + npm run dev + ``` + +5. [http://localhost:5173](http://localhost:5173) adresindeki istemci koduna göz atın + +6. Bir işlem yapmadan önce, gönderebileceğiniz tutarın yanı sıra nonce'u da bilmeniz gerekir. Bu bilgiyi almak için **Hesap verilerini güncelle**'ye tıklayın ve mesajı imzalayın. + + Burada bir ikilemimiz var. Bir yandan, yeniden kullanılabilecek bir mesajı imzalamak istemiyoruz (bir [tekrarlama saldırısı](https://en.wikipedia.org/wiki/Replay_attack)), bu yüzden ilk etapta bir nonce istiyoruz. Ancak, henüz bir nonce'umuz yok. Çözüm, yalnızca bir kez kullanılabilecek ve her iki tarafta da zaten sahip olduğumuz bir nonce seçmektir, örneğin geçerli zaman. + + Bu çözümün sorunu, zamanın mükemmel bir şekilde senkronize olmayabileceğidir. Bu yüzden, her dakika değişen bir değer imzalıyoruz. Bu, tekrarlama saldırılarına karşı güvenlik açığı penceremizin en fazla bir dakika olduğu anlamına gelir. Üretimde imzalanan isteğin TLS tarafından korunacağı ve tünelin diğer tarafının - sunucunun - zaten bakiyeyi ve nonce'u ifşa edebileceği (çalışmak için bunları bilmesi gerekir) göz önüne alındığında, bu kabul edilebilir bir risktir. + +7. Tarayıcı bakiye ve nonce'u geri aldığında, transfer formunu gösterir. Hedef adresi ve tutarı seçin ve **Transfer**'e tıklayın. Bu isteği imzalayın. + +8. Transferi görmek için ya **Hesap verilerini güncelle**'yi kullanın ya da sunucuyu çalıştırdığınız pencereye bakın. Sunucu, her değiştiğinde durumu günlüğe kaydeder. + + ``` + ori@CryptoDocGuy:~/x/250911-zk-bank/server$ npm run start + + > server@1.0.0 start + > node --experimental-json-modules index.mjs + + Listening on port 3000 + Txn send 0x90F79bf6EB2c4f870365E785982E1f101E93b906 36000 finney (milliEth) 0 işlendi + Yeni durum: + 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 64000 (1) var + 0x70997970C51812dc3A010C7d01b50e0d17dc79C8 100000 (0) var + 0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC 100000 (0) var + 0x90F79bf6EB2c4f870365E785982E1f101E93b906 136000 (0) var + 0x15d34AAf54267DB7D7c367839AAf71A00a2C6A65 100000 (0) var + Txn send 0x70997970C51812dc3A010C7d01b50e0d17dc79C8 7200 finney (milliEth) 1 işlendi + Yeni durum: + 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 56800 (2) var + 0x70997970C51812dc3A010C7d01b50e0d17dc79C8 107200 (0) var + 0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC 100000 (0) var + 0x90F79bf6EB2c4f870365E785982E1f101E93b906 136000 (0) var + 0x15d34AAf54267DB7D7c367839AAf71A00a2C6A65 100000 (0) var + Txn send 0x90F79bf6EB2c4f870365E785982E1f101E93b906 3000 finney (milliEth) 2 işlendi + Yeni durum: + 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 53800 (3) var + 0x70997970C51812dc3A010C7d01b50e0d17dc79C8 107200 (0) var + 0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC 100000 (0) var + 0x90F79bf6EB2c4f870365E785982E1f101E93b906 139000 (0) var + 0x15d34AAf54267DB7D7c367839AAf71A00a2C6A65 100000 (0) var + ``` + +#### `server/index.mjs` {#server-index-mjs-1} + +[Bu dosya](https://github.com/qbzzt/250911-zk-bank/blob/02-add-server/server/index.mjs) sunucu sürecini içerir ve [`main.nr`](https://github.com/qbzzt/250911-zk-bank/blob/02-add-server/server/noir/src/main.nr) adresindeki Noir kodu ile etkileşime girer. İşte ilginç kısımların açıklaması. + +```js +import { Noir } from '@noir-lang/noir_js' +``` + +[noir.js](https://www.npmjs.com/package/@noir-lang/noir_js) kütüphanesi JavaScript kodu ile Noir kodu arasında arayüz oluşturur. + +```js +const circuit = JSON.parse(await fs.readFile("./noir/target/zkBank.json")) +const noir = new Noir(circuit) +``` + +Aritmetik devreyi - önceki aşamada oluşturduğumuz derlenmiş Noir programını - yükleyin ve yürütmeye hazırlanın. + +```js +// We only provide account information in return to a signed request +const accountInformation = async signature => { + const fromAddress = await recoverAddress({ + hash: hashMessage("Get account data " + Math.floor((new Date().getTime())/60000)), + signature + }) +``` + +Hesap bilgilerini sağlamak için sadece imzaya ihtiyacımız var. Bunun nedeni, mesajın ne olacağını ve dolayısıyla mesaj karmasını zaten biliyor olmamızdır. + +```js +const processMessage = async (message, signature) => { +``` + +Bir mesajı işleyin ve kodladığı işlemi yürütün. + +```js + // Get the public key + const pubKey = await recoverPublicKey({ + hash, + signature + }) +``` + +Artık sunucuda JavaScript çalıştırdığımıza göre, açık anahtarı istemci yerine orada alabiliriz. + +```js + let noirResult + try { + noirResult = await noir.execute({ + message, + signature: signature.slice(2,-2).match(/.{2}/g).map(x => `0x${x}`), + pubKeyX, + pubKeyY, + accounts: Accounts + }) +``` + +`noir.execute` Noir programını çalıştırır. Parametreler [`Prover.toml`](https://github.com/qbzzt/250911-zk-bank/blob/01-manual-zk/server/noir/Prover.toml) dosyasında sağlananlara eşdeğerdir. Uzun değerlerin, Viem'in yaptığı gibi tek bir onaltılık değer (`0x60A7`) olarak değil, onaltılık dizelerden oluşan bir dizi (`["0x60", "0xA7"]`) olarak sağlandığını unutmayın. + +```js + } catch (err) { + console.log(`Noir error: ${err}`) + throw Error("Invalid transaction, not processed") + } +``` + +Bir hata varsa, onu yakalayın ve ardından basitleştirilmiş bir sürümünü istemciye iletin. + +```js + Accounts[fromAccountNumber].nonce++ + Accounts[fromAccountNumber].balance -= amount + Accounts[toAccountNumber].balance += amount +``` + +İşlemi uygulayın. Bunu zaten Noir kodunda yaptık, ancak sonucu oradan çıkarmak yerine burada tekrar yapmak daha kolay. + +```js +let Accounts = [ + { + address: "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", + balance: 5000, + nonce: 0, + }, +``` + +Başlangıçtaki `Hesaplar` yapısı. + +### Aşama 3 - Ethereum akıllı sözleşmeleri {#stage-3} + +1. Sunucu ve istemci süreçlerini durdurun. + +2. Akıllı sözleşmeleri içeren dalı indirin ve gerekli tüm modüllere sahip olduğunuzdan emin olun. + + ```sh + git checkout 03-smart-contracts + cd client + npm install + cd ../server + npm install + ``` + +3. `anvil`'i ayrı bir komut satırı penceresinde çalıştırın. + +4. Doğrulama anahtarını ve solidity doğrulayıcısını oluşturun, ardından doğrulayıcı kodunu Solidity projesine kopyalayın. + + ```sh + cd noir + bb write_vk -b ./target/zkBank.json -o ./target --oracle_hash keccak + bb write_solidity_verifier -k ./target/vk -o ./target/Verifier.sol + cp target/Verifier.sol ../../smart-contracts/src + ``` + +5. Akıllı sözleşmelere gidin ve `anvil` blokzincirini kullanmak için ortam değişkenlerini ayarlayın. + + ```sh + cd ../../smart-contracts + export ETH_RPC_URL=http://localhost:8545 + ETH_PRIVATE_KEY=ac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 + ``` + +6. `Verifier.sol`'u dağıtın ve adresi bir ortam değişkeninde saklayın. + + ```sh + VERIFIER_ADDRESS=`forge create src/Verifier.sol:HonkVerifier --private-key $ETH_PRIVATE_KEY --optimize --broadcast | awk '/Deployed to:/ {print $3}'` + echo $VERIFIER_ADDRESS + ``` + +7. `ZkBank` sözleşmesini dağıtın. + + ```sh + ZKBANK_ADDRESS=`forge create ZkBank --private-key $ETH_PRIVATE_KEY --broadcast --constructor-args $VERIFIER_ADDRESS 0x199aa62af8c1d562a6ec96e66347bf3240ab2afb5d022c895e6bf6a5e617167b | awk '/Deployed to:/ {print $3}'` + echo $ZKBANK_ADDRESS + ``` + + `0x199..67b` değeri, `Hesaplar`ın başlangıç durumunun Pederson karmasıdır. Bu başlangıç durumunu `server/index.mjs`'de değiştirirseniz, sıfır bilgi ispatı tarafından bildirilen başlangıç karmasını görmek için bir işlem çalıştırabilirsiniz. + +8. Sunucuyu çalıştırın. + + ```sh + cd ../server + npm run start + ``` + +9. İstemciyi farklı bir komut satırı penceresinde çalıştırın. + + ```sh + cd client + npm run dev + ``` + +10. Bazı işlemler çalıştırın. + +11. Durumun zincir üzerinde değiştiğini doğrulamak için sunucu sürecini yeniden başlatın. `ZkBank`'in artık işlemleri kabul etmediğini görün, çünkü işlemlerdeki orijinal karma değeri, zincir üzerinde saklanan karma değerinden farklıdır. + + Bu beklenen hata türüdür. + + ``` + ori@CryptoDocGuy:~/x/250911-zk-bank/server$ npm run start + + > server@1.0.0 start + > node --experimental-json-modules index.mjs + + Listening on port 3000 + Doğrulama hatası: ContractFunctionExecutionError: The contract function "processTransaction" reverted with the following reason: + Yanlış eski durum karması + + Contract Call: + adres: 0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512 + işlev: processTransaction(bytes _proof, bytes32[] _publicInputs) + args: (0x0000000000000000000000000000000000000000000000042ab5d6d1986846cf00000000000000000000000000000000000000000000000b75c020998797da7800000000000000000000000000000000000000000000000 + ``` + +#### `server/index.mjs` {#server-index-mjs-2} + +Bu dosyadaki değişiklikler çoğunlukla gerçek kanıtı oluşturmak ve zincir üstünde göndermekle ilgilidir. + +```js +import { exec } from 'child_process' +import util from 'util' + +const execPromise = util.promisify(exec) +``` + +Zincir üstünde gönderilecek gerçek kanıtı oluşturmak için [Barretenberg paketini](https://github.com/AztecProtocol/aztec-packages/tree/next/barretenberg) kullanmamız gerekiyor. Bu paketi komut satırı arayüzünü (`bb`) çalıştırarak veya [JavaScript kütüphanesi olan `bb.js`](https://www.npmjs.com/package/@aztec/bb.js) kullanarak kullanabiliriz. JavaScript kütüphanesi, kodu yerel olarak çalıştırmaktan çok daha yavaştır, bu yüzden burada komut satırını kullanmak için [`exec`](https://nodejs.org/api/child_process.html#child_processexeccommand-options-callback) kullanıyoruz. + +`bb.js` kullanmaya karar verirseniz, kullandığınız Noir sürümüyle uyumlu bir sürüm kullanmanız gerektiğini unutmayın. Bu yazının yazıldığı sırada, mevcut Noir sürümü (1.0.0-beta.11) `bb.js` sürüm 0.87'yi kullanıyor. + +```js +const zkBankAddress = process.env.ZKBANK_ADDRESS || "0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512" +``` + +Buradaki adres, temiz bir `anvil` ile başlayıp yukarıdaki yönergeleri izlediğinizde elde ettiğiniz adrestir. + +```js +const walletClient = createWalletClient({ + chain: anvil, + transport: http(), + account: privateKeyToAccount("0x2a871d0798f97d79848a013d4936a73bf4cc922c825d33c1cf7073dff6d409c6") +}) +``` + +Bu özel anahtar, `anvil`'deki varsayılan önceden finanse edilmiş hesaplardan biridir. + +```js +const generateProof = async (witness, fileID) => { +``` + +`bb` yürütülebilir dosyasını kullanarak bir kanıt oluşturun. + +```js + const fname = `witness-${fileID}.gz` + await fs.writeFile(fname, witness) +``` + +Tanığı bir dosyaya yazın. + +```js + await execPromise(`bb prove -b ./noir/target/zkBank.json -w ${fname} -o ${fileID} --oracle_hash keccak --output_format fields`) +``` + +Aslında kanıtı yaratın. Bu adım aynı zamanda genel değişkenleri içeren bir dosya oluşturur, ancak buna ihtiyacımız yok. Bu değişkenleri zaten `noir.execute`'den aldık. + +```js + const proof = "0x" + JSON.parse(await fs.readFile(`./${fileID}/proof_fields.json`)).reduce((a,b) => a+b, "").replace(/0x/g, "") +``` + +Kanıt, her biri onaltılık bir değer olarak temsil edilen `Alan` değerlerinden oluşan bir JSON dizisidir. Ancak, bunu işlemde tek bir `bayt` değeri olarak göndermemiz gerekiyor, bu da Viem'in büyük bir onaltılık dize ile temsil ettiği bir şey. Burada, tüm değerleri birleştirerek, tüm `0x`'leri kaldırarak ve ardından sonunda bir tane ekleyerek biçimi değiştiriyoruz. + +```js + await execPromise(`rm -r ${fname} ${fileID}`) + + return proof +} +``` + +Temizleyin ve kanıtı geri döndürün. + +```js +const processMessage = async (message, signature) => { + . + . + . + + const publicFields = noirResult.returnValue.map(x=>'0x' + x.slice(2).padStart(64, "0")) +``` + +Genel alanların 32 baytlık değerlerden oluşan bir dizi olması gerekir. Ancak, işlem karmasını iki `Alan` değeri arasında bölmemiz gerektiği için, 16 baytlık bir değer olarak görünür. Burada Viem'in aslında 32 bayt olduğunu anlaması için sıfırlar ekliyoruz. + +```js + const proof = await generateProof(noirResult.witness, `${fromAddress}-${nonce}`) +``` + +Her adres her nonce'u yalnızca bir kez kullanır, böylece `fromAddress` ve `nonce` kombinasyonunu tanık dosyası ve çıktı dizini için benzersiz bir tanımlayıcı olarak kullanabiliriz. + +```js + try { + await zkBank.write.processTransaction([ + proof, publicFields]) + } catch (err) { + console.log(`Verification error: ${err}`) + throw Error("Can't verify the transaction onchain") + } + . + . + . +} +``` + +İşlemi zincire gönderin. + +#### `smart-contracts/src/ZkBank.sol` {#smart-contracts-src-zkbank-sol} + +Bu, işlemi alan zincir üstü koddur. + +```solidity +// SPDX-License-Identifier: MIT + +pragma solidity >=0.8.21; + +import {HonkVerifier} from "./Verifier.sol"; + +contract ZkBank { + HonkVerifier immutable myVerifier; + bytes32 currentStateHash; + + constructor(address _verifierAddress, bytes32 _initialStateHash) { + currentStateHash = _initialStateHash; + myVerifier = HonkVerifier(_verifierAddress); + } +``` + +Zincir üstü kodun iki değişkeni takip etmesi gerekir: doğrulayıcı (`nargo` tarafından oluşturulan ayrı bir sözleşme) ve mevcut durum karması. + +```solidity + event TransactionProcessed( + bytes32 indexed transactionHash, + bytes32 oldStateHash, + bytes32 newStateHash + ); +``` + +Durum her değiştiğinde, bir `TransactionProcessed` olayı yayınlarız. + +```solidity + function processTransaction( + bytes calldata _proof, + bytes32[] calldata _publicFields + ) public { +``` + +Bu işlev işlemleri işler. Kanıtı (`bayt` olarak) ve genel girdileri (`bayt32` dizisi olarak), doğrulayıcının gerektirdiği biçimde alır (zincir üstü işlemeyi ve dolayısıyla gaz maliyetlerini en aza indirmek için). + +```solidity + require(_publicInputs[0] == currentStateHash, + "Wrong old state hash"); +``` + +Sıfır bilgi ispatının, işlemin mevcut karmamızdan yeni bir karma değerine değişmesi olması gerekir. + +```solidity + myVerifier.verify(_proof, _publicFields); +``` + +Sıfır bilgi ispatını doğrulamak için doğrulayıcı sözleşmesini çağırın. Bu adım, sıfır bilgi ispatı yanlışsa işlemi geri alır. + +```solidity + currentStateHash = _publicFields[1]; + + emit TransactionProcessed( + _publicFields[2]<<128 | _publicFields[3], + _publicFields[0], + _publicFields[1] + ); + } +} +``` + +Her şey yolundaysa, durum karmasını yeni değere güncelleyin ve bir `TransactionProcessed` olayı yayınlayın. + +## Merkezi bileşen tarafından yapılan suistimaller {#abuses} + +Bilgi güvenliği üç özellikten oluşur: + +- _Gizlilik_, kullanıcılar okumaya yetkili olmadıkları bilgileri okuyamazlar. +- _Bütünlük_, bilgi yalnızca yetkili kullanıcılar tarafından yetkili bir şekilde değiştirilebilir. +- _Kullanılabilirlik_, yetkili kullanıcılar sistemi kullanabilir. + +Bu sistemde bütünlük, sıfır bilgi ispatları aracılığıyla sağlanır. Kullanılabilirliği garanti etmek çok daha zordur ve gizlilik imkansızdır, çünkü bankanın her hesabın bakiyesini ve tüm işlemleri bilmesi gerekir. Bilgi sahibi bir varlığın bu bilgiyi paylaşmasını engellemenin bir yolu yoktur. + +[Gizli adresler](https://vitalik.eth.limo/general/2023/01/20/stealth.html) kullanarak gerçekten gizli bir banka oluşturmak mümkün olabilir, ancak bu bu makalenin kapsamı dışındadır. + +### Yanlış bilgi {#false-info} + +Sunucunun bütünlüğü ihlal etmesinin bir yolu, [veri istendiğinde](https://github.com/qbzzt/250911-zk-bank/blob/03-smart-contracts/server/index.mjs#L278-L291) yanlış bilgi sağlamaktır. + +Bunu çözmek için, hesapları özel bir girdi olarak ve bilgi istenen adresi genel bir girdi olarak alan ikinci bir Noir programı yazabiliriz. Çıktı, o adresin bakiyesi ve nonce'u ile hesapların karmasıdır. + +Elbette, bu kanıt zincir üstünde doğrulanamaz, çünkü nonce'ları ve bakiyeleri zincir üstünde yayınlamak istemiyoruz. Ancak, tarayıcıda çalışan istemci kodu tarafından doğrulanabilir. + +### Zorunlu işlemler {#forced-txns} + +L2'lerde kullanılabilirliği sağlamak ve sansürü önlemek için kullanılan normal mekanizma [zorunlu işlemlerdir](https://docs.optimism.io/stack/transactions/forced-transaction). Ancak zorunlu işlemler sıfır bilgi ispatlarıyla birleştirilmez. Sunucu, işlemleri doğrulayabilen tek varlıktır. + +`smart-contracts/src/ZkBank.sol` dosyasını, zorunlu işlemleri kabul edecek ve sunucunun işlenene kadar durumu değiştirmesini önleyecek şekilde değiştirebiliriz. Ancak bu, bizi basit bir hizmet reddi saldırısına açık hale getirir. Zorunlu bir işlem geçersizse ve bu nedenle işlenmesi imkansızsa ne olur? + +Çözüm, zorunlu bir işlemin geçersiz olduğuna dair bir sıfır bilgi ispatına sahip olmaktır. Bu, sunucuya üç seçenek sunar: + +- Zorunlu işlemi işleyin, işlendiğine dair bir sıfır bilgi ispatı ve yeni durum karmasını sağlayın. +- Zorunlu işlemi reddedin ve sözleşmeye işlemin geçersiz olduğuna (bilinmeyen adres, kötü nonce veya yetersiz bakiye) dair bir sıfır bilgi ispatı sağlayın. +- Zorunlu işlemi yoksayın. Sunucuyu işlemi gerçekten işlemeye zorlamanın bir yolu yoktur, ancak bu tüm sistemin kullanılamaz olduğu anlamına gelir. + +#### Kullanılabilirlik tahvilleri {#avail-bonds} + +Gerçek hayattaki bir uygulamada, muhtemelen sunucuyu çalışır durumda tutmak için bir tür kar amacı güdüsü olurdu. Sunucunun, zorunlu bir işlemin belirli bir süre içinde işlenmemesi durumunda herkesin yakabileceği bir kullanılabilirlik tahvili göndermesini sağlayarak bu teşviki güçlendirebiliriz. + +### Kötü Noir kodu {#bad-noir-code} + +Normalde, insanların bir akıllı sözleşmeye güvenmesini sağlamak için kaynak kodunu bir [blok gezginine](https://eth.blockscout.com/address/0x7D16d2c4e96BCFC8f815E15b771aC847EcbDB48b?tab=contract) yükleriz. Ancak, sıfır bilgi ispatları durumunda bu yetersizdir. + +`Verifier.sol`, Noir programının bir işlevi olan doğrulama anahtarını içerir. Ancak bu anahtar bize Noir programının ne olduğunu söylemez. Gerçekten güvenilir bir çözüme sahip olmak için, Noir programını (ve onu oluşturan sürümü) yüklemeniz gerekir. Aksi takdirde, sıfır bilgi ispatları farklı bir programı, arka kapısı olan bir programı yansıtabilir. + +Blok gezginleri Noir programlarını yüklememize ve doğrulamamıza izin vermeye başlayana kadar, bunu kendiniz yapmalısınız (tercihen [IPFS](/developers/tutorials/ipfs-decentralized-ui/)'e). Daha sonra gelişmiş kullanıcılar kaynak kodunu indirebilecek, kendileri derleyebilecek, `Verifier.sol` dosyasını oluşturabilecek ve zincir üzerindekiyle aynı olduğunu doğrulayabilecekler. + +## Sonuç {#conclusion} + +Plazma tipi uygulamalar, bilgi depolama olarak merkezi bir bileşen gerektirir. Bu, potansiyel güvenlik açıklarını ortaya çıkarır, ancak karşılığında blokzincirinin kendisinde bulunmayan şekillerde gizliliği korumamıza olanak tanır. Sıfır bilgi ispatlarıyla bütünlüğü sağlayabilir ve merkezi bileşeni çalıştıran kişinin kullanılabilirliği sürdürmesini ekonomik olarak avantajlı hale getirebiliriz. + +[Çalışmalarımdan daha fazlası için buraya bakın](https://cryptodocguy.pro/). + +## Teşekkürler {#acknowledgements} + +- Josh Crites bu makalenin bir taslağını okudu ve bana çetrefilli bir Noir konusunda yardım etti. + +Kalan hatalar benim sorumluluğumdadır. diff --git a/public/content/translations/tr/developers/tutorials/calling-a-smart-contract-from-javascript/index.md b/public/content/translations/tr/developers/tutorials/calling-a-smart-contract-from-javascript/index.md index 09d8b7ef258..258e781ff17 100644 --- a/public/content/translations/tr/developers/tutorials/calling-a-smart-contract-from-javascript/index.md +++ b/public/content/translations/tr/developers/tutorials/calling-a-smart-contract-from-javascript/index.md @@ -1,12 +1,8 @@ --- -title: JavaScript'ten bir akıllı sözleşme çağırmak -description: Dai token'ı örneğini kullanarak JavaScript'ten bir akıllı sözleşme fonksiyonu nasıl çağrılır +title: "JavaScript'ten bir akıllı sözleşme çağırmak" +description: "Dai jetonu örneğini kullanarak JavaScript'ten bir akıllı sözleşme işlevi nasıl çağrılır" author: jdourlens -tags: - - "İşlemler" - - "ön yüz" - - "JavaScript" - - "web3.js" +tags: [ "işlemler", "ön uç", "JavaScript", "web3.js" ] skill: beginner lang: tr published: 2020-04-19 @@ -15,15 +11,15 @@ sourceUrl: https://ethereumdev.io/calling-a-smart-contract-from-javascript/ address: "0x19dE91Af973F404EDF5B4c093983a7c6E3EC8ccE" --- -Bu öğreticide, JavaScript'ten bir [akıllı sözleşme](/developers/docs/smart-contracts/) fonksiyonunun nasıl çağrılacağını göreceğiz. İlk önce bir akıllı sözleşmenin durumunu okuyoruz (örneğin bir ERC20 sahibinin bakiyesi), ardından bir token transferi yaparak blok zincirinin durumunu değiştireceğiz. [Blok zinciri ile etkileşim kurmak için bir JavaScript ortamı kurmaya](/developers/tutorials/set-up-web3js-to-use-ethereum-in-javascript/) önceden aşina olmalısınız. +Bu öğreticide, JavaScript'ten bir [akıllı sözleşme](/developers/docs/smart-contracts/) işlevinin nasıl çağrılacağını göreceğiz. İlk olarak bir akıllı sözleşmenin durumunu okuyacağız (örneğin bir ERC20 sahibinin bakiyesi), ardından bir jeton transferi yaparak blokzincirin durumunu değiştireceğiz. [Blokzincir ile etkileşim kurmak için bir JS ortamı kurma](/developers/tutorials/set-up-web3js-to-use-ethereum-in-javascript/) konusuna zaten aşina olmalısınız. -Bu örnekler için DAI token'ını ele alacağız, test amacıyla ganache-cli kullanarak blok zincirini çatallayacağız ve zaten çok fazla DAI içeren bir adresin kilidini açacağız: +Bu örnek için DAI jetonu ile oynayacağız, test amacıyla ganache-cli kullanarak blokzinciri çatallayacağız ve halihazırda çok fazla DAI'si olan bir adresin kilidini açacağız: ```bash -ganache-cli -f https://mainnet.infura.io/v3/[YOUR INFURA KEY] -d -i 66 1 --unlock 0x4d10ae710Bd8D1C31bd7465c8CBC3add6F279E81 +ganache-cli -f https://mainnet.infura.io/v3/[INFURA ANAHTARINIZ] -d -i 66 1 --unlock 0x4d10ae710Bd8D1C31bd7465c8CBC3add6F279E81 ``` -Akıllı bir sözleşmeyle etkileşim kurmak için bir adrese ve ABI'ye ihtiyacımız olacak: +Bir akıllı sözleşme ile etkileşim kurmak için adresine ve ABI'sine ihtiyacımız olacak: ```js const ERC20TransferABI = [ @@ -74,9 +70,9 @@ const ERC20TransferABI = [ const DAI_ADDRESS = "0x6b175474e89094c44da98b954eedeac495271d0f" ``` -Bu proje için, sadece `balanceOf` ve `transfer` fonksiyonunu korumak için tam ERC20 ABI'den bazı şeyleri çıkardık, ancak [eksiksiz ERC20 ABI'ye buradan](https://ethereumdev.io/abi-for-erc20-contract-on-ethereum/) ulaşabilirsiniz. +Bu proje için, yalnızca `balanceOf` ve `transfer` işlevini tutmak üzere ERC20 ABI'sinin tamamını çıkardık, ancak [tam ERC20 ABI'sini burada](https://ethereumdev.io/abi-for-erc20-contract-on-ethereum/) bulabilirsiniz. -Daha sonra akıllı sözleşmemizi somutlaştırmamız gerekiyor: +Daha sonra akıllı sözleşmemizin bir örneğini oluşturmamız gerekiyor: ```js const web3 = new Web3("http://localhost:8545") @@ -84,7 +80,7 @@ const web3 = new Web3("http://localhost:8545") const daiToken = new web3.eth.Contract(ERC20TransferABI, DAI_ADDRESS) ``` -Ayrıca iki adres kuracağız: +Ayrıca iki adres ayarlayacağız: - transferi alacak olan ve - zaten kilidini açtığımız, gönderecek olan: @@ -94,42 +90,42 @@ const senderAddress = "0x4d10ae710Bd8D1C31bd7465c8CBC3add6F279E81" const receiverAddress = "0x19dE91Af973F404EDF5B4c093983a7c6E3EC8ccE" ``` -Sonraki bölümde, her iki adresin de tuttuğu mevcut token miktarını almak için `balanceOf` fonksiyonunu çağıracağız. +Sonraki bölümde, her iki adresin de sahip olduğu mevcut jeton miktarını almak için `balanceOf` işlevini çağıracağız. -## Call: Bir akıllı sözleşmeden değer okuma {#call-reading-value-from-a-smart-contract} +## Çağrı: Akıllı sözleşmeden değer okuma {#call-reading-value-from-a-smart-contract} -İlk satır bir "sabit" yöntemi getirecek ve akıllı sözleşme yöntemini herhangi bir işlem göndermeden EVM'de çalıştıracaktır. Bunun için bir adresin ERC20 bakiyesini okuyacağız. [ERC20 token'ları hakkındaki makalemizi okuyun](/developers/tutorials/understand-the-erc-20-token-smart-contract/). +İlk örnek, "sabit" bir metodu çağıracak ve akıllı sözleşme metodunu herhangi bir işlem göndermeden EVM'de yürütecektir. Bunun için bir adresin ERC20 bakiyesini okuyacağız. [ERC20 jetonları hakkındaki makalemizi okuyun](/developers/tutorials/understand-the-erc-20-token-smart-contract/). -ABI'yi sağladığınız somutlaştırılmış akıllı sözleşme yöntemlerine aşağıdaki şekilde erişebilirsiniz: `yourContract.methods.methodname`. `call` fonksiyonunu kullanarak fonksiyonu yürütmenin sonucunu alacaksınız. +ABI'sini sağladığınız, örneği oluşturulmuş bir akıllı sözleşmenin metotlarına şu şekilde erişebilirsiniz: `yourContract.methods.methodname`. `call` işlevini kullanarak, işlevi yürütmenin sonucunu alırsınız. ```js daiToken.methods.balanceOf(senderAddress).call(function (err, res) { if (err) { - console.log("An error occurred", err) + console.log("Bir hata oluştu", err) return } - console.log("The balance is: ", res) + console.log("Bakiye: ", res) }) ``` -DAI ERC20'nin 18 ondalık basamağa sahip olduğunu unutmayın; bu, doğru miktarı elde etmek için 18 sıfırı kaldırmanız gerektiği anlamına gelir. uint256, JavaScript büyük sayısal değerleri işlemediğinden dizgi olarak döndürülür. [JS'de büyük sayılarla nasıl başa çıkacağınızdan emin değilseniz, bignumber.js hakkındaki öğreticimize bakın](https://ethereumdev.io/how-to-deal-with-big-numbers-in-javascript/). +DAI ERC20'nin 18 ondalık basamağa sahip olduğunu unutmayın; bu, doğru miktarı elde etmek için 18 sıfırı kaldırmanız gerektiği anlamına gelir. JavaScript büyük sayısal değerleri işlemediğinden `uint256` değerleri dizge olarak döndürülür. JS'de büyük sayılarla nasıl başa çıkacağınızdan emin değilseniz, [bignumber.js hakkındaki öğreticimize göz atın](https://ethereumdev.io/how-to-deal-with-big-numbers-in-javascript/). -## Send: Akıllı sözleşme fonksiyonuna bir işlem gönderme {#send-sending-a-transaction-to-a-smart-contract-function} +## Gönderme: Bir akıllı sözleşme işlevine işlem gönderme {#send-sending-a-transaction-to-a-smart-contract-function} -İkinci örnek için, ikinci adresimize 10 DAI göndermek için DAI akıllı sözleşmesinin transfer fonksiyonunu çağıracağız. Transfer fonksiyonu 2 parametreyi kabul eder: alıcı adres ve transfer edilcek token miktarı: +İkinci örnek için, ikinci adresimize 10 DAI göndermek üzere DAI akıllı sözleşmesinin transfer işlevini çağıracağız. Transfer işlevi iki parametre kabul eder: alıcı adresi ve transfer edilecek jeton miktarı: ```js daiToken.methods .transfer(receiverAddress, "100000000000000000000") .send({ from: senderAddress }, function (err, res) { if (err) { - console.log("An error occurred", err) + console.log("Bir hata oluştu", err) return } - console.log("Hash of the transaction: " + res) + console.log("İşlemin karması: " + res) }) ``` -Çağırma fonksiyonu, blok zincirine kazılacak işlemin hash değerini döndürür. Ethereum'da işlem hash değerleri tahmin edilebilirdir: Bu sayede işlem yapılmadan önce işlemin hash değerini alabiliriz ([hash değerinin nasıl hesaplandığını buradan öğrenebilirsiniz](https://ethereum.stackexchange.com/questions/45648/how-to-calculate-the-assigned-txhash-of-a-transaction)). +Çağrı işlevi, blokzincire kazılacak olan işlemin karmasını döndürür. Ethereum'da, işlem karmaları tahmin edilebilirdir - bu sayede, bir işlemin karmasını daha yürütülmeden alabiliriz ([karmaların nasıl hesaplandığını buradan öğrenin](https://ethereum.stackexchange.com/questions/45648/how-to-calculate-the-assigned-txhash-of-a-transaction)). -Fonksiyon yalnızca işlemi blok zincirine gönderdiğinden, ne zaman çıkarıldığını ve blok zincirine dahil edildiğini öğrenene kadar sonucu göremeyiz. Bir sonraki öğreticide, [bir işlemin hash değerini öğrenerek işlemin blok zincirinde yürütülmesinin nasıl bekleneceğini](https://ethereumdev.io/waiting-for-a-transaction-to-be-mined-on-ethereum-with-js/) öğreneceğiz. +İşlev, işlemi yalnızca blokzincire gönderdiğinden, ne zaman kazıldığını ve blokzincire dahil edildiğini bilene kadar sonucu göremeyiz. Sonraki öğreticide, [karmasını bilerek bir işlemin blokzincirde yürütülmesini nasıl bekleyeceğimizi](https://ethereumdev.io/waiting-for-a-transaction-to-be-mined-on-ethereum-with-js/) öğreneceğiz. diff --git a/public/content/translations/tr/developers/tutorials/creating-a-wagmi-ui-for-your-contract/index.md b/public/content/translations/tr/developers/tutorials/creating-a-wagmi-ui-for-your-contract/index.md new file mode 100644 index 00000000000..844476928c2 --- /dev/null +++ b/public/content/translations/tr/developers/tutorials/creating-a-wagmi-ui-for-your-contract/index.md @@ -0,0 +1,585 @@ +--- +title: "Sözleşmeniz için bir kullanıcı arayüzü oluşturma" +description: "TypeScript, React, Vite ve Wagmi gibi modern bileşenleri kullanarak modern ama minimal bir kullanıcı arayüzünü inceleyeceğiz ve bir cüzdanı kullanıcı arayüzüne bağlamayı, bilgi okumak için bir akıllı sözleşmeyi çağırmayı, bir akıllı sözleşmeye işlem göndermeyi ve değişiklikleri belirlemek için bir akıllı sözleşmedeki olayları izlemeyi öğreneceğiz." +author: Ori Pomerantz +tags: [ "typescript", "react", "vite", "wagmi", "ön uç" ] +skill: beginner +published: 2023-11-01 +lang: tr +sidebarDepth: 3 +--- + +Ethereum ekosisteminde ihtiyaç duyduğumuz bir özelliği buldunuz. Bunu uygulamak için akıllı sözleşmeleri ve hatta zincir dışında çalışan bazı ilgili kodları yazdınız. Bu harika! Maalesef, bir kullanıcı arayüzü olmadan herhangi bir kullanıcınız olmayacak ve son web sitesi yazdığınızda insanlar çevirmeli modem kullanıyordu ve JavaScript yeniydi. + +Bu makale sizin için. Programlama bildiğinizi, hatta belki biraz JavaScript ve HTML bildiğinizi, ancak kullanıcı arayüzü becerilerinizin körelmiş ve güncelliğini yitirmiş olduğunu varsayıyorum. Bugünlerde işlerin nasıl yapıldığını görmeniz için birlikte basit ve modern bir uygulamayı inceleyeceğiz. + +## Bu neden önemli {#why-important} + +Teoride, sözleşmelerinizle etkileşim kurmaları için insanların [Etherscan](https://holesky.etherscan.io/address/0x432d810484add7454ddb3b5311f0ac2e95cecea8#writeContract) veya [Blockscout](https://eth-holesky.blockscout.com/address/0x432d810484AdD7454ddb3b5311f0Ac2E95CeceA8?tab=write_contract) kullanmasını sağlayabilirsiniz. Bu, deneyimli Ethereum'cular için harika olacaktır. Ancak biz [bir milyar insana daha](https://blog.ethereum.org/2021/05/07/ethereum-for-the-next-billion) hizmet vermeye çalışıyoruz. Bu, harika bir kullanıcı deneyimi olmadan gerçekleşmez ve kullanıcı dostu bir arayüz bunun büyük bir parçasıdır. + +## Greeter uygulaması {#greeter-app} + +Modern bir kullanıcı arayüzünün nasıl çalıştığının arkasında pek çok teori ve [bunu açıklayan](https://wagmi.sh/core/getting-started) [birçok iyi site](https://react.dev/learn/thinking-in-react) var. Bu sitelerin yaptığı güzel işleri tekrarlamak yerine, yaparak öğrenmeyi tercih ettiğinizi varsayacağım ve oynayabileceğiniz bir uygulamayla başlayacağım. İşleri halletmek için yine de teoriye ihtiyacınız var ve buna da geleceğiz - sadece kaynak dosyadan kaynak dosyaya gideceğiz ve karşılaştıkça konuları tartışacağız. + +### Kurulum {#installation} + +1. Gerekirse, [Holesky blokzincirini](https://chainlist.org/?search=holesky&testnets=true) cüzdanınıza ekleyin ve [test ETH'si alın](https://www.holeskyfaucet.io/). + +2. Github deposunu klonlayın. + + ```sh + git clone https://github.com/qbzzt/20230801-modern-ui.git + ``` + +3. Gerekli paketleri yükleyin. + + ```sh + cd 20230801-modern-ui + pnpm install + ``` + +4. Uygulamayı başlatın. + + ```sh + pnpm dev + ``` + +5. Uygulamanın gösterdiği URL'ye gidin. Çoğu durumda bu [http://localhost:5173/](http://localhost:5173/) adresidir. + +6. Sözleşme kaynak kodunu, Hardhat'in Greeter'ının biraz değiştirilmiş bir sürümünü [bir blokzincir gezgininde](https://eth-holesky.blockscout.com/address/0x432d810484AdD7454ddb3b5311f0Ac2E95CeceA8?tab=contract) görebilirsiniz. + +### Dosya incelemesi {#file-walk-through} + +#### `index.html` {#index-html} + +Bu dosya, betik dosyasını içeri aktaran bu satır dışında standart bir HTML basmakalıp kodudur. + +```html + +``` + +#### `src/main.tsx` {#main-tsx} + +Dosya uzantısı bize bu dosyanın, [tür denetimini](https://en.wikipedia.org/wiki/Type_system#Type_checking) destekleyen bir JavaScript uzantısı olan [TypeScript](https://www.typescriptlang.org/) ile yazılmış bir [React bileşeni](https://www.w3schools.com/react/react_components.asp) olduğunu söyler. TypeScript, JavaScript'e derlenir, bu nedenle istemci tarafında yürütme için kullanabiliriz. + +```tsx +import '@rainbow-me/rainbowkit/styles.css' +import { RainbowKitProvider } from '@rainbow-me/rainbowkit' +import * as React from 'react' +import * as ReactDOM from 'react-dom/client' +import { WagmiConfig } from 'wagmi' +import { chains, config } from './wagmi' +``` + +İhtiyacımız olan kütüphane kodunu içe aktarın. + +```tsx +import { App } from './App' +``` + +Uygulamayı uygulayan React bileşenini içe aktarın (aşağıya bakın). + +```tsx +ReactDOM.createRoot(document.getElementById('root')!).render( +``` + +Kök React bileşenini oluşturun. `render` parametresi, hem HTML hem de JavaScript/TypeScript kullanan bir uzantı dili olan [JSX](https://www.w3schools.com/react/react_jsx.asp)'tir. Buradaki ünlem işareti, TypeScript bileşenine şunu söyler: "`document.getElementById('root')` ifadesinin `ReactDOM.createRoot` için geçerli bir parametre olacağını bilmiyorsun, ama endişelenme - ben geliştiriciyim ve sana olacağını söylüyorum". + +```tsx + +``` + +Uygulama, [bir `React.StrictMode` bileşeninin](https://react.dev/reference/react/StrictMode) içine giriyor. Bu bileşen, React kütüphanesine, geliştirme sırasında yararlı olan ek hata ayıklama kontrolleri eklemesini söyler. + +```tsx + +``` + +Uygulama ayrıca [bir `WagmiConfig` bileşeninin](https://wagmi.sh/react/api/WagmiProvider) içindedir. [wagmi (başaracağız) kütüphanesi](https://wagmi.sh/), bir Ethereum merkeziyetsiz uygulaması yazmak için React UI tanımlarını [viem kütüphanesi](https://viem.sh/) ile birleştirir. + +```tsx + +``` + +Ve son olarak, [bir `RainbowKitProvider` bileşeni](https://www.rainbowkit.com/). Bu bileşen, oturum açmayı ve cüzdan ile uygulama arasındaki iletişimi yönetir. + +```tsx + +``` + +Şimdi, kullanıcı arayüzünü gerçekten uygulayan uygulama bileşenine sahip olabiliriz. Bileşenin sonundaki `/>`, XML standardına göre bu bileşenin içinde herhangi bir tanım olmadığını React'e bildirir. + +```tsx + + + , +) +``` + +Elbette diğer bileşenleri de kapatmamız gerekiyor. + +#### `src/App.tsx` {#app-tsx} + +```tsx +import { ConnectButton } from '@rainbow-me/rainbowkit' +import { useAccount } from 'wagmi' +import { Greeter } from './components/Greeter' + +export function App() { +``` + +Bu, bir React bileşeni oluşturmanın standart yoludur - her işlenmesi gerektiğinde çağrılan bir işlev tanımlayın. Bu işlevin genellikle en üstünde TypeScript veya JavaScript kodu bulunur, ardından JSX kodunu döndüren bir `return` ifadesi gelir. + +```tsx + const { isConnected } = useAccount() +``` + +Burada, bir cüzdan aracılığıyla bir blokzincire bağlı olup olmadığımızı kontrol etmek için [`useAccount`](https://wagmi.sh/react/api/hooks/useAccount) kullanıyoruz. + +Geleneksel olarak, React'ta `use...` olarak adlandırılan işlevler, bir tür veri döndüren [kancalardır](https://www.w3schools.com/react/react_hooks.asp). Bu tür kancaları kullandığınızda, bileşeniniz yalnızca verileri almakla kalmaz, aynı zamanda bu veriler değiştiğinde bileşen güncellenmiş bilgilerle yeniden oluşturulur. + +```tsx + return ( + <> +``` + +Bir React bileşeninin JSX'i tek bir bileşen döndürmek _zorundadır_. Birden çok bileşenimiz olduğunda ve bunları "doğal olarak" saran bir şeyimiz olmadığında, boş bir bileşen kullanırız (`<> ... `) onları tek bir bileşen haline getirmek için. + +```tsx +

Greeter

+ +``` + +[`ConnectButton` bileşenini](https://www.rainbowkit.com/docs/connect-button) RainbowKit'ten alıyoruz. Bağlı olmadığımızda, cüzdanları açıklayan ve hangisini kullandığınızı seçmenize izin veren bir kalıp açan bir `Cüzdan Bağla` düğmesi verir. Bağlandığımızda, kullandığımız blokzinciri, hesap adresimizi ve ETH bakiyemizi görüntüler. Ağı değiştirmek veya bağlantıyı kesmek için bu ekranları kullanabiliriz. + +```tsx + {isConnected && ( +``` + +Gerçek JavaScript'i (veya JavaScript'e derlenecek TypeScript'i) bir JSX'e eklememiz gerektiğinde, parantez (`{}`) kullanırız. + +`a && b` sözdizimi, [`a ?` için kısadır. b : a`](https://www.w3schools.com/react/react_es6_ternary.asp). Yani, `a`doğruysa`b`olarak değerlendirilir, aksi takdirde`a` olarak değerlendirilir (`false`, `0` vb. olabilir). Bu, React'e bir bileşenin yalnızca belirli bir koşul yerine getirildiğinde görüntülenmesi gerektiğini söylemenin kolay bir yoludur. + +Bu durumda, kullanıcıyı `Greeter` yalnızca kullanıcı bir blokzincire bağlıysa göstermek istiyoruz. + +```tsx + + )} + + ) +} +``` + +#### `src/components/Greeter.tsx` {#greeter-tsx} + +Bu dosya, kullanıcı arayüzü işlevselliğinin çoğunu içerir. Normalde birden çok dosyada olacak tanımları içerir, ancak bu bir öğretici olduğu için program, performans veya bakım kolaylığından ziyade ilk seferde anlaşılması kolay olacak şekilde optimize edilmiştir. + +```tsx +import { useState, ChangeEventHandler } from 'react' +import { useNetwork, + useReadContract, + usePrepareContractWrite, + useContractWrite, + useContractEvent + } from 'wagmi' +``` + +Bu kütüphane fonksiyonlarını kullanıyoruz. Yine, kullanıldıkları yerde aşağıda açıklanmıştır. + +```tsx +import { AddressType } from 'abitype' +``` + +[`abitype` kütüphanesi](https://abitype.dev/) bize [`AddressType`](https://abitype.dev/config#addresstype) gibi çeşitli Ethereum veri türleri için TypeScript tanımları sağlar. + +```tsx +let greeterABI = [ + . + . + . +] as const // greeterABI +``` + +`Greeter` sözleşmesi için ABI. +Sözleşmeleri ve kullanıcı arayüzünü aynı anda geliştiriyorsanız, normalde bunları aynı depoya koyar ve Solidity derleyicisi tarafından oluşturulan ABI'yi uygulamanızda bir dosya olarak kullanırsınız. Ancak, sözleşme zaten geliştirildiği ve değişmeyeceği için burada bu gerekli değildir. + +```tsx +type AddressPerBlockchainType = { + [key: number]: AddressType +} +``` + +TypeScript güçlü bir şekilde yazılmıştır. `Greeter` sözleşmesinin farklı zincirlerde dağıtıldığı adresi belirtmek için bu tanımı kullanırız. Anahtar bir sayıdır (chainId) ve değer bir `AddressType`'tır (bir adres). + +```tsx +const contractAddrs: AddressPerBlockchainType = { + // Holesky + 17000: '0x432d810484AdD7454ddb3b5311f0Ac2E95CeceA8', + + // Sepolia + 11155111: '0x7143d5c190F048C8d19fe325b748b081903E3BF0' +} +``` + +Desteklenen iki ağdaki sözleşmenin adresi: [Holesky](https://eth-holesky.blockscout.com/address/0x432d810484AdD7454ddb3b5311f0Ac2E95CeceA8?tab=contact_code) ve [Sepolia](https://eth-sepolia.blockscout.com/address/0x7143d5c190F048C8d19fe325b748b081903E3BF0?tab=contact_code). + +Not: Aslında Redstone Holesky için üçüncü bir tanım var, aşağıda açıklanacaktır. + +```tsx +type ShowObjectAttrsType = { + name: string, + object: any +} +``` + +Bu tür, `ShowObject` bileşenine (daha sonra açıklanacaktır) bir parametre olarak kullanılır. Hata ayıklama amacıyla görüntülenen nesnenin adını ve değerini içerir. + +```tsx +type ShowGreetingAttrsType = { + greeting: string | undefined +} +``` + +Herhangi bir zamanda, ya selamlamanın ne olduğunu biliyor olabiliriz (çünkü onu blokzincirden okuduk) ya da bilmiyor olabiliriz (çünkü henüz almadık). Bu nedenle, bir dize veya hiçbir şey olabilen bir türe sahip olmak yararlıdır. + +##### `Greeter` bileşeni {#greeter-component} + +```tsx +const Greeter = () => { +``` + +Sonunda bileşeni tanımlayacağız. + +```tsx + const { chain } = useNetwork() +``` + +[wagmi](https://wagmi.sh/react/hooks/useNetwork) sayesinde kullandığımız zincir hakkındaki bilgiler. +Bu bir kanca (`use...`) olduğu için, bu bilgi her değiştiğinde bileşen yeniden çizilir. + +```tsx + const greeterAddr = chain && contractAddrs[chain.id] +``` + +Greeter sözleşmesinin adresi, zincire göre değişir (ve zincir bilgimiz yoksa veya bu sözleşmenin olmadığı bir zincirdeysek `undefined` olur). + +```tsx + const readResults = useReadContract({ + address: greeterAddr, + abi: greeterABI, + functionName: "greet" , // No arguments + watch: true + }) +``` + +[`useReadContract` kancası](https://wagmi.sh/react/api/hooks/useReadContract), bir sözleşmeden bilgi okur. Kullanıcı arayüzünde `readResults`'ı genişleterek tam olarak hangi bilgileri döndürdüğünü görebilirsiniz. Bu durumda, selamlama değiştiğinde bilgilendirilmek için bakmaya devam etmesini istiyoruz. + +**Not:** Selamlamanın ne zaman değiştiğini bilmek ve bu şekilde güncelleme yapmak için [`setGreeting` olaylarını](https://eth-holesky.blockscout.com/address/0x432d810484AdD7454ddb3b5311f0Ac2E95CeceA8?tab=logs) dinleyebiliriz. Ancak, daha verimli olsa da, her durumda geçerli olmayacaktır. Kullanıcı farklı bir zincire geçtiğinde selamlama da değişir, ancak bu değişikliğe bir olay eşlik etmez. Kodun bir kısmı olayları dinlerken, diğeri zincir değişikliklerini belirlemek için kullanılabilir, ancak bu, sadece [`watch` parametresini](https://wagmi.sh/react/api/hooks/useReadContract#watch-optional) ayarlamaktan daha karmaşık olurdu. + +```tsx + const [ newGreeting, setNewGreeting ] = useState("") +``` + +React'in [`useState` kancası](https://www.w3schools.com/react/react_usestate.asp), değeri bileşenin bir oluşturulmasından diğerine devam eden bir durum değişkeni belirtmemizi sağlar. Başlangıç değeri, bu durumda boş dize olan parametredir. + +`useState` kancası iki değer içeren bir liste döndürür: + +1. Durum değişkeninin geçerli değeri. +2. Gerektiğinde durum değişkenini değiştirmek için bir işlev. Bu bir kanca olduğu için, her çağrıldığında bileşen yeniden oluşturulur. + +Bu durumda, kullanıcının ayarlamak istediği yeni selamlama için bir durum değişkeni kullanıyoruz. + +```tsx + const greetingChange : ChangeEventHandler = (evt) => + setNewGreeting(evt.target.value) +``` + +Bu, yeni selamlama giriş alanı değiştiğinde olay işleyicisidir. Tür, [`ChangeEventHandler`](https://react-typescript-cheatsheet.netlify.app/docs/basic/getting-started/forms_and_events/), bunun bir HTML giriş öğesinin değer değişikliği için bir işleyici olduğunu belirtir. `` kısmı, bunun bir [genel tür](https://www.w3schools.com/typescript/typescript_basic_generics.php) olması nedeniyle kullanılır. + +```tsx + const preparedTx = usePrepareContractWrite({ + address: greeterAddr, + abi: greeterABI, + functionName: 'setGreeting', + args: [ newGreeting ] + }) + const workingTx = useContractWrite(preparedTx.config) +``` + +Bu, istemci perspektifinden bir blokzincir işlemini gönderme sürecidir: + +1. [`eth_estimateGas`](https://docs.alchemy.com/reference/eth-estimategas) kullanarak işlemi blokzincirdeki bir düğüme gönderin. +2. Düğümden bir yanıt bekleyin. +3. Yanıt alındığında, kullanıcıdan işlemi cüzdan aracılığıyla imzalamasını isteyin. Bu adım, düğüm yanıtı alındıktan sonra gerçekleşmek _zorundadır_, çünkü kullanıcıya işlemi imzalamadan önce işlemin gaz maliyeti gösterilir. +4. Kullanıcının onaylamasını bekleyin. +5. İşlemi bu kez [`eth_sendRawTransaction`](https://docs.alchemy.com/reference/eth-sendrawtransaction) kullanarak tekrar gönderin. + +Adım 2'nin algılanabilir bir süre alması muhtemeldir; bu süre zarfında kullanıcılar, komutlarının kullanıcı arayüzü tarafından gerçekten alınıp alınmadığını ve neden zaten işlemi imzalamaları istenmediğini merak ederler. Bu kötü bir kullanıcı deneyimi (UX) yaratır. + +Çözüm, [hazırlık kancalarını](https://wagmi.sh/react/prepare-hooks) kullanmaktır. Bir parametre her değiştiğinde, düğüme hemen `eth_estimateGas` isteğini gönderin. Ardından, kullanıcı işlemi gerçekten göndermek istediğinde (bu durumda **Selamlamayı güncelle**'ye basarak), gaz maliyeti bilinir ve kullanıcı cüzdan sayfasını hemen görebilir. + +```tsx + return ( +``` + +Şimdi nihayet döndürülecek gerçek HTML'yi oluşturabiliriz. + +```tsx + <> +

Greeter

+ { + !readResults.isError && !readResults.isLoading && + + } +
+``` + +Bir `ShowGreeting` bileşeni oluşturun (aşağıda açıklanmıştır), ancak yalnızca selamlama blokzincirden başarıyla okunduysa. + +```tsx + +``` + +Bu, kullanıcının yeni bir selamlama ayarlayabileceği giriş metin alanıdır. Kullanıcı bir tuşa her bastığında, `setNewGreeting`'i çağıran `greetingChange`'i çağırırız. `setNewGreeting`, `useState` kancasından geldiği için, `Greeter` bileşeninin yeniden oluşturulmasına neden olur. Bunun anlamı şudur: + +- Yeni selamlamanın değerini korumak için `değer` belirtmemiz gerekiyor, çünkü aksi takdirde varsayılan olan boş dizeye geri dönerdi. +- `usePrepareContractWrite`, `newGreeting` her değiştiğinde çağrılır, bu da hazırlanan işlemde her zaman en son `newGreeting`'e sahip olacağı anlamına gelir. + +```tsx + +``` + +`workingTx.write` yoksa, selamlama güncellemesini göndermek için gerekli bilgileri hâlâ bekliyoruz demektir, bu nedenle düğme devre dışı bırakılır. Bir `workingTx.write` değeri varsa, bu, işlemi göndermek için çağrılacak fonksiyondur. + +```tsx +
+ + + + + ) +} +``` + +Son olarak, ne yaptığımızı görmenize yardımcı olması için kullandığımız üç nesneyi gösterin: + +- `readResults` +- `preparedTx` +- `workingTx` + +##### `ShowGreeting` bileşeni {#showgreeting-component} + +Bu bileşen gösterir + +```tsx +const ShowGreeting = (attrs : ShowGreetingAttrsType) => { +``` + +Bir bileşen işlevi, bileşenin tüm özniteliklerini içeren bir parametre alır. + +```tsx + return {attrs.greeting} +} +``` + +##### `ShowObject` bileşeni {#showobject-component} + +Bilgi amaçlı olarak, önemli nesneleri (`readResults` selamlamayı okumak için ve `preparedTx` ve `workingTx` oluşturduğumuz işlemler için) göstermek için `ShowObject` bileşenini kullanırız. + +```tsx +const ShowObject = (attrs: ShowObjectAttrsType ) => { + const keys = Object.keys(attrs.object) + const funs = keys.filter(k => typeof attrs.object[k] == "function") + return <> +
+``` + +Kullanıcı arayüzünü tüm bilgilerle doldurmak istemiyoruz, bu nedenle bunları görüntülemeyi veya kapatmayı mümkün kılmak için bir [`ayrıntılar`](https://www.w3schools.com/tags/tag_details.asp) etiketi kullanıyoruz. + +```tsx + {attrs.name} +
+        {JSON.stringify(attrs.object, null, 2)}
+```
+
+Alanların çoğu [`JSON.stringify`](https://www.w3schools.com/js/js_json_stringify.asp) kullanılarak görüntülenir.
+
+```tsx
+      
+ { funs.length > 0 && + <> + Functions: +
    +``` + +İstisna, [JSON standardının](https://www.json.org/json-en.html) bir parçası olmayan işlevlerdir, bu nedenle ayrı olarak görüntülenmeleri gerekir. + +```tsx + {funs.map((f, i) => +``` + +JSX içinde, `{` küme parantezleri `}` içindeki kod, JavaScript olarak yorumlanır. Daha sonra, `(` normal parantezler `)` içindeki kod, tekrar JSX olarak yorumlanır. + +```tsx + (
  • {f}
  • ) + )} +``` + +React, [DOM Ağacındaki](https://www.w3schools.com/js/js_htmldom.asp) etiketlerin ayrı tanımlayıcılara sahip olmasını gerektirir. Bu, aynı etiketin alt öğelerinin (bu durumda, [sırasız liste](https://www.w3schools.com/tags/tag_ul.asp)) farklı `anahtar` özniteliklerine ihtiyaç duyduğu anlamına gelir. + +```tsx +
+ + } +
+ +} +``` + +Çeşitli HTML etiketlerini sonlandırın. + +##### Son `export` {#the-final-export} + +```tsx +export { Greeter } +``` + +`Greeter` bileşeni, uygulama için dışa aktarmamız gereken bileşendir. + +#### `src/wagmi.ts` {#wagmi-ts} + +Son olarak, WAGMI ile ilgili çeşitli tanımlar `src/wagmi.ts` içindedir. Burada her şeyi açıklamayacağım, çünkü çoğu değiştirmeniz gerekmeyecek basmakalıp bir koddur. + +Buradaki kod, [github'daki](https://github.com/qbzzt/20230801-modern-ui/blob/main/src/wagmi.ts) kodla tam olarak aynı değil, çünkü makalenin ilerleyen bölümlerinde başka bir zincir ekliyoruz ([Redstone Holesky](https://redstone.xyz/docs/network-info)). + +```ts +import { getDefaultWallets } from '@rainbow-me/rainbowkit' +import { configureChains, createConfig } from 'wagmi' +import { holesky, sepolia } from 'wagmi/chains' +``` + +Uygulamanın desteklediği blokzincirleri içe aktarın. Desteklenen zincirlerin listesini [viem github'da](https://github.com/wagmi-dev/viem/tree/main/src/chains/definitions) görebilirsiniz. + +```ts +import { publicProvider } from 'wagmi/providers/public' + +const walletConnectProjectId = 'c96e690bb92b6311e8e9b2a6a22df575' +``` + +[WalletConnect](https://walletconnect.com/) kullanabilmek için uygulamanız için bir proje kimliğine ihtiyacınız var. [cloud.walletconnect.com](https://cloud.walletconnect.com/sign-in) adresinden alabilirsiniz. + +```ts +const { chains, publicClient, webSocketPublicClient } = configureChains( + [ holesky, sepolia ], + [ + publicProvider(), + ], +) + +const { connectors } = getDefaultWallets({ + appName: 'My wagmi + RainbowKit App', + chains, + projectId: walletConnectProjectId, +}) + +export const config = createConfig({ + autoConnect: true, + connectors, + publicClient, + webSocketPublicClient, +}) + +export { chains } +``` + +### Başka bir blokzincir ekleme {#add-blockchain} + +Bu günlerde çok sayıda [L2 ölçeklendirme çözümü](/layer-2/) var ve viem'in henüz desteklemediği bazılarını desteklemek isteyebilirsiniz. Bunu yapmak için `src/wagmi.ts` dosyasını değiştirin. Bu talimatlar, [Redstone Holesky](https://redstone.xyz/docs/network-info) nasıl ekleneceğini açıklar. + +1. Viem'den `defineChain` türünü içe aktarın. + + ```ts + import { defineChain } from 'viem' + ``` + +2. Ağ tanımını ekleyin. + + ```ts + const redstoneHolesky = defineChain({ + id: 17_001, + name: 'Redstone Holesky', + network: 'redstone-holesky', + nativeCurrency: { + decimals: 18, + name: 'Ether', + symbol: 'ETH', + }, + rpcUrls: { + default: { + http: ['https://rpc.holesky.redstone.xyz'], + webSocket: ['wss://rpc.holesky.redstone.xyz/ws'], + }, + public: { + http: ['https://rpc.holesky.redstone.xyz'], + webSocket: ['wss://rpc.holesky.redstone.xyz/ws'], + }, + }, + blockExplorers: { + default: { name: 'Explorer', url: 'https://explorer.holesky.redstone.xyz' }, + }, + }) + ``` + +3. Yeni zinciri `configureChains` çağrısına ekleyin. + + ```ts + const { chains, publicClient, webSocketPublicClient } = configureChains( + [ holesky, sepolia, redstoneHolesky ], + [ publicProvider(), ], + ) + ``` + +4. Uygulamanın yeni ağdaki sözleşmelerinizin adresini bildiğinden emin olun. Bu durumda, `src/components/Greeter.tsx` dosyasını değiştiriyoruz: + + ```ts + const contractAddrs : AddressPerBlockchainType = { + // Holesky + 17000: '0x432d810484AdD7454ddb3b5311f0Ac2E95CeceA8', + + // Redstone Holesky + 17001: '0x4919517f82a1B89a32392E1BF72ec827ba9986D3', + + // Sepolia + 11155111: '0x7143d5c190F048C8d19fe325b748b081903E3BF0' + } + ``` + +## Sonuç {#conclusion} + +Elbette, `Greeter` için bir kullanıcı arayüzü sağlamakla gerçekten ilgilenmiyorsunuz. Kendi sözleşmeleriniz için bir kullanıcı arayüzü oluşturmak istiyorsunuz. Kendi uygulamanızı oluşturmak için şu adımları uygulayın: + +1. Bir wagmi uygulaması oluşturmayı belirtin. + + ```sh copy + pnpm create wagmi + ``` + +2. Uygulamayı adlandırın. + +3. **React** çerçevesini seçin. + +4. **Vite** varyantını seçin. + +5. [Rainbow kit ekleyebilirsiniz](https://www.rainbowkit.com/docs/installation#manual-setup). + +Şimdi gidin ve sözleşmelerinizi tüm dünyada kullanılabilir hale getirin. + +[Çalışmalarımdan daha fazlası için buraya bakın](https://cryptodocguy.pro/). + diff --git a/public/content/translations/tr/developers/tutorials/deploying-your-first-smart-contract/index.md b/public/content/translations/tr/developers/tutorials/deploying-your-first-smart-contract/index.md index e7a8ce5772c..5a67d929504 100644 --- a/public/content/translations/tr/developers/tutorials/deploying-your-first-smart-contract/index.md +++ b/public/content/translations/tr/developers/tutorials/deploying-your-first-smart-contract/index.md @@ -1,12 +1,8 @@ --- -title: İlk akıllı sözleşmenizi dağıtın -description: Ethereum test ağında ilk akıllı sözleşmenizi dağıtmaya giriş +title: "İlk akıllı sözleşmeni dağıtma" +description: "Bir Ethereum test ağında ilk akıllı sözleşmeni dağıtmaya giriş" author: "jdourlens" -tags: - - "akıllı sözleşmeler" - - "karışım" - - "katılık" - - "dağıtma" +tags: [ "akıllı kontratlar", "remix", "solidity", "dağıtma" ] skill: beginner lang: tr published: 2020-04-03 @@ -15,17 +11,17 @@ sourceUrl: https://ethereumdev.io/deploying-your-first-smart-contract/ address: "0x19dE91Af973F404EDF5B4c093983a7c6E3EC8ccE" --- -Ethereum blok zincirinde ilk [akıllı sözleşmenizi](/developers/docs/smart-contracts/) [dağıtmak](/developers/docs/smart-contracts/deploying/) ve onunla etkileşimde bulunmak için eminiz ki siz de en az bizim kadar heyecanlısınızdır. +Sanırım sen de Ethereum blokzincirinde ilk [akıllı sözleşmeni](/developers/docs/smart-contracts/) [dağıtmaya](/developers/docs/smart-contracts/deploying/) ve onunla etkileşime geçmeye bizim kadar heveslisin. -Endişelenmeyin; bu sözleşmeyi [yerel test ağında](/developers/docs/networks/) yayınlayacağımız için size herhangi bir bedele mal olmayacak. Üzerinde dilediğiniz şekilde oynayabilirsiniz. +Endişelenme, bu ilk akıllı sözleşmemiz olduğu için onu [yerel bir test ağında](/developers/docs/networks/) dağıtacağız, böylece dağıtmak ve onunla dilediğince oynamak sana hiçbir maliyeti olmayacak. -## Sözleşmemizi yazmaya başlayalım {#writing-our-contract} +## Sözleşmemizi yazma {#writing-our-contract} -İlk adım olarak [Remix'e](https://remix.ethereum.org/) gidin ve yeni bir dosya oluşturun. Remix arayüzünün sol üst köşesinde yer alan yeni dosya simgesini kullanarak yeni bir dosya oluşturun ve dosyanıza isim verin. +İlk adım olarak [Remix'i ziyaret edip](https://remix.ethereum.org/) yeni bir dosya oluştur. Remix arayüzünün sol üst kısmından yeni bir dosya ekle ve istediğin dosya adını gir. -![Remix arayüzünde yeni dosya oluşturma](./remix.png) +![Remix arayüzünde yeni bir dosya ekleme](./remix.png) -Bu yeni dosyaya aşağıdaki kodu yapıştırıyoruz. +Yeni dosyaya aşağıdaki kodu yapıştıracağız. ```solidity // SPDX-License-Identifier: MIT @@ -33,15 +29,15 @@ pragma solidity >=0.5.17; contract Counter { - // Public variable of type unsigned int to keep the number of counts + // Sayım sayısını tutmak için işaretsiz tamsayı türünde herkese açık değişken uint256 public count = 0; - // Function that increments our counter + // Sayacımızı artıran fonksiyon function increment() public { count += 1; } - // Not necessary getter to get the count value + // Sayım değerini almak için gerekli olmayan alıcı function getCount() public view returns (uint256) { return count; } @@ -49,51 +45,51 @@ contract Counter { } ``` -Programlama konusunda bilgisi olanlar, bu programın ne yaptığını tahmin edeceklerdir. Satır satır açıklayacak olursak: +Programlamaya aşinaysan bu programın ne yaptığını kolayca tahmin edebilirsin. Satır satır açıklaması şöyledir: -- Satır 4: `Counter` adında yeni bir sözleşme tanımlıyoruz. -- Satır 7: Sözleşmemiz, ilk değeri 0 olan `count` adında bir işaretsiz tam sayı depoluyor. -- Satır 10: İlk fonksiyon, sözleşmenin durumunu değiştirir ve değişken `count` değerine `increment()` uygular. -- Satır 15: İkinci fonksiyon, basitçe `count` değerini akıllı sözleşmenin dışından okumamızı sağlayan bir alıcıdır. Aslında `count` değişkenini zaten herkesin erişime açık (public) tanımladığımız için bunu yapmamıza gerek yoktu ama sadece örnek olarak göstermek istedik. +- 4. Satır: `Counter` adıyla bir sözleşme tanımlıyoruz. +- 7. Satır: Sözleşmemiz, 0'dan başlayan `count` adında işaretsiz bir tamsayı depolar. +- 10. Satır: İlk fonksiyon, sözleşmenin durumunu değiştirir ve `count` değişkenimizi artırır. +- 15. Satır: İkinci fonksiyon, akıllı sözleşmenin dışından `count` değişkeninin değerini okuyabilmek için kullanılan bir alıcıdır. `count` değişkenimizi herkese açık (public) olarak tanımladığımız için bunun gerekli olmadığını, yalnızca örnek olarak gösterildiğini unutma. -İlk akıllı sözleşmemiz için hepsi bu kadar. Bildiğiniz gibi, Java veya C++ gibi OOP (Nesne Odaklı Programlama) dillerinden bir sınıfa benziyor. Şimdi sözleşmemizle oynamaya başlayalım. +İlk basit akıllı sözleşmemiz için hepsi bu kadar. Bilebileceğin üzere, bu Java veya C++ gibi OOP (Nesne Yönelimli Programlama) dillerindeki bir sınıfa benziyor. Şimdi sözleşmemizle oynama zamanı. ## Sözleşmemizi dağıtma {#deploying-our-contract} -Sözleşmemizle etkileşimde bulunabilmek için öncelikle onu blok zincirinde dağıtacağız. +İlk akıllı sözleşmemizi yazdığımıza göre, şimdi onunla oynayabilmek için blokzincirine dağıtacağız. -Bir [sözleşmeyi blok zincirinde dağıtmak](/developers/docs/smart-contracts/deploying/), aslında sadece sözleşme kodunun derlenmiş halini, herhangi bir alıcı belirtmeden, işlem olarak ağa göndermekten ibarettir. +[Akıllı sözleşmeyi blokzincirinde dağıtmak](/developers/docs/smart-contracts/deploying/), aslında derlenmiş akıllı sözleşmenin kodunu içeren bir işlemi herhangi bir alıcı belirtmeden göndermekten ibarettir. -Öncelikle sol tarafta yer alan derle simgesini kullanarak [sözleşmemizi derleyeceğiz](/developers/docs/smart-contracts/compiling/): +Önce, sol taraftaki derleme simgesine tıklayarak [sözleşmeyi derleyeceğiz](/developers/docs/smart-contracts/compiling/): ![Remix araç çubuğundaki derleme simgesi](./remix-compile-button.png) -Ardından Compile butonuna tıklayın: +Ardından derle düğmesine tıkla: -![Remix solidity derleyicisindeki compile (derle) düğmesi](./remix-compile.png) +![Remix Solidity derleyicisindeki derle düğmesi](./remix-compile.png) -Dilerseniz "Auto compile" seçeneğini seçebilirsiniz. Böylece sözleşmenizi güncellediğiniz zaman sözleşmeinz otomatik olarak derlenir. +İçeriği metin düzenleyiciye kaydettiğinde sözleşmenin her zaman derlenmesi için “Otomatik derle” seçeneğini tercih edebilirsin. -Ardından "deploy and run transactions" ekranına gidin: +Ardından "Dağıt ve işlemleri çalıştır" ekranına git: -![Remix araç çubuğundaki yayınla simgesi](./remix-deploy.png) +![Remix araç çubuğundaki dağıtma simgesi](./remix-deploy.png) -Bu ekranda öncelikle sözleşmeye verdiğimiz ismin göründüğünden emin olmalısınız. Sözleşme adını görüyorsanız Deploy butonuna tıklayın. Sayfanın üst kısmında görebileceğiniz gibi, mevcut ortam “Javascript VM”, yani bu daha hızlı ve herhangi bir ücret ödemeden test edebilmek için akıllı sözleşmemizi yerel bir test blok zincirinde dağıtıp etkileşime geçeceğimiz anlamına geliyor. +"Dağıt ve işlemleri çalıştır" ekranına geldiğinde, sözleşme adının göründüğünü kontrol et ve Dağıt'a tıkla. Sayfanın üst kısmında görebileceğin gibi, mevcut ortam “JavaScript VM”dir. Bu, daha hızlı ve hiçbir ücret ödemeden test edebilmek için akıllı sözleşmemizi yerel bir test blokzincirinde dağıtacağımız ve etkileşime gireceğimiz anlamına gelir. -![Remix solidity derleyicisindeki deploy (dağıt) düğmesi](./remix-deploy-button.png) +![Remix Solidity derleyicisindeki dağıt düğmesi](./remix-deploy-button.png) -"Deploy" düğmesine tıkladıktan sonra akıllı sözleşmemiz alt kısımda görünecek. Sol başındaki ok simgesini kullanarak sözleşmemizin içeriğini görüntüleyebiliriz. Bu, değişken `counter`'ımız (sayaç), `increment()` (artış) fonksiyonumuz ve alıcımız `getCounter()`'dır. +“Dağıt” düğmesine tıkladıktan sonra sözleşmenin en altta belirdiğini göreceksin. Sözleşmemizin içeriğini görmek için solundaki oka tıklayarak genişlet. Bu bizim `counter` değişkenimiz, `increment()` fonksiyonumuz ve `getCounter()` alıcımızdır. -Burada `count` veya `getCount` düğmelerine tıklarsanız, sözleşmede tanımlamış olduğumuz `count` değişkeninin içeriğini alıp görüntüleyebilirsiniz. Şu ana dek `increment` fonksiyonunu hiç çağırmadığımız için göreceğimiz değer 0 olmalı. +`count` veya `getCount` düğmesine tıklarsan sözleşmenin `count` değişkeninin içeriğini alır ve görüntüler. Henüz `increment` fonksiyonunu çağırmadığımız için 0 göstermesi gerekir. -![Remix solidity derleyicisindeki function (fonksiyon) düğmesi](./remix-function-button.png) +![Remix Solidity derleyicisindeki fonksiyon düğmesi](./remix-function-button.png) -Şimdi de düğmeye tıklayarak `increment` fonksiyonunu çağıralım. Ekranın alt kısmında gerçekleşmekte olan işleme ait işlem dökümlerini göreceksiniz. `increment` düğmesi yerine verileri alma düğmesine tıkladığınızda kayıtların farklı olduğunu göreceksiniz. Bunun sebebi, blok zincirindeki herhangi bir veriyi okumanın masrafsız ve işlem gerektirmeyen (kaydetmek anlamında) olmasıdır. Sadece blok zincirinin durumunu güncelleyen eylemler işlem olarak nitelendirilir: +Şimdi düğmeye tıklayarak `increment` fonksiyonunu çağıralım. Pencerenin en altında, yapılan işlemlerin kayıtlarının belirdiğini göreceksin. `increment` düğmesi yerine veriyi almak için olan düğmeye bastığında kayıtların farklı olduğunu göreceksin. Bunun nedeni, blokzincirinden veri okumanın herhangi bir işlem (yazma) veya ücret gerektirmemesidir. Çünkü sadece blokzincirinin durumunu değiştirmek bir işlem yapmayı gerektirir: -![İşlemlerin kaydı](./transaction-log.png) +![İşlemlerin bir kaydı](./transaction-log.png) -`increment()` fonksiyonumuzu çağırmak için bir işlem oluşturan increment düğmesine bastıktan sonra tekrar count veya getCount düğmelerine basarsak akıllı sözleşmemizin yeni güncellenmiş durumunu count değişkeninin 0'dan büyük olduğu hâliyle görebiliriz. +`increment()` fonksiyonumuzu çağırmak için bir işlem oluşturan increment düğmesine bastıktan sonra `count` veya `getCount` düğmelerine tekrar tıkladığımızda, akıllı sözleşmemizin yeni güncellenmiş durumunu `count` değişkeni 0'dan büyük olacak şekilde okuyacağız. ![Akıllı sözleşmenin yeni güncellenmiş durumu](./updated-state.png) -Sonraki öğreticimizde [akıllı sözleşmelere nasıl olay ekleyebileceğimizden](/developers/tutorials/logging-events-smart-contracts/) bahsedeceğiz. Olayları kayıt altına alarak akıllı sözleşmemizin hata ayıklamasını yapabilir ve fonksiyonları çağırdığımızda neler olduğunu ayrıntılı bir şekilde görebiliriz. +Bir sonraki öğreticide, [akıllı sözleşmelerinize nasıl olay ekleyebileceğinizi](/developers/tutorials/logging-events-smart-contracts/) ele alacağız. Olayları kaydetmek, akıllı sözleşmendeki hataları ayıklamak ve bir fonksiyonu çağırırken neler olduğunu anlamak için uygun bir yoldur. diff --git a/public/content/translations/tr/developers/tutorials/develop-and-test-dapps-with-a-multi-client-local-eth-testnet/index.md b/public/content/translations/tr/developers/tutorials/develop-and-test-dapps-with-a-multi-client-local-eth-testnet/index.md new file mode 100644 index 00000000000..56597b2b53d --- /dev/null +++ b/public/content/translations/tr/developers/tutorials/develop-and-test-dapps-with-a-multi-client-local-eth-testnet/index.md @@ -0,0 +1,372 @@ +--- +title: "Yerel, çok istemcili bir test ağında bir merkeziyetsiz uygulama nasıl geliştirilir ve test edilir" +description: "Bu kılavuz, test ağını bir merkeziyetsiz uygulamayı dağıtmak ve test etmek için kullanmadan önce, size çok istemcili bir yerel Ethereum test ağını nasıl somutlaştıracağınız ve yapılandıracağınız konusunda yol gösterecektir." +author: "Tedi Mitiku" +tags: + [ + "istemciler", + "düğümler", + "akıllı kontratlar", + "birleştirilebilirlik", + "mutabakat katmanı", + "yürütme katmanı", + "test etmek" + ] +skill: intermediate +lang: tr +published: 2023-04-11 +--- + +## Giriş {#introduction} + +Bu kılavuz, yapılandırılabilir bir yerel Ethereum test ağını somutlaştırma, ona bir akıllı sözleşme dağıtma ve merkeziyetsiz uygulamanıza karşı testler yürütmek için test ağını kullanma sürecinde size yol gösterir. Bu kılavuz, canlı bir test ağına veya ana ağa dağıtım yapmadan önce merkeziyetsiz uygulamalarını farklı ağ yapılandırmalarına karşı yerel olarak geliştirmek ve test etmek isteyen merkeziyetsiz uygulama geliştiricileri için tasarlanmıştır. + +Bu kılavuzda şunları yapacaksınız: + +- [Kurtosis](https://www.kurtosis.com/) kullanarak [`eth-network-package`](https://github.com/kurtosis-tech/eth-network-package) ile yerel bir Ethereum test ağı oluşturun, +- Bir merkeziyetsiz uygulamayı derlemek, dağıtmak ve test etmek için Hardhat merkeziyetsiz uygulama geliştirme ortamınızı yerel test ağına bağlayın ve +- Çeşitli ağ yapılandırmalarına karşı geliştirme ve test iş akışlarını etkinleştirmek için düğüm sayısı ve belirli YK/MK istemci eşleşmeleri gibi parametreler de dahil olmak üzere yerel test ağını yapılandırın. + +### Kurtosis nedir? {#what-is-kurtosis} + +[Kurtosis](https://www.kurtosis.com/), çok kapsayıcılı test ortamlarını yapılandırmak için tasarlanmış birleştirilebilir bir yapı sistemidir. Geliştiricilerin, blokzincir test ağları gibi dinamik kurulum mantığı gerektiren yeniden üretilebilir ortamlar oluşturmasını özellikle sağlar. + +Bu kılavuzda, Kurtosis eth-network-package, [`geth`](https://geth.ethereum.org/) Yürütme Katmanı (YK) istemcisinin yanı sıra [`teku`](https://consensys.io/teku), [`lighthouse`](https://lighthouse.sigmaprime.io/) ve [`lodestar`](https://lodestar.chainsafe.io/) Mutabakat Katmanı (MK) istemcileri desteğiyle yerel bir Ethereum test ağı oluşturur. Bu paket, Hardhat Network, Ganache ve Anvil gibi çerçevelerdeki ağlara yapılandırılabilir ve birleştirilebilir bir alternatif olarak hizmet eder. Kurtosis, geliştiricilere kullandıkları test ağları üzerinde daha fazla kontrol ve esneklik sunar; bu da [Ethereum Vakfı'nın Birleşim'i test etmek için Kurtosis'i kullanmasının](https://www.kurtosis.com/blog/testing-the-ethereum-merge) ve ağ yükseltmelerini test etmek için kullanmaya devam etmesinin önemli bir nedenidir. + +## Kurtosis'i kurma {#setting-up-kurtosis} + +Devam etmeden önce, şunlara sahip olduğunuzdan emin olun: + +- Yerel makinenizde [Docker motorunu kurun ve başlatın](https://docs.kurtosis.com/install/#i-install--start-docker) +- [Kurtosis CLI'yi yükleyin](https://docs.kurtosis.com/install#ii-install-the-cli) (veya CLI zaten yüklüyse en son sürüme yükseltin) +- [Node.js](https://nodejs.org/en), [yarn](https://classic.yarnpkg.com/lang/en/docs/install/#mac-stable) ve [npx](https://www.npmjs.com/package/npx) (merkeziyetsiz uygulama ortamınız için) yükleyin + +## Yerel bir Ethereum test ağı oluşturma {#instantiate-testnet} + +Yerel bir Ethereum test ağı başlatmak için şunu çalıştırın: + +```python +kurtosis --enclave local-eth-testnet run github.com/kurtosis-tech/eth-network-package +``` + +Not: Bu komut, `--enclave` bayrağını kullanarak ağınızı "local-eth-testnet" olarak adlandırır. + +Kurtosis, talimatları yorumlamak, doğrulamak ve ardından yürütmek için çalışırken perde arkasında attığı adımları yazdıracaktır. Sonunda, aşağıdakine benzer bir çıktı görmelisiniz: + +```python +INFO[2023-04-04T18:09:44-04:00] ====================================================== +INFO[2023-04-04T18:09:44-04:00] || Enclave oluşturuldu: local-eth-testnet || +INFO[2023-04-04T18:09:44-04:00] ====================================================== +Name: local-eth-testnet +UUID: 39372d756ae8 +Status: RUNNING +Creation Time: Tue, 04 Apr 2023 18:09:03 EDT + +========================================= Dosya Yapıtları ========================================= +UUID Name +d4085a064230 cl-genesis-data +1c62cb792e4c el-genesis-data +bd60489b73a7 genesis-generation-config-cl +b2e593fe5228 genesis-generation-config-el +d552a54acf78 geth-prefunded-keys +5f7e661eb838 prysm-password +054e7338bb59 validator-keystore-0 + +========================================== Kullanıcı Hizmetleri ========================================== +UUID Name Ports Status +e20f129ee0c5 cl-client-0-beacon http: 4000/tcp -> RUNNING + metrics: 5054/tcp -> + tcp-discovery: 9000/tcp -> 127.0.0.1:54263 + udp-discovery: 9000/udp -> 127.0.0.1:60470 +a8b6c926cdb4 cl-client-0-validator http: 5042/tcp -> 127.0.0.1:54267 RUNNING + metrics: 5064/tcp -> +d7b802f623e8 el-client-0 engine-rpc: 8551/tcp -> 127.0.0.1:54253 RUNNING + rpc: 8545/tcp -> 127.0.0.1:54251 + tcp-discovery: 30303/tcp -> 127.0.0.1:54254 + udp-discovery: 30303/udp -> 127.0.0.1:53834 + ws: 8546/tcp -> 127.0.0.1:54252 +514a829c0a84 prelaunch-data-generator-1680646157905431468 STOPPED +62bd62d0aa7a prelaunch-data-generator-1680646157915424301 STOPPED +05e9619e0e90 prelaunch-data-generator-1680646157922872635 STOPPED + +``` + +Tebrikler! Docker üzerinde bir MK (`lighthouse`) ve YK istemcisi (`geth`) ile yerel bir Ethereum test ağı oluşturmak için Kurtosis'i kullandınız. + +### Gözden Geçirme {#review-instantiate-testnet} + +Bu bölümde, bir Kurtosis [Enclave](https://docs.kurtosis.com/advanced-concepts/enclaves/) içinde yerel bir Ethereum test ağı başlatmak için Kurtosis'i GitHub'da uzaktan barındırılan [`eth-network-package`](https://github.com/kurtosis-tech/eth-network-package) kullanmaya yönlendiren bir komut yürüttünüz. Enclave'inizin içinde hem "dosya yapıtları" hem de "kullanıcı hizmetleri" bulacaksınız. + +Enclave'inizdeki [Dosya Yapıtları](https://docs.kurtosis.com/advanced-concepts/files-artifacts/), YK ve MK istemcilerini önyüklemek için oluşturulan ve kullanılan tüm verileri içerir. Veriler, bu [Docker görüntüsünden](https://github.com/ethpandaops/ethereum-genesis-generator) oluşturulan `prelaunch-data-generator` hizmeti kullanılarak oluşturuldu. + +Kullanıcı hizmetleri, enclave'inizde çalışan tüm kapsayıcılı hizmetleri görüntüler. Hem bir YK istemcisi hem de bir MK istemcisi içeren tek bir düğümün oluşturulduğunu fark edeceksiniz. + +## Merkeziyetsiz uygulama geliştirme ortamınızı yerel Ethereum test ağına bağlama {#connect-your-dapp} + +### Merkeziyetsiz uygulama geliştirme ortamını kurma {#set-up-dapp-env} + +Artık çalışan bir yerel test ağınız olduğuna göre, yerel test ağınızı kullanmak için merkeziyetsiz uygulama geliştirme ortamınızı bağlayabilirsiniz. Bu kılavuzda, yerel test ağınıza bir blackjack merkeziyetsiz uygulaması dağıtmak için Hardhat çerçevesi kullanılacaktır. + +Merkeziyetsiz uygulama geliştirme ortamınızı kurmak için, örnek merkeziyetsiz uygulamamızı içeren depoyu klonlayın ve bağımlılıklarını yükleyin, şunu çalıştırın: + +```python +git clone https://github.com/kurtosis-tech/awesome-kurtosis.git && cd awesome-kurtosis/smart-contract-example && yarn +``` + +Burada kullanılan [smart-contract-example](https://github.com/kurtosis-tech/awesome-kurtosis/tree/main/smart-contract-example) klasörü, [Hardhat](https://hardhat.org/) çerçevesini kullanan bir merkeziyetsiz uygulama geliştiricisi için tipik kurulumu içerir: + +- [`contracts/`](https://github.com/kurtosis-tech/awesome-kurtosis/tree/main/smart-contract-example/contracts) bir Blackjack merkeziyetsiz uygulaması için birkaç basit akıllı sözleşme içerir +- [`scripts/`](https://github.com/kurtosis-tech/awesome-kurtosis/tree/main/smart-contract-example/scripts) yerel Ethereum ağınıza bir jeton sözleşmesi dağıtmak için bir betik içerir +- [`test/`](https://github.com/kurtosis-tech/awesome-kurtosis/tree/main/smart-contract-example/test) Blackjack merkeziyetsiz uygulamamızdaki her oyuncu için 1000 jetonun basıldığını doğrulamak amacıyla jeton sözleşmeniz için basit bir .js testi içerir +- [`hardhat.config.ts`](https://github.com/kurtosis-tech/awesome-kurtosis/blob/main/smart-contract-example/hardhat.config.ts) Hardhat kurulumunuzu yapılandırır + +### Hardhat'i yerel test ağını kullanacak şekilde yapılandırma {#configure-hardhat} + +Merkeziyetsiz uygulama geliştirme ortamınız kurulduktan sonra, Kurtosis kullanılarak oluşturulan yerel Ethereum test ağını kullanmak için Hardhat'i bağlayacaksınız. Bunu başarmak için, `hardhat.config.ts` yapılandırma dosyanızdaki `localnet` yapısındaki `<$YOUR_PORT>` öğesini herhangi bir `el-client-` hizmetinden gelen rpc uri çıktısının bağlantı noktasıyla değiştirin. Bu örnek durumda, bağlantı noktası `64248` olacaktır. Sizin bağlantı noktanız farklı olacaktır. + +`hardhat.config.ts` içinde örnek: + +```js +localnet: { +url: 'http://127.0.0.1:<$YOUR_PORT>',// TODO: $YOUR_PORT'U ETH AĞI KURTOSIS PAKETİNİN ÜRETTİĞİ BİR DÜĞÜM URI'SİNİN BAĞLANTI NOKTASIYLA DEĞİŞTİRİN + +// Bunlar, eth-network-package tarafından oluşturulan önceden finanse edilmiş test hesaplarıyla ilişkili özel anahtarlardır +// +accounts: [ + "ef5177cd0b6b21c87db5a0bf35d4084a8a57a9d6a064f86d51ac85f2b873a4e2", + "48fcc39ae27a0e8bf0274021ae6ebd8fe4a0e12623d61464c498900b28feb567", + "7988b3a148716ff800414935b305436493e1f25237a2a03e5eebc343735e2f31", + "b3c409b6b0b3aa5e65ab2dc1930534608239a478106acf6f3d9178e9f9b00b35", + "df9bb6de5d3dc59595bcaa676397d837ff49441d211878c024eabda2cd067c9f", + "7da08f856b5956d40a72968f93396f6acff17193f013e8053f6fbb6c08c194d6", + ], +}, +``` + +Dosyanızı kaydettiğinizde, Hardhat merkeziyetsiz uygulama geliştirme ortamınız artık yerel Ethereum test ağınıza bağlanmış olur! Test ağınızın çalıştığını şu komutu çalıştırarak doğrulayabilirsiniz: + +```python +npx hardhat balances --network localnet +``` + +Çıktı şuna benzer görünmelidir: + +```python +0x878705ba3f8Bc32FCf7F4CAa1A35E72AF65CF766 has balance 10000000000000000000000000 +0x4E9A3d9D1cd2A2b2371b8b3F489aE72259886f1A has balance 10000000000000000000000000 +0xdF8466f277964Bb7a0FFD819403302C34DCD530A has balance 10000000000000000000000000 +0x5c613e39Fc0Ad91AfDA24587e6f52192d75FBA50 has balance 10000000000000000000000000 +0x375ae6107f8cC4cF34842B71C6F746a362Ad8EAc has balance 10000000000000000000000000 +0x1F6298457C5d76270325B724Da5d1953923a6B88 has balance 10000000000000000000000000 +``` + +Bu, Hardhat'in yerel test ağınızı kullandığını ve `eth-network-package` tarafından oluşturulan önceden finanse edilmiş hesapları algıladığını doğrular. + +### Merkeziyetsiz uygulamanızı yerel olarak dağıtın ve test edin {#deploy-and-test-dapp} + +Merkeziyetsiz uygulama geliştirme ortamı yerel Ethereum test ağına tamamen bağlandığında, artık yerel test ağını kullanarak merkeziyetsiz uygulamanıza karşı geliştirme ve test iş akışlarını çalıştırabilirsiniz. + +Yerel prototipleme ve geliştirme için `ChipToken.sol` akıllı sözleşmesini derlemek ve dağıtmak için şunu çalıştırın: + +```python +npx hardhat compile +npx hardhat run scripts/deploy.ts --network localnet +``` + +Çıktı şuna benzer görünmelidir: + +```python +ChipToken şuraya dağıtıldı: 0xAb2A01BC351770D09611Ac80f1DE076D56E0487d +``` + +Şimdi, Blackjack merkeziyetsiz uygulamamızdaki her oyuncu için 1000 jeton basıldığını doğrulamak için yerel merkeziyetsiz uygulamanıza karşı `simple.js` testini çalıştırmayı deneyin: + +Çıktı şuna benzer görünmelidir: + +```python +npx hardhat test --network localnet +``` + +Çıktı şuna benzer görünmelidir: + +```python +ChipToken + mint + ✔ PLAYER ONE için 1000 fiş basmalı + + 1 başarılı (654ms) +``` + +### Gözden Geçirme {#review-dapp-workflows} + +Bu noktada, bir merkeziyetsiz uygulama geliştirme ortamı kurdunuz, onu Kurtosis tarafından oluşturulan yerel bir Ethereum ağına bağladınız ve merkeziyetsiz uygulamanıza karşı basit bir test derlediniz, dağıttınız ve çalıştırdınız. + +Şimdi de, merkeziyetsiz uygulamalarımızı değişken ağ yapılandırmaları altında test etmek için temel ağı nasıl yapılandırabileceğinizi keşfedelim. + +## Yerel Ethereum test ağını yapılandırma {#configure-testnet} + +### İstemci yapılandırmalarını ve düğüm sayısını değiştirme {#configure-client-config-and-num-nodes} + +Yerel Ethereum test ağınız, geliştirmek veya test etmek istediğiniz senaryoya ve belirli ağ yapılandırmasına bağlı olarak, farklı YK ve MK istemci çiftlerinin yanı sıra değişen sayıda düğüm kullanacak şekilde yapılandırılabilir. Bu, kurulduktan sonra özelleştirilmiş bir yerel test ağı oluşturabileceğiniz ve aynı iş akışlarını (dağıtım, testler vb.) çalıştırmak için kullanabileceğiniz anlamına gelir. her şeyin beklendiği gibi çalıştığından emin olmak için çeşitli ağ yapılandırmaları altında. Değiştirebileceğiniz diğer parametreler hakkında daha fazla bilgi edinmek için bu bağlantıyı ziyaret edin. + +Deneyin! Bir JSON dosyası aracılığıyla `eth-network-package`'a çeşitli yapılandırma seçenekleri iletebilirsiniz. Bu ağ parametreleri JSON dosyası, Kurtosis'in yerel Ethereum ağını kurmak için kullanacağı belirli yapılandırmaları sağlar. + +Varsayılan yapılandırma dosyasını alın ve farklı YK/MK çiftlerine sahip üç düğüm başlatmak için düzenleyin: + +- Düğüm 1, `geth`/`lighthouse` ile +- Düğüm 2, `geth`/`lodestar` ile +- Düğüm 3, `geth`/`teku` ile + +Bu yapılandırma, merkeziyetsiz uygulamanızı test etmek için heterojen bir Ethereum düğüm uygulamaları ağı oluşturur. Yapılandırma dosyanız şimdi şöyle görünmelidir: + +```yaml +{ + "participants": + [ + { + "el_client_type": "geth", + "el_client_image": "", + "el_client_log_level": "", + "cl_client_type": "lighthouse", + "cl_client_image": "", + "cl_client_log_level": "", + "beacon_extra_params": [], + "el_extra_params": [], + "validator_extra_params": [], + "builder_network_params": null, + }, + { + "el_client_type": "geth", + "el_client_image": "", + "el_client_log_level": "", + "cl_client_type": "lodestar", + "cl_client_image": "", + "cl_client_log_level": "", + "beacon_extra_params": [], + "el_extra_params": [], + "validator_extra_params": [], + "builder_network_params": null, + }, + { + "el_client_type": "geth", + "el_client_image": "", + "el_client_log_level": "", + "cl_client_type": "teku", + "cl_client_image": "", + "cl_client_log_level": "", + "beacon_extra_params": [], + "el_extra_params": [], + "validator_extra_params": [], + "builder_network_params": null, + }, + ], + "network_params": + { + "preregistered_validator_keys_mnemonic": "giant issue aisle success illegal bike spike question tent bar rely arctic volcano long crawl hungry vocal artwork sniff fantasy very lucky have athlete", + "num_validator_keys_per_node": 64, + "network_id": "3151908", + "deposit_contract_address": "0x4242424242424242424242424242424242424242", + "seconds_per_slot": 12, + "genesis_delay": 120, + "capella_fork_epoch": 5, + }, +} +``` + +Her `participants` yapısı ağdaki bir düğüme karşılık gelir, bu nedenle 3 `participants` yapısı Kurtosis'e ağınızda 3 düğüm başlatmasını söyleyecektir. Her `participants` yapısı, o belirli düğüm için kullanılan YK ve MK çiftini belirtmenize olanak tanır. + +`network_params` yapısı, her düğüm için başlangıç dosyalarını oluşturmak için kullanılan ağ ayarlarını ve ağın yuva başına saniyesi gibi diğer ayarları yapılandırır. + +Düzenlenen parametreler dosyanızı istediğiniz herhangi bir dizine kaydedin (aşağıdaki örnekte masaüstüne kaydedilmiştir) ve ardından Kurtosis paketinizi çalıştırmak için şunu çalıştırın: + +```python +kurtosis clean -a && kurtosis run --enclave local-eth-testnet github.com/kurtosis-tech/eth-network-package "$(cat ~/eth-network-params.json)" +``` + +Not: `kurtosis clean -a` komutu, Kurtosis'e yeni bir tane başlatmadan önce eski test ağını ve içeriğini yok etmesi talimatını vermek için burada kullanılır. + +Yine Kurtosis bir süre çalışacak ve gerçekleşen adımları tek tek yazdıracaktır. Sonunda, çıktı şuna benzer görünmelidir: + +```python +Starlark kodu başarıyla çalıştırıldı. Çıktı döndürülmedi. +INFO[2023-04-07T11:43:16-04:00] ========================================================== +INFO[2023-04-07T11:43:16-04:00] || Enclave oluşturuldu: local-eth-testnet || +INFO[2023-04-07T11:43:16-04:00] ========================================================== +Name: local-eth-testnet +UUID: bef8c192008e +Status: RUNNING +Creation Time: Fri, 07 Apr 2023 11:41:58 EDT + +========================================= Dosya Yapıtları ========================================= +UUID Name +cc495a8e364a cl-genesis-data +7033fcdb5471 el-genesis-data +a3aef43fc738 genesis-generation-config-cl +8e968005fc9d genesis-generation-config-el +3182cca9d3cd geth-prefunded-keys +8421166e234f prysm-password +d9e6e8d44d99 validator-keystore-0 +23f5ba517394 validator-keystore-1 +4d28dea40b5c validator-keystore-2 + +========================================== Kullanıcı Hizmetleri ========================================== +UUID Name Ports Status +485e6fde55ae cl-client-0-beacon http: 4000/tcp -> http://127.0.0.1:65010 RUNNING + metrics: 5054/tcp -> http://127.0.0.1:65011 + tcp-discovery: 9000/tcp -> 127.0.0.1:65012 + udp-discovery: 9000/udp -> 127.0.0.1:54455 +73739bd158b2 cl-client-0-validator http: 5042/tcp -> 127.0.0.1:65016 RUNNING + metrics: 5064/tcp -> http://127.0.0.1:65017 +1b0a233cd011 cl-client-1-beacon http: 4000/tcp -> 127.0.0.1:65021 RUNNING + metrics: 8008/tcp -> 127.0.0.1:65023 + tcp-discovery: 9000/tcp -> 127.0.0.1:65024 + udp-discovery: 9000/udp -> 127.0.0.1:56031 + validator-metrics: 5064/tcp -> 127.0.0.1:65022 +949b8220cd53 cl-client-1-validator http: 4000/tcp -> 127.0.0.1:65028 RUNNING + metrics: 8008/tcp -> 127.0.0.1:65030 + tcp-discovery: 9000/tcp -> 127.0.0.1:65031 + udp-discovery: 9000/udp -> 127.0.0.1:60784 + validator-metrics: 5064/tcp -> 127.0.0.1:65029 +c34417bea5fa cl-client-2 http: 4000/tcp -> 127.0.0.1:65037 RUNNING + metrics: 8008/tcp -> 127.0.0.1:65035 + tcp-discovery: 9000/tcp -> 127.0.0.1:65036 + udp-discovery: 9000/udp -> 127.0.0.1:63581 +e19738e6329d el-client-0 engine-rpc: 8551/tcp -> 127.0.0.1:64986 RUNNING + rpc: 8545/tcp -> 127.0.0.1:64988 + tcp-discovery: 30303/tcp -> 127.0.0.1:64987 + udp-discovery: 30303/udp -> 127.0.0.1:55706 + ws: 8546/tcp -> 127.0.0.1:64989 +e904687449d9 el-client-1 engine-rpc: 8551/tcp -> 127.0.0.1:64993 RUNNING + rpc: 8545/tcp -> 127.0.0.1:64995 + tcp-discovery: 30303/tcp -> 127.0.0.1:64994 + udp-discovery: 30303/udp -> 127.0.0.1:58096 + ws: 8546/tcp -> 127.0.0.1:64996 +ad6f401126fa el-client-2 engine-rpc: 8551/tcp -> 127.0.0.1:65003 RUNNING + rpc: 8545/tcp -> 127.0.0.1:65001 + tcp-discovery: 30303/tcp -> 127.0.0.1:65000 + udp-discovery: 30303/udp -> 127.0.0.1:57269 + ws: 8546/tcp -> 127.0.0.1:65002 +12d04a9dbb69 prelaunch-data-generator-1680882122181135513 STOPPED +5b45f9c0504b prelaunch-data-generator-1680882122192182847 STOPPED +3d4aaa75e218 prelaunch-data-generator-1680882122201668972 STOPPED +``` + +Tebrikler! Yerel test ağınızı 1 yerine 3 düğüme sahip olacak şekilde başarıyla yapılandırdınız. Merkeziyetsiz uygulamanıza karşı daha önce yaptığınız iş akışlarını (dağıtma ve test etme) çalıştırmak için, `hardhat.config.ts` yapılandırma dosyanızdaki `localnet` yapısındaki `<$YOUR_PORT>` öğesini yeni, 3 düğümlü yerel test ağınızdaki herhangi bir `el-client-` hizmetinden gelen rpc uri çıktısının bağlantı noktasıyla değiştirerek daha önce yaptığımız işlemlerin aynısını gerçekleştirin. + +## Sonuç {#conclusion} + +İşte bu kadar! Bu kısa kılavuzu özetlemek gerekirse, şunları yaptınız: + +- Kurtosis kullanarak Docker üzerinde yerel bir Ethereum test ağı oluşturdunuz +- Yerel merkeziyetsiz uygulama geliştirme ortamınızı yerel Ethereum ağına bağladınız +- Yerel Ethereum ağında bir merkeziyetsiz uygulama dağıttınız ve ona karşı basit bir test çalıştırdınız +- Temel Ethereum ağını 3 düğüme sahip olacak şekilde yapılandırdınız + +Sizin için neyin iyi gittiğini, neyin iyileştirilebileceğini veya sorularınızı yanıtlamak için sizden haber bekliyoruz. [GitHub](https://github.com/kurtosis-tech/kurtosis/issues/new/choose) üzerinden ulaşmaktan veya [bize e-posta göndermekten](mailto:feedback@kurtosistech.com) çekinmeyin! + +### Diğer örnekler ve kılavuzlar {#other-examples-guides} + +Postgres veritabanı ve üzerine bir API oluşturacağınız [hızlı başlangıcımıza](https://docs.kurtosis.com/quickstart) ve harika örnekler bulacağınız [awesome-kurtosis depomuzdaki](https://github.com/kurtosis-tech/awesome-kurtosis) diğer örneklerimize göz atmanızı öneririz, bunlar arasında şunlar için paketler bulunur: + +- İşlemleri simüle etmek için bir işlem spam göndericisi, bir çatal izleyicisi ve bağlı bir Grafana ve Prometheus örneği gibi ek hizmetlerle bağlı olan [aynı yerel Ethereum test ağını başlatma](https://github.com/kurtosis-tech/eth2-package) +- Aynı yerel Ethereum ağına karşı bir [alt ağ testi](https://github.com/kurtosis-tech/awesome-kurtosis/tree/main/ethereum-network-partition-test) gerçekleştirme diff --git a/public/content/translations/tr/developers/tutorials/downsizing-contracts-to-fight-the-contract-size-limit/index.md b/public/content/translations/tr/developers/tutorials/downsizing-contracts-to-fight-the-contract-size-limit/index.md index d6c50a05428..043d9621bef 100644 --- a/public/content/translations/tr/developers/tutorials/downsizing-contracts-to-fight-the-contract-size-limit/index.md +++ b/public/content/translations/tr/developers/tutorials/downsizing-contracts-to-fight-the-contract-size-limit/index.md @@ -1,12 +1,9 @@ --- title: "Sözleşme boyutu sınırıyla mücadele etmek için sözleşmelerin küçültülmesi" -description: Akıllı sözleşmelerinizin çok fazla büyümesini önlemek için ne yapabilirsiniz? +description: "Akıllı sözleşmelerinizin çok fazla büyümesini önlemek için ne yapabilirsiniz?" author: Markus Waas lang: tr -tags: - - "solidity" - - "akıllı kontratlar" - - "depolama" +tags: [ "solidity", "akıllı kontratlar", "depolama" ] skill: intermediate published: 2020-06-26 source: soliditydeveloper.com @@ -15,13 +12,13 @@ sourceUrl: https://soliditydeveloper.com/max-contract-size ## Neden bir sınır var? {#why-is-there-a-limit} -[22 Kasım 2016](https://blog.ethereum.org/2016/11/18/hard-fork-no-4-spurious-dragon/)'da Spurious Dragon sert çatalı 24,576 kb akıllı sözleşme boyutu sınırı ekleyen [EIP-170](https://eips.ethereum.org/EIPS/eip-170)'i tanıttı. Bir Solidity geliştiricisi olarak sizin için bu, sözleşmenize giderek daha fazla işlevsellik eklediğinizde, bir noktada sınıra ulaşacağınız ve dağıtım sırasında şu hatayı göreceğiniz anlamına gelir: +[22 Kasım 2016](https://blog.ethereum.org/2016/11/18/hard-fork-no-4-spurious-dragon/) tarihinde Sahte Ejderha sert çatallanması, 24,576 kb'lık bir akıllı sözleşme boyutu sınırı ekleyen [EIP-170](https://eips.ethereum.org/EIPS/eip-170)'i getirdi. Bir Solidity geliştiricisi olarak sizin için bu, sözleşmenize giderek daha fazla işlevsellik eklediğinizde, bir noktada sınıra ulaşacağınız ve dağıtım sırasında şu hatayı göreceğiniz anlamına gelir: `Warning: Contract code size exceeds 24576 bytes (a limit introduced in Spurious Dragon). Bu sözleşme Mainnet'te dağıtılamayabilir. Consider enabling the optimizer (with a low "runs" value!), turning off revert strings, or using libraries.` Bu sınır, hizmet reddi (DOS) saldırılarını önlemek için getirildi. Bir sözleşmeye yapılan herhangi bir çağrı, gaz açısından nispeten ucuzdur. Bununla birlikte, Ethereum düğümleri için bir sözleşme çağrısının etkisi, çağrılan sözleşme kodunun boyutuna bağlı olarak orantısız bir şekilde artar (kodu diskten okumak, kodu önceden işlemek, Merkle kanıtına veri eklemek). Saldırganın başkaları için çok iş yapmak için az kaynağa ihtiyaç duyduğu böyle bir durumunuz olduğunda, DOS saldırıları potansiyeli elde edersiniz. -Bir doğal sözleşme boyutu limiti, blok gaz limiti olduğu için başlangıçta bu çok da büyük bir problem değildi. Açıkça görülüyor ki bir sözleşmenin, sözleşmenin tüm bit kodunu tutan bir işlem içinde dağıtılması gerekir. Bir bloğa yalnızca bir işlemi dahil ederseniz bu gazın tamamını kullanabilirsiniz, ancak bu sonsuz değildir. [Londra Yükseltmesi](/ethereum-forks/#london)'nden bu yana blok gaz limiti, ağ talebine bağlı olarak 15 milyon ile 30 milyon birim arasında değişti. +Bir doğal sözleşme boyutu limiti, blok gaz limiti olduğu için başlangıçta bu çok da büyük bir problem değildi. Açıkça görülüyor ki bir sözleşmenin, sözleşmenin tüm bit kodunu tutan bir işlem içinde dağıtılması gerekir. Bir bloğa yalnızca bir işlemi dahil ederseniz bu gazın tamamını kullanabilirsiniz, ancak bu sonsuz değildir. [Londra Yükseltmesi](/ethereum-forks/#london)'nden bu yana blok gaz limiti, ağ talebine bağlı olarak 15 milyon ile 30 milyon birim arasında değişebilmektedir. Aşağıda, potansiyel etkilerine göre sıralanan bazı yöntemlere bakacağız. Bunu, kilo verme gibi düşünün. Birinin hedef kilosuna (bizim durumumuzda 24 kb) ulaşması için en iyi strateji, önce büyük etkiye sahip yöntemlere odaklanmaktır. Çoğu zaman sadece diyeti düzeltmek amaca ulaştırır ancak bazen biraz daha fazlası gerekir. Sonra biraz egzersiz (orta etki) veya hatta takviye besinler (küçük etki) ekleyebilirsiniz. @@ -37,11 +34,11 @@ Bu her zaman ilk yaklaşımınız olmalıdır. Sözleşmeyi birden çok küçük ### Kütüphaneler {#libraries} -Fonksiyon kodunu depolama alanından uzaklaştırmanın basit bir yolu, bir [kütüphane](https://solidity.readthedocs.io/en/v0.6.10/contracts.html#libraries) kullanmaktır. Kütüphane fonksiyonları derleme esnasında doğrudan [sözleşmeye ekleneceği](https://ethereum.stackexchange.com/questions/12975/are-internal-functions-in-libraries-not-covered-by-linking) için onları dahili olarak duyurmayın. Ancak genel fonksiyonları kullanırsanız, bunlar aslında ayrı bir kütüphane sözleşmesinde olacaktır. Kütüphanelerin kullanımını daha uygun hâle getirmek için [using for](https://solidity.readthedocs.io/en/v0.6.10/contracts.html#using-for)'u göz önüne alın. +İşlevsellik kodunu depolamadan uzaklaştırmanın basit bir yolu, bir [kütüphane](https://solidity.readthedocs.io/en/v0.6.10/contracts.html#libraries) kullanmaktır. Kütüphane fonksiyonlarını `internal` olarak bildirmeyin, çünkü bunlar derleme sırasında doğrudan [sözleşmeye eklenecektir](https://ethereum.stackexchange.com/questions/12975/are-internal-functions-in-libraries-not-covered-by-linking). Ancak genel fonksiyonları kullanırsanız, bunlar aslında ayrı bir kütüphane sözleşmesinde olacaktır. Kütüphanelerin kullanımını daha kolay hale getirmek için [`using for`](https://solidity.readthedocs.io/en/v0.6.10/contracts.html#using-for) kullanmayı düşünün. ### Proxy'ler {#proxies} -Proxy sistemi, daha gelişmiş bir stratejidir. Kütüphaneler arka planda, çağıran sözleşmenin durumuyla başka bir sözleşmenin fonksiyonunu yürüten `DELEGATECALL` kullanır. Proxy'ler hakkında dahasını öğrenmek için [bu blog gönderisine](https://hackernoon.com/how-to-make-smart-contracts-upgradable-2612e771d5a2) bakın. Yükseltilebilirliği sağlamak gibi daha fazla işlevsellik sağlarlar ancak aynı zamanda çok fazla karmaşıklık da eklerler. Herhangi bir nedenle tek seçeneğiniz olmadıkça, bunları yalnızca sözleşme boyutlarını azaltmak için eklenmesini tavsiye etmem. +Proxy sistemi, daha gelişmiş bir stratejidir. Kütüphaneler arka planda, çağıran sözleşmenin durumuyla başka bir sözleşmenin fonksiyonunu yürüten DELEGATECALL kullanır. Proxy sistemleri hakkında daha fazla bilgi edinmek için [bu blog gönderisine](https://hackernoon.com/how-to-make-smart-contracts-upgradable-2612e771d5a2) göz atın. Yükseltilebilirliği sağlamak gibi daha fazla işlevsellik sağlarlar ancak aynı zamanda çok fazla karmaşıklık da eklerler. Herhangi bir nedenle tek seçeneğiniz olmadıkça, bunları yalnızca sözleşme boyutlarını azaltmak için eklenmesini tavsiye etmem. ## Orta etki {#medium-impact} @@ -54,8 +51,6 @@ Bu bariz bir yöntem. Fonksiyonlar, sözleşme boyutunu biraz artırır. ### Ek değişkenlerden kaçının {#avoid-additional-variables} -Bunun gibi küçük bir değişim: - ```solidity function get(uint id) returns (address,address) { MyStruct memory myStruct = myStructs[id]; @@ -69,7 +64,7 @@ function get(uint id) returns (address,address) { } ``` -**0,28kb**'lık bir fark yaratır. Muhtemelen sözleşmelerinizde birçok benzer durum vardır ve bunlar gerçekten önemli miktarlara ulaşabilir. +Bunun gibi basit bir değişiklik **0,28kb**'lık bir fark yaratır. Muhtemelen sözleşmelerinizde birçok benzer durum vardır ve bunlar gerçekten önemli miktarlara ulaşabilir. ### Hata mesajını kısaltın {#shorten-error-message} @@ -77,7 +72,6 @@ Uzun geri dönüş mesajları ve özellikle birçok farklı geri dönüş mesaj ```solidity require(msg.sender == owner, "Only the owner of this contract can call this function"); - ``` ```solidity @@ -96,15 +90,15 @@ if (msg.sender != owner) { } ``` -### Optimize edicide düşük bir çalıştırma değerini göz önünde bulundurun {#consider-a-low-run-value-in-the-optimizer} +### Optimize edicide düşük bir çalıştırma değeri düşünün {#consider-a-low-run-value-in-the-optimizer} -Optimize edici ayarlarını da değiştirebilirsiniz. 200 varsayılan değeri, bit kodunu bir fonksiyon 200 kez çağrılmış gibi optimize etmeye çalıştığı anlamına gelir. 1 olarak değiştirirseniz, temel olarak optimize ediciye her fonksiyonu yalnızca bir kez çalıştırma durumu için optimize etmesini söylersiniz. Yalnızca bir kez çalışmak için optimize edilmiş bir fonksiyon, dağıtımın kendisi için optimize edildiği anlamına gelir. Bunun, **işlevleri çalıştırmak için gereken [gaz maliyetlerini](/developers/docs/gas/) artırdığını unutmayın**, yani bunu yapmamak daha iyi olabilir. +Optimize edici ayarlarını da değiştirebilirsiniz. 200 varsayılan değeri, bit kodunu bir fonksiyon 200 kez çağrılmış gibi optimize etmeye çalıştığı anlamına gelir. 1 olarak değiştirirseniz, temel olarak optimize ediciye her fonksiyonu yalnızca bir kez çalıştırma durumu için optimize etmesini söylersiniz. Yalnızca bir kez çalışmak için optimize edilmiş bir fonksiyon, dağıtımın kendisi için optimize edildiği anlamına gelir. **Bunun, fonksiyonları çalıştırmak için gereken [gaz maliyetlerini](/developers/docs/gas/) artırdığını unutmayın**, bu yüzden bunu yapmak istemeyebilirsiniz. ## Küçük etki {#small-impact} -### Fonksiyonlara yapılar aktarmaktan kaçının {#avoid-passing-structs-to-functions} +### Yapıları (structs) fonksiyonlara geçirmekten kaçının {#avoid-passing-structs-to-functions} -Eğer [ABIEncoderV2](https://solidity.readthedocs.io/en/v0.6.10/layout-of-source-files.html#abiencoderv2) kullanıyorsanız bu, fonksiyonlara yapı aktarmamanıza yardımcı olabilir. Parametreyi bir yapı olarak aktarmaktansa... +[ABIEncoderV2](https://solidity.readthedocs.io/en/v0.6.10/layout-of-source-files.html#abiencoderv2) kullanıyorsanız, bir fonksiyona yapıları (structs) geçirmemek yardımcı olabilir. Parametreyi bir yapı (struct) olarak geçmek yerine gerekli parametreleri doğrudan geçin. Bu örnekte **0,1kb** daha kazandık. ```solidity function get(uint id) returns (address,address) { @@ -126,12 +120,10 @@ function _get(address addr1, address addr2) private view returns(address,address } ``` -...gerekli parametreleri doğrudan aktarın. Bu örnekte **0,1 kb** daha kazandık. - -### Fonksiyonlar ve değişkenler için doğru görünürlük duyurun {#declare-correct-visibility-for-functions-and-variables} +### Fonksiyonlar ve değişkenler için doğru görünürlüğü bildirin {#declare-correct-visibility-for-functions-and-variables} -- Yalnızca dışarıdan çağrılan fonksiyonlar veya değişkenler ne olacak? Onları `public` yerine `external` olarak duyurun. -- Yalnızca sözleşmenin içinden çağrılan fonksiyonlar veya değişkenler ne olacak? Onları `public` yerine `private` veya `external` olarak duyurun. +- Yalnızca dışarıdan çağrılan fonksiyonlar veya değişkenler ne olacak? Onları `public` yerine `external` olarak bildirin. +- Yalnızca sözleşmenin içinden çağrılan fonksiyonlar veya değişkenler ne olacak? Onları `public` yerine `private` veya `internal` olarak bildirin. ### Niteleyicileri kaldırın {#remove-modifiers} diff --git a/public/content/translations/tr/developers/tutorials/eip-1271-smart-contract-signatures/index.md b/public/content/translations/tr/developers/tutorials/eip-1271-smart-contract-signatures/index.md index d24ea9bd10e..8afc0384334 100644 --- a/public/content/translations/tr/developers/tutorials/eip-1271-smart-contract-signatures/index.md +++ b/public/content/translations/tr/developers/tutorials/eip-1271-smart-contract-signatures/index.md @@ -1,20 +1,22 @@ --- title: "EIP-1271: Akıllı Sözleşme İmzalarını İmzalama ve Doğrulama" -description: EIP-1271 ile Akıllı sözleşme imzası oluşturmaya ve doğrulamaya yönelik bir genel görünüm. Ayrıca akıllı sözleşme geliştiricilerinin üzerine geliştirme yapmaları amaçlı somut bir örnek sağlamak için "Safe"te (önceden adı Gnosis Safe'ti) kullanılan EIP-1271 uygulamasının üstünden geçeceğiz. +description: "EIP-1271 ile Akıllı sözleşme imzası oluşturmaya ve doğrulamaya yönelik bir genel görünüm. Ayrıca akıllı sözleşme geliştiricilerinin üzerine geliştirme yapmaları amaçlı somut bir örnek sağlamak için \"Safe\"te (önceden adı Gnosis Safe'ti) kullanılan EIP-1271 uygulamasının üstünden geçeceğiz." author: Nathan H. Leung lang: tr tags: - - "eip-1271" - - "akıllı sözleşmeler" - - "doğrulama" - - "imzalama" + [ + "eip-1271", + "akıllı kontratlar", + "doğrulama", + "imzalama" + ] skill: intermediate published: 2023-01-12 --- -[EIP-1271](https://eips.ethereum.org/EIPS/eip-1271) standardı, akıllı sözleşmelerin imzaları doğrulayabilmesini sağlar. +[EIP-1271](https://eips.ethereum.org/EIPS/eip-1271) standardı, akıllı sözleşmelerin imzaları doğrulamasına olanak tanır. -Bu öğreticide dijital imzalar, EIP-1271in arka planı ve [Safe](https://safe.global/)(önceden adı Gnosis Safe'ti) tarafından kullanılan spesifik EIP-1271 uygulaması hakkında genel bilgiler vereceğiz. Kısaca bu, EIP-1271'i kendi sözleşmelerinizde uygulayabilmek için bir başlangıç noktası olarak hizmet edebilir. +Bu öğreticide, dijital imzalara, EIP-1271'in arka planına ve [Safe](https://safe.global/) (eski adıyla Gnosis Safe) tarafından kullanılan özel EIP-1271 uygulamasına genel bir bakış sunuyoruz. Kısaca bu, EIP-1271'i kendi sözleşmelerinizde uygulayabilmek için bir başlangıç noktası olarak hizmet edebilir. ## İmza nedir? @@ -23,8 +25,8 @@ Bu bağlamda imza (daha doğrusu “dijital imza”), bir mesaj ve onunla birlik Örnek olarak, bir dijital imza şu şekilde görünebilir: 1. Mesaj: "Bu siteye Ethereum cüzdanımla girmek istiyorum". -2. İmzalayıcı: Benim adresim `0x000…` -3. Kanıt: İşte benim, `0x000…`, bu mesajın tamamını gerçekten oluşturduğumu gösteren kanıt (bu genelde kriptografik bir şeydir). +2. İmzalayıcı: Adresim `0x000…` +3. Kanıt: İşte ben, `0x000…`, bu mesajın tamamını gerçekten oluşturduğumun kanıtı (bu genellikle kriptografik bir şeydir). Dijital imzanın hem "mesaj" hem de "imza" içerdiğini tekrar hatırlatmakta fayda var. @@ -36,11 +38,11 @@ Aynı nedenle, dijital imzalar da ilişkili bir mesaj olmadan bir hiçtir! Ethereum tabanlı blokzincirlerde kullanılacak bir dijital imza oluşturmak için genelde kimsenin bilmediği gizli bir özel anahtara ihtiyacınız vardır. Bu, imzanızı sizin yapan şeydir (kimse gizli anahtarı bilmeden aynı imzayı yaratamaz). -Ethereum hesabınızın (harici olarak sahiplenilmiş hesabınız/EOA) kendisine bağlı bir özel anahtarı vardır ve bu, bir site veya merkeziyetsiz uygulama sizden bir imza istediğinizde tipik olarak kullandığınız anahtardır (örnek: "Ethereum ile giriş yapın" için). +Ethereum hesabınızın (yani harici olarak sahip olunan hesabınızın/EOA) ilişkili bir özel anahtarı vardır ve bu, bir web sitesi veya merkeziyetsiz uygulama sizden bir imza istediğinde (ör. “Ethereum ile Oturum Aç” için) genellikle kullanılan özel anahtardır. -Bir uygulama, [özel anahtarınızı bilmeden](https://en.wikipedia.org/wiki/Public-key_cryptography) ethers.js gibi bir üçüncü taraf kullanarak oluşturduğunuz bir [imzayı onaylayabilir](https://docs.alchemy.com/docs/how-to-verify-a-message-signature-on-ethereum)ve imzayı yaratanın _siz_ olduğunuza güvenebilir. +Bir uygulama, ethers.js gibi bir üçüncü taraf kütüphanesi kullanarak oluşturduğunuz bir imzayı [özel anahtarınızı bilmeden](https://en.wikipedia.org/wiki/Public-key_cryptography) [doğrulayabilir](https://www.alchemy.com/docs/how-to-verify-a-message-signature-on-ethereum) ve imzanın _sizin_ tarafınızdan oluşturulduğundan emin olabilir. -> EOA dijital imzaları, herkese açık anahtar kriptografisi kullandığı için **zincir dışında** oluşturulabilir ve doğrulanabilir! Gazsız DAO oylaması bu şekilde çalışır; oyları zincir üstünde göndermek yerine, kriptografik kütüphaneler kullanılarak zincir dışında dijital imzalar oluşturulabilir ve doğrulanabilir. +> Aslında, EOA dijital imzaları açık anahtar kriptografisi kullandığından, **zincir dışı** olarak oluşturulabilir ve doğrulanabilirler! Gazsız DAO oylaması bu şekilde çalışır — oyları zincir üstünde göndermek yerine, dijital imzalar kriptografik kütüphaneler kullanılarak zincir dışında oluşturulabilir ve doğrulanabilir. EOA hesapları bir özel anahtara sahipken, akıllı sözleşme hesaplarının bu türde bir özel ya da gizli anahtarı yoktur (yani "Ethereum'la giriş yapın" ve benzerleri, akıllı sözleşme hesaplarınızla yerel biçimde çalışamaz). @@ -50,17 +52,17 @@ EIP-1271'in çözmeyi hedeflediği problem: Eğer bir akıllı sözleşmenin imz Akıllı sözleşmelerin mesaj imzalamak için kullanabilecekleri özel anahtarları yoktur. O zaman bir imzanın özgün olduğunu nasıl anlayabiliriz? -Bir yolu, imzanın özgün olup olmadığını doğrudan akıllı sözleşmeye _sormak_ olabilir! +Bir fikir de, bir imzanın orijinal olup olmadığını doğrudan akıllı sözleşmeye _sormaktır_! EIP'nin yaptığı şey, bir akıllı sözleşmeye belirli bir imzanın geçerli olup olmadığını sorma fikrini standart hale getirmektir. -EIP-1271'i uygulayan bir sözleşmenin bir mesaj ve imzayı alan `isValidSignature` adında bir fonksiyonu olması gerekir. Sözleşme, sonrasında bir tür doğrulama mantığı yürütüp (burada spesifikasyon belirli bir şeyi uygulatmaz) ve imzanın geçerli olup olmadığını belirten bir değer döndürebilir. +EIP-1271'i uygulayan bir sözleşmenin, bir mesaj ve bir imza alan `isValidSignature` adında bir fonksiyonu olmalıdır. Sözleşme, sonrasında bir tür doğrulama mantığı yürütüp (burada spesifikasyon belirli bir şeyi uygulatmaz) ve imzanın geçerli olup olmadığını belirten bir değer döndürebilir. -Eğer `isValidSignature` geçerli bir sonuç döndürürse, sözleşmenin hemen hemen "evet, bu imzayı + mesajı onaylıyorum" dediği sonucuna ulaşılabilir! +Eğer `isValidSignature` geçerli bir sonuç döndürürse, bu, sözleşmenin “evet, bu imzayı + mesajı onaylıyorum!” dediği anlamına gelir. ### Arayüz -EIP-1271 spesifikasyonundaki arayüz tam olarak budur (aşağıda `hash` parametresi hakkında konuşacağız, fakat şimdilik bunu doğrulanmakta olan mesaj gibi düşünün): +İşte EIP-1271 spesifikasyonundaki arayüzün tam hali (aşağıda `_hash` parametresinden bahsedeceğiz, ancak şimdilik bunu doğrulanan mesaj olarak düşünebilirsiniz): ```jsx pragma solidity ^0.5.0; @@ -71,13 +73,13 @@ contract ERC1271 { bytes4 constant internal MAGICVALUE = 0x1626ba7e; /** - * @dev Should return whether the signature provided is valid for the provided hash - * @param _hash Hash of the data to be signed - * @param _signature Signature byte array associated with _hash + * @dev Sağlanan imzanın, sağlanan karma için geçerli olup olmadığını döndürmelidir + * @param _hash İmzalanacak verinin karması + * @param _signature _hash ile ilişkili imza bayt dizisi * - * MUST return the bytes4 magic value 0x1626ba7e when function passes. - * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5) - * MUST allow external calls + * Fonksiyon başarılı olduğunda 0x1626ba7e sihirli bytes4 değerini döndürmelidir. + * Durumu değiştirmemelidir (solc < 0.5 için STATICCALL, solc > 0.5 için view değiştiricisi kullanılır) + * Harici çağrılara izin vermelidir */ function isValidSignature( bytes32 _hash, @@ -90,28 +92,28 @@ contract ERC1271 { ## Örnek EIP-1271 Uygulaması: Safe -Sözleşmeler, `isValidSignature`'ı farklı şekillerde uygulayabilir; spesifikasyon kendi başına uygulama hakkında pek bir şey demez. +Sözleşmeler `isValidSignature` fonksiyonunu birçok farklı şekilde uygulayabilir — spesifikasyon tam olarak nasıl uygulanacağı hakkında pek bir şey söylemez. EIP-1271'i uygulayan göze çarpan sözleşmelerden biri Safe'tir (önceden adı Gnosis Safe'ti). -Safe'in kodunda `isValidSignature` [uygulanır](https://github.com/safe-global/safe-contracts/blob/main/contracts/handler/CompatibilityFallbackHandler.sol), bu sayede imzalar [iki farklı şekilde](https://ethereum.stackexchange.com/questions/122635/signing-messages-as-a-gnosis-safe-eip1271-support) oluşturulabilir ve doğrulanabilir: +Safe'in kodunda `isValidSignature`, imzaların [iki şekilde](https://ethereum.stackexchange.com/questions/122635/signing-messages-as-a-gnosis-safe-eip1271-support) oluşturulup doğrulanabilmesi için [şu şekilde uygulanmıştır](https://github.com/safe-global/safe-contracts/blob/main/contracts/handler/CompatibilityFallbackHandler.sol): 1. Zincir üstü mesajlar - 1. Oluşturma: bir Safe sahibi bir mesajı "imzalamak" için yeni bir Safe işlemi oluşturarak mesajı veri olarak işleme aktarır. Çoklu imza eşiğine ulaşabilmek için yeterli sayıda sahip işlemi imzaladığında, işlem yayımlanır ve çalıştırılır. İşlemde, mesajı onaylanmış mesajlar listesine ekleyen, çağrılan güvenli bir fonksiyon vardır. - 2. Doğrulama: Safe sözleşmesinde `isValidSignature`'ı çağırın ve mesajı, mesaj parametresi ve [imza parametresi için boş bir değer olarak doğrulamak üzere aktarın](https://github.com/safe-global/safe-contracts/blob/main/contracts/handler/CompatibilityFallbackHandler.sol#L32) (yani `0x`). Safe, imza parametresinin boş olduğunu görecek ve kriptografik olarak imzayı doğrulamak yerine, sadece devam etmesi ve mesajın "onaylanmış" mesajlar listesi içinde olup olmadığını kontrol etmesi gerektiğini bilecektir. + 1. Oluşturma: bir Safe sahibi bir mesajı "imzalamak" için yeni bir Safe işlemi oluşturarak mesajı veri olarak işleme aktarır. Çoklu imza eşiğine ulaşabilmek için yeterli sayıda sahip işlemi imzaladığında, işlem yayımlanır ve çalıştırılır. İşlemde, mesajı “onaylanmış” mesajlar listesine ekleyen `signMessage(bytes calldata _data)` adında bir Safe fonksiyonu bulunur. + 2. Doğrulama: Safe sözleşmesinde `isValidSignature` fonksiyonunu çağırın ve mesaj parametresi olarak doğrulanacak mesajı ve [imza parametresi için boş bir değeri](https://github.com/safe-global/safe-contracts/blob/main/contracts/handler/CompatibilityFallbackHandler.sol#L32) (yani `0x`) geçin. Safe, imza parametresinin boş olduğunu görecek ve kriptografik olarak imzayı doğrulamak yerine, sadece devam etmesi ve mesajın "onaylanmış" mesajlar listesi içinde olup olmadığını kontrol etmesi gerektiğini bilecektir. 2. Zincir dışı mesajlar: - 1. Oluşturma: bir Safe sahibi zincir dışı bir mesaj oluşturur, sonra da diğer Safe sahiplerin her birinin çoklu imza onaylanma eşiğine gelene kadar mesajı imzalamasını sağlar. - 2. Doğrulama: `isValidSignature`'ı çağırın. Mesaj parametresinde, doğrulanması gereken mesajı aktarın. İmza parametresinde, Safe sahiplerinin her birinin bireysel imzalarını sıralanmış şekilde arka arkaya aktarın. Safe, eşiğe ulaşmak için gerekli sayıda imza olup olmadığını **ve** her bir imzanın geçerli olup olmadığını kontrol edecektir. Eğer geçerliyse, imza doğrulamasının başarılı olduğunu belirten bir değer döndürecektir. + 1. Oluşturma: Bir Safe sahibi zincir dışı bir mesaj oluşturur, ardından çoklu imza onay eşiğini aşmak için yeterli imza olana kadar diğer Safe sahiplerinin her birinin mesajı ayrı ayrı imzalamasını sağlar. + 2. Doğrulama: `isValidSignature` fonksiyonunu çağırın. Mesaj parametresinde, doğrulanması gereken mesajı aktarın. İmza parametresinde, Safe sahiplerinin her birinin bireysel imzalarını sıralanmış şekilde arka arkaya aktarın. Safe, eşiği karşılamak için yeterli imza olup olmadığını **ve** her imzanın geçerli olup olmadığını kontrol edecektir. Eğer geçerliyse, imza doğrulamasının başarılı olduğunu belirten bir değer döndürecektir. ## `_hash` parametresi tam olarak nedir? Neden tüm mesajı aktarmıyoruz? -[EIP-1271 arayüzündeki](https://eips.ethereum.org/EIPS/eip-1271) `isValidSignature` fonksiyonunun mesaj yerine bir `_hash` parametresini aldığını fark etmiş olabilirsiniz. Bunun anlamı, `isValidSignature`'a keyfi uzunluktaki mesajın tamamını aktarmak yerine, mesajın 32 baytlık bir düğümünü (genelde keccak256) aktarıyor olmamızdır. +[EIP-1271 arayüzündeki](https://eips.ethereum.org/EIPS/eip-1271) `isValidSignature` fonksiyonunun mesajın kendisini değil, bunun yerine bir `_hash` parametresi aldığını fark etmiş olabilirsiniz. Bunun anlamı, `isValidSignature`'a değişken uzunluktaki mesajın tamamını geçmek yerine, mesajın 32 baytlık bir karmasını (genellikle keccak256) geçmemizdir. -Çağrı verisinin her baytı, yani bir akıllı sözleşmeye aktarılan fonksiyon parametresi verilerinin maliyeti [16 gazdır (sıfır baytsa 4 gaz)](https://eips.ethereum.org/EIPS/eip-2028), yani bir mesaj uzunsa gazdan ciddi şekilde tasarruf edilebilir. +`calldata`nın her baytı — yani, bir akıllı sözleşme fonksiyonuna geçirilen fonksiyon parametre verileri — [16 gaz maliyetindedir (sıfır bayt ise 4 gaz)](https://eips.ethereum.org/EIPS/eip-2028), bu nedenle bir mesaj uzunsa çok fazla gaz tasarrufu sağlayabilir. ### Önceki EIP-1271 Spesifikasyonları -Etrafta ilk parametresi `bytes` (sabit uzunluk yerine keyfi uzunlukta `bytes32`) olan ve parametre ismi `message` olan `isValidSignature` fonksiyonlu EIP-1271 spesifikasyonları mevcuttur. Bu, EIP-1271 standardının [eski](https://github.com/safe-global/safe-contracts/issues/391#issuecomment-1075427206) bir versiyonudur. +Piyasada, `isValidSignature` fonksiyonunun ilk parametresinin `message` adında ve `bytes` türünde (sabit uzunluklu `bytes32` yerine değişken uzunluklu) olduğu EIP-1271 spesifikasyonları bulunmaktadır. Bu, EIP-1271 standardının [eski bir sürümüdür](https://github.com/safe-global/safe-contracts/issues/391#issuecomment-1075427206). ## EIP-1271 benim sözleşmelerime nasıl uygulanmalıdır? @@ -124,4 +126,4 @@ Sonuçta, bu sözleşme geliştiricisi olarak size kalmış! ## Sonuç -[EIP-1271](https://eips.ethereum.org/EIPS/eip-1271), akıllı sözleşmelerin imzaları doğrulayabilmelerini sağlayan çok yönlü bir standarttır. Akıllı sözleşmelerin EOA'lar gibi hareket edebilmelerini sağlar; örnek olarak, "Ethereum'la giriş yapın" ifadesinin akıllı sözleşmelerle çalışabilmesine olanak tanır ve birçok farklı şekilde uygulanabilir (Safe'in anlaşılması zor ve ilginç uygulamasını da göz önünde bulundurarak). +[EIP-1271](https://eips.ethereum.org/EIPS/eip-1271), akıllı sözleşmelerin imzaları doğrulamasına olanak tanıyan çok yönlü bir standarttır. Akıllı sözleşmelerin EOA'lar gibi hareket edebilmelerini sağlar; örnek olarak, "Ethereum'la giriş yapın" ifadesinin akıllı sözleşmelerle çalışabilmesine olanak tanır ve birçok farklı şekilde uygulanabilir (Safe'in anlaşılması zor ve ilginç uygulamasını da göz önünde bulundurarak). diff --git a/public/content/translations/tr/developers/tutorials/erc-721-vyper-annotated-code/index.md b/public/content/translations/tr/developers/tutorials/erc-721-vyper-annotated-code/index.md index 25254b47a84..78e6ba0ceac 100644 --- a/public/content/translations/tr/developers/tutorials/erc-721-vyper-annotated-code/index.md +++ b/public/content/translations/tr/developers/tutorials/erc-721-vyper-annotated-code/index.md @@ -1,31 +1,32 @@ --- title: "Vyper ERC-721 Sözleşmesine Genel Bakış" -description: Ryuya Nakamura'nın ERC-721 sözleşmesi ve nasıl çalıştığı +description: "Ryuya Nakamura'nın ERC-721 sözleşmesi ve nasıl çalıştığı" author: Ori Pomerantz lang: tr -tags: - - "vyper" - - "erc-721" - - "python" +tags: [ "vyper", "erc-721", "python" ] skill: beginner published: 2021-04-01 --- ## Giriş {#introduction} -[ERC-721](/developers/docs/standards/tokens/erc-721/) standardı, Değiştirilemez Token'ların (NFT) sahipliğini tutmak için kullanılır. [ERC-20](/developers/docs/standards/tokens/erc-20/) token'ları, bireysel token'lar arasında bir fark olmadığı için bir emtia gibidir. Bunun aksine ERC-721 token'ları, farklı [kedi karikatürleri](https://www.cryptokitties.co/) veya farklı gayrimenkul parçalarına verilen unvanlar gibi benzer ancak aynı olmayan varlıklar için tasarlanmıştır. +[ERC-721](/developers/docs/standards/tokens/erc-721/) standardı, Değiştirilemez Jetonların (NFT) sahipliğini tutmak için kullanılır. +[ERC-20](/developers/docs/standards/tokens/erc-20/) jetonları, bireysel jetonlar arasında bir fark olmadığı için bir emtia gibi davranır. +Bunun aksine, ERC-721 jetonları, farklı kedi +çizgi filmleri veya farklı gayrimenkullerin tapuları gibi benzer ancak birebir aynı olmayan varlıklar için tasarlanmıştır. -Bu makalede [Ryuya Nakamura'nın ERC-721 sözleşmesini](https://github.com/vyperlang/vyper/blob/master/examples/tokens/ERC721.vy) analiz edeceğiz. Bu sözleşme, güvensiz kod yazmayı Solidity'de olduğundan daha zorlaştırmak için dizayn edilmiş Python benzeri bir sözleşme dili olan [Vyper](https://vyper.readthedocs.io/en/latest/index.html) ile yazılmıştır. +Bu makalede [Ryuya Nakamura'nın ERC-721 sözleşmesini](https://github.com/vyperlang/vyper/blob/master/examples/tokens/ERC721.vy) analiz edeceğiz. +Bu sözleşme, güvensiz kod yazmayı Solidity'de olduğundan daha zorlaştırmak için tasarlanmış Python benzeri bir sözleşme dili olan [Vyper](https://vyper.readthedocs.io/en/latest/index.html) ile yazılmıştır. ## Sözleşme {#contract} ```python -# @dev Implementation of ERC-721 non-fungible token standard. -# @author Ryuya Nakamura (@nrryuya) -# Modified from: https://github.com/vyperlang/vyper/blob/de74722bf2d8718cca46902be165f9fe0e3641dd/examples/tokens/ERC721.vy +# @dev ERC-721 değiştirilemez jeton standardının uygulaması. +# @yazar Ryuya Nakamura (@nrryuya) +# Şuradan değiştirildi: https://github.com/vyperlang/vyper/blob/de74722bf2d8718cca46902be165f9fe0e3641dd/examples/tokens/ERC721.vy ``` -Python'da olduğu gibi Vyper'da da yorumlar bir hash (`#`) ile başlar ve satırın sonuna kadar devam eder. `@` içeren yorumlar insan tarafından okunabilir belgeler oluşturmak için [NatSpec](https://vyper.readthedocs.io/en/latest/natspec.html) tarafından kullanılır. +Python'da olduğu gibi Vyper'da da yorumlar bir kare işareti (`#`) ile başlar ve satırın sonuna kadar devam eder. `@` içeren yorumlar, [NatSpec](https://vyper.readthedocs.io/en/latest/natspec.html) tarafından insanlar tarafından okunabilir belgeler oluşturmak için kullanılır. ```python from vyper.interfaces import ERC721 @@ -33,37 +34,40 @@ from vyper.interfaces import ERC721 implements: ERC721 ``` -ERC-721 arayüzü, Vyper dilinde yerleşiktir. [Kod tanımlamasını burada görebilirsiniz](https://github.com/vyperlang/vyper/blob/master/vyper/builtin_interfaces/ERC721.py). Arayüz tanımı Vyper yerine Python'da yazılmıştır, çünkü arayüzler yalnızca blok zinciri içinde değil, blok zincirine Python'da yazılabilen harici bir istemciden bir işlem gönderirken de kullanılır. +ERC-721 arayüzü, Vyper dilinde yerleşiktir. +[Kod tanımını burada görebilirsiniz](https://github.com/vyperlang/vyper/blob/master/vyper/builtin_interfaces/ERC721.py). +Arayüz tanımı Vyper yerine Python'da yazılmıştır, çünkü arayüzler yalnızca blokzincir içinde değil, blokzincire Python ile yazılabilen harici bir istemciden bir işlem gönderilirken de kullanılır. İlk satır, arayüzü içe aktarır ve ikincisi onu burada uyguladığımızı belirtir. ### ERC721Receiver Arayüzü {#receiver-interface} ```python -# Interface for the contract called by safeTransferFrom() +# safeTransferFrom() tarafından çağrılan sözleşme için arayüz interface ERC721Receiver: def onERC721Received( ``` ERC-721 iki tür aktarımı destekler: -- `transferFrom`, gönderenin herhangi bir hedef adresi belirlemesine izin verir ve transfer sorumluluğunu gönderene yükler. Bu, geçersiz bir adrese transfer yapabileceğiniz anlamına gelir, bu durumda NFT tamamen kaybolur. -- Hedef adresin bir sözleşme olduğunu kontrol eden `safeTransferFrom`. Eğer öyleyse, ERC-721 sözleşmesi alıcı sözleşmeye NFT'yi almak isteyip istemediğini sorar. +- `transferFrom`, göndericinin herhangi bir hedef adresi belirtmesine olanak tanır ve aktarım sorumluluğunu göndericiye yükler. Bu, geçersiz bir adrese aktarım yapabileceğiniz anlamına gelir, bu durumda + NFT tamamen kaybolur. +- `safeTransferFrom`, hedef adresin bir sözleşme olup olmadığını kontrol eder. Eğer öyleyse, ERC-721 sözleşmesi alıcı sözleşmeye NFT'yi almak isteyip istemediğini sorar. -`safeTransferFrom` isteklerini yanıtlamak için bir alıcı sözleşmesinin `ERC721Receiver` uygulaması gerekir. +`safeTransferFrom` isteklerine yanıt vermek için alıcı bir sözleşmenin `ERC721Receiver`'ı uygulaması gerekir. ```python _operator: address, _from: address, ``` -`_from` adresi token'ın mevcut sahibidir. `_operator` adresi, transferi talep eden adrestir (ödenekler nedeniyle bu ikisi aynı olmayabilir). +`_from` adresi jetonun mevcut sahibidir. `_operator` adresi, aktarımı talep eden adrestir (ödenekler nedeniyle bu ikisi aynı olmayabilir). ```python _tokenId: uint256, ``` -ERC-721 token ID'leri 256 bittir. Tipik olarak, token'ın temsil ettiği şeyin bir açıklamasının hash edilmesiyle oluşturulurlar. +ERC-721 jeton ID'leri 256 bittir. Tipik olarak, jetonun temsil ettiği şeyin bir açıklamasının hash edilmesiyle oluşturulurlar. ```python _data: Bytes[1024] @@ -75,113 +79,117 @@ ERC-721 token ID'leri 256 bittir. Tipik olarak, token'ın temsil ettiği şeyin ) -> bytes32: view ``` -Bir sözleşmenin yanlışlıkla bir transferi kabul ettiği durumları önlemek için, dönüş değeri bir boolean değil, belirli bir değere sahip 256 bittir. +Bir sözleşmenin yanlışlıkla bir aktarımı kabul ettiği durumları önlemek için, dönüş değeri bir boole değil, belirli bir değere sahip 256 bittir. -Bu işlev bir `view`'dur, yani blok zincirinin durumunu okuyabilir, ancak değiştiremez. +Bu işlev bir `view`'dur, yani blokzincirin durumunu okuyabilir, ancak değiştiremez. -### Etkinlikler {#events} +### Olaylar {#events} -[Olaylar](https://media.consensys.net/technical-introduction-to-events-and-logs-in-ethereum-a074d65dd61e) blok zincirinin dışındaki kullanıcıları ve sunucuları bilgilendirmek için yayınlanır. Olayların içeriğinin blok zincirindeki sözleşmeler için mevcut olmadığını unutmayın. +[Olaylar](https://media.consensys.net/technical-introduction-to-events-and-logs-in-ethereum-a074d65dd61e) blokzincir dışındaki kullanıcıları ve sunucuları olaylar hakkında bilgilendirmek için yayınlanır. Olayların içeriğinin blokzincirdeki sözleşmeler için mevcut olmadığını unutmayın. ```python -# @dev Emits when ownership of any NFT changes by any mechanism. This event emits when NFTs are -# created (`from` == 0) and destroyed (`to` == 0). Exception: during contract creation, any -# number of NFTs may be created and assigned without emitting Transfer. At the time of any -# transfer, the approved address for that NFT (if any) is reset to none. -# @param _from Sender of NFT (if address is zero address it indicates token creation). -# @param _to Receiver of NFT (if address is zero address it indicates token destruction). -# @param _tokenId The NFT that got transferred. +# @dev Herhangi bir NFT'nin mülkiyeti herhangi bir mekanizma ile değiştiğinde yayınlanır. Bu olay, NFT'ler +# oluşturulduğunda (`from` == 0) ve yok edildiğinde (`to` == 0) yayınlanır. İstisna: sözleşme oluşturma sırasında, herhangi +# bir sayıda NFT, Transfer yayınlanmadan oluşturulabilir ve atanabilir. Herhangi bir +# aktarım sırasında, o NFT için onaylanmış adres (varsa) sıfırlanır. +# @param _from NFT'nin göndericisi (adres sıfır adresi ise jeton oluşturmayı belirtir). +# @param _to NFT'nin alıcısı (adres sıfır adresi ise jeton yok etmeyi belirtir). +# @param _tokenId Aktarılan NFT. event Transfer: sender: indexed(address) receiver: indexed(address) tokenId: indexed(uint256) ``` -Bu, bir miktar yerine bir `tokenId` bildirmemiz dışında, ERC-20 Transfer olayına benzer. Hiç kimse sıfır adresine sahip değildir, bu nedenle geleneksel olarak onu token'ların oluşturulmasını ve yok edilmesini bildirmek için kullanırız. +Bu, bir miktar yerine bir `tokenId` bildirmemiz dışında, ERC-20 Transfer olayına benzer. +Hiç kimse sıfır adresine sahip değildir, bu nedenle geleneksel olarak onu jetonların oluşturulmasını ve yok edilmesini bildirmek için kullanırız. ```python -# @dev This emits when the approved address for an NFT is changed or reaffirmed. The zero -# address indicates there is no approved address. When a Transfer event emits, this also -# indicates that the approved address for that NFT (if any) is reset to none. -# @param _owner Owner of NFT. -# @param _approved Address that we are approving. -# @param _tokenId NFT which we are approving. +# @dev Bu, bir NFT için onaylanmış adres değiştirildiğinde veya yeniden onaylandığında yayınlanır. Sıfır +# adresi, onaylanmış bir adres olmadığını gösterir. Bir Transfer olayı yayınlandığında, bu aynı zamanda +# o NFT için onaylanmış adresin (varsa) sıfırlandığını gösterir. +# @param _owner NFT'nin sahibi. +# @param _approved Onayladığımız adres. +# @param _tokenId Onayladığımız NFT. event Approval: owner: indexed(address) approved: indexed(address) tokenId: indexed(uint256) ``` -ERC-721 onayı, ERC-20 ödeneğine benzer. Belirli bir adresin belirli bir token'ı aktarmasına izin verilir. Bu, sözleşmelerin bir token'ı kabul ettiklerinde yanıt vermeleri için bir mekanizma sağlar. Sözleşmeler olayları dinleyemez, bu nedenle token'ı onlara aktarırsanız bunu "bilmezler". Bu şekilde, mal sahibi önce bir onay gönderir ve ardından sözleşmeye bir istek gönderir: "X token'ını aktarmanız için onay verdim, lütfen yapın...". +ERC-721 onayı, ERC-20 ödeneğine benzer. Belirli bir adresin belirli bir +jetonu aktarmasına izin verilir. Bu, sözleşmelerin bir jetonu kabul ettiklerinde yanıt vermeleri için bir mekanizma sağlar. Sözleşmeler olayları +dinleyemez, bu nedenle jetonu onlara aktarırsanız bunu "bilmezler". Bu şekilde, mal sahibi önce bir onay gönderir ve ardından sözleşmeye bir istek gönderir: "X jetonunu aktarmanız için onay verdim, lütfen yapın ...". -Bu, ERC-721 standardını ERC-20 standardına benzer kılmak için yapılmış bir tasarım tercihidir. ERC-721 token'ları değiştirilemez olduğundan, bir sözleşme token'ın mülkiyetine bakarak belirli bir token aldığını da belirleyebilir. +Bu, ERC-721 standardını ERC-20 standardına benzer kılmak için yapılmış bir tasarım tercihidir. ERC-721 jetonları değiştirilemez olduğundan, bir sözleşme, jetonun mülkiyetine bakarak belirli bir jeton aldığını da belirleyebilir. ```python -# @dev This emits when an operator is enabled or disabled for an owner. The operator can manage -# all NFTs of the owner. -# @param _owner Owner of NFT. -# @param _operator Address to which we are setting operator rights. -# @param _approved Status of operator rights(true if operator rights are given and false if -# revoked). +# @dev Bu, bir operatör bir sahip için etkinleştirildiğinde veya devre dışı bırakıldığında yayınlanır. Operatör, sahibinin tüm NFT'lerini +# yönetebilir. +# @param _owner NFT'nin sahibi. +# @param _operator Operatör haklarını ayarladığımız adres. +# @param _approved Operatör haklarının durumu (operatör hakları verilmişse true, geri alınmışsa +# false). event ApprovalForAll: owner: indexed(address) operator: indexed(address) approved: bool ``` -Bir hesabın, adeta bir vekaletname gibi belirli bir türdeki (belirli bir sözleşmeyle yönetilenler) tüm simgelerini yönetebilen bir _operatöre_ sahip olmak bazen yararlıdır. Örneğin, altı aydır iletişime geçmediğimi kontrol eden ve varsa mal varlığımı mirasçılarıma dağıtan bir sözleşmeye öyle bir yetki vermek isteyebilirim (eğer bir sözleşme bunu isterse, bir işlem tarafından çağrılmadan herhangi bir şey yapamaz). ERC-20'de bir miras sözleşmesine sadece yüksek bir ödenek verebiliriz ancak bu, ERC-721 için işe yaramaz çünkü token'lar değiştirilebilir değildir. Bu, bunun dengidir. +Bir hesabın, adeta bir vekaletname gibi belirli bir türdeki (belirli bir sözleşmeyle yönetilenler) tüm jetonlarını yönetebilen bir _operatöre_ sahip olmak bazen yararlıdır. Örneğin, altı aydır temas kurup kurmadığımı kontrol eden ve kurmadıysam varlıklarımı mirasçılarıma dağıtan bir sözleşmeye böyle bir yetki vermek isteyebilirim (mirasçılardan biri talep ederse, sözleşmeler bir işlemle çağrılmadan hiçbir şey yapamaz). ERC-20'de bir miras sözleşmesine sadece yüksek bir ödenek verebiliriz ancak bu, ERC-721 için işe yaramaz çünkü jetonlar değiştirilemezdir. Bu, bunun dengidir. `approved` değeri bize etkinliğin bir onay için mi yoksa bir onayın geri çekilmesi için mi olduğunu söyler. ### Durum Değişkenleri {#state-vars} -Bu değişkenler, token'ların mevcut durumunu içerir: hangilerinin mevcut olduğu ve onlara kimin sahip olduğu. Bunların çoğu, [iki tür arasında var olan tek yönlü eşleştirmeler](https://vyper.readthedocs.io/en/latest/types.html#mappings) olan `HashMap` nesneleridir. +Bu değişkenler, jetonların mevcut durumunu içerir: hangilerinin mevcut olduğu ve onlara kimin sahip olduğu. Bunların çoğu, [iki tür arasında var olan tek yönlü eşlemeler](https://vyper.readthedocs.io/en/latest/types.html#mappings) olan `HashMap` nesneleridir. ```python -# @dev Mapping from NFT ID to the address that owns it. +# @dev NFT ID'sinden sahibinin adresine eşleme. idToOwner: HashMap[uint256, address] -# @dev Mapping from NFT ID to approved address. +# @dev NFT ID'sinden onaylanan adrese eşleme. idToApprovals: HashMap[uint256, address] ``` -Ethereum'daki kullanıcı ve sözleşme kimlikleri 160 bitlik adreslerle temsil edilir. Bu iki değişken, token ID'lerinden sahiplerine ve bunları aktarmak için onaylananlara eşleştirilir (her biri için en fazla bir tane). Ethereum'da, başlatılmamış veriler her zaman sıfırdır, bu nedenle herhangi bir sahip veya onaylanmış aktarıcı yoksa, o token'ın değeri sıfırdır. +Ethereum'daki kullanıcı ve sözleşme kimlikleri 160 bitlik adreslerle temsil edilir. Bu iki değişken, jeton ID'lerinden sahiplerine ve bunları aktarmak için onaylananlara eşleştirilir (her biri için en fazla bir tane). Ethereum'da, başlatılmamış veriler her zaman sıfırdır, bu nedenle herhangi bir sahip veya onaylanmış aktarıcı yoksa, o jetonun değeri sıfırdır. ```python -# @dev Mapping from owner address to count of his tokens. +# @dev Sahip adresinden sahip olduğu jeton sayısına eşleme. ownerToNFTokenCount: HashMap[address, uint256] ``` -Bu değişken, her sahip için token sayısını tutar. Sahiplerden token'lara eşleştirme yoktur, bu nedenle belirli bir sahibin sahip olduğu token'ları tanımlamanın tek yolu blok zincirinin olay geçmişine bakmak ve uygun `Transfer` olaylarını görmektir. Bu değişkeni, tüm NFT'lere ne zaman sahip olduğumuzu ve zamanda daha fazla aramamıza gerek olmadığını bilmek için kullanabiliriz. +Bu değişken, her sahip için jeton sayısını tutar. Sahiplerden jetonlara eşleştirme yoktur, bu nedenle belirli bir sahibin sahip olduğu jetonları tanımlamanın tek yolu blokzincirin olay geçmişine bakmak ve uygun `Transfer` olaylarını görmektir. Bu değişkeni, tüm NFT'lere ne zaman sahip olduğumuzu ve zamanda daha fazla aramamıza gerek olmadığını bilmek için kullanabiliriz. -Bu algoritmanın yalnızca kullanıcı arayüzleri ve harici sunucular için çalıştığını unutmayın. Blok zincirinde çalışan kod, geçmiş olayları okuyamaz. +Bu algoritmanın yalnızca kullanıcı arayüzleri ve harici sunucular için çalıştığını unutmayın. Blokzincirinin +kendisinde çalışan kod geçmiş olayları okuyamaz. ```python -# @dev Mapping from owner address to mapping of operator addresses. +# @dev Sahip adresinden operatör adreslerinin eşlemesine eşleme. ownerToOperators: HashMap[address, HashMap[address, bool]] ``` Bir hesap birden fazla operatöre sahip olabilir. Basit bir `HashMap` onları takip etmek için yetersizdir, çünkü her anahtar tek bir değere bağlıdır. Bunun yerine, değer olarak `HashMap[address, bool]` kullanabilirsiniz. Varsayılan olarak, her adresin değeri `False`'dur, bu da bir operatör olmadığı anlamına gelir. Değerleri gerektiği gibi `True` olarak ayarlayabilirsiniz. ```python -# @dev Address of minter, who can mint a token +# @dev Bir jeton basabilen minter'ın adresi minter: address ``` -Yeni token'lar bir şekilde oluşturulmalıdır. Bu sözleşmede bunu yapmasına izin verilen tek bir varlık vardır: `minter`. Bu, örneğin bir oyun için yeterli olabilir. Diğer amaçlar için daha karmaşık bir iş mantığı oluşturmak gerekebilir. +Yeni jetonlar bir şekilde oluşturulmalıdır. Bu sözleşmede bunu yapmasına izin verilen tek bir varlık vardır, `minter`. Bu, örneğin bir oyun için yeterli olabilir. Diğer amaçlar için daha karmaşık bir iş mantığı oluşturmak gerekebilir. ```python -# @dev Mapping of interface id to bool about whether or not it's supported +# @dev Arayüz kimliğinden desteklenip desteklenmediğine dair bool'a eşleme supportedInterfaces: HashMap[bytes32, bool] -# @dev ERC165 interface ID of ERC165 +# @dev ERC165'in ERC165 arayüzü ID'si ERC165_INTERFACE_ID: constant(bytes32) = 0x0000000000000000000000000000000000000000000000000000000001ffc9a7 -# @dev ERC165 interface ID of ERC721 +# @dev ERC721'in ERC165 arayüzü ID'si ERC721_INTERFACE_ID: constant(bytes32) = 0x0000000000000000000000000000000000000000000000000000000080ac58cd ``` -[ERC-165](https://eips.ethereum.org/EIPS/eip-165), uygulamaların kendisiyle nasıl iletişim kurabileceğini ve hangi ERC'lere uyduğunu ifşa etmek için bir sözleşme için bir mekanizma belirtir. Bu durumda sözleşme ERC-165 ve ERC-721'e uygundur. +[ERC-165](https://eips.ethereum.org/EIPS/eip-165) bir sözleşmenin, uygulamaların onunla nasıl iletişim kurabileceğini, yani hangi ERC'lere uyduğunu açıklaması için bir mekanizma belirtir. Bu durumda sözleşme ERC-165 ve ERC-721'e uygundur. ### Fonksiyonlar {#functions} @@ -194,15 +202,15 @@ Bunlar, ERC-721'i gerçekten uygulayan fonksiyonlardır. def __init__(): ``` -Vyper'da, Python'da olduğu gibi yapıcı fonksiyona `__init__` adı verilir. +Vyper'da, Python'da olduğu gibi, yapıcı fonksiyona `__init__` adı verilir. ```python """ - @dev Contract constructor. + @dev Sözleşme yapıcısı. """ ``` -Python'da ve Vyper'da, çok satırlı bir dize (`"""` ile başlayan ve biten) belirterek ve onu hiçbir şekilde kullanmayarak bir yorum oluşturabilirsiniz. Bu yorumlar ayrıca [NatSpec](https://vyper.readthedocs.io/en/latest/natspec.html) içerebilir. +Python'da ve Vyper'da, çok satırlı bir dize (`"""` ile başlayan ve biten) belirterek ve onu hiçbir şekilde kullanmayarak bir yorum oluşturabilirsiniz. Bu yorumlar [NatSpec](https://vyper.readthedocs.io/en/latest/natspec.html) de içerebilir. ```python self.supportedInterfaces[ERC165_INTERFACE_ID] = True @@ -210,32 +218,35 @@ Python'da ve Vyper'da, çok satırlı bir dize (`"""` ile başlayan ve biten) be self.minter = msg.sender ``` -Durum değişkenlerine erişmek için `self.` kullanırsınız (yine Python'da olduğu gibi). +Durum değişkenlerine erişmek için `self.` kullanırsınız` (yine Python'daki gibi). -#### Fonksiyonları gör {#views} +#### Görünüm Fonksiyonları {#views} -Bunlar blok zincirinin durumunu değiştirmeyen fonksiyonlardır ve bu nedenle dışarıdan çağrıldıklarında ücretsiz olarak yürütülebilirler. Görünüm fonksiyonları bir sözleşme ile çağrılırsa, yine de her düğümde yürütülmeleri gerekir ve bu nedenle gaz harcarlar. +Bunlar blokzincirin durumunu değiştirmeyen fonksiyonlardır ve bu nedenle dışarıdan çağrıldıklarında ücretsiz olarak yürütülebilirler. Görünüm fonksiyonları bir sözleşme ile çağrılırsa, yine de her düğümde yürütülmeleri gerekir ve bu nedenle gaz harcarlar. ```python @view @external ``` -Bir `@` işaretiyle başlayan bir fonksiyon tanımından önceki bu anahtar kelimelere _dekorasyon_ denir. Bir fonksiyonun çağrılabileceği durumları belirtirler. +Bir at işareti (`@`) ile başlayan bir fonksiyon tanımından önceki bu anahtar kelimelere _dekoratörler_ denir. Bir fonksiyonun çağrılabileceği durumları belirtirler. -- `@view` bu fonksiyonun bir view olduğunu belirtir. +- `@view` bu fonksiyonun bir görünüm olduğunu belirtir. - `@external` bu fonksiyonun işlemler ve diğer sözleşmeler tarafından çağrılabileceğini belirtir. ```python def supportsInterface(_interfaceID: bytes32) -> bool: ``` -Python'un aksine, Vyper [statik türlendirilmiş bir dildir](https://wikipedia.org/wiki/Type_system#Static_type_checking). [Veri türünü](https://vyper.readthedocs.io/en/latest/types.html) tanımlamadan bir değişken veya fonksiyon parametresi bildiremezsiniz. Bu durumda giriş parametresi 256 bitlik bir değer olan `bytes32`'dir, (256 bit, [Ethereum Sanal Makinesi](/developers/docs/evm/)'nin yerel kelime boyutudur). Çıktı boolean bir değerdir. Kural olarak, fonksiyon parametrelerinin adları bir alt çizgi (`_`) ile başlar. +Python'un aksine Vyper [statik tipli bir dildir](https://wikipedia.org/wiki/Type_system#Static_type_checking). +[veri türünü](https://vyper.readthedocs.io/en/latest/types.html) belirtmeden bir değişken veya fonksiyon parametresi bildiremezsiniz. Bu durumda giriş parametresi, 256 bitlik bir değer olan `bytes32`'dir +(256 bit, [Ethereum Sanal Makinesi'nin](/developers/docs/evm/) doğal kelime boyutudur). Çıktı bir boole +değeridir. Kural olarak, fonksiyon parametrelerinin adları bir alt çizgi (`_`) ile başlar. ```python """ - @dev Interface identification is specified in ERC-165. - @param _interfaceID Id of the interface + @dev Arayüz kimliği ERC-165'te belirtilmiştir. + @param _interfaceID Arayüzün kimliği """ return self.supportedInterfaces[_interfaceID] ``` @@ -243,96 +254,99 @@ Python'un aksine, Vyper [statik türlendirilmiş bir dildir](https://wikipedia.o Değeri, yapıcıda (`__init__`) belirlenmiş olan `self.supportedInterfaces` HashMap'inden döndürün. ```python -### VIEW FUNCTIONS ### +### GÖRÜNÜM FONKSİYONLARI ### + ``` -Bunlar, token'lar hakkında bilgileri kullanıcılara ve diğer sözleşmelere sunan görüntüleme fonksiyonlarıdır. +Bunlar, jetonlar hakkında bilgileri kullanıcılara ve diğer sözleşmelere sunan görünüm fonksiyonlarıdır. ```python @view @external def balanceOf(_owner: address) -> uint256: """ - @dev Returns the number of NFTs owned by `_owner`. - Throws if `_owner` is the zero address. NFTs assigned to the zero address are considered invalid. - @param _owner Address for whom to query the balance. + @dev `_owner`'ın sahip olduğu NFT sayısını döndürür. + `_owner` sıfır adresi ise hata verir. Sıfır adresine atanan NFT'ler geçersiz kabul edilir. + @param _owner Bakiyenin sorgulanacağı adres. """ assert _owner != ZERO_ADDRESS ``` -Bu satır `_owner`'ın sıfır olmadığını [teyit eder](https://vyper.readthedocs.io/en/latest/statements.html#assert). Eğer öyleyse, bir hata vardır ve işlem geri alınır. +Bu satır, `_owner`'ın sıfır olmadığını [denetler](https://vyper.readthedocs.io/en/latest/statements.html#assert). Eğer öyleyse, bir hata vardır ve işlem geri alınır. ```python - return self.ownerToNFTokenCount[_owner] - @view @external def ownerOf(_tokenId: uint256) -> address: """ - @dev Returns the address of the owner of the NFT. - Throws if `_tokenId` is not a valid NFT. - @param _tokenId The identifier for an NFT. + @dev NFT'nin sahibinin adresini döndürür. + `_tokenId` geçerli bir NFT değilse hata verir. + @param _tokenId Bir NFT'nin tanımlayıcısı. """ owner: address = self.idToOwner[_tokenId] - # Throws if `_tokenId` is not a valid NFT + # `_tokenId` geçerli bir NFT değilse hata verir assert owner != ZERO_ADDRESS return owner ``` -Ethereum Sanal Makinesinde (evm), içinde depolanmış bir değeri olmayan herhangi bir depolama sıfırdır. Eğer `_tokenId` yerinde bir token yoksa `self.idToOwner[_tokenId]` değeri sıfırdır. Bu durumda fonksiyon geri dönüş yapar. +Ethereum Sanal Makinesinde (EVM) içinde depolanmış bir değeri olmayan herhangi bir depolama sıfırdır. +Eğer `_tokenId` yerinde bir jeton yoksa `self.idToOwner[_tokenId]` değeri sıfırdır. Bu +durumda fonksiyon geri alınır. ```python @view @external def getApproved(_tokenId: uint256) -> address: """ - @dev Get the approved address for a single NFT. - Throws if `_tokenId` is not a valid NFT. - @param _tokenId ID of the NFT to query the approval of. + @dev Tek bir NFT için onaylanmış adresi alın. + `_tokenId` geçerli bir NFT değilse hata verir. + @param _tokenId Onayını sorgulamak için NFT'nin ID'si. """ - # Throws if `_tokenId` is not a valid NFT + # `_tokenId` geçerli bir NFT değilse hata verir assert self.idToOwner[_tokenId] != ZERO_ADDRESS return self.idToApprovals[_tokenId] ``` -`getApproved`'un sıfır _döndürebileceğini_ unutmayın. Eğer token geçerliyse `self.idToApprovals[_tokenId]` döndürür. Onaylayan yoksa bu değer sıfırdır. +`getApproved`'un sıfır _döndürebileceğini_ unutmayın. Eğer jeton geçerliyse `self.idToApprovals[_tokenId]` döndürür. +Onaylayan yoksa bu değer sıfırdır. ```python @view @external def isApprovedForAll(_owner: address, _operator: address) -> bool: """ - @dev Checks if `_operator` is an approved operator for `_owner`. - @param _owner The address that owns the NFTs. - @param _operator The address that acts on behalf of the owner. + @dev `_operator`'ın `_owner` için onaylı bir operatör olup olmadığını kontrol eder. + @param _owner NFT'lerin sahibi olan adres. + @param _operator Sahip adına hareket eden adres. """ return (self.ownerToOperators[_owner])[_operator] ``` -Bu fonksiyon, `_operator`'un bu sözleşmedeki tüm `_owner` token'larını yönetmesine izin verilip verilmediğini kontrol eder. Birden fazla operatör olabileceğinden, bu iki seviyeli bir HashMap'tir. +Bu fonksiyon, `_operator`'un bu sözleşmedeki tüm `_owner` jetonlarını yönetmesine izin verilip verilmediğini kontrol eder. +Birden fazla operatör olabileceğinden, bu iki seviyeli bir HashMap'tir. -#### Transfer Yardımcı Fonksiyonları {#transfer-helpers} +#### Aktarım Yardımcı Fonksiyonları {#transfer-helpers} -Bu fonksiyonlar, token'ları transfer etmenin veya yönetmenin parçası olan işlemleri uygular. +Bu fonksiyonlar, jetonları aktarmanın veya yönetmenin parçası olan işlemleri uygular. ```python -### TRANSFER FUNCTION HELPERS ### +### AKTARIM FONKSİYONU YARDIMCILARI ### @view @internal ``` -Bu dekorasyon, `@internal`, fonksiyona yalnızca aynı sözleşmedeki diğer fonksiyonlardan erişilebilir olduğu anlamına gelir. Kural olarak, bu fonksiyon adları ayrıca bir alt çizgi (`_`) ile başlar. +Bu dekoratör, `@internal`, fonksiyonun yalnızca aynı sözleşme içindeki diğer fonksiyonlardan erişilebilir olduğu anlamına gelir. Kural olarak, bu fonksiyon adları ayrıca bir alt çizgi (`_`) ile başlar. ```python def _isApprovedOrOwner(_spender: address, _tokenId: uint256) -> bool: """ - @dev Returns whether the given spender can transfer a given token ID - @param spender address of the spender to query - @param tokenId uint256 ID of the token to be transferred - @return bool whether the msg.sender is approved for the given token ID, - is an operator of the owner, or is the owner of the token + @dev Verilen harcayıcının belirli bir jeton kimliğini aktarıp aktaramayacağını döndürür + @param spender sorgulanacak harcayıcının adresi + @param tokenId aktarılacak jetonun uint256 ID'si + @return bool msg.sender'ın verilen jeton ID'si için onaylanıp onaylanmadığını, + sahibin bir operatörü olup olmadığını veya jetonun sahibi olup olmadığını belirtir """ owner: address = self.idToOwner[_tokenId] spenderIsOwner: bool = owner == _spender @@ -341,22 +355,22 @@ def _isApprovedOrOwner(_spender: address, _tokenId: uint256) -> bool: return (spenderIsOwner or spenderIsApproved) or spenderIsApprovedForAll ``` -Bir adresin bir token'ı transfer etmesine izin vermenin üç yolu vardır: +Bir adresin bir jetonu aktarmasına izin verilmesinin üç yolu vardır: -1. Adres, token'ın sahibidir -2. Adresin bu token'ı harcaması onaylanmıştır -3. Adres, token'ın sahibi için bir operatördür +1. Adres, jetonun sahibidir +2. Adresin bu jetonu harcaması onaylanmıştır +3. Adres, jetonun sahibi için bir operatördür -Durumu değiştirmediği için yukarıdaki fonksiyon bir görünüm olabilir. İşletim maliyetlerini azaltmak için, bir görünüm _olabilen_ herhangi bir fonksiyon bir görünüm _olmalıdır_. +Durumu değiştirmediği için yukarıdaki fonksiyon bir görünüm olabilir. İşletim maliyetlerini azaltmak için, görünüm _olabilen_ herhangi bir fonksiyon görünüm _olmalıdır_. ```python @internal def _addTokenTo(_to: address, _tokenId: uint256): """ - @dev Add a NFT to a given address - Throws if `_tokenId` is owned by someone. + @dev Belirli bir adrese bir NFT ekle + `_tokenId`'nin bir sahibi varsa hata verir. """ - # Throws if `_tokenId` is owned by someone + # `_tokenId`'nin bir sahibi varsa hata verir assert self.idToOwner[_tokenId] == ZERO_ADDRESS # Change the owner self.idToOwner[_tokenId] = _to @@ -367,10 +381,10 @@ def _addTokenTo(_to: address, _tokenId: uint256): @internal def _removeTokenFrom(_from: address, _tokenId: uint256): """ - @dev Remove a NFT from a given address - Throws if `_from` is not the current owner. + @dev Belirli bir adresten bir NFT'yi kaldır + `_from` mevcut sahip değilse hata verir. """ - # Throws if `_from` is not the current owner + # `_from` mevcut sahip değilse hata verir assert self.idToOwner[_tokenId] == _from # Change the owner self.idToOwner[_tokenId] = ZERO_ADDRESS @@ -378,38 +392,38 @@ def _removeTokenFrom(_from: address, _tokenId: uint256): self.ownerToNFTokenCount[_from] -= 1 ``` -Transfer ile ilgili bir sorun olduğunda isteği geri çeviriyoruz. +Aktarım ile ilgili bir sorun olduğunda çağrıyı geri alırız. ```python @internal def _clearApproval(_owner: address, _tokenId: uint256): """ - @dev Clear an approval of a given address - Throws if `_owner` is not the current owner. + @dev Belirli bir adresin onayını temizle + `_owner` mevcut sahip değilse hata verir. """ - # Throws if `_owner` is not the current owner + # `_owner` mevcut sahip değilse hata verir assert self.idToOwner[_tokenId] == _owner if self.idToApprovals[_tokenId] != ZERO_ADDRESS: # Reset approvals self.idToApprovals[_tokenId] = ZERO_ADDRESS ``` -Değeri sadece gerekirse değiştirin. Durum değişkenleri depolamada yaşar. Depolamaya yazmak, EVM'nin (Ethereum Sanal Makinesi) yaptığı en pahalı işlemlerden biridir ([gaz](/developers/docs/gas/) açısından). Bu nedenle en aza indirmek iyi bir fikirdir, mevcut değeri yazmanın bile maliyeti yüksektir. +Değeri sadece gerekirse değiştirin. Durum değişkenleri depolamada yaşar. Depolama alanına yazmak, EVM'nin (Ethereum Sanal Makinesi) gerçekleştirdiği en pahalı işlemlerden biridir ([gaz](/developers/docs/gas/) açısından). Bu nedenle en aza indirmek iyi bir fikirdir, mevcut değeri yazmanın bile maliyeti yüksektir. ```python @internal def _transferFrom(_from: address, _to: address, _tokenId: uint256, _sender: address): """ - @dev Execute transfer of a NFT. - Throws unless `msg.sender` is the current owner, an authorized operator, or the approved - address for this NFT. (NOTE: `msg.sender` not allowed in private function so pass `_sender`.) - Throws if `_to` is the zero address. - Throws if `_from` is not the current owner. - Throws if `_tokenId` is not a valid NFT. + @dev Bir NFT'nin aktarımını gerçekleştirin. + `msg.sender` mevcut sahip, yetkili bir operatör veya bu NFT için onaylanmış + adres değilse hata verir. (NOT: `msg.sender`'a özel fonksiyonda izin verilmez, bu yüzden `_sender`'ı geçin.) + `_to` sıfır adresi ise hata verir. + `_from` mevcut sahip değilse hata verir. + `_tokenId` geçerli bir NFT değilse hata verir. """ ``` -Token'ları aktarmanın iki yolu olduğu için (düzenli ve güvenli) bu dahili fonksiyona sahibiz ancak denetimi kolaylaştırmak için kodda yalnızca tek bir konum istiyoruz. +Jetonları aktarmanın iki yolu olduğu için (normal ve güvenli) bu dahili fonksiyona sahibiz ancak denetimi kolaylaştırmak için kodda yalnızca tek bir konum istiyoruz. ```python # Check requirements @@ -426,32 +440,32 @@ Token'ları aktarmanın iki yolu olduğu için (düzenli ve güvenli) bu dahili log Transfer(_from, _to, _tokenId) ``` -Vyper'da bir olay yaymak için `log` ifadesi kullanırsınız ([daha fazla detay için buraya bakınız](https://vyper.readthedocs.io/en/latest/event-logging.html#event-logging)). +Vyper'da bir olay yayınlamak için bir `log` ifadesi kullanırsınız ([daha fazla ayrıntı için buraya bakın](https://vyper.readthedocs.io/en/latest/event-logging.html#event-logging)). -#### Transfer Fonksiyonları {#transfer-funs} +#### Aktarım Fonksiyonları {#transfer-funs} ```python -### TRANSFER FUNCTIONS ### +### AKTARIM FONKSİYONLARI ### @external def transferFrom(_from: address, _to: address, _tokenId: uint256): """ - @dev Throws unless `msg.sender` is the current owner, an authorized operator, or the approved - address for this NFT. - Throws if `_from` is not the current owner. - Throws if `_to` is the zero address. - Throws if `_tokenId` is not a valid NFT. - @notice The caller is responsible to confirm that `_to` is capable of receiving NFTs or else - they maybe be permanently lost. - @param _from The current owner of the NFT. - @param _to The new owner. - @param _tokenId The NFT to transfer. + @dev `msg.sender` mevcut sahip, yetkili bir operatör veya bu NFT için onaylanmış + adres değilse hata verir. + `_from` mevcut sahip değilse hata verir. + `_to` sıfır adresi ise hata verir. + `_tokenId` geçerli bir NFT değilse hata verir. + @notice Çağıran, `_to`'nun NFT'leri alabileceğinden emin olmaktan sorumludur, aksi takdirde + kalıcı olarak kaybolabilirler. + @param _from NFT'nin mevcut sahibi. + @param _to Yeni sahip. + @param _tokenId Aktarılacak NFT. """ self._transferFrom(_from, _to, _tokenId, msg.sender) ``` -Bu fonksiyon, isteğe bağlı bir adrese aktarım yapmanızı sağlar. Adres bir kullanıcı veya token'ların nasıl transfer edileceğini bilen bir sözleşme olmadığı sürece, transfer ettiğiniz herhangi bir token o adrese takılıp işe yaramaz olacaktır. +Bu fonksiyon, isteğe bağlı bir adrese aktarım yapmanızı sağlar. Adres bir kullanıcı veya jetonların nasıl aktarılacağını bilen bir sözleşme olmadığı sürece, aktardığınız herhangi bir jeton o adreste takılıp kalır ve işe yaramaz hale gelir. ```python @external @@ -462,63 +476,65 @@ def safeTransferFrom( _data: Bytes[1024]=b"" ): """ - @dev Transfers the ownership of an NFT from one address to another address. - Throws unless `msg.sender` is the current owner, an authorized operator, or the - approved address for this NFT. - Throws if `_from` is not the current owner. - Throws if `_to` is the zero address. - Throws if `_tokenId` is not a valid NFT. - If `_to` is a smart contract, it calls `onERC721Received` on `_to` and throws if - the return value is not `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`. - NOTE: bytes4 is represented by bytes32 with padding - @param _from The current owner of the NFT. - @param _to The new owner. - @param _tokenId The NFT to transfer. - @param _data Additional data with no specified format, sent in call to `_to`. + @dev Bir NFT'nin mülkiyetini bir adresten başka bir adrese aktarır. + `msg.sender` mevcut sahip, yetkili bir operatör veya bu NFT için + onaylanmış adres değilse hata verir. + `_from` mevcut sahip değilse hata verir. + `_to` sıfır adresi ise hata verir. + `_tokenId` geçerli bir NFT değilse hata verir. + `_to` bir akıllı sözleşme ise, `_to` üzerinde `onERC721Received`'ı çağırır ve + dönüş değeri `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))` değilse hata verir. + NOT: bytes4, dolgu ile bytes32 ile temsil edilir + @param _from NFT'nin mevcut sahibi. + @param _to Yeni sahip. + @param _tokenId Aktarılacak NFT. + @param _data Belirtilen bir formatı olmayan, `_to`'ya yapılan çağrıda gönderilen ek veriler. """ self._transferFrom(_from, _to, _tokenId, msg.sender) ``` -Önce transferi yapmakta bir sakınca yok çünkü bir sorun olursa yine geri döneceğiz, bu yüzden çağrıda yapılan her şey iptal edilecek. +Önce transferi yapmakta bir sakınca yok çünkü bir sorun olursa yine de geri döneceğiz, bu yüzden çağrıda yapılan her şey iptal edilecek. ```python - if _to.is_contract: # check if `_to` is a contract address + if _to.is_contract: # `_to`'nun bir sözleşme adresi olup olmadığını kontrol et ``` -İlk önce adresin bir sözleşme olup olmadığını kontrol edin (kodu varsa). Değilse, bunun bir kullanıcı adresi olduğunu varsayın ve kullanıcı token'ı kullanabilecek veya aktarabilecektir. Ama bunun yüzünden yalancı bir güvenlik duygusuna kapılmayın. Token'ları, özel anahtarı kimsenin bilmediği bir adrese aktarırsanız `safeTransferFrom` ile bile kaybedebilirsiniz. +İlk önce adresin bir sözleşme olup olmadığını kontrol edin (kodu varsa). Değilse, bunun bir kullanıcı adresi olduğunu +varsayın ve kullanıcı jetonu kullanabilecek veya aktarabilecektir. Ama bunun yüzünden yalancı bir +güvenlik duygusuna kapılmayın. Jetonları, özel anahtarı kimsenin bilmediği bir adrese aktarırsanız `safeTransferFrom` ile bile kaybedebilirsiniz. ```python returnValue: bytes32 = ERC721Receiver(_to).onERC721Received(msg.sender, _from, _tokenId, _data) ``` -ERC-721 token'larını alıp alamayacağını görmek için hedef sözleşmeyi çağırın. +ERC-721 jetonlarını alıp alamayacağını görmek için hedef sözleşmeyi çağırın. ```python - # Throws if transfer destination is a contract which does not implement 'onERC721Received' + # Aktarım hedefi 'onERC721Received' uygulamayan bir sözleşme ise hata verir assert returnValue == method_id("onERC721Received(address,address,uint256,bytes)", output_type=bytes32) ``` -Hedef bir sözleşmeyse, ancak ERC-721 token'larını kabul etmeyen (veya bu özel aktarımı kabul etmemeye karar veren) bir sözleşmeyse, geri döndürün. +Hedef bir sözleşmeyse, ancak ERC-721 jetonlarını kabul etmeyen (veya bu özel aktarımı kabul etmemeye karar veren) bir sözleşmeyse, işlemi geri alın. ```python @external def approve(_approved: address, _tokenId: uint256): """ - @dev Set or reaffirm the approved address for an NFT. The zero address indicates there is no approved address. - Throws unless `msg.sender` is the current NFT owner, or an authorized operator of the current owner. - Throws if `_tokenId` is not a valid NFT. (NOTE: This is not written the EIP) - Throws if `_approved` is the current owner. (NOTE: This is not written the EIP) - @param _approved Address to be approved for the given NFT ID. - @param _tokenId ID of the token to be approved. + @dev Bir NFT için onaylanmış adresi ayarlayın veya yeniden onaylayın. Sıfır adresi, onaylanmış bir adres olmadığını gösterir. + `msg.sender` mevcut NFT sahibi veya mevcut sahibin yetkili bir operatörü değilse hata verir. + `_tokenId` geçerli bir NFT değilse hata verir. (NOT: Bu, EIP'de yazılmamıştır) + `_approved` mevcut sahip ise hata verir. (NOT: Bu, EIP'de yazılmamıştır) + @param _approved Verilen NFT ID'si için onaylanacak adres. + @param _tokenId Onaylanacak jetonun ID'si. """ owner: address = self.idToOwner[_tokenId] - # Throws if `_tokenId` is not a valid NFT + # `_tokenId` geçerli bir NFT değilse hata verir assert owner != ZERO_ADDRESS - # Throws if `_approved` is the current owner + # `_approved` mevcut sahip ise hata verir assert _approved != owner ``` -Normalde, bir onaylayıcıya sahip olmak istemiyorsanız sıfır adresini kendiniz atmazsınız. +Geleneksel olarak, bir onaylayıcınız olmasını istemiyorsanız, kendinizi değil, sıfır adresini atarsınız. ```python # Check requirements @@ -538,25 +554,25 @@ Bir onay ayarlamak için, sahibi veya sahibi tarafından yetkilendirilmiş bir o @external def setApprovalForAll(_operator: address, _approved: bool): """ - @dev Enables or disables approval for a third party ("operator") to manage all of - `msg.sender`'s assets. It also emits the ApprovalForAll event. - Throws if `_operator` is the `msg.sender`. (NOTE: This is not written the EIP) - @notice This works even if sender doesn't own any tokens at the time. - @param _operator Address to add to the set of authorized operators. - @param _approved True if the operators is approved, false to revoke approval. + @dev Üçüncü bir taraf ("operatör") için `msg.sender`'ın tüm varlıklarını yönetme onayını etkinleştirir veya devre dışı bırakır. + Ayrıca ApprovalForAll olayını da yayınlar. + `_operator`'ın `msg.sender` olması durumunda hata verir. (NOT: Bu, EIP'de yazılmamıştır) + @notice Bu, göndericinin o anda hiçbir jetona sahip olmasa bile çalışır. + @param _operator Yetkili operatörler kümesine eklenecek adres. + @param _approved Operatör onaylanmışsa True, onayı iptal etmek için false. """ - # Throws if `_operator` is the `msg.sender` + # `_operator`'ın `msg.sender` olması durumunda hata verir assert _operator != msg.sender self.ownerToOperators[msg.sender][_operator] = _approved log ApprovalForAll(msg.sender, _operator, _approved) ``` -#### Yeni Token'lar Basma ve Mevcut Olanları Yok Etme {#mint-burn} +#### Yeni Jetonlar Basma ve Mevcut Olanları Yok Etme {#mint-burn} -Sözleşmeyi oluşturan hesap, yeni NFT'leri basmaya yetkili süper kullanıcı olan `minter`'dır. Ancak, onun bile mevcut token'ları yakmasına izin verilmez. Bunu yalnızca mal sahibi veya mal sahibi tarafından yetkilendirilmiş bir varlık yapabilir. +Sözleşmeyi oluşturan hesap, yeni NFT'leri basmaya yetkili süper kullanıcı olan `minter`'dır. Ancak, onun bile mevcut jetonları yakmasına izin verilmez. Bunu yalnızca mal sahibi veya mal sahibi tarafından yetkilendirilmiş bir varlık yapabilir. ```python -### MINT & BURN FUNCTIONS ### +### BASMA VE YAKMA FONKSİYONLARI ### @external def mint(_to: address, _tokenId: uint256) -> bool: @@ -566,22 +582,22 @@ Bu fonksiyon her zaman `True` döndürür, çünkü işlem başarısız olursa g ```python """ - @dev Function to mint tokens - Throws if `msg.sender` is not the minter. - Throws if `_to` is zero address. - Throws if `_tokenId` is owned by someone. - @param _to The address that will receive the minted tokens. - @param _tokenId The token id to mint. - @return A boolean that indicates if the operation was successful. + @dev Jeton basma fonksiyonu + `msg.sender` minter değilse hata verir. + `_to` sıfır adresi ise hata verir. + `_tokenId`'nin bir sahibi varsa hata verir. + @param _to Basılan jetonları alacak olan adres. + @param _tokenId Basılacak jeton kimliği. + @return İşlemin başarılı olup olmadığını gösteren bir boole değeri. """ - # Throws if `msg.sender` is not the minter + # `msg.sender` minter değilse hata verir assert msg.sender == self.minter ``` -Yalnızca "minter" (ERC-721 sözleşmesini oluşturan hesap) yeni token'lar basabilir. Bu, "minter"ın kimliğini değiştirmek istersek gelecekte bir sorun yaratabilir. Bir üretim sözleşmesinde, muhtemelen minter'ın minter ayrıcalıklarını başka birine devretmesine izin veren bir fonksiyonun olmasını istersiniz. +Yalnızca minter (ERC-721 sözleşmesini oluşturan hesap) yeni jetonlar basabilir. Bu, gelecekte minter'ın kimliğini değiştirmek istersek bir sorun yaratabilir. Bir üretim sözleşmesinde, muhtemelen minter'ın minter ayrıcalıklarını başka birine devretmesine izin veren bir fonksiyonun olmasını istersiniz. ```python - # Throws if `_to` is zero address + # `_to` sıfır adresi ise hata verir assert _to != ZERO_ADDRESS # Add NFT. Throws if `_tokenId` is owned by someone self._addTokenTo(_to, _tokenId) @@ -589,44 +605,49 @@ Yalnızca "minter" (ERC-721 sözleşmesini oluşturan hesap) yeni token'lar basa return True ``` -Geleneksel olarak, yeni token'ların basımı sıfır adresinden bir transfer olarak sayılır. +Geleneksel olarak, yeni jetonların basımı sıfır adresinden bir aktarım olarak sayılır. ```python @external def burn(_tokenId: uint256): """ - @dev Burns a specific ERC721 token. - Throws unless `msg.sender` is the current owner, an authorized operator, or the approved - address for this NFT. - Throws if `_tokenId` is not a valid NFT. - @param _tokenId uint256 id of the ERC721 token to be burned. + @dev Belirli bir ERC721 jetonunu yakar. + `msg.sender` mevcut sahip, yetkili bir operatör veya bu NFT için onaylanmış + adres değilse hata verir. + `_tokenId` geçerli bir NFT değilse hata verir. + @param _tokenId Yakılacak ERC721 jetonunun uint256 id'si. """ # Check requirements assert self._isApprovedOrOwner(msg.sender, _tokenId) owner: address = self.idToOwner[_tokenId] - # Throws if `_tokenId` is not a valid NFT + # `_tokenId` geçerli bir NFT değilse hata verir assert owner != ZERO_ADDRESS self._clearApproval(owner, _tokenId) self._removeTokenFrom(owner, _tokenId) log Transfer(owner, ZERO_ADDRESS, _tokenId) ``` -Bir token'ı transfer etmesine izin verilen herkesin onu yakmasına izin verilir. Bir yakma işlemi, sıfır adresine aktarıma eş değer görünse de, sıfır adresi aslında token'ı almaz. Bu, token için kullanılan tüm depolama alanını boşaltmamızı sağlar ve bu da işlemin gasz maliyetini azaltabilir. +Bir jetonu aktarmasına izin verilen herkesin onu yakmasına izin verilir. Bir yakma işlemi, sıfır adresine aktarıma eş değer görünse de, sıfır adresi aslında jetonu almaz. Bu, jeton için kullanılan tüm depolama alanını boşaltmamızı sağlar ve bu da işlemin gaz maliyetini azaltabilir. -## Bu Sözleşmeyi Kullanmak {#using-contract} +## Bu Sözleşmeyi Kullanma {#using-contract} -Solidity'nin aksine, Vyper'ın kalıtımı yoktur. Bu, kodu daha net hâle getirmek ve dolayısıyla güvenliğini sağlamak için bilinçli bir tasarım seçimidir. Bu nedenle, kendi Vyper ERC-721 sözleşmenizi oluşturmak için [bu sözleşmeyi](https://github.com/vyperlang/vyper/blob/master/examples/tokens/ERC721.vy) alın ve istediğiniz iş mantığını uygulamak için değiştirin. +Solidity'nin aksine, Vyper'ın kalıtımı yoktur. Bu, kodu daha net hâle getirmek ve dolayısıyla güvenliğini sağlamak için bilinçli bir tasarım seçimidir. Yani kendi Vyper ERC-721 sözleşmenizi oluşturmak için bu +sözleşmeyi alır ve istediğiniz iş mantığını uygulamak için değiştirirsiniz. -### Sonuç {#conclusion} +## Sonuç {#conclusion} İnceleme için, bu sözleşmedeki en önemli fikirlerden bazıları şunlardır: -- ERC-721 token'larını güvenli bir aktarımla almak için sözleşmelerin `ERC721Receiver` arayüzünü uygulaması gerekir. -- Güvenli transfer kullansanız bile, özel anahtarı bilinmeyen bir adrese gönderirseniz token'lar takılıp kalabilir. -- Bir operasyonla ilgili bir sorun olduğunda çağrıyı `revert` etmek, bir başarısızlık değeri döndürmekten daha iyi bir fikirdir. -- ERC-721 token'ları, bir sahibi olduğunda var olurlar. -- Bir NFT'yi transfer etme yetkisine sahip olmanın üç yolu vardır. Sahibi olabilir, belirli bir token için onay alabilir veya sahibinin tüm token'ları için operatör olabilirsiniz. -- Geçmiş olaylar sadece blok zincirinin dışında görülebilir. Blok zincirinin içinde çalışan kod onları göremez. +- ERC-721 jetonlarını güvenli bir aktarımla almak için sözleşmelerin `ERC721Receiver` arayüzünü uygulaması gerekir. +- Güvenli aktarım kullansanız bile, özel anahtarı bilinmeyen bir adrese gönderirseniz jetonlar takılıp kalabilir. +- Bir işlemle ilgili bir sorun olduğunda yalnızca bir hata değeri döndürmek yerine çağrıyı `geri almak` iyi bir fikirdir. +- ERC-721 jetonları, bir sahibi olduğunda var olurlar. +- Bir NFT'yi aktarma yetkisine sahip olmanın üç yolu vardır. Sahibi olabilir, belirli bir jeton için onay alabilir + veya sahibinin tüm jetonları için operatör olabilirsiniz. +- Geçmiş olaylar sadece blokzincirin dışında görülebilir. Blokzincirin içinde çalışan kod onları göremez. Artık güvenli Vyper sözleşmelerini uygulayabilirsiniz. + +[Çalışmalarımdan daha fazlası için buraya bakın](https://cryptodocguy.pro/). + diff --git a/public/content/translations/tr/developers/tutorials/erc20-annotated-code/index.md b/public/content/translations/tr/developers/tutorials/erc20-annotated-code/index.md index 17bb723621f..bdb0f2665ad 100644 --- a/public/content/translations/tr/developers/tutorials/erc20-annotated-code/index.md +++ b/public/content/translations/tr/developers/tutorials/erc20-annotated-code/index.md @@ -1,30 +1,29 @@ --- title: "ERC-20 Sözleşmesine Genel Bakış" -description: OpenZeppelin ERC-20 sözleşmesinde neler var ve neden var? +description: "OpenZeppelin ERC-20 sözleşmesinde ne var ve neden var?" author: Ori Pomerantz lang: tr -tags: - - "solidity" - - "erc-20" +tags: [ "solidity", "erc-20" ] skill: beginner published: 2021-03-09 --- ## Giriş {#introduction} -Ethereum'un en yaygın kullanımlarından biri, bir grubun bir anlamda kendi para birimi olan ticareti yapılabilen bir token oluşturmasıdır. Bu token'lar genelde bir standarda, yani [ERC-20](/developers/docs/standards/tokens/erc-20/)'ye uyumludur. Bu standart, tüm ERC-20 token'larıyla çalışan likidite havuzları ve cüzdanlar gibi araçlar yazmayı mümkün kılar. Bu makalede [OpenZeppelin Solidity ERC20 uygulamasını](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol) ve [arayüz tanımını](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/IERC20.sol) analiz edeceğiz. +Ethereum'un en yaygın kullanımlarından biri, bir grubun bir anlamda kendi para birimi olan ticareti yapılabilen bir token oluşturmasıdır. Bu jetonlar genellikle bir standardı takip eder, +[ERC-20](/developers/docs/standards/tokens/erc-20/). Bu standart, likidite havuzları ve cüzdanlar gibi tüm ERC-20 jetonlarıyla çalışan araçlar yazmayı mümkün kılar. Bu makalede [OpenZeppelin Solidity ERC20 uygulamasını](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol) ve [arayüz tanımını](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/IERC20.sol) analiz edeceğiz. -Bu, açıklanmış kaynak koddur. Eğer ERC-20 kullanmak isterseniz, [bu öğreticiyi okuyun](https://docs.openzeppelin.com/contracts/2.x/erc20-supply). +Bu, açıklamalı bir kaynak kodudur. ERC-20'yi uygulamak istiyorsanız [bu eğitimi okuyun](https://docs.openzeppelin.com/contracts/2.x/erc20-supply). ## Arayüz {#the-interface} -ERC-20 gibi bir standardın amacı, cüzdanlar ve merkeziyetsiz borsalar gibi uygulamalar arasında birlikte çalışabilen birçok token uygulamasına izin vermektir. Bunu sağlamak için, bir [arayüz](https://www.geeksforgeeks.org/solidity-basics-of-interface/) oluştururuz. Token sözleşmesini kullanması gereken herhangi bir kod, arayüzde aynı tanımları kullanabilir ve onu kullanan tüm token sözleşmeleriyle uyumlu olarak, MetaMask gibi bir cüzdan, etherscan.io gibi bir dapp veya likidite havuzu gibi farklı bir sözleşme olabilir. +ERC-20 gibi bir standardın amacı, cüzdanlar ve merkeziyetsiz borsalar gibi uygulamalar arasında birlikte çalışabilen birçok jeton uygulamasını mümkün kılmaktır. Bunu başarmak için bir [arayüz](https://www.geeksforgeeks.org/solidity/solidity-basics-of-interface/) oluştururuz. Jeton sözleşmesini kullanması gereken herhangi bir kod, arayüzdeki aynı tanımları kullanabilir ve onu kullanan tüm jeton sözleşmeleriyle uyumlu olabilir; bu MetaMask gibi bir cüzdan, etherscan.io gibi bir dapp veya bir likidite havuzu gibi farklı bir sözleşme olabilir. ![ERC-20 arayüzünün çizimi](erc20_interface.png) -Deneyimli bir programcıysanız, muhtemelen [Java](https://www.w3schools.com/java/java_interface.asp)'da ve hatta [C header dosyalarında](https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html) benzer yapılar gördüğünüzü hatırlıyorsunuzdur. +Deneyimli bir programcıysanız, [Java](https://www.w3schools.com/java/java_interface.asp) veya hatta [C başlık dosyalarında](https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html) benzer yapılar gördüğünüzü muhtemelen hatırlarsınız. -Bu, OpenZeppelin'in yaptığı bir [ERC-20 Arayüzü](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/IERC20.sol) tanımıdır. [İnsan tarafından okunabilir standardın](https://eips.ethereum.org/EIPS/eip-20) Solidity koduna çevirisidir. Elbette, arayüzün kendisi herhangi bir şeyi _nasıl_ yapacağını tanımlamaz. Bu, aşağıdaki sözleşme kaynak kodunda açıklanmıştır. +Bu, OpenZeppelin'den alınan [ERC-20 Arayüzünün](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/IERC20.sol) bir tanımıdır. [İnsan tarafından okunabilir standardın](https://eips.ethereum.org/EIPS/eip-20) Solidity koduna çevirisidir. Elbette arayüzün kendisi, herhangi bir şeyin _nasıl_ yapılacağını tanımlamaz. Bu, aşağıdaki sözleşme kaynak kodunda açıklanmıştır.   @@ -32,7 +31,7 @@ Bu, OpenZeppelin'in yaptığı bir [ERC-20 Arayüzü](https://github.com/OpenZep // SPDX-License-Identifier: MIT ``` -Solidity dosyalarının bir lisans tanımlayıcısı içermesi gerekir. [Burada lisansların bir listesini görebilirsiniz](https://spdx.org/licenses/). Farklı bir lisansa ihtiyacınız varsa, bunu yorumlarda açıklamanız yeterlidir. +Solidity dosyalarının bir lisans tanımlayıcısı içermesi gerekir. [Lisansların listesini burada görebilirsiniz](https://spdx.org/licenses/). Farklı bir lisansa ihtiyacınız varsa bunu yorumlarda açıklamanız yeterlidir.   @@ -40,17 +39,17 @@ Solidity dosyalarının bir lisans tanımlayıcısı içermesi gerekir. [Burada pragma solidity >=0.6.0 <0.8.0; ``` -Solidity dili hâlâ hızla gelişiyor ve yeni sürümler eski kodla uyumlu olmayabilir ([buraya bakın](https://docs.soliditylang.org/en/v0.7.0/070-breaking-changes.html)). Bu nedenle, dilin yalnızca minimum sürümünü değil, aynı zamanda kodu test ettiğiniz en son sürüm olan maksimum sürümünü de belirtmek iyi bir fikirdir. +Solidity dili hâlâ hızla gelişiyor ve yeni sürümler eski kodlarla uyumlu olmayabilir ([buraya bakın](https://docs.soliditylang.org/en/v0.7.0/070-breaking-changes.html)). Bu nedenle, yalnızca dilin minimum sürümünü değil, aynı zamanda kodu test ettiğiniz en son sürüm olan maksimum sürümünü de belirtmek iyi bir fikirdir.   ```solidity /** - * @dev ERC20 standardının EIP'de tanımlandığı gibi arayüzü. + * @dev EIP'de tanımlandığı şekliyle ERC20 standardının arayüzü. */ ``` -Yorumdaki `@dev`, kaynak kodundan belge oluşturmak için kullanılan [NatSpec formatının](https://docs.soliditylang.org/en/develop/natspec-format.html) bir parçasıdır. +Yorumdaki `@dev`, kaynak kodundan doküman üretmek için kullanılan [NatSpec formatının](https://docs.soliditylang.org/en/develop/natspec-format.html) bir parçasıdır.   @@ -58,84 +57,90 @@ Yorumdaki `@dev`, kaynak kodundan belge oluşturmak için kullanılan [NatSpec f interface IERC20 { ``` -Kural olarak, arayüz isimleri `I` ile başlar. +Kural gereği, arayüz adları `I` ile başlar.   ```solidity /** - * @dev Mevcudiyetteki token miktarını döndürür. + * @dev Mevcut jeton miktarını döndürür. */ function totalSupply() external view returns (uint256); ``` -Bu fonksiyon `external`'dır (harici), yani [sadece sözleşmenin dışından çağrılabilir](https://docs.soliditylang.org/en/v0.7.0/cheatsheet.html#index-2). Sözleşmedeki toplam token arzını döndürür. Bu değer, Ethereum'daki en yaygın tür olan imzasız 256 bit kullanılarak döndürülür (256 bit, EVM'nin yerel kelime boyutudur). Bu fonksiyon aynı zamanda bir `view`'dur, yani durumu değiştirmez, bu nedenle blok zincirindeki her düğümün çalıştırması yerine tek bir düğümde yürütülebilir. Bu tür bir fonksiyon bir işlem oluşturmaz ve fonksiyonun [gaz](/developers/docs/gas/) maliyeti yoktur. +Bu fonksiyon `external`'dır, yani [yalnızca sözleşmenin dışından çağrılabilir](https://docs.soliditylang.org/en/v0.7.0/cheatsheet.html#index-2). +Sözleşmedeki toplam jeton arzını döndürür. Bu değer, Ethereum'daki en yaygın tür olan işaretsiz 256 bit kullanılarak döndürülür (256 bit, EVM'nin yerel kelime boyutudur). Bu fonksiyon aynı zamanda bir `view`'dır, yani durumu değiştirmez, bu nedenle blokzincirindeki her düğümün çalıştırması yerine tek bir düğümde yürütülebilir. Bu tür bir fonksiyon bir işlem oluşturmaz ve [gaz](/developers/docs/gas/) maliyeti yoktur. -**Not:** Teoride, bir sözleşmeyi oluşturan kişinin, gerçek değerden daha küçük bir toplam arz döndürerek, her bir token'ın gerçekte olduğundan daha değerli görünmesini sağlayarak hile yapabileceği görünebilir. Ancak, bu korku blok zincirinin gerçek doğasını görmezden geliyor. Blok zincirinde olan her şey, her düğüm tarafından doğrulanabilir. Bunu başarmak için, her sözleşmenin makine dili kodu ve depolaması her düğümde mevcuttur. Sözleşmenizin Solidity kodunu yayınlamanız gerekmese de, sağladığınız makina dili koduna karşı doğrulanabilmesi için kaynak kodunu ve derlendiği Solidity versiyonunu paylaşana kadar kimse sizi ciddiye almaz. Örnek olarak, [bu sözleşmeye](https://etherscan.io/address/0xa530F85085C6FE2f866E7FdB716849714a89f4CD#code) bakın. +**Not:** Teoride, bir sözleşmeyi oluşturan kişinin, gerçek değerden daha küçük bir toplam arz döndürerek her bir jetonun gerçekte olduğundan daha değerli görünmesini sağlayarak hile yapabileceği düşünülebilir. Ancak bu korku, blokzincirin gerçek doğasını göz ardı eder. Blokzincirinde olan her şey her düğüm tarafından doğrulanabilir. Bunu başarmak için, her sözleşmenin makine dili kodu ve depolaması her düğümde mevcuttur. Sözleşmeniz için Solidity kodunu yayınlamanız gerekmese de, sağladığınız makine dili koduna karşı doğrulanabilmesi için kaynak kodunu ve derlendiği Solidity sürümünü yayınlamadığınız sürece kimse sizi ciddiye almaz. +Örneğin, [bu sözleşmeye](https://eth.blockscout.com/address/0xa530F85085C6FE2f866E7FdB716849714a89f4CD?tab=contract) bakın.   ```solidity /** - * @dev `account` tarafından sahip olunan token miktarını döndürür. + * @dev `account`un sahip olduğu jeton miktarını döndürür. */ function balanceOf(address account) external view returns (uint256); ``` -Adından da anlaşılacağı üzere, `balanceOf` (bakiyesi) bir hesabın bakiyesini döndürür. Ethereum hesapları, 160 bit tutan `address` türü kullanılarak Solidity'de tanımlanır. Ayrıca `external` ve `view`'dur. +Adından da anlaşılacağı gibi, `balanceOf` bir hesabın bakiyesini döndürür. Ethereum hesapları, 160 bit tutan `address` türü kullanılarak Solidity'de tanımlanır. +Ayrıca `external` ve `view`'dur.   ```solidity /** - * @dev `amount` tokeni çağıranın hesabından `recipient` hesabına hareket ettirir. + * @dev Arayan kişinin hesabından `recipient`a `amount` kadar jeton taşır. * - * İşlemin başarılı olup olmadığını gösteren bir boole değeri döndürür. + * İşlemin başarılı olup olmadığını gösteren bir boolean değeri döndürür. * * Bir {Transfer} olayı yayar. */ function transfer(address recipient, uint256 amount) external returns (bool); ``` -`transfer` fonksiyonu çağırandan farklı bir adrese token'ları aktarır. Bu bir durum değişikliği içerir, yani `view` değildir. Bir kullanıcı bu fonksiyonu çağırdığında bir işlem oluşturur ve gaz harcar. Ayrıca, blok zincirindeki herkese olay hakkında bilgi vermek için `Transfer` adlı bir olay yayar. +`transfer` fonksiyonu, jetonları arayandan farklı bir adrese aktarır. Bu bir durum değişikliği içerir, dolayısıyla bir `view` değildir. +Bir kullanıcı bu fonksiyonu çağırdığında bir işlem oluşturur ve gaz harcar. Ayrıca, blokzincirindeki herkese olay hakkında bilgi vermek için `Transfer` adlı bir olay yayar. -Fonksiyon, iki farklı türde çağıran için iki tür çıktıya sahiptir: +Fonksiyonun, iki farklı türde arayan için iki tür çıktısı vardır: -- Fonksiyonu doğrudan bir kullanıcı arabiriminden çağıran kullanıcılar. Tipik olarak, kullanıcı bir işlem gönderir ve ne zaman geleceği belli olmayan yanıtın gelmesini beklemez. Kullanıcı, işlem makbuzunu (işlem hash değeri ile tanımlanır) arayarak veya `Transfer` olayını arayarak ne olduğunu görebilir. -- Genel bir işlemin parçası olarak fonksiyonu çağıran diğer sözleşmeler. Bu sözleşmeler, aynı işlemde çalıştıkları için sonucu hemen alırlar, böylece fonksiyon dönüş değerini kullanabilirler. +- Fonksiyonu doğrudan bir kullanıcı arayüzünden çağıran kullanıcılar. Genellikle kullanıcı bir işlem gönderir ve süresiz olarak sürebilecek bir yanıt beklemez. Kullanıcı, işlem makbuzunu (işlem karması ile tanımlanır) arayarak veya `Transfer` olayını arayarak ne olduğunu görebilir. +- Fonksiyonu genel bir işlemin parçası olarak çağıran diğer sözleşmeler. Bu sözleşmeler, aynı işlemde çalıştıkları için sonucu hemen alır, böylece fonksiyon dönüş değerini kullanabilirler. Aynı tür çıktı, sözleşmenin durumunu değiştiren diğer fonksiyonlar tarafından oluşturulur.   -Ödenekler, bir hesabın farklı bir sahibine ait olan bazı token'ları harcamasına izin verir. Bu, örneğin satıcı olarak hareket eden sözleşmeler için kullanışlıdır. Sözleşmeler olayları izleyemez, bu nedenle bir alıcı token'ları doğrudan satıcı sözleşmesine aktarırsa, bu sözleşme ödendiğini bilemez. Bunun yerine alıcı, satıcı sözleşmesinin belirli bir miktarı harcamasına izin verir ve satıcı bu tutarı transfer eder. Bu, satıcı sözleşmesinin çağırdığı bir fonksiyon aracılığıyla yapılır, böylece satıcı sözleşmesinin başarılı olup olmadığını anlayabilir. +Ödenekler, bir hesabın farklı bir sahibine ait olan bazı jetonları harcamasına izin verir. +Bu, örneğin satıcı olarak hareket eden sözleşmeler için kullanışlıdır. Sözleşmeler olayları izleyemez, bu nedenle bir alıcı jetonları doğrudan satıcı sözleşmesine aktarırsa bu sözleşme ödendiğini bilemez. Bunun yerine alıcı, satıcı sözleşmesinin belirli bir miktarı harcamasına izin verir ve satıcı bu tutarı transfer eder. +Bu, satıcı sözleşmesinin çağırdığı bir fonksiyon aracılığıyla yapılır, böylece satıcı sözleşmesi başarılı olup olmadığını anlayabilir. ```solidity /** - * @dev, `spender` adresinin `owner` adına {transferFrom} - * aracılığıyla harcayabileceği kalan token miktarını döndürür. Bu - * varsayılan olarak sıfırdır. + * @dev `spender`ın {transferFrom} aracılığıyla `owner` adına harcamasına + * izin verilecek kalan jeton sayısını döndürür. Bu varsayılan + * olarak sıfırdır. * - * Bu değer {approve} veya {transferFrom} çağırıldığında değişir. + * Bu değer, {approve} veya {transferFrom} çağrıldığında değişir. */ function allowance(address owner, address spender) external view returns (uint256); ``` -`allowance` fonksiyonu, herkesin bir adresin (`owner`) başka bir adresin (`spender`) harcamasına izin verdiği ödeneği görmek için sorgulama yapmasına olanak tanır. +`allowance` fonksiyonu, herkesin bir adresin (`owner`) başka bir adresin (`spender`) harcamasına izin verdiği ödeneği sorgulamasına olanak tanır.   ```solidity /** - * @dev Çağıranın token'ları üzerinde `spender` ödeneğini `amount` olarak belirler. + * @dev Arayanın jetonları üzerinde `spender`ın ödeneği olarak `amount`u ayarlar. * - * İşlemin başarılı olup olmadığını gösteren bir boolean değeri döndürür. + * İşlemin başarılı olup olmadığını gösteren bir boole değeri döndürür. * - * ÖNEMLİ: Bu yöntemle bir ödeneği değiştirmenin, talihsiz işlem sıralaması ile - * birinin hem eski hem de yeni ödeneği kullanması riskini - * taşıdığına dikkat edin. Bu yarış koşulunun etkisini azaltmanın muhtemel bir yolu, - * ilk olarak harcayanın ödeneğini 0'a ayarlayıp arzulanan değeri - * daha sonra belirlemektir: + * ÖNEMLİ: Bu yöntemle bir ödeneği değiştirmenin, + * birisinin şanssız bir işlem sıralamasıyla hem eski hem de yeni ödeneği + * kullanma riski taşıdığına dikkat edin. Bu yarış + * durumunu azaltmak için olası bir çözüm, önce harcama yapanın ödeneğini 0'a + * indirmek ve ardından istenen değeri ayarlamaktır: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Bir {Approval} olayı yayar. @@ -143,40 +148,40 @@ Aynı tür çıktı, sözleşmenin durumunu değiştiren diğer fonksiyonlar tar function approve(address spender, uint256 amount) external returns (bool); ``` -`approve` fonksiyonu bir ödenek oluşturur. Nasıl kötüye kullanılabileceğine dair mesajı okuduğunuzdan emin olun. Ethereum'da kendi işlemlerinizin sırasını kontrol edersiniz, ancak diğer tarafın işleminin gerçekleştiğini görene kadar kendi işleminizi göndermediğiniz sürece diğer kişilerin işlemlerinin yürütüleceği sırayı kontrol edemezsiniz. +`approve` fonksiyonu bir ödenek oluşturur. Nasıl kötüye kullanılabileceğiyle ilgili mesajı okuduğunuzdan emin olun. Ethereum'da kendi işlemlerinizin sırasını kontrol edersiniz, ancak diğer tarafın işleminin gerçekleştiğini görene kadar kendi işleminizi göndermezseniz, diğer kişilerin işlemlerinin yürütüleceği sırayı kontrol edemezsiniz.   ```solidity /** - * @dev Ödenek mekanizmasını kullanarak `amount` token'ı `sender` adresinden `recipient` - * adresine aktarır. `amount` bunun sonrasında çağıranın ödeneğinden - * kesilir. + * @dev Ödenek mekanizmasını kullanarak `sender`dan `recipient`a `amount` + * kadar jeton taşır. `amount` daha sonra arayanın + * ödeneğinden düşülür. * - * İşlemin başarılı olup olmadığını gösteren bir boolean değeri döndürür. + * İşlemin başarılı olup olmadığını gösteren bir boole değeri döndürür. * * Bir {Transfer} olayı yayar. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); ``` -Son olarak `transferFrom`, harcayan tarafından ödeneği gerçekten harcamak için kullanılır. +Son olarak, `transferFrom` harcayan tarafından ödeneği gerçekten harcamak için kullanılır.   ```solidity /** - * @dev `value` token bir hesaptan (`from`) diğerine (`to`) hareket - * ettirildiğinde yayılır. + * @dev Bir hesaptan (`from`) diğerine (`to`) + * `value` kadar jeton taşındığında yayılır. * - * `value` sıfır olabilir, bunu unutmayın. + * `value`un sıfır olabileceğini unutmayın. */ event Transfer(address indexed from, address indexed to, uint256 value); /** - * @dev Emitted when the allowance of a `spender` for an `owner` is set by - * a call to {approve}. `value` yeni ödenektir. + * @dev Bir `owner` için bir `spender` ödeneği, {approve} çağrısıyla + * ayarlandığında yayılır. `value` yeni ödenektir. */ event Approval(address indexed owner, address indexed spender, uint256 value); } @@ -186,7 +191,8 @@ Bu olaylar, ERC-20 sözleşmesinin durumu değiştiğinde yayılır. ## Asıl Sözleşme {#the-actual-contract} -Bu, [buradan alınan](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol) ERC-20 standardını uygulayan asıl sözleşmedir. Olduğu gibi kullanılması için yapılmamıştır, ancak onu kullanılabilir bir hâle getirmek için [kalıtım](https://www.tutorialspoint.com/solidity/solidity_inheritance.htm) şeklinde alabilirsiniz. +Bu, [buradan alınan](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol) ERC-20 standardını uygulayan asıl sözleşmedir. +Olduğu gibi kullanılması amaçlanmamıştır, ancak onu kullanılabilir bir şeye genişletmek için ondan [kalıtım alabilirsiniz](https://www.tutorialspoint.com/solidity/solidity_inheritance.htm). ```solidity // SPDX-License-Identifier: MIT @@ -195,7 +201,7 @@ pragma solidity >=0.6.0 <0.8.0;   -### İfadeleri İçe Aktarın {#import-statements} +### İçe Aktarma İfadeleri {#import-statements} Yukarıdaki arayüz tanımlarına ek olarak, sözleşme tanımı diğer iki dosyayı içe aktarır: @@ -206,8 +212,8 @@ import "./IERC20.sol"; import "../../math/SafeMath.sol"; ``` -- `GSN/Context.sol`, ether'siz kullanıcıların blok zincirini kullanmasına izin veren bir sistem olan [OpenGSN](https://www.opengsn.org/)'yi kullanmak için gereken tanımlardır. Bunun eski bir sürüm olduğun unutmayın, OpenGSN ile entegre olmak istiyorsanız [bu öğreticiyi kullanın](https://docs.opengsn.org/javascript-client/tutorial.html). -- [SafeMath kütüphanesi](https://ethereumdev.io/using-safe-math-library-to-prevent-from-overflows/), taşma olmadan toplama ve çıkarma yapmak için kullanılır. Aksi takdirde bir kişinin bir şekilde bir token'ı varken iki token harcayarak 2^256-1 token'a sahip olabileceği için bu gereklidir. +- `GSN/Context.sol`, ether'i olmayan kullanıcıların blokzincirini kullanmasına olanak tanıyan bir sistem olan [OpenGSN](https://www.opengsn.org/)'yi kullanmak için gereken tanımlardır. Bunun eski bir sürüm olduğunu unutmayın, OpenGSN ile entegre olmak istiyorsanız [bu eğitimi kullanın](https://docs.opengsn.org/javascript-client/tutorial.html). +- Solidity'nin **<0.8.0** sürümleri için aritmetik taşmaları/eksik kalmaları önleyen [SafeMath kütüphanesi](https://ethereumdev.io/using-safe-math-library-to-prevent-from-overflows/). Solidity ≥0.8.0'da, aritmetik işlemler taşma/eksik kalma durumunda otomatik olarak geri döner, bu da SafeMath'i gereksiz kılar. Bu sözleşme, eski derleyici sürümleriyle geriye dönük uyumluluk için SafeMath kullanır.   @@ -217,26 +223,26 @@ Bu yorum, sözleşmenin amacını açıklar. /** * @dev {IERC20} arayüzünün uygulanması. * - * Bu uygulama, token'ların oluşturulma şekline karşı agnostiktir. Bu, - * {_mint} kullanılarak türetilmiş bir sözleşmeye bir tedarik mekanizmasının eklenmesi gerektiği anlamına gelir. - * Kapsamlı bir mekanizma için bkz. {ERC20PresetMinterPauser}. + * Bu uygulama, jetonların oluşturulma şeklinden bağımsızdır. Bu, {_mint} kullanılarak + * türetilmiş bir sözleşmeye bir arz mekanizmasının eklenmesi gerektiği anlamına gelir. + * Genel bir mekanizma için bkz. {ERC20PresetMinterPauser}. * * İPUCU: Ayrıntılı bir yazı için rehberimize bakın - * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[Tedarik + * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[Arz * mekanizmaları nasıl uygulanır]. * - * Genel OpenZeppelin talimatlarını izledik: fonksiyonlar, başarısızlık durumunda - * `false` döndürmek yerine geri alınırlar. Bu davranış yine de gelenekseldir + * Genel OpenZeppelin yönergelerini takip ettik: fonksiyonlar başarısız olduğunda + * `false` döndürmek yerine geri döner. Bu davranış yine de gelenekseldir * ve ERC20 uygulamalarının beklentileriyle çelişmez. * * Ek olarak, {transferFrom} çağrılarında bir {Approval} olayı yayılır. - * Bu, söz konusu olayları dinleyerek uygulamaların tüm hesaplar için - * ödeneği yeniden yapılandırmasına izin verir. EIP'nin diğer uygulamaları, şartname gerektirmediği için - * bu olayları yaymayabilir. + * Bu, uygulamaların sadece bu olayları dinleyerek tüm hesaplar için + * ödeneği yeniden oluşturmasına olanak tanır. EIP'nin diğer uygulamaları, spesifikasyonda + * gerekli olmadığı için bu olayları yaymayabilir. * - * Son olarak, ödenek ayarlama ile ilgili bilinen sorunları azaltmak için - * standart olmayan {decreaseAllowance} ve {increaseAllowance} fonksiyonları - * eklenmiştir. Bakınız {IERC20-approve}. + * Son olarak, standart dışı {decreaseAllowance} ve {increaseAllowance} + * fonksiyonları, ödenekleri ayarlamayla ilgili bilinen sorunları azaltmak + * için eklenmiştir. Bkz. {IERC20-approve}. */ ``` @@ -257,19 +263,19 @@ Bu satır, bu durumda OpenGSN için yukarıdaki `IERC20`'den ve `Context`'ten ka ``` -Bu satır `SafeMath` kütüphanesini `uint256` türüne bağlar. Bu kütüphaneyi [burada](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/math/SafeMath.sol) bulabilirsiniz. +Bu satır, `SafeMath` kütüphanesini `uint256` türüne bağlar. Bu kütüphaneyi [burada](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/math/SafeMath.sol) bulabilirsiniz. ### Değişken Tanımları {#variable-definitions} -Bu tanımlar, sözleşmenin durum değişkenlerini belirtir. Değişkenler `private` olarak bildirilir, ancak bu yalnızca blok zincirindeki diğer sözleşmelerin onları okuyamayacağı anlamına gelir. _Blok zinciri üzerinde sır yoktur_, her düğümdeki yazılım her bloktaki her sözleşmenin durumunu bulundurur. Kural olarak, durum değişkenleri `_` olarak isimlendirilir. +Bu tanımlar, sözleşmenin durum değişkenlerini belirtir. Bu değişkenler `private` olarak bildirilmiştir, ancak bu yalnızca blokzincirindeki diğer sözleşmelerin onları okuyamayacağı anlamına gelir. _Blokzincirinde sır yoktur_, her düğümdeki yazılım, her bloktaki her sözleşmenin durumuna sahiptir. Kural olarak, durum değişkenleri `_` olarak adlandırılır. -İlk iki değişken, anahtarların sayısal değerler olması dışında, [ilişkisel dizilerle](https://wikipedia.org/wiki/Associative_array) kabaca aynı şekilde davrandıkları anlamına gelen [eşleştirmelerdir](https://www.tutorialspoint.com/solidity/solidity_mappings.htm). Depolama, yalnızca varsayılandan (sıfır) farklı değerlere sahip girdiler için tahsis edilir. +İlk iki değişken [eşlemelerdir](https://www.tutorialspoint.com/solidity/solidity_mappings.htm), yani anahtarların sayısal değerler olması dışında kabaca [ilişkisel dizilerle](https://wikipedia.org/wiki/Associative_array) aynı şekilde davranırlar. Depolama, yalnızca varsayılandan (sıfır) farklı değerlere sahip girdiler için tahsis edilir. ```solidity mapping (address => uint256) private _balances; ``` -İlk eşleme, `_balances`, adresler ve bu token'ın ilgili bakiyeleridir. Bakiyeye erişmek için, bu söz dizimini kullanın: `_balances[
]`. +İlk eşleme olan `_balances`, adresleri ve bu jetonun ilgili bakiyelerini içerir. Bakiyeye erişmek için şu söz dizimini kullanın: `_balances[]`.   @@ -277,7 +283,7 @@ Bu tanımlar, sözleşmenin durum değişkenlerini belirtir. Değişkenler `priv mapping (address => mapping (address => uint256)) private _allowances; ``` -Bu değişken, `_allowances`, daha önce açıklanan ödenekleri saklar. İlk endeks, token'ların sahibidir ve ikincisi, ödeneğin olduğu sözleşmedir. A adresinin B adresinin hesabından harcayabileceği miktara erişmek için `_allowances[B][A]` kullanın. +Bu değişken, `_allowances`, daha önce açıklanan ödenekleri saklar. İlk dizin jetonların sahibidir ve ikincisi ödeneğe sahip olan sözleşmedir. A adresinin B adresinin hesabından harcayabileceği miktara erişmek için `_allowances[B][A]` kullanın.   @@ -285,7 +291,7 @@ Bu değişken, `_allowances`, daha önce açıklanan ödenekleri saklar. İlk en uint256 private _totalSupply; ``` -Adından da anlaşılacağı gibi, bu değişken toplam token arzını takip eder. +Adından da anlaşılacağı gibi, bu değişken toplam jeton arzını takip eder.   @@ -297,124 +303,126 @@ Adından da anlaşılacağı gibi, bu değişken toplam token arzını takip ede Bu üç değişken okunabilirliği artırmak için kullanılır. İlk ikisi kendini açıklayıcıdır, ancak `_decimals` farklıdır. -Bir yandan, ethereum'un kayan nokta veya kesirli değişkenleri yoktur. Diğer taraftan, insanlar token'ları bölebilmeyi sever. İnsanların para birimi olarak altını seçmesinin bir nedeni, birisi bir ördeğin değerinde inek almak istediğinde değişiklik yapmanın zor olmasıydı. +Bir yandan, Ethereum'da kayan noktalı veya kesirli değişkenler yoktur. Diğer yandan, insanlar jetonları bölebilmeyi sever. İnsanların para birimi olarak altını seçmesinin bir nedeni, birisi bir ördeğin değerinde inek almak istediğinde para üstü vermenin zor olmasıydı. -Çözüm, tam sayıları takip etmektir ancak gerçek token yerine neredeyse değersiz olan kesirli bir token saymaktır. Ether durumunda, kesirli token wei olarak adlandırılır ve 10^18 wei bir ETH'ye eşittir. Yazarken, 10.000.000.000.000.000 wei yaklaşık olarak bir ABD veya Euro sentidir. +Çözüm, tam sayıları takip etmek, ancak gerçek jeton yerine neredeyse değersiz olan kesirli bir jetonu saymaktır. Ether durumunda, kesirli jetona wei denir ve 10^18 wei bir ETH'ye eşittir. Bu yazı yazıldığı sırada, 10.000.000.000.000 wei yaklaşık bir ABD veya Euro sentine eşittir. -Uygulamalar token bakiyesini nasıl göstereceklerini bilmelidir. Bir kullanıcının 3.141.000.000.000.000.000 wei'si varsa, bu 3,14 ETH midir? 31.41 ETH? 3,141 ETH? Ether durumunda, ETH'ye 10^18 wei olarak tanımlanır ancak kendi token'ınız için farklı bir değer seçebilirsiniz. Eğer token'ı bölmek mantıklı gelmiyorsa sıfır değerinde bir `_decimals` kullanabilirsiniz. ETH ile aynı standardı kullanmak istiyorsanız, **18** değerini kullanın. +Uygulamaların jeton bakiyesini nasıl göstereceklerini bilmeleri gerekir. Bir kullanıcının 3.141.000.000.000.000.000 wei'si varsa, bu 3,14 ETH midir? 31,41 ETH mi? 3.141 ETH mi? Ether durumunda, ETH'ye 10^18 wei olarak tanımlanır ancak kendi jetonunuz için farklı bir değer seçebilirsiniz. Jetonu bölmek mantıklı değilse, sıfır değerinde bir `_decimals` kullanabilirsiniz. ETH ile aynı standardı kullanmak istiyorsanız, **18** değerini kullanın. -### Yapıcı {#the-constructor} +### Oluşturucu {#the-constructor} ```solidity /** - * @dev {name} ve {symbol} için değerleri belirler, varsayılan 18 değeriyle - * {decimals} oluşturur. + * @dev {name} ve {symbol} için değerleri ayarlar, {decimals}'i + * varsayılan 18 değeriyle başlatır. * - * {decimals} için farklı bir değer seçmek için, {_setupDecimals} kullanın. + * {decimals} için farklı bir değer seçmek için {_setupDecimals} kullanın. * - * Bu değerlerin üçü de değişmezdir: yalnızca oluşturma sırasında bir kez - * ayarlanabilirler. + * Bu üç değerin tümü sabittir: yalnızca oluşturma sırasında + * bir kez ayarlanabilirler. */ constructor (string memory name_, string memory symbol_) public { + // Solidity ≥0.7.0'da, 'public' örtüktür ve atlanabilir. + _name = name_; _symbol = symbol_; _decimals = 18; } ``` -Yapıcı, sözleşme ilk oluşturulduğunda çağrılır. Kural olarak, fonksiyon parametreleri `_` olarak isimlendirilir. +Oluşturucu, sözleşme ilk oluşturulduğunda çağrılır. Kural gereği, fonksiyon parametreleri `_` olarak adlandırılır. ### Kullanıcı Arayüzü Fonksiyonları {#user-interface-functions} ```solidity /** - * @dev Token'ın adını döndürür. + * @dev Jetonun adını döndürür. */ function name() public view returns (string memory) { return _name; } /** - * @dev Returns the symbol of the token, usually a shorter version of the - * name. + * @dev Genellikle adın daha kısa bir versiyonu olan jetonun sembolünü + * döndürür. */ function symbol() public view returns (string memory) { return _symbol; } /** - * @dev Returns the number of decimals used to get its user representation. - * Örnek olarak, eğer `decimals` eşittir `2` ise, `505` token'lık bakiye - * kullanıcıya `5,05` olarak gösterilmelidir (`505 / 10 ** 2`). + * @dev Kullanıcı gösterimini elde etmek için kullanılan ondalık sayısını döndürür. + * Örneğin, `decimals` `2`'ye eşitse, `505` jetonluk bir bakiye + * kullanıcıya `5,05` (`505 / 10 ** 2`) olarak gösterilmelidir. * - * Token'lar genellikle ether ve wei arasındaki ilişkiyi taklit ederek - * 18 değerini seçer. Bu, {_setupDecimals} çağrılmadıysa {ERC20} tarafından kullanılan - * değerdir. + * Jetonlar genellikle ether ve wei arasındaki ilişkiyi taklit ederek 18 değerini + * tercih ederler. Bu, {_setupDecimals} çağrılmadığı sürece {ERC20}'nin + * kullandığı değerdir. * - * NOT: Bu bilgi yalnızca _görüntüleme_ amacıyla kullanılır: - * {IERC20-balanceOf} ve {IERC20-transfer} dahil olmak üzere hiçbir şekilde sözleşmenin - * aritmetiğini etkilemez. + * NOT: Bu bilgi yalnızca _gösterim_ amacıyla kullanılır: hiçbir + * şekilde {IERC20-balanceOf} ve {IERC20-transfer} dahil olmak üzere + * sözleşmenin aritmetiğini etkilemez. */ function decimals() public view returns (uint8) { return _decimals; } ``` -Bu fonksiyonlar; `name`, `symbol` ve `decimals`, kullanıcı arayüzlerinin sözleşmeniz hakkında bilgi sahibi olmalarına yardımcı olur, böylece sözleşmenizi düzgün bir şekilde görüntüleyebilirler. +Bu fonksiyonlar, `name`, `symbol` ve `decimals`, kullanıcı arayüzlerinin sözleşmeniz hakkında bilgi sahibi olmalarına yardımcı olur, böylece sözleşmenizi düzgün bir şekilde görüntüleyebilirler. Dönüş türü `string memory`'dir, yani bellekte depolanan bir dize döndürür. Dizeler gibi değişkenler üç konumda saklanabilir: -| | Geçerlilik Süresi | Sözleşme Erişimi | Gaz Bedeli | -| ------------ | ----------------- | ---------------- | ------------------------------------------------------------------------------------------- | -| Bellek | Fonksiyon çağrısı | Okunur/Yazılır | Onlarca veya yüzlerce (daha yüksek konumlar için daha yüksek) | -| Çağrı Verisi | Fonksiyon çağrısı | Salt Okunur | Dönüş türü olarak kullanılamaz, yalnızca bir fonksiyon parametre türü olarak kullanılabilir | -| Depolama | Değişene kadar | Okunur/Yazılır | Yüksek (Okuma için 800, yazma için 20 bin) | +| | Geçerlilik Süresi | Sözleşme Erişimi | Gaz Bedeli | +| -------- | ----------------- | ---------------- | ------------------------------------------------------------------------------------------- | +| Bellek | Fonksiyon çağrısı | Okunur/Yazılır | Onlarca veya yüzlerce (daha yüksek konumlar için daha yüksek) | +| Calldata | Fonksiyon çağrısı | Salt Okunur | Dönüş türü olarak kullanılamaz, yalnızca bir fonksiyon parametre türü olarak kullanılabilir | +| Depolama | Değişene kadar | Okunur/Yazılır | Yüksek (Okuma için 800, yazma için 20 bin) | -Bu durumda, `memory` en iyi seçenektir. +Bu durumda `memory` en iyi seçenektir. -### Token Bilgisini Okuyun {#read-token-information} +### Jeton Bilgilerini Oku {#read-token-information} -Bunlar, toplam arz veya bir hesabın bakiyesi gibi token hakkında bilgi sağlayan fonksiyonlardır. +Bunlar, toplam arz veya bir hesabın bakiyesi gibi jeton hakkında bilgi sağlayan fonksiyonlardır. ```solidity /** - * @dev See {IERC20-totalSupply}. + * @dev Bkz. {IERC20-totalSupply}. */ function totalSupply() public view override returns (uint256) { return _totalSupply; } ``` -`totalSupply` fonksiyonu, toplam token arzını döndürür. +`totalSupply` fonksiyonu, toplam jeton arzını döndürür.   ```solidity /** - * @dev See {IERC20-balanceOf}. + * @dev Bkz. {IERC20-balanceOf}. */ function balanceOf(address account) public view override returns (uint256) { return _balances[account]; } ``` -Bir hesabın bakiyesini okuyun. Herkesin başka birinin hesap bakiyesini almasına izin verildiğini unutmayın. Zaten her düğümde mevcut olduğu için bu bilgiyi saklamaya çalışmanın bir anlamı yoktur. _Blok zincirinde sır yoktur._ +Bir hesabın bakiyesini okuyun. Herkesin başka birinin hesap bakiyesini almasına izin verildiğini unutmayın. Zaten her düğümde mevcut olduğu için bu bilgiyi saklamaya çalışmanın bir anlamı yoktur. _Blokzincirinde sır yoktur._ -### Token Transfer Edin {#transfer-tokens} +### Jetonları Aktar {#transfer-tokens} ```solidity /** - * @dev See {IERC20-transfer}. + * @dev Bkz. {IERC20-transfer}. * - * Gereksinimler: + * Gereklilikler: * - * - `recipient` sıfır adresi olamaz. - * - arayan kişinin en az `amount bakiyesi olmalıdır. + * - `recipient` sıfır adres olamaz. + * - arayan en az `amount` bakiyeye sahip olmalıdır. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { ``` -`transfer` fonksiyonu, token'ları gönderenin hesabından farklı bir hesaba aktarmak için çağrılır. Bir boolean değeri döndürmesine rağmen, bu değerin her zaman **true** olduğunu unutmayın. Transfer başarısız olursa, sözleşme çağrıyı geri alır. +`transfer` fonksiyonu, jetonları gönderenin hesabından farklı bir hesaba aktarmak için çağrılır. Bir boole değeri döndürmesine rağmen, bu değerin **her zaman doğru** olduğunu unutmayın. Aktarım başarısız olursa sözleşme çağrıyı geri alır.   @@ -424,19 +432,19 @@ Bir hesabın bakiyesini okuyun. Herkesin başka birinin hesap bakiyesini alması } ``` -`_transfer` fonksiyonu asıl işi yapar. Yalnızca diğer sözleşme fonksiyonları tarafından çağrılabilen özel bir fonksiyondur. Konvansiyonel olarak özel fonksiyonlar, durum değişkenleriyle aynı şekilde `_` olarak adlandırılır. +`_transfer` fonksiyonu asıl işi yapar. Yalnızca diğer sözleşme fonksiyonları tarafından çağrılabilen özel bir fonksiyondur. Kural olarak özel fonksiyonlar, durum değişkenleriyle aynı şekilde `_` olarak adlandırılır. -Normalde Solidity'de mesajı gönderen için `msg.sender` kullanırız. Ancak bu, [OpenGSN](http://opengsn.org/)'i bozar. Eğer token'ımızla ether'sız işlemlere izin vermek istiyorsak, `_msgSender()` kullanmalıyız. Normal işlemler için `msg.sender` döndürür, ancak ether'sız işlemler için mesajı ileten sözleşmeyi değil, orijinal imzalayanı döndürür. +Normalde Solidity'de mesajı gönderen için `msg.sender` kullanırız. Ancak bu, [OpenGSN](http://opengsn.org/)'yi bozar. Jetonumuzla ether'sız işlemlere izin vermek istiyorsak, `_msgSender()` kullanmalıyız. Normal işlemler için `msg.sender` döndürür, ancak ether'sız işlemler için mesajı ileten sözleşmeyi değil, orijinal imzalayanı döndürür. ### Ödenek Fonksiyonları {#allowance-functions} -Bunlar, ödenek fonksiyonlarını uygulayan fonksiyonlardır: `allowance`, `approve`, `transferFrom`, ve `_approve`. Ek olarak OpenZeppelin uygulaması, güvenliği artıran bazı özellikleri içerecek şekilde temel standardın ötesine geçer: `increaseAllowance` ve `decreaseAllowance`. +Bunlar, ödenek işlevselliğini uygulayan fonksiyonlardır: `allowance`, `approve`, `transferFrom` ve `_approve`. Ek olarak, OpenZeppelin uygulaması, güvenliği artıran bazı özellikleri içerecek şekilde temel standardın ötesine geçer: `increaseAllowance` ve `decreaseAllowance`. #### Ödenek fonksiyonu {#allowance} ```solidity /** - * @dev See {IERC20-allowance}. + * @dev Bkz. {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; @@ -445,15 +453,15 @@ Bunlar, ödenek fonksiyonlarını uygulayan fonksiyonlardır: `allowance`, `appr `allowance` fonksiyonu herkesin herhangi bir ödeneği kontrol etmesini sağlar. -#### Onaylama fonksiyonu {#approve} +#### approve fonksiyonu {#approve} ```solidity /** - * @dev See {IERC20-approve}. + * @dev Bkz. {IERC20-approve}. + * + * Gereklilikler: * - * Gereksinimler: - * - * - `spender` sıfır adresi olamaz. + * - `spender` sıfır adres olamaz. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { ``` @@ -471,7 +479,7 @@ Bu işlev, bir ödenek oluşturmak için çağrılır. Yukarıdaki `transfer` fo } ``` -Durum değişikliklerinin meydana geldiği yerlerin sayısını en aza indirmek için dahili fonksiyonları kullanıyoruz. _Durumu_ değiştiren herhangi bir fonksiyon, güvenlik için denetlenmesi gereken potansiyel bir güvenlik riskidir. Bu şekilde daha az hata yapma ihtimalimiz olur. +Durum değişikliklerinin meydana geldiği yerlerin sayısını en aza indirmek için dahili fonksiyonları kullanıyoruz. Durumu değiştiren _herhangi bir_ fonksiyon, güvenlik için denetlenmesi gereken potansiyel bir güvenlik riskidir. Bu şekilde daha az hata yapma ihtimalimiz olur. #### transferFrom fonksiyonu {#transferFrom} @@ -479,17 +487,17 @@ Bu, bir harcama yapanın bir ödenek harcamak için çağırdığı fonksiyondur ```solidity /** - * @dev See {IERC20-transferFrom}. + * @dev Bkz. {IERC20-transferFrom}. * - * Güncellenmiş ödeneği gösteren bir {Approval} olayı yayar. Bu - * EIP için gerekmez. {ERC20} başlangıcındaki nota bakınız. + * Güncellenmiş ödeneği gösteren bir {Approval} olayı yayar. Bu, + * EIP tarafından gerekli değildir. {ERC20}'nin başındaki nota bakın. * - * Gereksinimler: + * Gereklilikler: * - * - `sender` ve `recipient` sıfır adresi olamaz. - * - `sender` en az `amount` miktarda bakiyeye sahip olmalıdır. - * - çağıranın ``sender`` token'ları için en az `amount` - * ödeneği olmalıdır. + * - `sender` ve `recipient` sıfır adres olamaz. + * - `sender` en az `amount` bakiyeye sahip olmalıdır. + * - arayan, ``sender``ın jetonları için en az + * `amount` kadar ödeneğe sahip olmalıdır. */ function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { @@ -498,7 +506,8 @@ Bu, bir harcama yapanın bir ödenek harcamak için çağırdığı fonksiyondur   -`a.sub(b, "message")` fonksiyon çağrısı iki şey yapar. İlk olarak, yeni ödenek olan `a-b` hesabını yapar. İkincisi, bu sonucun negatif olmadığını kontrol eder. Negatifse, verilen mesajla çağrı geri döner. Bir çağrı geri döndüğünde, o arama sırasında daha önce yapılmış herhangi bir işlemin yok sayıldığını ve bu nedenle `_transfer` işlemini geri almamız gerekmediğini unutmayın. +`a.sub(b, "message")` fonksiyon çağrısı iki şey yapar. İlk olarak, yeni ödenek olan `a-b` hesabını yapar. +İkincisi, bu sonucun negatif olmadığını kontrol eder. Negatifse, verilen mesajla çağrı geri döner. Bir çağrı geri döndüğünde, o çağrı sırasında daha önce yapılmış herhangi bir işlemin yok sayıldığını ve bu nedenle `_transfer` işlemini geri almamız gerekmediğini unutmayın. ```solidity _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, @@ -509,48 +518,48 @@ Bu, bir harcama yapanın bir ödenek harcamak için çağırdığı fonksiyondur #### OpenZeppelin güvenlik eklemeleri {#openzeppelin-safety-additions} -Sıfırdan farklı başka bir değere sıfırdan farklı bir ödenek ayarlamak tehlikelidir, çünkü başkalarının değil, yalnızca kendi işlemlerinizin sırasını siz kontrol edersiniz. Saf olan Alice ve dürüst olmayan Bill olmak üzere iki kullanıcınız olduğunu hayal edin. Alice, Bill'den beş token'a mal olduğunu düşündüğü bir hizmet istiyor, bu yüzden Bill'e beş token'lık bir ödenek veriyor. +Sıfırdan farklı bir ödeneği başka bir sıfırdan farklı değere ayarlamak tehlikelidir çünkü yalnızca kendi işlemlerinizin sırasını kontrol edersiniz, başkalarınınkini değil. Saf olan Alice ve dürüst olmayan Bill olmak üzere iki kullanıcınız olduğunu hayal edin. Alice, Bill'den beş jetona mal olduğunu düşündüğü bir hizmet istiyor, bu yüzden Bill'e beş jetonluk bir ödenek veriyor. -Sonra bir şeyler değişir ve Bill'in fiyatı on token'a yükselir. Hâlâ hizmeti isteyen Alice, Bill'in ödeneğini 10'a ayarlayan bir işlem gönderir. Bill, işlem havuzunda bu yeni işlemi gördüğü anda, Alice'in beş token'ını harcayan ve çok daha yüksek bir gaz fiyatına sahip olan bir işlem gönderir, böylece işlem daha hızlı kazılır. Bu şekilde Bill, ilk beş token'ı harcayabilir ve ardından, Alice'in yeni ödeneği çıkarıldığında, on beş token'lık toplam fiyat için, Alice'in yetkilendirmek istediğinden daha fazla olacak şekilde on tane daha harcayabilir. Bu tekniğe [front-running](https://consensysdiligence.github.io/smart-contract-best-practices/attacks/#front-running) denir +Sonra bir şeyler değişir ve Bill'in fiyatı on jetona yükselir. Hâlâ hizmeti isteyen Alice, Bill'in ödeneğini ona ayarlayan bir işlem gönderir. Bill, işlem havuzunda bu yeni işlemi gördüğü anda, Alice'in beş jetonunu harcayan ve çok daha yüksek bir gaz fiyatına sahip olan bir işlem gönderir, böylece işlem daha hızlı kazılır. Bu şekilde Bill, ilk beş jetonu harcayabilir ve ardından, Alice'in yeni ödeneği çıkarıldığında, on beş jetonluk toplam fiyat için, Alice'in yetkilendirmek istediğinden daha fazla olacak şekilde on tane daha harcayabilir. Bu tekniğe [önden çalıştırma](https://consensysdiligence.github.io/smart-contract-best-practices/attacks/#front-running) denir -| Alice'in İşlemi | Alice'in Nonce Değeri | Bill'in İşlemi | Bill'in Nonce Değeri | Bill'in Ödeneği | Bill'in Alice'den Toplam Geliri | -| ----------------- | --------------------- | ----------------------------- | -------------------- | --------------- | ------------------------------- | -| approve(Bill, 5) | 10 | | | 5 | 0 | -| | | transferFrom(Alice, Bill, 5) | 10,123 | 0 | 5 | -| approve(Bill, 10) | 11 | | | 10 | 5 | -| | | transferFrom(Alice, Bill, 10) | 10,124 | 0 | 15 | +| Alice'in İşlemi | Alice Nonce | Bill'in İşlemi | Bill Nonce | Bill'in Ödeneği | Bill'in Alice'ten Toplam Geliri | +| ------------------------------------ | ----------- | ------------------------------------------------ | ---------------------- | --------------- | ------------------------------- | +| approve(Bill, 5) | 10 | | | 5 | 0 | +| | | transferFrom(Alice, Bill, 5) | 10.123 | 0 | 5 | +| approve(Bill, 10) | 11 | | | 10 | 5 | +| | | transferFrom(Alice, Bill, 10) | 10.124 | 0 | 15 | -Bu sorunu önlemek için, bu iki fonksiyon (`increaseAllowance` ve `decreaseAllowance`), ödeneği belirli bir miktarda değiştirmenize olanak tanır. Yani Bill zaten beş token harcamışsa, sadece beş tane daha harcayabilecektir. Zamanlamaya bağlı olarak, bunun iki sonucu olabilir ve her ikisinde de Bill yalnızca on token alabilir: +Bu sorunu önlemek için, bu iki fonksiyon (`increaseAllowance` ve `decreaseAllowance`), ödeneği belirli bir miktarda değiştirmenize olanak tanır. Yani Bill zaten beş jeton harcamışsa, sadece beş tane daha harcayabilecektir. Zamanlamaya bağlı olarak, bunun iki sonucu olabilir ve her ikisinde de Bill yalnızca on jeton alabilir: A: -| Alice'in İşlemi | Alice'in Nonce Değeri | Bill'in İşlemi | Bill'in Nonce Değeri | Bill'in Ödeneği | Bill'in Alice'den Toplam Geliri | -| -------------------------- | --------------------: | ---------------------------- | -------------------: | --------------: | ------------------------------- | -| approve(Bill, 5) | 10 | | | 5 | 0 | -| | | transferFrom(Alice, Bill, 5) | 10,123 | 0 | 5 | -| increaseAllowance(Bill, 5) | 11 | | | 0+5 = 5 | 5 | -| | | transferFrom(Alice, Bill, 5) | 10,124 | 0 | 10 | +| Alice'in İşlemi | Alice Nonce | Bill'in İşlemi | Bill Nonce | Bill'in Ödeneği | Bill'in Alice'ten Toplam Geliri | +| --------------------------------------------- | ----------: | ----------------------------------------------- | ---------------------: | --------------: | ------------------------------- | +| approve(Bill, 5) | 10 | | | 5 | 0 | +| | | transferFrom(Alice, Bill, 5) | 10.123 | 0 | 5 | +| increaseAllowance(Bill, 5) | 11 | | | 0+5 = 5 | 5 | +| | | transferFrom(Alice, Bill, 5) | 10.124 | 0 | 10 | B: -| Alice'in İşlemi | Alice'in Nonce Değeri | Bill'in İşlemi | Bill'in Nonce Değeri | Bill'in Ödeneği | Bill'in Alice'den Toplam Geliri | -| -------------------------- | --------------------: | ----------------------------- | -------------------: | --------------: | ------------------------------: | -| approve(Bill, 5) | 10 | | | 5 | 0 | -| increaseAllowance(Bill, 5) | 11 | | | 5+5 = 10 | 0 | -| | | transferFrom(Alice, Bill, 10) | 10,124 | 0 | 10 | +| Alice'in İşlemi | Alice Nonce | Bill'in İşlemi | Bill Nonce | Bill'in Ödeneği | Bill'in Alice'ten Toplam Geliri | +| --------------------------------------------- | ----------: | ------------------------------------------------ | ---------------------: | --------------: | ------------------------------: | +| approve(Bill, 5) | 10 | | | 5 | 0 | +| increaseAllowance(Bill, 5) | 11 | | | 5+5 = 10 | 0 | +| | | transferFrom(Alice, Bill, 10) | 10.124 | 0 | 10 | ```solidity /** - * @dev Çağıran tarafından `spender` için sağlanan ödeneği atomik derecede artırır. + * @dev Arayan tarafından `spender`'a verilen ödeneği atomik olarak artırır. + * + * Bu, {IERC20-approve}'da açıklanan sorunlar için bir azaltma olarak kullanılabilecek + * {approve}'a bir alternatiftir. * - * Bu, {IERC20-approve} bölümünde açıklanan sorunlar için hafifletme olarak kullanılabilecek - * {approve} seçeneğine bir alternatiftir. + * Güncellenmiş ödeneği belirten bir {Approval} olayı yayar. * - * Güncellenmiş ödeneği gösteren bir {Approval} olayı yayar. + * Gereklilikler: * - * Gereksinimler: - * - * - `spender` sıfır adresi olamaz. + * - `spender` sıfır adres olamaz. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); @@ -558,23 +567,23 @@ B: } ``` -`a.add(b)` fonksiyonu güvenli bir toplamadır. `a`+`b`>=`2^256` olan ihtimali düşük durumda, normal toplamanın yaptığı gibi başa dönmez. +`a.add(b)` fonksiyonu güvenli bir toplamadır. `a`+`b`>=`2^256` olması gibi düşük bir ihtimalde, normal toplamanın yaptığı gibi başa dönmez. ```solidity /** - * @dev Çağıran tarafından `spender` için sağlanan ödeneği atomik derecede azaltır. + * @dev Arayan tarafından `spender`'a verilen ödeneği atomik olarak azaltır. * - * Bu, {IERC20-approve} bölümünde açıklanan sorunlar için hafifletme olarak kullanılabilecek - * {approve} seçeneğine bir alternatiftir. + * Bu, {IERC20-approve}'da açıklanan sorunlar için bir azaltma olarak kullanılabilecek + * {approve}'a bir alternatiftir. * - * Güncellenmiş ödeneği gösteren bir {Approval} olayı yayar. + * Güncellenmiş ödeneği belirten bir {Approval} olayı yayar. * - * Gereksinimler: - * - * - `spender` sıfır adresi olamaz. - * - `spender` çağıran için en az `subtractedValue` kadar - * ödeneğe sahip olmalı. + * Gereklilikler: + * + * - `spender` sıfır adres olamaz. + * - `spender`'ın arayan için en az + * `subtractedValue` kadar ödeneği olmalıdır. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, @@ -583,31 +592,31 @@ B: } ``` -### Token Bilgilerini Değiştiren Fonksiyonlar {#functions-that-modify-token-information} +### Jeton Bilgilerini Değiştiren Fonksiyonlar {#functions-that-modify-token-information} Bunlar asıl işi yapan dört fonksiyondur: `_transfer`, `_mint`, `_burn` ve `_approve`. -#### \_transfer fonksiyonu {#_transfer} +#### _transfer fonksiyonu {#_transfer} ```solidity /** - * @dev `amount` token'ı `sender`'dan `recipient`'a hareket ettirir. - * - * Bu dahili fonksiyon {transfer} ile eş değerdir ve şu amaçlarla kullanılabilir: - * örn. otomatik token ücretlerini, kesme mekanizmalarını vb. uygulama. - * - * Bir {Transfer} olayı yayar. - * - * Gereksinimler: - * - * - `sender` sıfır adresi olamaz. - * - `recipient` sıfır adresi olamaz. - * - `sender` en az `amount` miktarda bakiyeye sahip olmalıdır. + * @dev `sender`'dan `recipient`'a `amount` kadar jeton taşır. + * + * Bu dahili fonksiyon {transfer}'a eşdeğerdir ve örneğin + * otomatik jeton ücretlerini, kesme mekanizmalarını vb. uygulamak için kullanılabilir. + * + * Bir {Transfer} olayı yayar. + * + * Gereklilikler: + * + * - `sender` sıfır adres olamaz. + * - `recipient` sıfır adres olamaz. + * - `sender` en az `amount` bakiyeye sahip olmalıdır. */ function _transfer(address sender, address recipient, uint256 amount) internal virtual { ``` -Bu fonksiyon, `_transfer`, token'ları bir hesaptan diğerine aktarır. Hem `transfer` (gönderenin kendi hesabından yapılan transferler için) hem de `transferFrom` (başka birinin hesabından transfer için izinleri kullanmak için) tarafından çağrılır. +Bu fonksiyon, `_transfer`, jetonları bir hesaptan diğerine aktarır. Hem `transfer` (gönderenin kendi hesabından yapılan transferler için) hem de `transferFrom` (başka birinin hesabından transfer için ödenekleri kullanmak için) tarafından çağrılır.   @@ -628,11 +637,11 @@ Ethereum'da hiç kimse aslında sıfır adresine sahip değildir (yani, eşleşe Bu sözleşmeyi kullanmanın iki yolu vardır: 1. Kendi kodunuz için bir şablon olarak kullanın -1. [Ondan kalıtım yoluyla alın](https://www.bitdegree.org/learn/solidity-inheritance) ve yalnızca değiştirmeniz gereken fonksiyonları geçersiz kılın +2. [Ondan kalıtım alın](https://www.bitdegree.org/learn/solidity-inheritance) ve yalnızca değiştirmeniz gereken fonksiyonları geçersiz kılın İkinci yöntem çok daha iyidir çünkü OpenZeppelin ERC-20 kodu zaten denetlenmiş ve güvenli olduğu gösterilmiştir. Kalıtım kullandığınızda, değiştirdiğiniz fonksiyonların ne olduğu açıktır ve sözleşmenize güvenmek için kişilerin yalnızca bu belirli fonksiyonları denetlemesi gerekir. -Token'lar her el değiştirdiğinde bir fonksiyon gerçekleştirmek genellikle yararlıdır. Ancak,`_transfer` çok önemli bir fonksiyondur ve güvenli olmayan bir şekilde yazmak mümkündür (aşağıya bakın), bu nedenle geçersiz kılmamak en iyisidir. Çözüm, bir [kanca fonksiyonu](https://wikipedia.org/wiki/Hooking) olan `_beforeTokenTransfer` fonksiyonudur. Bu fonksiyonu geçersiz kılabilirsiniz ve her aktarımda çağrılacaktır. +Jetonlar her el değiştirdiğinde bir fonksiyon gerçekleştirmek genellikle yararlıdır. Ancak,`_transfer` çok önemli bir fonksiyondur ve güvensiz bir şekilde yazılması mümkündür (aşağıya bakın), bu nedenle onu geçersiz kılmamak en iyisidir. Çözüm, bir [kanca fonksiyonu](https://wikipedia.org/wiki/Hooking) olan `_beforeTokenTransfer`'dır. Bu fonksiyonu geçersiz kılabilirsiniz ve her aktarımda çağrılacaktır.   @@ -641,7 +650,7 @@ Token'lar her el değiştirdiğinde bir fonksiyon gerçekleştirmek genellikle y _balances[recipient] = _balances[recipient].add(amount); ``` -Bunlar aslında aktarımı yapan hatlardır. Aralarında **hiçbir şey** olmadığını ve aktarılan tutarı alıcıya eklemeden önce göndericiden çıkardığımızı unutmayın. Bu, ortada farklı bir sözleşmeye çağrı olsaydı, bu sözleşmeyi aldatmak için kullanılmış olabileceği için önemlidir. Bu şekilde aktarım atomiktir, ortasında hiçbir şey olamaz. +Bunlar aslında aktarımı yapan satırlardır. Aralarında **hiçbir şey** olmadığını ve aktarılan tutarı alıcıya eklemeden önce göndericiden çıkardığımızı unutmayın. Bu önemlidir çünkü ortada farklı bir sözleşmeye çağrı olsaydı, bu sözleşmeyi aldatmak için kullanılabilirdi. Bu şekilde aktarım atomiktir, ortasında hiçbir şey olamaz.   @@ -650,23 +659,25 @@ Bunlar aslında aktarımı yapan hatlardır. Aralarında **hiçbir şey** olmad } ``` -Son olarak, bir `Transfer` olayı yayın. Olaylara akıllı sözleşmelerle erişilemez, ancak blok zincirinin dışında çalışan kod, olayları dinleyebilir ve bunlara tepki verebilir. Örneğin bir cüzdan, sahibinin ne zaman daha fazla token aldığını takip edebilir. +Son olarak, bir `Transfer` olayı yayınlayın. Olaylara akıllı sözleşmelerle erişilemez, ancak blokzincirinin dışında çalışan kod, olayları dinleyebilir ve bunlara tepki verebilir. Örneğin bir cüzdan, sahibinin ne zaman daha fazla jeton aldığını takip edebilir. -#### \_mint ve \_burn fonksiyonları {#_mint-and-_burn} +#### _mint ve _burn fonksiyonları {#_mint-and-_burn} -Bu iki fonksiyon (`_mint` and `_burn`) toplam token arzını düzenler. Bunlar dahilidir ve bu sözleşmede onları çağıran bir fonksiyon yoktur, bu nedenle yalnızca sözleşmeden devralırsanız ve hangi koşullar altında yeni token'lar basacağınıza veya mevcut token'ları yakacağınıza karar vermek için kendi mantığınızı eklerseniz kullanışlıdırlar. +Bu iki fonksiyon (`_mint` ve `_burn`), toplam jeton arzını değiştirir. +Bunlar dahili fonksiyonlardır ve bu sözleşmede onları çağıran bir fonksiyon yoktur, bu nedenle yalnızca sözleşmeden kalıtım alırsanız ve hangi koşullar altında yeni jetonlar basacağınıza veya mevcut olanları yakacağınıza karar vermek için kendi mantığınızı eklerseniz kullanışlıdırlar. -**NOT:** Her ERC-20 token'ının, token yönetimini belirleyen kendi çalışma mantığı vardır. Örneğin, sabit bir arz sözleşmesi, yapıcıda yalnızca `_mint` öğesini çağırabilir ve hiçbir zaman `_burn` öğesini çağıramaz. Token satan bir sözleşme, ödeme yapıldığında `_mint`'i ve kaçak enflasyonu önlemek için bir noktada muhtemelen `_burn`'u arayacaktır. +**NOT:** Her ERC-20 jetonunun, jeton yönetimini belirleyen kendi iş mantığı vardır. +Örneğin, sabit arza sahip bir sözleşme oluşturucusunda yalnızca `_mint`'i çağırabilir ve `_burn`'ü asla çağırmayabilir. Jeton satan bir sözleşme, ödeme yapıldığında `_mint`'i çağırır ve muhtemelen bir noktada enflasyonun kontrolden çıkmasını önlemek için `_burn`'ü çağırır. ```solidity - /** @dev `amount` token yaratır ve onları `account`'a atarak toplam arzı - * artırır. + /** @dev `amount` kadar jeton oluşturur ve bunları `account`a atayarak + * toplam arzı artırır. * - * `from` sıfır adresine ayarlı olacak şekilde bir {Transfer} olayı yayar. + * `from` sıfır adrese ayarlanmış bir {Transfer} olayı yayar. * - * Gereksinimler: + * Gereklilikler: * - * - `to` sıfır adresi olamaz. + * - `to` sıfır adres olamaz. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); @@ -677,21 +688,21 @@ Bu iki fonksiyon (`_mint` and `_burn`) toplam token arzını düzenler. Bunlar d } ``` -Toplam token sayısı değiştiğinde `_totalSupply`'ı güncellediğinizden emin olun. +Toplam jeton sayısı değiştiğinde `_totalSupply`'ı güncellediğinizden emin olun.   -``` +```solidity /** - * @dev `amount` token'ı `account`'tan yok ederek toplam arzı - * azaltır. + * @dev `account`tan `amount` kadar jetonu yok ederek toplam + * arzı azaltır. * - * `to` sıfır adresine ayarlı olacak şekilde bir {Transfer} olayı yayar. + * `to` sıfır adrese ayarlanmış bir {Transfer} olayı yayar. * - * Gereksinimler: + * Gereklilikler: * - * - `account` sıfır adresi olamaz. - * - `account` en az `amount` miktarda token'a sahip olmalı. + * - `account` sıfır adres olamaz. + * - `account` en az `amount` kadar jetona sahip olmalıdır. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); @@ -704,25 +715,25 @@ Toplam token sayısı değiştiğinde `_totalSupply`'ı güncellediğinizden emi } ``` -`_burn` fonksiyonu, diğer yöne gitmesi dışında `_mint` ile hemen hemen aynıdır. +`_burn` fonksiyonu, ters yönde çalışması dışında `_mint` ile neredeyse aynıdır. -#### \_approve fonksiyonu {#_approve} +#### _approve fonksiyonu {#_approve} -Bu aslında ödenekleri belirten fonksiyondur. Sahibin, kendi mevcut bakiyesinden daha yüksek bir ödenek belirlemesine izin verdiğini unutmayın. Bakiye, ödenek oluşturulduğundaki bakiyeden farklı olabileceği transfer sırasında kontrol edildiği için bu sorun yaratmaz. +Bu, ödenekleri gerçekten belirten fonksiyondur. Sahibinin, kendi mevcut bakiyesinden daha yüksek bir ödenek belirlemesine izin verdiğini unutmayın. Bu sorun değil çünkü bakiye, ödenek oluşturulduğundaki bakiyeden farklı olabileceği için transfer sırasında kontrol edilir. ```solidity /** - * @dev `owner` token'ları üzerinde `spender` ödeneğini `amount` olarak belirler. + * @dev `owner`ın jetonları üzerinde `spender`ın ödeneği olarak `amount`u ayarlar. * - * Bu dahili işlev `approve` ile eş değerdir ve şu amaçlarla kullanılabilir: - * örn. belirli alt sistemler için otomatik izinler ayarlama vb. - * - * Bir {Approval} olayı yayar. + * Bu dahili fonksiyon `approve`a eşdeğerdir ve örneğin + * belirli alt sistemler için otomatik ödenekler ayarlamak için kullanılabilir. + * + * Bir {Approval} olayı yayar. * - * Gereksinimler: + * Gereklilikler: * - * - `owner` sıfır adresi olamaz. - * - `spender` sıfır adresi olamaz. + * - `owner` sıfır adres olamaz. + * - `spender` sıfır adres olamaz. */ function _approve(address owner, address spender, uint256 amount) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); @@ -733,7 +744,7 @@ Bu aslında ödenekleri belirten fonksiyondur. Sahibin, kendi mevcut bakiyesinde   -Bir `Approval` olayı yayın. Uygulamanın nasıl yazıldığına bağlı olarak, harcayan sözleşmenin sahibi tarafından veya bu olayları dinleyen bir sunucu tarafından onaylanması hakkında bilgi verilebilir. +Bir `Approval` olayı yayınlayın. Uygulamanın nasıl yazıldığına bağlı olarak, harcayan sözleşmeye onay hakkında ya sahibi tarafından ya da bu olayları dinleyen bir sunucu tarafından bilgi verilebilir. ```solidity emit Approval(owner, spender, amount); @@ -741,42 +752,43 @@ Bir `Approval` olayı yayın. Uygulamanın nasıl yazıldığına bağlı olarak ``` -### Ondalık Değişkenini Düzenleyin {#modify-the-decimals-variable} +### Ondalık Değişkenini Değiştir {#modify-the-decimals-variable} ```solidity /** - * @dev {decimals} değerini varsayılan olan 18 harici bir değere ayarlar. + * @dev {decimals}'i varsayılan 18 değerinden başka bir değere ayarlar. * - * UYARI: Bu fonksiyon sadece yapıcıdan çağrılmalıdır. Çoğu - * Token sözleşmeleriyle etkileşime giren uygulama, - * {decimals} değerinin değişmesini beklemez ve değişirse yanlış çalışabilir. + * UYARI: Bu fonksiyon yalnızca oluşturucudan çağrılmalıdır. Jeton + * sözleşmeleriyle etkileşimde bulunan çoğu uygulama + * {decimals}'in hiç değişmesini beklemez ve değişirse yanlış çalışabilir. */ function _setupDecimals(uint8 decimals_) internal { _decimals = decimals_; } ``` -Bu fonksiyon, kullanıcı arabirimlerine miktarın nasıl yorumlanacağını söylemek için kullanılan `_decimals` değişkenini değiştirir. Yapıcıdan çağırmalısınız. Daha sonraki herhangi bir noktada onu çağırmak sahtekârlık olur ve uygulamalar bununla başa çıkmak için tasarlanmamıştır. +Bu fonksiyon, kullanıcı arayüzlerine miktarın nasıl yorumlanacağını söylemek için kullanılan `_decimals` değişkenini değiştirir. +Bunu oluşturucudan çağırmalısınız. Daha sonraki herhangi bir noktada onu çağırmak sahtekârlık olur ve uygulamalar bununla başa çıkmak için tasarlanmamıştır. ### Kancalar {#hooks} ```solidity /** - * @dev Herhangi bir token'ın aktarımı öncesi çağrılan kanca. Buna - * basım ve yakım dahildir. - * - * Çağrı koşulları: - * - * - `from` ve `to` sıfır olmadığında, `from`'un token `amount` değeri - * `to`'ya aktarılır. - * - `from` sıfırken, `amount` token `to` için basılır. - * - `to` sıfırken, ``from``'un `amount` kadar token'ı yakılır. - * - `from` ve `to` asla ikisi birden sıfır olmaz. - * - * Kancalar hakkında daha fazla bilgi edinmek için xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks] sayfasına gidin. + * @dev Herhangi bir jeton transferinden önce çağrılan kanca. Bu, + * basmayı ve yakmayı içerir. + * + * Çağırma koşulları: + * + * - `from` ve `to` ikisi de sıfır değilken, ``from``'un jetonlarından `amount` + * kadarı `to`'ya transfer edilir. + * - `from` sıfırken, `to` için `amount` kadar jeton basılır. + * - `to` sıfırken, ``from``'un jetonlarından `amount` kadarı yakılır. + * - `from` ve `to` ikisi de asla sıfır olmaz. + * + * Kancalar hakkında daha fazla bilgi edinmek için şuraya gidin: xref:ROOT:extending-contracts.adoc#using-hooks[Kancaları Kullanma]. */ function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { } } @@ -786,12 +798,15 @@ Bu, aktarımlar sırasında çağrılacak kanca fonksiyonudur. Bu örnekte kanca ## Sonuç {#conclusion} -İnceleme için, bu sözleşmedeki en önemli fikirlerden bazıları şunlardır (bence sizinki muhtemelen değişebilir): +İnceleme için, bu sözleşmedeki en önemli fikirlerden bazıları şunlardır (bana göre, sizinki farklılık gösterebilir): + +- _Blokzincirde sır yoktur_. Bir akıllı sözleşmenin erişebileceği herhangi bir bilgi tüm dünya tarafından kullanılabilir. +- Kendi işlemlerinizin sırasını kontrol edebilirsiniz, ancak diğer kişilerin işlemlerinin ne zaman gerçekleşeceğini kontrol edemezsiniz. Bu, bir ödeneği değiştirmenin tehlikeli olabilmesinin nedenidir, çünkü harcayanın her iki ödeneğin toplamını harcamasına izin verir. +- `uint256` türündeki değerler başa döner. Başka bir deyişle, _0-1=2^256-1_. Bu istenen davranış değilse, bunu kontrol etmeniz (veya sizin için yapan SafeMath kütüphanesini kullanmanız) gerekir. Bunun [Solidity 0.8.0](https://docs.soliditylang.org/en/breaking/080-breaking-changes.html)'da değiştiğini unutmayın. +- Belirli bir türdeki tüm durum değişikliklerini belirli bir yerde yapın, çünkü bu denetimi kolaylaştırır. + Örneğin, `approve`, `transferFrom`, `increaseAllowance` ve `decreaseAllowance` tarafından çağrılan `_approve` fonksiyonuna sahip olmamızın nedeni budur. +- Durum değişiklikleri, aralarında başka bir eylem olmaksızın atomik olmalıdır (`_transfer`'da görebileceğiniz gibi). Bunun nedeni, durum değişikliği sırasında tutarsız bir duruma sahip olmanızdır. Örneğin, gönderenin bakiyesinden düşüldüğü zaman ile alıcının bakiyesine eklendiği zaman arasında, var olması gerekenden daha az jeton bulunur. Aralarında işlemler, özellikle farklı bir sözleşmeye yapılan çağrılar varsa, bu potansiyel olarak kötüye kullanılabilir. -- _Blok zincirinde sır yoktur._. Akıllı bir sözleşmenin erişebileceği herhangi bir bilgi tüm dünya tarafından kullanılabilir. -- Başkalarının işlemleri gerçekleştiğinde anlar hariç kendi işlemlerinizin sırasını kontrol edebilirsiniz. Bu, bir ödeneği değiştirmenin tehlikeli olabilmesinin nedenidir, çünkü harcama yapanın her iki ödeneğin toplamını harcamasına izin verir. -- `uint256` türünde değerler döner. Başka bir deyişle, _0-1=2^256-1_. Bu istenen davranış değilse, kontrol etmeniz (veya sizin için yapan SafeMath kütüphanesini kullanmanız) gerekir. Bunun [Solidity 0.8.0](https://docs.soliditylang.org/en/breaking/080-breaking-changes.html) sürümünde değiştiğini unutmayın. -- Denetimi kolaylaştırdığından, belirli bir türdeki tüm durum değişikliklerini belirli bir yerde yapın. Bu, örnek olarak `approve`, `transferFrom`, `increaseAllowance` ve `decreaseAllowance` tarafından çağrılan `_approve` fonksiyonuna sahip olmamızın sebebidir -- Durum değişiklikleri, aralarında başka bir işlem olmaksızın atomik olmalıdır (`_transfer`'da görebileceğiniz gibi). Bunun nedeni, durum değişikliği sırasında tutarsız bir duruma sahip olmanızdır. Örneğin, gönderenin bakiyesinden düştüğünüz süre ile alıcının bakiyesine eklediğiniz zaman arasında olması gerekenden daha az token vardır. Aralarında işlemler, özellikle farklı bir sözleşmeye yapılan çağrılar varsa, bu potansiyel olarak kötüye kullanılabilir. +Artık OpenZeppelin ERC-20 sözleşmesinin nasıl yazıldığını ve özellikle nasıl daha güvenli hâle getirildiğini gördüğünüze göre, gidin ve kendi güvenli sözleşmelerinizi ve uygulamalarınızı yazın. -Artık OpenZeppelin ERC-20 sözleşmesinin nasıl yazıldığını ve özellikle nasıl daha güvenli hâle getirildiğini gördünüz, kendi güvenli sözleşmelerinizi ve uygulamalarınızı yazabilirsiniz. +[Çalışmalarımdan daha fazlası için buraya bakın](https://cryptodocguy.pro/). diff --git a/public/content/translations/tr/developers/tutorials/erc20-with-safety-rails/index.md b/public/content/translations/tr/developers/tutorials/erc20-with-safety-rails/index.md index 3adb8d3bd34..ab990cbbd3c 100644 --- a/public/content/translations/tr/developers/tutorials/erc20-with-safety-rails/index.md +++ b/public/content/translations/tr/developers/tutorials/erc20-with-safety-rails/index.md @@ -1,32 +1,32 @@ --- -title: ERC-20 ve Güvenlik Önlemleri -description: İnsanların aptalca hatalar yapmasını önleme +title: "Güvenlik Önlemli ERC-20" +description: "İnsanların Basit Hatalardan Kaçınmasına Yardımcı Olmak" author: Ori Pomerantz lang: tr -tags: - - "erc-20" +tags: [ "erc-20" ] skill: beginner published: 2022-08-15 --- ## Giriş {#introduction} -Ethereum ile ilgili en güzel şeylerden biri, işlemlerinizi değiştirebilecek veya geri alabilecek merkezi herhangi bir otoritenin olmamasıdır. Ethereum ile ilgili en büyük sorunlardan biri, kullanıcı hatalarını veya yasa dışı işlemleri geri alma yetkisine sahip merkezi bir otoritenin olmamasıdır. Bu makalede, kullanıcıların [ERC-20](/developers/docs/standards/tokens/erc-20/) jetonlarıyla yaptıkları bazı yaygın hataların yanı sıra; kullanıcıların bu hatalardan kaçınmasına yardımcı olan veya merkezi bir otoriteye bir miktar yetki veren (örneğin hesapları dondurmak için) ERC-20 sözleşmelerinin nasıl oluşturulacağını öğreneceksiniz. +Ethereum ile ilgili en güzel şeylerden biri, işlemlerinizi değiştirebilecek veya geri alabilecek merkezi herhangi bir otoritenin olmamasıdır. Ethereum ile ilgili en büyük sorunlardan biri, kullanıcı hatalarını veya yasa dışı işlemleri geri alma yetkisine sahip merkezi bir otoritenin olmamasıdır. Bu makalede, kullanıcıların [ERC-20](/developers/docs/standards/tokens/erc-20/) jetonlarıyla yaptıkları yaygın hatalardan bazılarını ve kullanıcıların bu hatalardan kaçınmasına yardımcı olan veya merkezi bir otoriteye bir miktar yetki (örneğin hesapları dondurmak için) veren ERC-20 sözleşmelerinin nasıl oluşturulacağını öğreneceksiniz. -[Open Zeppelin ERC-20 jeton sözleşmesini](https://github.com/OpenZeppelin/openzeppelin-contracts/tree/master/contracts/token/ERC20) hala kullanıyor olsak da bu makalenin bunu ayrıntılı olarak açıklamadığını söylemiş olalım. Bu bilgiyi [burada bulabilirsiniz](/developers/tutorials/erc20-annotated-code). +Bu makalede [OpenZeppelin ERC-20 jeton sözleşmesini](https://github.com/OpenZeppelin/openzeppelin-contracts/tree/master/contracts/token/ERC20) kullanacak olsak da, sözleşmenin bu makalede ayrıntılı olarak açıklanmadığını unutmayın. Bu bilgiyi [burada](/developers/tutorials/erc20-annotated-code) bulabilirsiniz. Bütün kaynak kodunu görmek isterseniz: 1. [Remix IDE](https://remix.ethereum.org/)'yi açın. -2. Github'ı klonla simgesine tıklayın (![clone github icon](icon-clone.png)). -3. Github deposunu kopyalayın `https://github.com/qbzzt/20220815-erc20-safety-rails`. -4. **Sözleşmeler > erc20-safety-rails.sol** öğesini açın. +2. Github klonlama simgesine tıklayın (![github klonlama simgesi](icon-clone.png)). +3. `https://github.com/qbzzt/20220815-erc20-safety-rails` github deposunu klonlayın. +4. **contracts > erc20-safety-rails.sol** dosyasını açın. -## ERC-20 sözleşmesi oluşturma {#creating-an-erc-20-contract} +## Bir ERC-20 sözleşmesi oluşturma {#creating-an-erc-20-contract} -Güvenlik önlemi işlevini eklemeden önce bize bir ERC-20 sözleşmesi lazım. Bu makalede [OpenZeppelin'in Sözleşme Sihirbazı'nı](https://docs.openzeppelin.com/contracts/5.x/wizard) kullanacağız. Başka bir sekmede açın ve şu yönergeleri izleyin: +Güvenlik önlemi işlevselliğini eklemeden önce bir ERC-20 sözleşmesine ihtiyacımız var. Bu makalede [OpenZeppelin Sözleşme Sihirbazı'nı](https://docs.openzeppelin.com/contracts/5.x/wizard) kullanacağız. Başka bir tarayıcıda açın ve şu talimatları izleyin: 1. **ERC20**'yi seçin. + 2. Bu ayarları girin: | Parametre | Değer | @@ -39,26 +39,26 @@ Güvenlik önlemi işlevini eklemeden önce bize bir ERC-20 sözleşmesi lazım. | Yükseltilebilirlik | Hiçbiri | 3. Yukarı kaydırın ve farklı bir ortam kullanmak için **Remix'te Aç**'a (Remix için) veya **İndir**'e tıklayın. Remix kullandığınızı varsayacağım, başka bir şey kullanıyorsanız sadece uygun değişiklikleri yapın. -4. Şimdi tamamen işlevsel bir ERC-20 sözleşmemiz var. İçeri aktarılan kodu görmek için `.deps` > `npm`'yi genişletebilirsiniz. -5. Bir ERC-20 sözleşmesi olarak işlev gördüğünü anlamak için sözleşmeyi derleyin, dağıtın ve sözleşmeyle oynayın. Remix'in nasıl kullanıldığını öğrenmek istiyorsanız [bu rehberi kullanın](https://remix.ethereum.org/?#activate=udapp,solidity,LearnEth). + +4. Artık tamamen işlevsel bir ERC-20 sözleşmemiz var. İçe aktarılan kodu görmek için `.deps` > `npm` yolunu genişletebilirsiniz. + +5. Bir ERC-20 sözleşmesi olarak işlev gördüğünü anlamak için sözleşmeyi derleyin, dağıtın ve sözleşmeyle oynayın. Remix'i nasıl kullanacağınızı öğrenmeniz gerekiyorsa [bu öğreticiyi kullanın](https://remix.ethereum.org/?#activate=udapp,solidity,LearnEth). ## Yaygın hatalar {#common-mistakes} ### Hatalar {#the-mistakes} -Kullanıcılar bazen jetonları yanlış adrese gönderir. Ne yapmak istediklerini anlamak için zihinlerini okuyamasak da sık sık meydana gelen ve tespit edilmesi kolay olan iki hata türü vardır: +Kullanıcılar bazen jetonları yanlış adrese gönderir. Ne yapmak istediklerini bilmek için akıllarını okuyamasak da, sıkça meydana gelen ve tespit edilmesi kolay olan iki hata türü vardır: -1. Jetonları sözleşmenin kendi adresine göndermek. Örneğin, [Optimism'in OP jetonu](https://optimism.mirror.xyz/qvd0WfuLKnePm1Gxb9dpGchPf5uDz5NSMEFdgirDS4c) iki aydan kısa bir sürede [120.000'den](https://optimistic.etherscan.io/address/0x4200000000000000000000000000000000000042#tokentxns) fazla OP jetonu biriktirmeyi başardı. Bu, muhtemelen insanların kaybettiği önemli miktarda bir serveti temsil ediyor. +1. Jetonları sözleşmenin kendi adresine göndermek. Örneğin, [Optimism'in OP jetonu](https://optimism.mirror.xyz/qvd0WfuLKnePm1Gxb9dpGchPf5uDz5NSMEFdgirDS4c) iki aydan kısa bir sürede [120.000'in üzerinde](https://optimism.blockscout.com/address/0x4200000000000000000000000000000000000042) OP jetonu biriktirmeyi başardı. Bu, muhtemelen insanların kaybettiği önemli miktarda bir serveti temsil ediyor. -2. Jetonları harici bir [dışarıdan sahip olunan hesaba](/developers/docs/accounts/#externally-owned-accounts-and-key-pairs) veya [akıllı sözleşmeye](/developers/docs/smart-contracts) karşılık gelmeyen boş bir adrese göndermek. Bunun ne sıklıkla gerçekleştiğine dair istatistiklere sahip olmasam da [tek bir olay 20.000.000 jetona mal olabilir.](https://gov.optimism.io/t/message-to-optimism-community-from-wintermute/2595). +2. Jetonları boş bir adrese, yani bir [Harici Olarak Sahiplenilmiş hesaba](/developers/docs/accounts/#externally-owned-accounts-and-key-pairs) veya bir [akıllı sözleşmeye](/developers/docs/smart-contracts) karşılık gelmeyen bir adrese göndermek. Bunun ne sıklıkla olduğuna dair istatistiklerim olmasa da, [bir olay 20.000.000 jetona mal olabilirdi](https://gov.optimism.io/t/message-to-optimism-community-from-wintermute/2595). ### Transferleri önleme {#preventing-transfers} -OpenZeppelin ERC-20 sözleşmesi, jeton aktarılmadan önce çağrılan bir `_beforeTokenTransfer` +OpenZeppelin ERC-20 sözleşmesi, bir jeton transfer edilmeden önce çağrılan [`_beforeTokenTransfer` adında bir kanca](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol#L364-L368) içerir. Varsayılan olarak bu kanca hiçbir şey yapmaz, ancak bir sorun olduğunda geri dönen kontroller gibi kendi işlevselliğimizi ona bağlayabiliriz. -kancası içerir. Bu kanca çalışırken varsayılan olarak hiçbir şey yapmaz ancak örneğin bir sorun olduğunda geri dönen kontroller gibi kendi işlevselliğimizi içerisine ekleyebiliriz. - -Kancayı kullanmak için oluşturucudan sonra şu işlevi ekleyin: +Kancayı kullanmak için bu işlevi kurucudan sonra ekleyin: ```solidity function _beforeTokenTransfer(address from, address to, uint256 amount) @@ -75,33 +75,33 @@ Solidity'ye pek aşina değilseniz işlevin bazı kısımları sizin için yeni internal virtual ``` -`virtual` anahtar sözcüğü tıpkı bizim `ERC-20`'den işlevsellik devraldığımız ve bu işlevi geçersiz kıldığımız gibi diğer sözleşmelerin de bizden miras alıp bu işlevi geçersiz kılabileceği anlamına gelir. +`virtual` anahtar kelimesi, tıpkı `ERC20`'den işlevsellik devraldığımız ve bu işlevi geçersiz kıldığımız gibi, diğer sözleşmelerin de bizden miras alıp bu işlevi geçersiz kılabileceği anlamına gelir. ```solidity override(ERC20) ``` -`_beforeTokenTransfer`'in ERC-20 jeton tanımını [geçersiz kıldığımızın](https://docs.soliditylang.org/en/v0.8.15/contracts.html#function-overriding) altını çizmeliyiz. Genel olarak net tanımlar örtülü tanımlara göre çok daha iyidir; bir şey gözünüzün tam önündeyse ne yaptığınızı unutmazsınız. Hangi üst sınıfa ait `_beforeTokenTransfer`'i geçersiz kıldığımızı belirtmemizin sebebi de budur. +`_beforeTokenTransfer`'in ERC20 jeton tanımını [geçersiz kıldığımızı](https://docs.soliditylang.org/en/v0.8.15/contracts.html#function-overriding) açıkça belirtmeliyiz. Genel olarak net tanımlar örtülü tanımlara göre çok daha iyidir; bir şey gözünüzün tam önündeyse ne yaptığınızı unutmazsınız. Hangi üst sınıfa ait `_beforeTokenTransfer`'i geçersiz kıldığımızı belirtmemizin sebebi de budur. ```solidity super._beforeTokenTransfer(from, to, amount); ``` -Bu satır, sözleşmenin veya ona sahip olan devraldığımız sözleşmelerin `_beforeTokenTransfer` işlevini çağırır. Bu durumda, bahsettiğimiz sadece `ERC-20`'dir, `Ownable` bu kancaya sahip değildir. Halihazırda `ERC20._beforeTokenTransfer` hiçbir şey yapmasa da, gelecekte işlevsellik eklenmesi durumunda onu çağırabiliriz (ve sonra, dağıtımdan sonra sözleşmeler değişmediği için sözleşmeyi yeniden dağıtmaya karar veririz). +Bu satır, sözleşmenin veya ona sahip olan devraldığımız sözleşmelerin `_beforeTokenTransfer` işlevini çağırır. Bu durumda, bahsettiğimiz sadece `ERC20`'dir, `Ownable` bu kancaya sahip değildir. Halihazırda `ERC20._beforeTokenTransfer` hiçbir şey yapmasa da, gelecekte işlevsellik eklenmesi durumunda onu çağırabiliriz (ve sonra, dağıtımdan sonra sözleşmeler değişmediği için sözleşmeyi yeniden dağıtmaya karar veririz). -### Gereksinimlerin kodlanması {#coding-the-requirements} +### Gereksinimleri kodlama {#coding-the-requirements} Aşağıdaki gereksinimleri işleve eklemek istiyoruz: - `to` adresi, ERC-20 sözleşmesinin kendi adresi olan `address(this)` ile eşit olamaz. - `to` adresi boş olamaz, aşağıdakilerden birisi olmalıdır: - - Dışarıdan sahip olunan hesap (EOA). Bir adresin EOA olup olmadığını doğrudan kontrol edemeyiz ancak bir adresin ETH bakiyesini kontrol edebiliriz. EOA'ların artık kullanılmasalar bile neredeyse her zaman bir bakiyesi vardır; onları son wei'ye kadar temizlemek zordur. - - Akıllı sözleşme. Bir adresin akıllı sözleşme olup olmadığını test etmek biraz daha zordur. Harici kod uzunluğunu kontrol eden, [`EXTCODESIZE`](https://www.evm.codes/#3b) isimli bir işlem kodu vardır ancak doğrudan Solidity'de mevcut değildir. Bunun için EVM derlemesi olan [Yul](https://docs.soliditylang.org/en/v0.8.15/yul.html)'u kullanmamız gerekir. Solidity'den kullanabileceğimiz ([`
.code` ve `
.codehash`](https://docs.soliditylang.org/en/v0.8.15/units-and-global-variables.html#members-of-address-types)) gibi başka değerler de vardır ancak maliyetleri daha yüksektir. + - Bir Harici Olarak Sahiplenilmiş hesap (EOA). Bir adresin EOA olup olmadığını doğrudan kontrol edemeyiz ancak bir adresin ETH bakiyesini kontrol edebiliriz. EOA'ların artık kullanılmasalar bile neredeyse her zaman bir bakiyesi vardır; onları son wei'ye kadar temizlemek zordur. + - Bir akıllı sözleşme. Bir adresin akıllı sözleşme olup olmadığını test etmek biraz daha zordur. Harici kod uzunluğunu kontrol eden, [`EXTCODESIZE`](https://www.evm.codes/#3b) olarak adlandırılan bir işlem kodu vardır, ancak bu doğrudan Solidity'de mevcut değildir. Bunun için EVM assembly'si olan [Yul](https://docs.soliditylang.org/en/v0.8.15/yul.html)'u kullanmalıyız. Solidity'den kullanabileceğimiz başka değerler de var ([`
.code` ve `
.codehash`](https://docs.soliditylang.org/en/v0.8.15/units-and-global-variables.html#members-of-address-types)) ama bunlar daha maliyetli. Gelin yeni kodu satır satır inceleyelim: ```solidity - require(to != address(this), "Can't send tokens to the contract address"); + require(to != address(this), "Jetonlar sözleşme adresine gönderilemez"); ``` `to` ile `this(address)`'in aynı şey olmadığını kontrol edin; bu, ilk gerekliliktir. @@ -113,48 +113,48 @@ Gelin yeni kodu satır satır inceleyelim: } ``` -Biz bir adresin sözleşme olup olmadığını bu şekilde kontrol ederiz. Yul'dan çıktıyı doğrudan alamayız, bunun yerine sonucu tutabilecek bir değişken tanımlarız (bu durumda `isToContract`). Yul'un çalışma şekli, her işlem kodunun bir işlev olarak kabul edilmesidir. Öncelikle sözleşme boyutunu almak için [`EXTCODESIZE`](https://www.evm.codes/#3b)'ı çağırır ve sonra sıfır olmadığını doğrulamak için [`GT`](https://www.evm.codes/#11)'yi kullanırız (negatif olamaz, çünkü işaretsiz tam sayılarla uğraşıyoruz). Sonrasında sonucu, `isToContrac`'a yazarız. +Biz bir adresin sözleşme olup olmadığını bu şekilde kontrol ederiz. Yul'dan çıktıyı doğrudan alamayız, bunun yerine sonucu tutabilecek bir değişken tanımlarız (bu durumda `isToContract`). Yul'un çalışma şekli, her işlem kodunun bir işlev olarak kabul edilmesidir. Öncelikle sözleşme boyutunu almak için [`EXTCODESIZE`](https://www.evm.codes/#3b) öğesini çağırır ve sonra sıfır olmadığını doğrulamak için [`GT`](https://www.evm.codes/#11) kullanırız (negatif olamaz, çünkü işaretsiz tam sayılarla uğraşıyoruz). Sonrasında sonucu, `isToContract`'a yazarız. ```solidity - require(to.balance != 0 || isToContract, "Can't send tokens to an empty address"); + require(to.balance != 0 || isToContract, "Jetonlar boş bir adrese gönderilemez"); ``` Son olarak sırada, boş adresler için gerçek kontrolümüz var. ## Yönetici erişimi {#admin-access} -Hataları geri alabilen bir yöneticiye sahip olmak bazen faydalı olabilir. Kötüye kullanım olasılığını azaltmak için bu yönetici bir [çoklu imza](https://blog.logrocket.com/security-choices-multi-signature-wallets/) olabilir, böylece birden fazla kişinin bir eylem üzerinde anlaşması gerekir. Bu makale içerisinde iki yönetici özelliğinden bahsedeceğiz: +Hataları geri alabilen bir yöneticiye sahip olmak bazen faydalı olabilir. Kötüye kullanım potansiyelini azaltmak için bu yönetici bir [çoklu imza](https://blog.logrocket.com/security-choices-multi-signature-wallets/) olabilir, böylece bir eylem üzerinde birden fazla kişinin anlaşması gerekir. Bu makale içerisinde iki yönetici özelliğinden bahsedeceğiz: 1. Hesapları dondurmak ve çözmek. Bu, örneğin bir hesabın güvenliği ihlal edildiğinde faydalı olabilir. 2. Varlık temizlemesi. - Bazen dolandırıcılar, meşruiyet kazanmak için gerçek jetonun sözleşmesine hileli jetonlar gönderir. Örneğin, [buraya bakın](https://optimistic.etherscan.io/token/0x2348b1a1228ddcd2db668c3d30207c3e1852fbbe?a=0x4200000000000000000000000000000000000042). Meşru ERC-20 sözleşmesi [0x4200....0042](https://optimistic.etherscan.io/address/0x4200000000000000000000000000000000000042)'dir. [0x234....bbe](https://optimistic.etherscan.io/address/0x2348b1a1228ddcd2db668c3d30207c3e1852fbbe) imiş gibi davranan bir dolandırıcılıktır. + Bazen dolandırıcılar, meşruiyet kazanmak için gerçek jetonun sözleşmesine hileli jetonlar gönderir. Örneğin, [buraya bakın](https://optimism.blockscout.com/token/0x2348B1a1228DDCd2dB668c3d30207c3E1852fBbe?tab=holders). Meşru ERC-20 sözleşmesi [0x4200....0042](https://optimism.blockscout.com/token/0x4200000000000000000000000000000000000042)'dir. Onun gibi davranan dolandırıcılık [0x234....bbe](https://optimism.blockscout.com/token/0x2348B1a1228DDCd2dB668c3d30207c3E1852fBbe)'dir. İnsanların sözleşmemize yanlışlıkla başka geçerli jetonlar göndermesi ise onları oradan çıkarmanın bir yolunu bulmamız için başka bir nedendir. -OpenZeppelin, yönetici erişimini etkinleştirmek için iki çeşit mekanizma sunar: +OpenZeppelin, yönetici erişimini etkinleştirmek için iki mekanizma sunar: -- [`Ownable`](https://docs.openzeppelin.com/contracts/5.x/access-control#ownership-and-ownable) sözleşmelerinin sadece bir sahibi vardır. `OnlyOwner`[ özelliğine](https://www.tutorialspoint.com/solidity/solidity_function_modifiers.htm) sahip işlevler yalnızca o sahip tarafından çağrılabilir. Sahipler bu sahipliği bir başkasına devredebilir ya da tamamen sahiplikten feragat edebilir. Tüm diğer hesapların hakları ise genelde aynıdır. -- [`AccessControl`](https://docs.openzeppelin.com/contracts/5.x/access-control#role-based-access-control) sözleşmelerinde [rol tabanlı erişim kontrolü (RBAC) bulunur](https://en.wikipedia.org/wiki/Role-based_access_control). +- [`Ownable`](https://docs.openzeppelin.com/contracts/5.x/access-control#ownership-and-ownable) sözleşmelerinin tek bir sahibi vardır. `onlyOwner` [değiştiricisine](https://www.tutorialspoint.com/solidity/solidity_function_modifiers.htm) sahip işlevler yalnızca o sahip tarafından çağrılabilir. Sahipler bu sahipliği bir başkasına devredebilir ya da tamamen sahiplikten feragat edebilir. Tüm diğer hesapların hakları ise genelde aynıdır. +- [`AccessControl`](https://docs.openzeppelin.com/contracts/5.x/access-control#role-based-access-control) sözleşmeleri [rol tabanlı erişim kontrolüne (RBAC)](https://en.wikipedia.org/wiki/Role-based_access_control) sahiptir. -Basit olması için biz bu makalede `Ownable`'ı kullanacağız. +Basit olması için bu makalede `Ownable` kullanıyoruz. ### Sözleşmeleri dondurma ve çözme {#freezing-and-thawing-contracts} Sözleşmeleri dondurmak ve çözmek, birtakım değişiklikler gerektirir: -- Hangi adreslerin dondurulduğunu takip etmeye yarayan adresler ile [boole değerleri](https://en.wikipedia.org/wiki/Boolean_data_type) [eşlemesi](https://www.tutorialspoint.com/solidity/solidity_mappings.htm). Tüm değerler başlangıçta sıfırdır ve bu boole değerleri için yanlış olarak yorumlanır. Hesaplar varsayılan olarak dondurulmuş halde gelmediği için istediğimiz budur. +- Hangi adreslerin dondurulduğunu takip etmek için adreslerden [boolean'lara](https://en.wikipedia.org/wiki/Boolean_data_type) bir [eşleme](https://www.tutorialspoint.com/solidity/solidity_mappings.htm). Tüm değerler başlangıçta sıfırdır ve bu boole değerleri için yanlış olarak yorumlanır. Hesaplar varsayılan olarak dondurulmuş halde gelmediği için istediğimiz budur. ```solidity mapping(address => bool) public frozenAccounts; ``` -- Bir hesap dondurulduğunda veya çözüldüğünde ilgilenen herkesi bilgilendirmek için [olay akışı](https://www.tutorialspoint.com/solidity/solidity_events.htm). Teknik olarak yaklaşacak olursak olay akışı bu eylemler için gerekli değildir ancak zincir dışı kodların olayı izlemesi ve olan biteni anlamasına yardımcı olurlar. Akıllı bir sözleşmenin başkasıyla alakalı olabilecek bir şey olduğunda bunları yayımlaması iyi bir davranış olarak kabul edilir. +- Bir hesap dondurulduğunda veya çözüldüğünde ilgilenen herkesi bilgilendirmek için [Olaylar](https://www.tutorialspoint.com/solidity/solidity_events.htm). Teknik olarak bu eylemler için olaylar gerekli değildir, ancak zincir dışı kodların bu olayları dinlemesine ve ne olduğunu bilmesine yardımcı olur. Akıllı bir sözleşmenin başkasıyla alakalı olabilecek bir şey olduğunda bunları yayımlaması iyi bir davranış olarak kabul edilir. - Olay akışı dizine eklenir, böylece bir hesabın dondurulduğu veya çözüldüğü tüm zamanları aramak mümkün olur. + Olaylar dizine eklendiğinden, bir hesabın dondurulduğu veya çözüldüğü tüm zamanlar aranabilir. ```solidity - // When accounts are frozen or unfrozen + // Hesaplar dondurulduğunda veya çözüldüğünde event AccountFrozen(address indexed _addr); event AccountThawed(address indexed _addr); ``` @@ -167,27 +167,27 @@ Sözleşmeleri dondurmak ve çözmek, birtakım değişiklikler gerektirir: onlyOwner ``` -[`public`](https://www.tutorialspoint.com/solidity/solidity_contracts.htm) olarak işaretlenmiş işlevler, diğer akıllı sözleşmelerden veya doğrudan bir işlemle çağrılabilir. + [`public`](https://www.tutorialspoint.com/solidity/solidity_contracts.htm) olarak işaretlenen işlevler, diğer akıllı sözleşmelerden veya doğrudan bir işlemle çağrılabilir. -```solidity - { - require(!frozenAccounts[addr], "Account already frozen"); - frozenAccounts[addr] = true; - emit AccountFrozen(addr); - } // freezeAccount -``` + ```solidity + { + require(!frozenAccounts[addr], "Hesap zaten dondurulmuş"); + frozenAccounts[addr] = true; + emit AccountFrozen(addr); + } // freezeAccount + ``` -Hesap önceden dondurulmuşsa, eski haline döndürün. Aksi takdirde, dondurun ve bir olay `emit` edin. + Hesap zaten dondurulmuşsa, geri alın. Aksi takdirde, dondurun ve bir olay `emit` edin. -- Paranın donmuş bir hesaptan taşınmasını önlemek için `_beforeTokenTransfer`'i değiştirin. Donmuş hesaba halen para aktarılabileceğini unutmayın. +- Dondurulmuş bir hesaptan para taşınmasını önlemek için `_beforeTokenTransfer`'i değiştirin. Donmuş hesaba halen para aktarılabileceğini unutmayın. ```solidity - require(!frozenAccounts[from], "The account is frozen"); + require(!frozenAccounts[from], "Hesap dondurulmuş"); ``` -### Varlık temizlemesi {#asset-cleanup} +### Varlık temizleme {#asset-cleanup} -Bu sözleşmede tutulan ERC-20 jetonlarını serbest bırakmak için ait oldukları jeton sözleşmesinde [`transfer`](https://eips.ethereum.org/EIPS/eip-20#transfer) veya [`approve`](https://eips.ethereum.org/EIPS/eip-20#approve) işlevlerinden birini çağırmamız gerekir. Bu durumda ödenekler için gaz harcamaya gerek yoktur, doğrudan transfer edebiliriz. +Bu sözleşme tarafından tutulan ERC-20 jetonlarını serbest bırakmak için, ait oldukları jeton sözleşmesinde [`transfer`](https://eips.ethereum.org/EIPS/eip-20#transfer) veya [`approve`](https://eips.ethereum.org/EIPS/eip-20#approve) işlevlerinden birini çağırmamız gerekir. Bu durumda ödenekler için gaz harcamaya gerek yoktur, doğrudan transfer edebiliriz. ```solidity function cleanupERC20( @@ -200,7 +200,7 @@ Bu sözleşmede tutulan ERC-20 jetonlarını serbest bırakmak için ait oldukla IERC20 token = IERC20(erc20); ``` -Bu, adresi aldığımızda bir sözleşme için nesne oluşturma söz dizimidir. Kaynak kodun bir parçası olarak ERC-20 jetonlarının tanımına sahip olduğumuzdan (bkz. Satır 4) ve bu dosya bir OpenZeppelin ERC-20 sözleşmesinin arayüzü olan [IERC20](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/IERC20.sol) tanımını içerdiğinden bunu yapabiliriz. +Bu, adresi aldığımızda bir sözleşme için nesne oluşturma söz dizimidir. Bunu yapabiliriz çünkü kaynak kodun bir parçası olarak ERC20 jetonlarının tanımına sahibiz (bkz. satır 4) ve bu dosya, bir OpenZeppelin ERC-20 sözleşmesinin arayüzü olan [IERC20 tanımını](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/IERC20.sol) içerir. ```solidity uint balance = token.balanceOf(address(this)); @@ -212,4 +212,6 @@ Bu bir temizleme işlevidir, bu yüzden muhtemelen herhangi bir jeton bırakmak ## Sonuç {#conclusion} -Anlattığımız süreç mükemmel bir çözüm değildir, zaten "kullanıcı bir hata yaptı" sorunları için mükemmel bir çözüm de yoktur. Ancak bu tür kontrollerin kullanılması en azından bazı hataları önleyebilir. Hesapları dondurma yeteneği, tehlikeli olmakla birlikte belirli hacker'ların çaldığı fonları reddederek hacker'ların yarattığı zararı sınırlandırmak için kullanılabilir. +Bu mükemmel bir çözüm değildir; "kullanıcı hata yaptı" sorununun mükemmel bir çözümü yoktur. Ancak bu tür kontrollerin kullanılması en azından bazı hataları önleyebilir. Hesapları dondurma yeteneği, tehlikeli olmakla birlikte belirli hacker'ların çaldığı fonları reddederek hacker'ların yarattığı zararı sınırlandırmak için kullanılabilir. + +[Çalışmalarımdan daha fazlası için buraya bakın](https://cryptodocguy.pro/). diff --git a/public/content/translations/tr/developers/tutorials/ethereum-for-web2-auth/index.md b/public/content/translations/tr/developers/tutorials/ethereum-for-web2-auth/index.md new file mode 100644 index 00000000000..b3c738ba22f --- /dev/null +++ b/public/content/translations/tr/developers/tutorials/ethereum-for-web2-auth/index.md @@ -0,0 +1,886 @@ +--- +title: "web2 kimlik doğrulaması için Ethereum'u kullanma" +description: "Bu öğreticiyi okuduktan sonra, bir Geliştirici, tek oturum açma ve diğer ilgili hizmetleri sağlamak için web2'de kullanılan bir standart olan SAML girişi ile Ethereum girişini (Web3) entegre edebilecektir. Bu, web2 Kaynaklarına erişimin, Kullanıcı nitelikleri Tasdiklerden gelecek şekilde Ethereum imzaları aracılığıyla doğrulanmasına olanak tanır." +author: Ori Pomerantz +tags: [ "web2", "kimlik doğrulama", "eas" ] +skill: beginner +lang: tr +published: 2025-04-30 +--- + +## Giriş + +[SAML](https://www.onelogin.com/learn/saml), bir [kimlik sağlayıcının (IdP)](https://en.wikipedia.org/wiki/Identity_provider#SAML_identity_provider), [hizmet sağlayıcılara (SP)](https://en.wikipedia.org/wiki/Service_provider_\(SAML\)) Kullanıcı bilgileri sağlamasına izin vermek için web2'de kullanılan bir standarttır. + +Bu öğreticide, Kullanıcıların Ethereum'u henüz yerel olarak desteklemeyen web2 hizmetlerinde kimliklerini doğrulamak için Ethereum cüzdanlarını kullanmalarına olanak sağlamak üzere Ethereum imzalarını SAML ile nasıl entegre edeceğinizi öğreneceksiniz. + +Bu öğreticinin iki ayrı kitle için yazıldığını unutmayın: + +- Ethereum'u anlayan ve SAML öğrenmesi gereken Ethereum meraklıları +- SAML ve web2 kimlik doğrulamasını anlayan ve Ethereum öğrenmesi gereken Web2 meraklıları + +Sonuç olarak, zaten bildiğiniz birçok giriş materyali içerecektir. Atlamaktan çekinmeyin. + +### Ethereum meraklıları için SAML + +SAML merkezi bir protokoldür. bir hizmet sağlayıcı (SP), bir kimlik sağlayıcıdan (IdP) gelen iddiaları (örneğin \ + +Örneğin, SP şirketlere seyahat hizmetleri sağlayan bir seyahat acentesi olabilir ve IdP bir şirketin dahili web sitesi olabilir. Çalışanların iş seyahati rezervasyonu yapması gerektiğinde, seyahat acentesi, gerçekten seyahat rezervasyonu yapmalarına izin vermeden önce onları kimlik doğrulaması için şirkete gönderir. + +![Adım adım SAML süreci](./fig-01-saml.png) + +Bu, üç varlığın, tarayıcının, SP'nin ve IdP'nin erişim için müzakere etme şeklidir. SP'nin tarayıcıyı kullanan Kullanıcı hakkında önceden bir şey bilmesine gerek yoktur, sadece IdP'ye güvenmesi yeterlidir. + +### SAML meraklıları için Ethereum + +Ethereum merkeziyetsiz bir sistemdir. + +![Ethereum girişi](./fig-02-eth-logon.png) + +Kullanıcıların bir özel anahtarı vardır (genellikle bir tarayıcı uzantısında tutulur). Özel anahtardan bir açık anahtar ve ondan da 20 baytlık bir adres türetebilirsiniz. Kullanıcıların bir sisteme giriş yapması gerektiğinde, onlardan bir nonce (tek kullanımlık bir değer) ile bir mesaj imzalamaları istenir. Sunucu, imzanın bu adres tarafından oluşturulduğunu doğrulayabilir. + +![Tasdiklerden ekstra veri alma](./fig-03-eas-data.png) + +İmza yalnızca Ethereum adresini doğrular. Diğer kullanıcı niteliklerini almak için genellikle [tasdikleri](https://attest.org/) kullanırsınız. Bir tasdik genellikle şu alanlara sahiptir: + +- **Tasdik eden**, tasdiki yapan adres +- **Alıcı**, tasdikin geçerli olduğu adres +- **Veri**, ad, izinler vb. gibi tasdik edilen veriler. +- **Şema**, verileri yorumlamak için kullanılan şemanın kimliği. + +Ethereum'un merkeziyetsiz doğası nedeniyle, herhangi bir kullanıcı tasdik yapabilir. Tasdik edenin kimliği, hangi tasdikleri güvenilir olarak kabul ettiğimizi belirlemek için önemlidir. + +## Kurulum + +İlk adım, kendi aralarında iletişim kuran bir SAML SP ve bir SAML IdP'ye sahip olmaktır. + +1. Yazılımı indirin. Bu makalenin örnek yazılımı [github'da](https://github.com/qbzzt/250420-saml-ethereum). Farklı aşamalar farklı dallarda saklanır, bu aşama için `saml-only` istersiniz + + ```sh + git clone https://github.com/qbzzt/250420-saml-ethereum -b saml-only + cd 250420-saml-ethereum + pnpm install + ``` + +2. Kendinden imzalı sertifikalarla anahtarlar oluşturun. Bu, anahtarın kendi sertifika yetkilisi olduğu ve hizmet sağlayıcıya manuel olarak içe aktarılması gerektiği anlamına gelir. Daha fazla bilgi için [OpenSSL belgelerine](https://docs.openssl.org/master/man1/openssl-req/) bakın. + + ```sh + mkdir keys + cd keys + openssl req -new -x509 -days 365 -nodes -sha256 -out saml-sp.crt -keyout saml-sp.pem -subj /CN=sp/ + openssl req -new -x509 -days 365 -nodes -sha256 -out saml-idp.crt -keyout saml-idp.pem -subj /CN=idp/ + cd .. + ``` + +3. Sunucuları başlatın (hem SP hem de IdP) + + ```sh + pnpm start + ``` + +4. [http://localhost:3000/](http://localhost:3000/) URL'sindeki SP'ye gidin ve IdP'ye (bağlantı noktası 3001) yönlendirilmek için düğmeye tıklayın. + +5. IdP'ye e-posta adresinizi verin ve **Hizmet sağlayıcıda oturum aç**'a tıklayın. Hizmet sağlayıcıya geri yönlendirildiğinizi (bağlantı noktası 3000) ve sizi e-posta adresinizle tanıdığını görün. + +### Ayrıntılı açıklama + +Adım adım olanlar şunlardır: + +![Ethereum olmadan normal SAML girişi](./fig-04-saml-no-eth.png) + +#### src/config.mts + +Bu dosya hem Kimlik Sağlayıcı hem de Hizmet Sağlayıcı için yapılandırmayı içerir. Normalde bu ikisi farklı varlıklar olurdu, ancak burada basitlik için kodu paylaşabiliriz. + +```typescript +const fs = await import("fs") + +const protocol="http" +``` + +Şimdilik sadece test ediyoruz, bu yüzden HTTP kullanmakta bir sakınca yok. + +```typescript +export const spCert = fs.readFileSync("keys/saml-sp.crt").toString() +export const idpCert = fs.readFileSync("keys/saml-idp.crt").toString() +``` + +Normalde her iki bileşen için de mevcut olan (ve doğrudan güvenilen veya güvenilir bir sertifika yetkilisi tarafından imzalanan) açık anahtarları okuyun. + +```typescript +export const spPort = 3000 +export const spHostname = "localhost" +export const spDir = "sp" + +export const idpPort = 3001 +export const idpHostname = "localhost" +export const idpDir = "idp" + +export const spUrl = `${protocol}://${spHostname}:${spPort}/${spDir}` +export const idpUrl = `${protocol}://${idpHostname}:${idpPort}/${idpDir}` +``` + +Her iki bileşen için URL'ler. + +```typescript +export const spPublicData = { +``` + +Hizmet sağlayıcı için genel veriler. + +```typescript + entityID: `${spUrl}/metadata`, +``` + +Geleneksel olarak SAML'de `entityID`, varlığın meta verilerinin bulunduğu URL'dir. Bu meta veriler, XML biçiminde olması dışında, buradaki genel verilere karşılık gelir. + +```typescript + wantAssertionsSigned: true, + authnRequestsSigned: false, + signingCert: spCert, + allowCreate: true, + assertionConsumerService: [{ + Binding: 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST', + Location: `${spUrl}/assertion`, + }] + } +``` + +Amaçlarımız için en önemli tanım `assertionConsumerServer`'dır. Hizmet sağlayıcıya bir şey iddia etmek (örneğin, \ + +```typescript +export const idpPublicData = { + entityID: `${idpUrl}/metadata`, + signingCert: idpCert, + wantAuthnRequestsSigned: false, + singleSignOnService: [{ + Binding: "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST", + Location: `${idpUrl}/login` + }], + singleLogoutService: [{ + Binding: "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST", + Location: `${idpUrl}/logout` + }], + } +``` + +Kimlik sağlayıcı için genel veriler benzerdir. Bir kullanıcının oturumunu açmak için `http://localhost:3001/idp/login` adresine POST ve bir kullanıcının oturumunu kapatmak için `http://localhost:3001/idp/logout` adresine POST yapmanız gerektiğini belirtir. + +#### src/sp.mts + +Bu, bir hizmet sağlayıcıyı uygulayan koddur. + +```typescript +import * as config from "./config.mts" +const fs = await import("fs") +const saml = await import("samlify") +``` + +SAML'yi uygulamak için [`samlify`](https://www.npmjs.com/package/samlify) kütüphanesini kullanıyoruz. + +```typescript +import * as validator from "@authenio/samlify-node-xmllint" +saml.setSchemaValidator(validator) +``` + +`samlify` kütüphanesi, XML'in doğru olduğunu, beklenen açık anahtarla imzalandığını vb. doğrulayan bir pakete sahip olmayı bekler. Bu amaçla [`@authenio/samlify-node-xmllint`](https://www.npmjs.com/package/@authenio/samlify-node-xmllint) kullanıyoruz. + +```typescript +const express = (await import("express")).default +const spRouter = express.Router() +const app = express() +``` + +Bir [`express`](https://expressjs.com/) [`Router`](https://expressjs.com/en/5x/api.html#router), bir web sitesinin içine monte edilebilen bir \ Bu durumda, tüm hizmet sağlayıcı tanımlarını bir araya getirmek için kullanırız. + +```typescript +const spPrivateKey = fs.readFileSync("keys/saml-sp.pem").toString() + +const sp = saml.ServiceProvider({ + privateKey: spPrivateKey, + ...config.spPublicData +}) +``` + +Hizmet sağlayıcının kendi temsili, tüm genel veriler ve bilgileri imzalamak için kullandığı özel anahtardır. + +```typescript +const idp = saml.IdentityProvider(config.idpPublicData); +``` + +Genel veriler, hizmet sağlayıcının kimlik sağlayıcı hakkında bilmesi gereken her şeyi içerir. + +```typescript +spRouter.get(`/metadata`, + (req, res) => res.header("Content-Type", "text/xml").send(sp.getMetadata()) +) +``` + +Diğer SAML bileşenleriyle birlikte çalışabilirliği sağlamak için, hizmet ve kimlik sağlayıcıların genel verileri (meta veriler olarak adlandırılır) `/metadata` içinde XML biçiminde mevcut olmalıdır. + +```typescript +spRouter.post(`/assertion`, +``` + +Bu, tarayıcının kendini tanıtmak için eriştiği sayfadır. Beyan, kullanıcı tanımlayıcısını (burada e-posta adresi kullanıyoruz) içerir ve ek nitelikler içerebilir. Bu, yukarıdaki sıra diyagramındaki 7. adımın işleyicisidir. + +```typescript + async (req, res) => { + // console.log(`SAML response:\n${Buffer.from(req.body.SAMLResponse, 'base64').toString('utf-8')}`) +``` + +Onayda sağlanan XML verilerini görmek için yorum satırı yapılmış komutu kullanabilirsiniz. [Base64 kodludur](https://en.wikipedia.org/wiki/Base64). + +```typescript + try { + const loginResponse = await sp.parseLoginResponse(idp, 'post', req); +``` + +Kimlik sunucusundan gelen oturum açma isteğini ayrıştırın. + +```typescript + res.send(` + + +

Hello ${loginResponse.extract.nameID}

+ + + `) + res.send(); +``` + +Sadece kullanıcıya giriş yaptığımızı göstermek için bir HTML yanıtı gönderin. + +```typescript + } catch (err) { + console.error('Error processing SAML response:', err); + res.status(400).send('SAML authentication failed'); + } + } +) +``` + +Başarısızlık durumunda kullanıcıyı bilgilendirin. + +```typescript +spRouter.get('/login', +``` + +Tarayıcı bu sayfayı almaya çalıştığında bir oturum açma isteği oluşturun. Bu, yukarıdaki sıra diyagramındaki 1. adımın işleyicisidir. + +```typescript + async (req, res) => { + const loginRequest = await sp.createLoginRequest(idp, "post") +``` + +Bir oturum açma isteği göndermek için bilgileri alın. + +```typescript + res.send(` + + + +``` + +Bu sayfa formu (aşağıya bakın) otomatik olarak gönderir. Bu şekilde kullanıcının yönlendirilmek için herhangi bir şey yapmasına gerek kalmaz. Bu, yukarıdaki sıra diyagramındaki 2. adımdır. + +```typescript +
+``` + +`loginRequest.entityEndpoint`'e (kimlik sağlayıcı uç noktasının URL'si) gönderin. + +```typescript + +``` + +Girdi adı `loginRequest.type`'dır (`SAMLRequest`). Bu alanın içeriği `loginRequest.context`'tir, bu da yine base64 kodlu XML'dir. + +```typescript +
+ + + `) + } +) + +app.use(express.urlencoded({extended: true})) +``` + +[Bu ara katman yazılımı](https://expressjs.com/en/5x/api.html#express.urlencoded), [HTTP isteğinin](https://www.tutorialspoint.com/http/http_requests.htm) gövdesini okur. Varsayılan olarak express bunu yok sayar, çünkü çoğu istek bunu gerektirmez. Buna ihtiyacımız var çünkü POST gövdeyi kullanıyor. + +```typescript +app.use(`/${config.spDir}`, spRouter) +``` + +Yönlendiriciyi hizmet sağlayıcı dizinine (`/sp`) bağlayın. + +```typescript +app.get("/", (req, res) => { + res.send(` + + + + + + `) +}) +``` + +Bir tarayıcı kök dizini almaya çalışırsa, ona oturum açma sayfasına bir bağlantı sağlayın. + +```typescript +app.listen(config.spPort, () => { + console.log(`service provider is running on http://${config.spHostname}:${config.spPort}`) +}) +``` + +Bu express uygulamasıyla `spPort`'u dinleyin. + +#### src/idp.mts + +Bu kimlik sağlayıcıdır. Hizmet sağlayıcıya çok benzer, aşağıdaki açıklamalar farklı olan kısımlar içindir. + +```typescript +const xmlParser = new (await import("fast-xml-parser")).XMLParser( + { + ignoreAttributes: false, // Nitelikleri Koru + attributeNamePrefix: "@_", // Nitelikler için ön ek + } +) +``` + +Hizmet sağlayıcıdan aldığımız XML isteğini okumamız ve anlamamız gerekiyor. + +```typescript +const getLoginPage = requestId => ` +``` + +Bu işlev, yukarıdaki sıra diyagramının 4. adımında döndürülen, otomatik gönderilen formu içeren sayfayı oluşturur. + +```typescript + + + Oturum açma sayfası + + +

Oturum açma sayfası

+
+ + E-posta adresi: +
+ +``` + +Hizmet sağlayıcıya gönderdiğimiz iki alan var: + +1. Yanıtladığımız `requestId`. +2. Kullanıcı tanımlayıcısı (şimdilik kullanıcının verdiği e-posta adresini kullanıyoruz). + +```typescript +
+ + + +const idpRouter = express.Router() + +idpRouter.post("/loginSubmitted", async (req, res) => { + const loginResponse = await idp.createLoginResponse( +``` + +Bu, yukarıdaki sıra diyagramındaki 5. adımın işleyicisidir. [`idp.createLoginResponse`](https://github.com/tngan/samlify/blob/master/src/entity-idp.ts#L73-L125) oturum açma yanıtını oluşturur. + +```typescript + sp, + { + authnContextClassRef: 'urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport', + audience: sp.entityID, +``` + +Hedef kitle hizmet sağlayıcıdır. + +```typescript + extract: { + request: { + id: req.body.requestId + } + }, +``` + +İstekten çıkarılan bilgiler. İstekte önem verdiğimiz tek parametre, hizmet sağlayıcının istekleri ve yanıtlarını eşleştirmesine olanak tanıyan requestId'dir. + +```typescript + signingKey: { privateKey: idpPrivateKey, publicKey: config.idpCert } // İmzalamayı sağla +``` + +Yanıtı imzalamak için veriye sahip olmak için `signingKey`'e ihtiyacımız var. Hizmet sağlayıcı imzasız isteklere güvenmez. + +```typescript + }, + "post", + { + email: req.body.email +``` + +Bu, hizmet sağlayıcıya geri gönderdiğimiz kullanıcı bilgilerini içeren alandır. + +```typescript + } + ); + + res.send(` + + + + +
+ +
+ + + `) +}) +``` + +Yine, otomatik gönderilen bir form kullanın. Bu, yukarıdaki sıra diyagramındaki 6. adımdır. + +```typescript + +// Oturum açma istekleri için IdP uç noktası +idpRouter.post(`/login`, +``` + +Bu, hizmet sağlayıcıdan bir oturum açma isteği alan uç noktadır. Bu, yukarıdaki sıra diyagramının 3. adımının işleyicisidir. + +```typescript + async (req, res) => { + try { + // parseLoginRequest'i çalıştıramadığım için geçici çözüm. + // const loginRequest = await idp.parseLoginRequest(sp, 'post', req) + const samlRequest = xmlParser.parse(Buffer.from(req.body.SAMLRequest, 'base64').toString('utf-8')) + res.send(getLoginPage(samlRequest["samlp:AuthnRequest"]["@_ID"])) +``` + +Kimlik doğrulama isteğinin kimliğini okumak için [`idp.parseLoginRequest`](https://github.com/tngan/samlify/blob/master/src/entity-idp.ts#L127-L144) kullanabilmeliyiz. Ancak, çalıştıramadım ve üzerinde çok fazla zaman harcamaya değmedi, bu yüzden sadece [genel amaçlı bir XML ayrıştırıcısı](https://www.npmjs.com/package/fast-xml-parser) kullanıyorum. İhtiyacımız olan bilgi, XML'in en üst düzeyinde bulunan `` etiketinin içindeki `ID` özniteliğidir. + +## Ethereum imzalarını kullanma + +Artık hizmet sağlayıcıya bir kullanıcı kimliği gönderebildiğimize göre, bir sonraki adım kullanıcı kimliğini güvenilir bir şekilde elde etmektir. Viem, cüzdandan kullanıcı adresini istememize izin verir, ancak bu, bilgiyi tarayıcıdan istemek anlamına gelir. Tarayıcıyı kontrol etmiyoruz, bu yüzden ondan aldığımız yanıta otomatik olarak güvenemeyiz. + +Bunun yerine, IdP tarayıcıya imzalaması için bir dize gönderecek. Tarayıcıdaki cüzdan bu dizeyi imzalarsa, bu gerçekten o adres olduğu anlamına gelir (yani, adrese karşılık gelen özel anahtarı bilir). + +Bunu çalışırken görmek için mevcut IdP ve SP'yi durdurun ve şu komutları çalıştırın: + +```sh +git checkout eth-signatures +pnpm install +pnpm start +``` + +Ardından [SP'ye](http://localhost:3000) gidin ve yönergeleri izleyin. + +Bu noktada Ethereum adresinden e-posta adresini nasıl alacağımızı bilmediğimizi, bu yüzden SP'ye `@bad.email.address` olarak rapor ettiğimizi unutmayın. + +### Ayrıntılı açıklama + +Değişiklikler önceki diyagramdaki 4-5. adımlardadır. + +![Ethereum imzalı SAML](./fig-05-saml-w-signature.png) + +Değiştirdiğimiz tek dosya `idp.mts`. İşte değiştirilen kısımlar. + +```typescript +import { v4 as uuidv4 } from 'uuid' +import { verifyMessage } from 'viem' +``` + +Bu iki ek kütüphaneye ihtiyacımız var. [nonce](https://en.wikipedia.org/wiki/Cryptographic_nonce) değerini oluşturmak için [`uuid`](https://www.npmjs.com/package/uuid) kullanıyoruz. Değerin kendisi önemli değil, sadece bir kez kullanıldığı gerçeği önemli. + +[`viem`](https://viem.sh/) kütüphanesi Ethereum tanımlarını kullanmamızı sağlar. Burada imzanın gerçekten geçerli olduğunu doğrulamak için buna ihtiyacımız var. + +```typescript +const loginPrompt = \ +``` + +Cüzdan, mesajı imzalamak için kullanıcıdan izin ister. Sadece bir nonce olan bir mesaj kullanıcıların kafasını karıştırabilir, bu yüzden bu istemi ekliyoruz. + +```typescript +// requestID'leri burada tutun +let nonces = {} +``` + +Ona yanıt verebilmek için istek bilgisine ihtiyacımız var. İstekle birlikte gönderebilir (adım 4) ve geri alabiliriz (adım 5). Ancak, potansiyel olarak düşman bir kullanıcının kontrolü altında olan tarayıcıdan aldığımız bilgilere güvenemeyiz. Bu yüzden anahtar olarak nonce ile burada saklamak daha iyidir. + +Bunu burada basitlik adına bir değişken olarak yaptığımızı unutmayın. Ancak, bunun birkaç dezavantajı vardır: + +- Hizmet reddi saldırısına karşı savunmasızız. Kötü niyetli bir kullanıcı birden çok kez oturum açmaya çalışarak belleğimizi doldurabilir. +- IdP işlemi yeniden başlatılması gerekirse, mevcut değerleri kaybederiz. +- Her birinin kendi değişkeni olacağı için birden çok işlem arasında yük dengeleyemeyiz. + +Bir üretim sisteminde bir veritabanı kullanır ve bir tür sona erme mekanizması uygularız. + +```typescript +const getSignaturePage = requestId => { + const nonce = uuidv4() + nonces[nonce] = requestId +``` + +Bir nonce oluşturun ve `requestId`'yi ileride kullanmak üzere saklayın. + +```typescript + return ` + + + + + +

Lütfen imzalayın

+ +
+ + + +` +} +``` + +Gerisi sadece standart HTML. + +```typescript +idpRouter.get("/signature/:nonce/:account/:signature", async (req, res) => { +``` + +Bu, sıra diyagramındaki 5. adımın işleyicisidir. + +```typescript + const requestId = nonces[req.params.nonce] + if (requestId === undefined) { + res.send("Kötü nonce") + return ; + } + + nonces[req.params.nonce] = undefined +``` + +İstek kimliğini alın ve yeniden kullanılamadığından emin olmak için `nonces`'tan nonce'ı silin. + +```typescript + try { +``` + +İmzanın geçersiz olabileceği pek çok yol olduğundan, bunu bir `try ...` içine sararız. `catch` bloğu ile atılan hataları yakalarız. + +```typescript + const validSignature = await verifyMessage({ + address: req.params.account, + message: `${loginPrompt}${req.params.nonce}`, + signature: req.params.signature + }) +``` + +Sıra diyagramında 5.5. adımı uygulamak için [`verifyMessage`](https://viem.sh/docs/actions/public/verifyMessage#verifymessage) kullanın. + +```typescript + if (!validSignature) + throw("Kötü imza") + } catch (err) { + res.send("Hata:" + err) + return ; + } +``` + +İşleyicinin geri kalanı, küçük bir değişiklik dışında, daha önce `/loginSubmitted` işleyicisinde yaptığımızla eşdeğerdir. + +```typescript + const loginResponse = await idp.createLoginResponse( + . + . + . + { + email: req.params.account + "@bad.email.address" + } + ); +``` + +Gerçek e-posta adresimiz yok (bir sonraki bölümde alacağız), bu yüzden şimdilik Ethereum adresini döndürüyoruz ve bir e-posta adresi olmadığını açıkça belirtiyoruz. + +```typescript +// Oturum açma istekleri için IdP uç noktası +idpRouter.post(`/login`, + async (req, res) => { + try { + // parseLoginRequest'i çalıştıramadığım için geçici çözüm. + // const loginRequest = await idp.parseLoginRequest(sp, 'post', req) + const samlRequest = xmlParser.parse(Buffer.from(req.body.SAMLRequest, 'base64').toString('utf-8')) + res.send(getSignaturePage(samlRequest["samlp:AuthnRequest"]["@_ID"])) + } catch (err) { + console.error('SAML yanıtı işlenirken hata:', err); + res.status(400).send('SAML kimlik doğrulaması başarısız oldu'); + } + } +) +``` + +3. adım işleyicisinde `getLoginPage` yerine şimdi `getSignaturePage` kullanın. + +## E-posta adresini alma + +Bir sonraki adım, hizmet sağlayıcı tarafından istenen tanımlayıcı olan e-posta adresini elde etmektir. Bunu yapmak için [Ethereum Tasdik Hizmetini (EAS)](https://attest.org/) kullanıyoruz. + +Tasdik almanın en kolay yolu [GraphQL API'sini](https://docs.attest.org/docs/developer-tools/api) kullanmaktır. Bu sorguyu kullanıyoruz: + +``` +query GetAttestationsByRecipient { + attestations( + where: { + recipient: { equals: "${getAddress(ethAddr)}" } + schemaId: { equals: "0xfa2eff59a916e3cc3246f9aec5e0ca00874ae9d09e4678e5016006f07622f977" } + } + take: 1 + ) { + data + id + attester + } +} +``` + +Bu [`schemaId`](https://optimism.easscan.org/schema/view/0xfa2eff59a916e3cc3246f9aec5e0ca00874ae9d09e4678e5016006f07622f977) yalnızca bir e-posta adresi içerir. Bu sorgu, bu şemanın tasdiklerini ister. Tasdikin konusu `recipient` (alıcı) olarak adlandırılır. Her zaman bir Ethereum adresidir. + +Uyarı: Burada tasdikleri alma şeklimizin iki güvenlik sorunu var. + +- Merkezi bir bileşen olan `https://optimism.easscan.org/graphql` API uç noktasına gidiyoruz. `id` özniteliğini alabilir ve ardından bir tasdikin gerçek olduğunu doğrulamak için zincir üzerinde bir arama yapabiliriz, ancak API uç noktası yine de bize onlardan bahsetmeyerek tasdikleri sansürleyebilir. + + Bu sorunu çözmek imkansız değil, kendi GraphQL uç noktamızı çalıştırabilir ve tasdikleri zincir günlüklerinden alabiliriz, ancak bu amaçlarımız için aşırıdır. + +- Tasdik eden kimliğine bakmıyoruz. Herkes bize yanlış bilgi verebilir. Gerçek bir dünya uygulamasında, bir dizi güvenilir tasdik edicimiz olurdu ve yalnızca onların tasdiklerine bakardık. + +Bunu çalışırken görmek için mevcut IdP ve SP'yi durdurun ve şu komutları çalıştırın: + +```sh +git checkout email-address +pnpm install +pnpm start +``` + +Ardından e-posta adresinizi girin. Bunu yapmanın iki yolu var: + +- Özel bir anahtar kullanarak bir cüzdanı içe aktarın ve `0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80` test özel anahtarını kullanın. + +- Kendi e-posta adresiniz için bir tasdik ekleyin: + + 1. [Tasdik gezginindeki şemaya](https://optimism.easscan.org/schema/view/0xfa2eff59a916e3cc3246f9aec5e0ca00874ae9d09e4678e5016006f07622f977) gidin. + + 2. **Şema ile Tasdik Et**'e tıklayın. + + 3. Alıcı olarak Ethereum adresinizi, e-posta adresi olarak e-posta adresinizi girin ve **Zincir Üstü**'nü seçin. Ardından **Tasdik Oluştur**'a tıklayın. + + 4. Cüzdanınızdaki işlemi onaylayın. Gaz ücretini ödemek için [Optimism Blokzincirinde](https://app.optimism.io/bridge/deposit) bir miktar ETH'ye ihtiyacınız olacak. + +Her iki durumda da, bunu yaptıktan sonra [http://localhost:3000](http://localhost:3000) adresine gidin ve yönergeleri izleyin. Test özel anahtarını içe aktardıysanız, aldığınız e-posta `test_addr_0@example.com`'dur. Kendi adresinizi kullandıysanız, tasdik ettiğiniz ne ise o olmalıdır. + +### Ayrıntılı açıklama + +![Ethereum adresinden e-postaya geçiş](./fig-06-saml-sig-n-email.png) + +Yeni adımlar GraphQL iletişimi, 5.6 ve 5.7. adımlardır. + +Yine, `idp.mts`'nin değiştirilmiş kısımları burada. + +```typescript +import { GraphQLClient } from 'graphql-request' +import { SchemaEncoder } from '@ethereum-attestation-service/eas-sdk' +``` + +İhtiyacımız olan kütüphaneleri içe aktarın. + +```typescript +const graphqlEndpointUrl = "https://optimism.easscan.org/graphql" +``` + +[Her blokzincir için ayrı bir uç nokta](https://docs.attest.org/docs/developer-tools/api) vardır. + +```typescript +const graphqlClient = new GraphQLClient(graphqlEndpointUrl, { fetch }) +``` + +Uç noktayı sorgulamak için kullanabileceğimiz yeni bir `GraphQLClient` istemcisi oluşturun. + +```typescript +const graphqlSchema = 'string emailAddress' +const graphqlEncoder = new SchemaEncoder(graphqlSchema) +``` + +GraphQL bize yalnızca bayt içeren opak bir veri nesnesi verir. Onu anlamak için şemaya ihtiyacımız var. + +```typescript +const ethereumAddressToEmail = async ethAddr => { +``` + +Bir Ethereum adresinden bir e-posta adresine geçmek için bir işlev. + +```typescript + const query = ` + query GetAttestationsByRecipient {` +``` + +Bu bir GraphQL sorgusudur. + +```typescript + tasdikler( +``` + +Tasdikler arıyoruz. + +```typescript + where: { + recipient: { equals: "${getAddress(ethAddr)}" } + schemaId: { equals: "0xfa2eff59a916e3cc3246f9aec5e0ca00874ae9d09e4678e5016006f07622f977" } + } +``` + +İstediğimiz tasdikler, şemamızdaki, alıcının `getAddress(ethAddr)` olduğu tasdiklerdir. [`getAddress`](https://viem.sh/docs/utilities/getAddress#getaddress) işlevi, adresimizin doğru [sağlama toplamına](https://github.com/ethereum/ercs/blob/master/ERCS/erc-55.md) sahip olduğundan emin olur. Bu, GraphQL'in büyük/küçük harfe duyarlı olması nedeniyle gereklidir. ` + +```typescript + take: 1 +``` + +Kaç tane tasdik bulursak bulalım, sadece ilkini istiyoruz. + +```typescript + ) { + data + id + attester + } + }` +``` + +Almak istediğimiz alanlar. + +- `attester`: Tasdiki gönderen adres. Normalde bu, tasdike güvenip güvenmeyeceğine karar vermek için kullanılır. +- `id`: Tasdik kimliği. GraphQL sorgusundan gelen bilgilerin doğru olduğunu doğrulamak için bu değeri [tasdiki zincir üzerinde okumak](https://optimism.blockscout.com/address/0x4200000000000000000000000000000000000021?tab=read_proxy&source_address=0x4E0275Ea5a89e7a3c1B58411379D1a0eDdc5b088#0xa3112a64) için kullanabilirsiniz. +- `data`: Şema verileri (bu durumda, e-posta adresi). + +```typescript + const queryResult = await graphqlClient.request(query) + + if (queryResult.attestations.length == 0) + return "no_address@available.is" +``` + +Tasdik yoksa, açıkça yanlış olan ancak hizmet sağlayıcıya geçerli görünecek bir değer döndürün. + +```typescript + const attestationDataFields = graphqlEncoder.decodeData(queryResult.attestations[0].data) + return attestationDataFields[0].value.value +} +``` + +Bir değer varsa, verileri çözmek için `decodeData` kullanın. Sağladığı meta verilere ihtiyacımız yok, sadece değerin kendisine ihtiyacımız var. + +```typescript + const loginResponse = await idp.createLoginResponse( + sp, + { + . + . + . + }, + "post", + { + email: await ethereumAddressToEmail(req.params.account) + } + ); +``` + +E-posta adresini almak için yeni işlevi kullanın. + +## Peki ya merkeziyetsizlik? + +Bu yapılandırmada, Ethereum'dan e-posta adresine eşleme için güvenilir tasdik edicilere güvendiğimiz sürece, kullanıcılar olmadıkları biri gibi davranamazlar. Ancak, kimlik sağlayıcımız hala merkezi bir bileşendir. Kimlik sağlayıcısının özel anahtarına sahip olan herkes, hizmet sağlayıcıya yanlış bilgi gönderebilir. + +[Çok taraflı hesaplama (MPC)](https://en.wikipedia.org/wiki/Secure_multi-party_computation) kullanarak bir çözüm olabilir. Gelecekteki bir öğreticide bunun hakkında yazmayı umuyorum. + +## Sonuç + +Ethereum imzaları gibi bir oturum açma standardının benimsenmesi, bir tavuk ve yumurta sorunuyla karşı karşıyadır. Hizmet sağlayıcılar mümkün olan en geniş pazara hitap etmek ister. Kullanıcılar, oturum açma standartlarını destekleme konusunda endişelenmeden hizmetlere erişebilmek ister. +Bir Ethereum IdP gibi adaptörler oluşturmak, bu engeli aşmamıza yardımcı olabilir. + +[Çalışmalarımdan daha fazlası için buraya bakın](https://cryptodocguy.pro/). diff --git a/public/content/translations/tr/developers/tutorials/getting-started-with-ethereum-development-using-alchemy/index.md b/public/content/translations/tr/developers/tutorials/getting-started-with-ethereum-development-using-alchemy/index.md index f63f98ac739..714ea1731ac 100644 --- a/public/content/translations/tr/developers/tutorials/getting-started-with-ethereum-development-using-alchemy/index.md +++ b/public/content/translations/tr/developers/tutorials/getting-started-with-ethereum-development-using-alchemy/index.md @@ -1,13 +1,15 @@ --- -title: Ethereum Geliştirmeye Başlarken -description: "Bu, Ethereum geliştirmeye başlamak için bir başlangıç rehberidir. Sizi bir API uç noktasını döndürmekten, bir komut satırı isteğinde bulunmaya ve ilk web3 komut dosyanızı yazmaya kadar götüreceğiz! Blok zinciri geliştirme deneyimi gerekmez!" +title: "Ethereum Geliştirmeye Başlarken" +description: "Bu, Ethereum geliştirmeye başlamak için bir başlangıç rehberidir. Sizi bir API uç noktası kurmaktan, bir komut satırı isteğinde bulunmaya ve ilk web3 betiğinizi yazmaya kadar götüreceğiz! Blokzincir geliştirme deneyimi gerekmez!" author: "Elan Halpern" tags: - - "javascript" - - "ethers.js" - - "düğümler" - - "sorgulama" - - "alchemy" + [ + "javascript", + "ethers.js", + "düğümler", + "sorgulama", + "alchemy" + ] skill: beginner lang: tr published: 2020-10-30 @@ -17,42 +19,42 @@ sourceUrl: https://medium.com/alchemy-api/getting-started-with-ethereum-developm ![Ethereum ve Alchemy logoları](./ethereum-alchemy.png) -Bu, Ethereum geliştirmeye başlamak için bir başlangıç rehberidir. Bu eğitim için; Maker, 0x, MyEtherWallet, Dharma ve Kyber dahil en iyi blok zinciri uygulamalarının %70'inden milyonlarca kullanıcıya destek veren lider blok zinciri geliştirici platformu [Alchemy](https://alchemyapi.io/)'yi kullanacağız. Alchemy, işlemleri okuyup yazabilmemiz için Ethereum zincirindeki bir API uç noktasına erişmemizi sağlayacak. +Bu, Ethereum geliştirmeye başlamak için bir başlangıç rehberidir. Bu eğitim için; Maker, 0x, MyEtherWallet, Dharma ve Kyber dahil en iyi blokzincir uygulamalarının %70'inden milyonlarca kullanıcıya destek veren lider blokzincir geliştirici platformu [Alchemy](https://alchemyapi.io/)'yi kullanacağız. Alchemy, işlemleri okuyup yazabilmemiz için Ethereum zincirindeki bir API uç noktasına erişmemizi sağlayacak. -Sizi Alchemy'ye kaydolmaktan ilk web3 komut dosyanızı yazmaya götüreceğiz! Blok zinciri geliştirme deneyimi gerekmez! +Sizi Alchemy'ye kaydolmaktan ilk web3 betiğinizi yazmaya götüreceğiz! Blokzincir geliştirme deneyimi gerekmez! -## 1. Ücretsiz Alchemy Hesabı için Üye Olun {#sign-up-for-a-free-alchemy-account} +## 1. Ücretsiz Bir Alchemy Hesabına Kaydolun {#sign-up-for-a-free-alchemy-account} -Alchemy ile bir hesap oluşturmak kolaydır, [buradan ücretsiz üye olun](https://auth.alchemyapi.io/signup). +Alchemy ile bir hesap oluşturmak kolaydır, [buradan ücretsiz kaydolun](https://auth.alchemy.com/). ## 2. Bir Alchemy Uygulaması Oluşturun {#create-an-alchemy-app} Ethereum zinciriyle iletişim kurmak ve Alchemy'nin ürünlerini kullanmak amacıyla isteklerinizi doğrulamak için bir API anahtarına ihtiyacınız var. -[Gösterge panelinden API anahtarları oluşturabilirsiniz](http://dashboard.alchemyapi.io/). Yeni bir anahtar oluşturmak için aşağıda gösterildiği gibi "Create App"e (Uygulama Oluştur) gidin: +[Gösterge panelinden API anahtarları oluşturabilirsiniz](https://dashboard.alchemy.com/). Yeni bir anahtar oluşturmak için aşağıda gösterildiği gibi "Create App" (Uygulama Oluştur) bölümüne gidin: -[_ShapeShift_](https://shapeshift.com/)'e _gösterge panelini göstermemize izin verdiği için teşekkür ederiz!_ +_Bize kendi gösterge panellerini gösterme izni verdikleri için [_ShapeShift_](https://shapeshift.com/)'e özel teşekkürler!_ ![Alchemy gösterge paneli](./alchemy-dashboard.png) -Yeni anahtarınızı almak için "Create App" altındaki ayrıntıları doldurun. Ayrıca daha önce yaptığınız uygulamaları ve ekibiniz tarafından yapılanları burada görebilirsiniz. Herhangi bir uygulama için "View Key"ye (Anahtarı Görüntüle) tıklayarak var olan anahtarları alabilirsiniz. +Yeni anahtarınızı almak için "Create App" altındaki ayrıntıları doldurun. Ayrıca daha önce yaptığınız uygulamaları ve ekibiniz tarafından yapılanları burada görebilirsiniz. Herhangi bir uygulama için "View Key" (Anahtarı Görüntüle) seçeneğine tıklayarak mevcut anahtarları alabilirsiniz. ![Alchemy ile uygulama oluşturma ekran görüntüsü](./create-app.png) -Ayrıca, "Apps"in (Uygulamalar) üzerine gelip birini seçerek mevcut API anahtarlarını da alabilirsiniz. Burada anahtarı görüntüleyebilir, belirli alanları beyaz listeye almak için "Edit App"e tıklayabilir, çeşitli geliştirici araçlarını görebilir ve analizleri görüntüleyebilirsiniz. +Ayrıca, "Apps" (Uygulamalar) üzerine gelip birini seçerek mevcut API anahtarlarını da alabilirsiniz. Buradan "View Key" (Anahtarı Görüntüle) ile anahtarı görüntüleyebilir, "Edit App" (Uygulamayı Düzenle) ile belirli alan adlarını beyaz listeye ekleyebilir, çeşitli geliştirici araçlarını görebilir ve analizleri görüntüleyebilirsiniz. ![Bir kullanıcıya API anahtarlarının nasıl alınacağını gösteren GIF](./pull-api-keys.gif) -## 3. Komut Satırından İstekte Bulunun {#make-a-request-from-the-command-line} +## 3. Komut Satırından İstek Yapma {#make-a-request-from-the-command-line} -JSON-RPC ve curl kullanarak Alchemy aracılığıyla Ethereum blok zinciriyle etkileşim kurun. +JSON-RPC ve curl kullanarak Alchemy aracılığıyla Ethereum blokzinciriyle etkileşim kurun. Manuel istekler için `JSON-RPC` ile `POST` istekleri aracılığıyla etkileşim kurmanızı öneririz. `Content-Type: application/json` başlığını ve sorgunuzu aşağıdaki alanlarla birlikte `POST` gövdesi olarak iletmeniz yeterlidir: -- `jsonrpc`: JSON-RPC versiyonu. Şu anda, sadece `2.0` desteklidir. -- `method`: ETH API yöntemi. [API referansına bakınız.](https://docs.alchemyapi.io/documentation/alchemy-api-reference/json-rpc) -- `params`: Yönteme geçirilecek parametre listesi. -- `id`: İsteğinizin ID'si. Bir yanıtın hangi isteğe ait olduğunu takip edebilmeniz için yanıt tarafından döndürülür. +- `jsonrpc`: JSON-RPC sürümü—şu anda yalnızca `2.0` desteklenmektedir. +- `method`: ETH API yöntemi. [API referansına bakın.](https://docs.alchemyapi.io/documentation/alchemy-api-reference/json-rpc) +- `params`: Yönteme geçirilecek parametrelerin listesi. +- `id`: İsteğinizin ID'si. Bir yanıtın hangi isteğe ait olduğunu takip edebilmeniz için yanıtla birlikte döndürülür. Mevcut gaz fiyatını almak için komut satırından çalıştırabileceğiniz bir örnek: @@ -63,7 +65,7 @@ curl https://eth-mainnet.alchemyapi.io/v2/demo \ -d '{"jsonrpc":"2.0","method":"eth_gasPrice","params":[],"id":73}' ``` -_**NOT:** [https://eth-mainnet.alchemyapi.io/v2/demo](https://eth-mainnet.alchemyapi.io/jsonrpc/demo) bağlantısını kendi API anahtarınızla değiştirin `https://eth-mainnet.alchemyapi.io/v2/**your-api-key`._ +_**NOT:** [https://eth-mainnet.alchemyapi.io/v2/demo](https://eth-mainnet.alchemyapi.io/jsonrpc/demo) adresini kendi API anahtarınızla değiştirin: `https://eth-mainnet.alchemyapi.io/v2/**your-api-key`._ **Sonuçlar:** @@ -71,13 +73,13 @@ _**NOT:** [https://eth-mainnet.alchemyapi.io/v2/demo](https://eth-mainnet.alchem { "id": 73,"jsonrpc": "2.0","result": "0x09184e72a000" // 10000000000000 } ``` -## 4. Web3 İstemcinizi kurun {#set-up-your-web3-client} +## 4. Web3 İstemcinizi Kurun {#set-up-your-web3-client} -**Mevcut bir istemciniz varsa,** API anahtarınızla mevcut düğüm sağlayıcı URL'nizi bir Alchemy URL'si olarak değiştirin: `“https://eth-mainnet.alchemyapi.io/v2/your-api-key"` +**Mevcut bir istemciniz varsa,** mevcut düğüm sağlayıcı URL'nizi API anahtarınızı içeren bir Alchemy URL'siyle değiştirin: `"https://eth-mainnet.alchemyapi.io/v2/your-api-key"` -**_NOT:_** Aşağıdaki komut dosyaları **düğüm bağlamında** çalıştırılmalı veya **bir dosyaya kaydedilmeli**, komut satırından çalıştırılmamalı. Eğer hâlihazırda Node veya npm kurulu değilse, bu hızlı [mac kurulum rehberine](https://app.gitbook.com/@alchemyapi/s/alchemy/guides/alchemy-for-macs) bir göz atın. +**_NOT:_** Aşağıdaki betiklerin, komut satırından değil, bir **düğüm bağlamında** çalıştırılması veya **bir dosyaya kaydedilmesi** gerekir. Eğer Node veya npm zaten kurulu değilse, mac'ler için bu hızlı [kurulum kılavuzuna](https://app.gitbook.com/@alchemyapi/s/alchemy/guides/alchemy-for-macs) göz atın. -Alchemy ile entegre edebileceğiniz tonlarca [Web3 kütüphanesi](https://docs.alchemyapi.io/guides/getting-started#other-web3-libraries) bulunur ancak web3.js'nin yerine bir eklenti olan [Alchemy Web3](https://docs.alchemy.com/reference/api-overview), Alchemy ile sorunsuz çalışacak şekilde oluşturulmuş ve yapılandırılmıştır. Bu, otomatik yeniden denemeler ve güçlü WebSocket desteği gibi birçok avantaj sağlar. +Alchemy ile entegre edebileceğiniz tonlarca [Web3 kütüphanesi](https://docs.alchemyapi.io/guides/getting-started#other-web3-libraries) vardır, ancak biz, web3.js'nin yerine geçen, Alchemy ile sorunsuz çalışacak şekilde oluşturulmuş ve yapılandırılmış olan [Alchemy Web3](https://docs.alchemy.com/reference/api-overview)'ü kullanmanızı öneririz. Bu, otomatik yeniden denemeler ve güçlü WebSocket desteği gibi birçok avantaj sağlar. AlchemyWeb3.js'yi yüklemek için **proje dizininize gidin** ve şunu çalıştırın: @@ -102,11 +104,11 @@ const web3 = createAlchemyWeb3( ) ``` -## 5. İlk Web3 Komut Dosyanızı Yazın! {#write-your-first-web3-script} +## 5. İlk Web3 Betiğinizi Yazın! {#write-your-first-web3-script} -Şimdi web3 programlamasına ufak bir dalış yapmak için Ethereum Mainnet'ten en son blok numarasını yazdıran basit bir komut dosyası yazacağız. +Şimdi web3 programlamasına ufak bir giriş yapmak için Ethereum Ana Ağı'ndan en son blok numarasını yazdıran basit bir betik yazacağız. -**1. Henüz yapmadıysanız, terminalinizde yeni bir proje dizini oluşturun ve içine cd ekleyin:** +**1. Henüz yapmadıysanız, terminalinizde yeni bir proje dizini oluşturun ve `cd` komutuyla o dizine girin:** ``` mkdir web3-example @@ -119,23 +121,23 @@ cd web3-example npm install @alch/alchemy-web3 ``` -**3. `index.js` adlı bir dosya oluşturun ve aşağıdaki içerikleri ekleyin:** +**3. `index.js` adında bir dosya oluşturun ve aşağıdaki içeriği ekleyin:** -> Sonunda `demo`'yu Alchemy HTTP API anahtarınızla değiştirmelisiniz. +> Son olarak `demo`'yu Alchemy HTTP API anahtarınızla değiştirmelisiniz. ```js async function main() { const { createAlchemyWeb3 } = require("@alch/alchemy-web3") const web3 = createAlchemyWeb3("https://eth-mainnet.alchemyapi.io/v2/demo") const blockNumber = await web3.eth.getBlockNumber() - console.log("The latest block number is " + blockNumber) + console.log("En son blok numarası " + blockNumber) } main() ``` -async ile ilgili şeylere aşina değil misiniz? Bu [Medium gönderisine](https://medium.com/better-programming/understanding-async-await-in-javascript-1d81bb079b2c) bir göz atın. +`async` konusuna yabancı mısınız? Bu [Medium gönderisine](https://medium.com/better-programming/understanding-async-await-in-javascript-1d81bb079b2c) göz atın. -**4. Node kullanarak komut satırınızda çalıştırın** +**4. Terminalinizde node kullanarak çalıştırın** ``` node index.js @@ -144,11 +146,11 @@ node index.js **5. Şimdi konsolunuzda en son blok numarası çıktısını görmelisiniz!** ``` -The latest block number is 11043912 +En son blok numarası 11043912 ``` -**Oley! Tebrikler! Alchemy kullanarak ilk web3 komut dosyanızı yazdınız 🎉** +**Harika! Tebrikler! Alchemy'yi kullanarak ilk web3 betiğinizi yazdınız 🎉** -Şimdi ne yapacağınızdan emin değil misiniz? İlk akıllı sözleşmenizi dağıtmayı deneyin ve [Merhaba Dünya Akıllı Sözleşme Kılavuzumuzda](https://docs.alchemyapi.io/tutorials/hello-world-smart-contract) biraz sağlamlık programlamasıyla uğraşın veya [Dashboard Demo App](https://docs.alchemyapi.io/tutorials/demo-app) ile gösterge paneli bilginizi test edin! +Sırada ne yapacağınızdan emin değil misiniz? İlk akıllı sözleşmenizi dağıtmayı deneyin ve [Merhaba Dünya Akıllı Sözleşme Kılavuzumuzda](https://www.alchemy.com/docs/hello-world-smart-contract) biraz Solidity programlamasıyla pratik yapın ya da [Gösterge Paneli Demo Uygulaması](https://docs.alchemyapi.io/tutorials/demo-app) ile gösterge paneli bilginizi test edin! -_[Alchemy'ye ücretsiz kaydolun](https://auth.alchemyapi.io/signup), [belgelerimize](https://docs.alchemyapi.io/) göz atın ve en son haberler için bizi [Twitter](https://twitter.com/AlchemyPlatform) adresinden takip edin_. +_[Alchemy'ye ücretsiz kaydolun](https://auth.alchemy.com/), [dokümanlarımıza](https://www.alchemy.com/docs/) göz atın ve en son haberler için bizi [Twitter](https://twitter.com/AlchemyPlatform)'da takip edin_. diff --git a/public/content/translations/tr/developers/tutorials/guide-to-smart-contract-security-tools/index.md b/public/content/translations/tr/developers/tutorials/guide-to-smart-contract-security-tools/index.md index 64d42058106..3c74f9a5e9e 100644 --- a/public/content/translations/tr/developers/tutorials/guide-to-smart-contract-security-tools/index.md +++ b/public/content/translations/tr/developers/tutorials/guide-to-smart-contract-security-tools/index.md @@ -1,105 +1,102 @@ --- -title: Akıllı sözleşme güvenlik araçlarına yönelik bir kılavuz -description: Üç farklı test ve program analizi tekniğine genel bakış +title: "Akıllı sözleşme güvenlik araçlarına yönelik bir kılavuz" +description: "Üç farklı test ve program analizi tekniğine genel bakış" author: "Trailofbits" lang: tr -tags: - - "solidity" - - "akıllı kontratlar" - - "güvenlik" +tags: [ "solidity", "akıllı kontratlar", "güvenlik" ] skill: intermediate published: 2020-09-07 -source: Güvenli sözleşmeler oluşturmak +source: Building secure contracts sourceUrl: https://github.com/crytic/building-secure-contracts/tree/master/program-analysis --- Üç farklı test ve program analizi tekniği kullanacağız: -- **Slither[ ile statik analiz](/developers/tutorials/how-to-use-slither-to-find-smart-contract-bugs/). **Programın tüm yolları, farklı program sunumları (örn. control-flow-graph) aracılığıyla aynı anda tahmin edilir ve analiz edilir -- **[Echidna](/developers/tutorials/how-to-use-echidna-to-test-smart-contracts/) ile bulandırma.** Kod, işlemlerin sözde rastgele oluşumu ile yürütülür. Bulandırıcı, belirli bir özelliği ihlal etmek için bir dizi işlem bulmaya çalışacaktır. -- **[Manticore](/developers/tutorials/how-to-use-manticore-to-find-smart-contract-bugs/) ile sembolik yürütme.** Her yürütme yolunu matematiksel bir formüle çeviren ve üzerinde en üst kısıtlamaların kontrol edilebileceği resmi bir doğrulama tekniği. +- **[Slither](/developers/tutorials/how-to-use-slither-to-find-smart-contract-bugs/) ile statik analiz.** Programın tüm yolları, farklı program gösterimleri (örn. kontrol akış grafiği) aracılığıyla aynı anda tahmin edilir ve analiz edilir. +- **[Echidna](/developers/tutorials/how-to-use-echidna-to-test-smart-contracts/) ile Bulandırma.** Kod, sahte rastgele işlem üretimi ile yürütülür. Bulandırıcı, belirli bir özelliği ihlal etmek için bir dizi işlem bulmaya çalışacaktır. +- **[Manticore](/developers/tutorials/how-to-use-manticore-to-find-smart-contract-bugs/) ile sembolik yürütme.** Her yürütme yolunu, üzerinde kısıtlamaların kontrol edilebildiği matematiksel bir formüle çeviren resmi bir doğrulama tekniğidir. -Her tekniğin avantajları ve yetersizlikleri vardır ve hepsi [belirli durumlarda](#determining-security-properties) faydalı olacaktır: +Her tekniğin avantajları ve zorlukları vardır ve [belirli durumlarda](#determining-security-properties) faydalı olacaktır: -| Teknik | Araç | Kullanım | Hız | Kaçırılan hatalar | Yanlış Alarmlar | -| ---------------- | --------- | --------------------------------------- | --------- | ----------------- | --------------- | -| Statik Analiz | Slither | CLI ve komut dosyaları | saniyeler | orta seviye | düşük | -| Bulandırma | Echidna | Solidity özellikleri | dakika | düşük | yok | -| Sembolik Yürütme | Manticore | Solidity özellikleri ve komut dosyaları | saat | yok\* | yok | +| Teknik | Araç | Kullanım | Hız | Gözden kaçan hatalar | Yanlış Alarmlar | +| ---------------- | --------- | --------------------------------------- | --------- | -------------------- | --------------- | +| Statik Analiz | Slither | CLI ve komut dosyaları | saniyeler | Orta | Düşük | +| Bulandırma | Echidna | Solidity özellikleri | dakika | Düşük | Yok | +| Sembolik Yürütme | Manticore | Solidity özellikleri ve komut dosyaları | saat | Yok\* | Yok | \* tüm yollar zaman aşımı olmadan araştırılırsa -**Slither**, sözleşmeleri saniyeler içinde analiz eder ancak statik analiz yanlış alarmlara neden olabilir ve karmaşık kontroller (örn. aritmetik kontroller) için daha az uygun olacaktır. Yerleşik algılayıcılara push-button erişimi için API aracılığıyla veya kullanıcı tanımlı kontroller için API aracılığıyla Slither'ı çalıştırın. +**Slither** sözleşmeleri saniyeler içinde analiz eder ancak statik analiz yanlış alarmlara neden olabilir ve karmaşık kontroller (örn. aritmetik kontroller) için daha az uygun olacaktır. Yerleşik algılayıcılara tek tuşla erişim için API aracılığıyla veya kullanıcı tanımlı kontroller için API aracılığıyla Slither'ı çalıştırın. -**Echidna**, birkaç dakika çalışmaya ihtiyaç duyar ve sadece doğru pozitifler üretir. Echidna Solidity'de yazılmış, kullanıcı tarafından sağlanan güvenlik özelliklerini kontrol eder. Rastgele keşfe dayalı olduğu için hataları kaçırabilir. +**Echidna**'nın birkaç dakika çalışması gerekir ve yalnızca doğru pozitifler üretecektir. Echidna, Solidity dilinde yazılmış, kullanıcı tarafından sağlanan güvenlik özelliklerini kontrol eder. Rastgele keşfe dayalı olduğu için hataları gözden kaçırabilir. -**Manticore** "en büyük ağırlık" analizini uygular. Echidna gibi, Manticore da kullanıcı tarafından sağlanan özellikleri doğrular. Çalıştırmak için daha fazla zamana ihtiyacı olacak ancak bir özelliğin geçerliliğini kanıtlayabilir ve yanlış alarmları bildirmez. +**Manticore** "en ağır" analizi gerçekleştirir. Echidna gibi, Manticore da kullanıcı tarafından sağlanan özellikleri doğrular. Çalışması daha fazla zaman alacaktır, ancak bir özelliğin geçerliliğini kanıtlayabilir ve yanlış alarmlar bildirmez. ## Önerilen iş akışı {#suggested-workflow} -Şu anda hiçbir basit hatanın bulunmadığından veya daha sonra tanıtılacağından emin olmak için Slither'ın yerleşik algılayıcılarıyla başlayın. Kalıtım, değişken bağımlılıkları ve yapısal sorunlarla ilgili özellikleri kontrol etmek için Slither'ı kullanın. Kod tabanı büyüdükçe, durum makinesinin daha karmaşık özelliklerini test etmek için Echidna'yı kullanın. Geçersiz kılınan bir fonksiyona karşı koruma gibi, Solidity'de bulunmayan korumalar için özel kontroller geliştirmek için Slither'ı tekrar ziyaret edin. Son olarak, aritmetik işlemler gibi kritik güvenlik özelliklerinin hedefli doğrulamasını gerçekleştirmek için Manticore'u kullanın. +Mevcut veya gelecekte eklenebilecek basit hataların olmadığından emin olmak için Slither'ın yerleşik algılayıcılarıyla başlayın. Kalıtım, değişken bağımlılıkları ve yapısal sorunlarla ilgili özellikleri kontrol etmek için Slither'ı kullanın. Kod tabanı büyüdükçe, durum makinesinin daha karmaşık özelliklerini test etmek için Echidna'yı kullanın. Bir fonksiyonun geçersiz kılınmasına karşı koruma gibi Solidity'de mevcut olmayan korumalar için özel denetimler geliştirmek üzere Slither'a geri dönün. Son olarak, aritmetik işlemler gibi kritik güvenlik özelliklerinin hedeflenmiş doğrulamasını gerçekleştirmek için Manticore'u kullanın. -- Slither'ın CLI'sını yaygın sorunları yakalamak için kullanın +- Sık karşılaşılan sorunları yakalamak için Slither'ın CLI'ını kullanın - Sözleşmenizin üst düzey güvenlik özelliklerini test etmek için Echidna'yı kullanın -- Özel statik kontrolleri yazmak için Slither kullanın +- Özel statik denetimler yazmak için Slither'ı kullanın - Kritik güvenlik özelliklerinin derinlemesine güvencesini istediğinizde Manticore'u kullanın -**Birim testleri üzerine bir not**. Yüksek kaliteli yazılım oluşturmak için birim testleri gereklidir. Ancak, bu teknikler güvenlik açıklarını bulmak için en uygun teknikler değildir. Genellikle kodun olumlu davranışlarını test etmek için kullanılırlar (yani kod normal bağlamda beklendiği gibi çalışır), güvenlik kusurları ise geliştiricilerin dikkate almadığı uç durumlarda bulunma eğilimindedir. Düzinelerce akıllı sözleşme güvenlik incelemesini içeren çalışmamızda [birim test kapsamı, müşterimizin kodunda bulduğumuz güvenlik açıklarının sayısı veya ciddiyeti üzerinde hiçbir etkiye sahip değildi](https://blog.trailofbits.com/2019/08/08/246-findings-from-our-smart-contract-audits-an-executive-summary/). +**Birim testleri üzerine bir not**. Yüksek kaliteli yazılım oluşturmak için birim testleri gereklidir. Ancak bu teknikler, güvenlik kusurlarını bulmak için en uygun olanlar değildir. Bunlar genellikle kodun pozitif davranışlarını test etmek için kullanılır (yani kod normal bağlamda beklendiği gibi çalışır), güvenlik kusurları ise geliştiricilerin dikkate almadığı uç durumlarda bulunma eğilimindedir. Onlarca akıllı sözleşme güvenlik incelemesi üzerine yaptığımız çalışmada, müşterimizin kodunda bulduğumuz [güvenlik kusurlarının sayısı veya ciddiyeti üzerinde birim testi kapsamının hiçbir etkisi olmamıştır](https://blog.trailofbits.com/2019/08/08/246-findings-from-our-smart-contract-audits-an-executive-summary/). -## Güvenlik Özelliklerinin Belirlenmesi {#determining-security-properties} +## Güvenlik Özelliklerini Belirleme {#determining-security-properties} -Kodunuzu etkili bir şekilde test etmek ve doğrulamak için dikkat edilmesi gereken alanları belirlemelisiniz. Güvenlik için harcanan kaynaklarınız sınırlı olduğundan, çabanızı optimize etmek için kod tabanınızın zayıf veya yüksek değerli kısımlarının kapsamını belirlemek önemlidir. Tehdit modelleme yardımcı olabilir. Şunları incelemeyi düşünün: +Kodunuzu etkili bir şekilde test etmek ve doğrulamak için dikkat gerektiren alanları belirlemeniz gerekir. Güvenliğe ayırdığınız kaynaklar sınırlı olduğundan, çabanızı en iyi duruma getirmek için kod tabanınızın zayıf veya değerli kısımlarını belirlemek önemlidir. Tehdit modellemesi yardımcı olabilir. Şunları gözden geçirmeyi düşünün: - [Hızlı Risk Değerlendirmeleri](https://infosec.mozilla.org/guidelines/risk/rapid_risk_assessment.html) (zaman kısıtlı olduğunda tercih ettiğimiz yaklaşım) -- [Veri Merkezli Sistem Tehdit Modelleme Kılavuzu](https://csrc.nist.gov/publications/detail/sp/800-154/draft) (diğer adıyla NIST 800-154) -- [Shostack iş parçacığı modellemesi](https://www.amazon.com/Threat-Modeling-Designing-Adam-Shostack/dp/1118809998) -- [STRIDE]() / [DREAD]() +- [Veri Merkezli Sistem Tehdit Modelleme Rehberi](https://csrc.nist.gov/pubs/sp/800/154/ipd) (diğer adıyla NIST 800-154) +- [Shostack tehdit modellemesi](https://www.amazon.com/Threat-Modeling-Designing-Adam-Shostack/dp/1118809998) +- [STRIDE](https://wikipedia.org/wiki/STRIDE_\(security\)) / [DREAD](https://wikipedia.org/wiki/DREAD_\(risk_assessment_model\)) - [PASTA](https://wikipedia.org/wiki/Threat_model#P.A.S.T.A.) -- [Teyitlerin Kullanımı](https://blog.regehr.org/archives/1091) +- [Onaylamaların Kullanımı](https://blog.regehr.org/archives/1091) ### Bileşenler {#components} -Neyi kontrol etmek istediğinizi bilmek, doğru aracı seçmenize de yardımcı olacaktır. +Neyi denetlemek istediğinizi bilmek, doğru aracı seçmenize de yardımcı olacaktır. -Akıllı sözleşmelerle sıklıkla ilgili olan geniş alanlar şunları içerir: +Akıllı sözleşmeler için sıklıkla geçerli olan geniş alanlar şunları içerir: -- **Durum makinesi.** Çoğu sözleşme bir durum makinesi olarak temsil edilebilir. (1) Hiçbir geçersiz duruma ulaşılıp ulaşılamayacağını, (2) durum, ulaşılabilir olduğu konusunda kesin olup olmadığını ve (3) herhangi bir durumun sözleşmeyi tuzağa düşürüp düşürmediğini kontrol edin. +- **Durum makinesi.** Çoğu sözleşme bir durum makinesi olarak temsil edilebilir. Şunları kontrol etmeyi düşünün: (1) Hiçbir geçersiz duruma ulaşılamayacağı, (2) geçerli bir duruma ulaşılabileceği ve (3) hiçbir durumun sözleşmeyi tuzağa düşürmediği. - - Echidna ve Manticore, durum makinesi özelliklerini test etmek için tercih edilen araçlardır. + - Echidna ve Manticore, durum makinesi belirtimlerini test etmek için tercih edilecek araçlardır. -- **Erişim kontrolleri.** Sisteminizde ayrıcalıklı kullanıcılar varsa (örn. sahip, denetleyiciler vb.), (1) her kullanıcının yalnızca yetkilendirilmiş eylemleri gerçekleştirebildiğinden ve (2) hiçbir kullanıcının daha ayrıcalıklı bir kullanıcının eylemlerini engelleyemediğinden emin olmalısınız. +- **Erişim denetimleri.** Sisteminizde ayrıcalıklı kullanıcılar (ör. bir sahip, denetleyiciler, ...) varsa her kullanıcının yalnızca izin verilen eylemleri gerçekleştirebildiğinden ve (2) hiçbir kullanıcının daha ayrıcalıklı bir kullanıcının eylemlerini engelleyemediğinden emin olmalısınız. - - Slither, Echidna ve Manticore, doğru erişim kontrollerini kontrol edebilir. Örneğin Slither, yalnızca beyaz listeye alınan fonksiyonlarda onlyOwner niteleyicisinin bulunmadığını kontrol edebilir. Echidna ve Manticore, yalnızca sözleşme belirli bir duruma ulaştığında verilen izin gibi daha karmaşık erişim kontrolü için kullanışlıdır. + - Slither, Echidna ve Manticore, erişim denetimlerinin doğruluğunu kontrol edebilir. Örneğin Slither, yalnızca beyaz listeye alınmış işlevlerde `onlyOwner` niteleyicisinin eksik olduğunu kontrol edebilir. Echidna ve Manticore, yalnızca sözleşme belirli bir duruma ulaştığında verilen bir izin gibi daha karmaşık erişim denetimleri için kullanışlıdır. -- **Aritmetik işlemler.** Aritmetik işlemlerin sağlamlığının kontrol edilmesi çok önemlidir. `SafeMath`'i her yerde kullanmak, taşmayı/yetersizlikleri önlemek için iyi bir adımdır ancak yine de yuvarlama sorunları ve sözleşmeyi tuzağa düşüren kusurlar dahil diğer aritmetik kusurları göz önünde bulundurmalısınız. +- **Aritmetik işlemler.** Aritmetik işlemlerin sağlamlığını kontrol etmek kritik öneme sahiptir. Her yerde `SafeMath` kullanmak, taşma/alt taşmayı önlemek için iyi bir adımdır ancak yuvarlama sorunları ve sözleşmeyi tuzağa düşüren kusurlar da dahil olmak üzere diğer aritmetik kusurları yine de göz önünde bulundurmalısınız. - - Manticore en iyi seçimdir. Aritmetik SMT çözücünün kapsamı dışındaysa Echidna kullanılabilir. + - Burada en iyi seçim Manticore'dur. Aritmetik, SMT çözücünün kapsamı dışındaysa Echidna kullanılabilir. -- **Kalıtım doğruluğu.** Solidity sözleşmeleri ağırlıklı olarak çoklu kalıtıma dayalıdır. Bir `super` çağrısının eksik olduğu gölgeleme fonksiyonu ve yanlış yorumlanmış c3 doğrusallaştırma sırası gibi hatalar kolayca ortaya çıkarılabilir. +- **Kalıtım doğruluğu.** Solidity sözleşmeleri büyük ölçüde çoklu kalıtıma dayanır. `super` çağrısı eksik olan bir gölgeleme işlevi ve yanlış yorumlanmış C3 doğrusallaştırma sırası gibi hatalar kolayca yapılabilir. - - Slither, bu sorunların tespit edilmesini sağlayan araçtır. + - Slither bu sorunların tespit edilmesini sağlayan araçtır. -- **Harici etkileşimler.** Sözleşmeler birbirleriyle etkileşime girer ve bazı harici sözleşmelere güvenilmemelidir. Örneğin, sözleşmeniz harici kâhinlere dayalıysa, kullanılan kâhinlerin yarısının tehlikeye girmesi durumunda sözleşme güvende kalacak mı? +- **Harici etkileşimler.** Sözleşmeler birbirleriyle etkileşime girer ve bazı harici sözleşmelere güvenilmemelidir. Örneğin, sözleşmeniz harici kâhinlere dayanıyorsa, mevcut kâhinlerin yarısı tehlikeye atıldığında güvende kalır mı? - - Manticore ve Echidna, sözleşmelerinizle harici etkileşimleri test etmek için en iyi seçimdir. Manticore, harici sözleşmeleri yoklamak için yerleşik bir mekanizmaya sahiptir. + - Manticore ve Echidna, sözleşmelerinizle olan harici etkileşimleri test etmek için en iyi seçimdir. Manticore, harici sözleşmeleri taklit etmek için yerleşik bir mekanizmaya sahiptir. -- **Standart uyum.** Ethereum standartı tasarımlarının (örn. ERC20) geçmişlerinde bir çok hata bulunur. Üzerine inşa ettiğiniz standardın sınırlamalarının farkında olun. +- **Standartlara uygunluk.** Ethereum standartlarının (ör. ERC20) tasarımlarında geçmişten gelen kusurlar vardır. Üzerine inşa ettiğiniz standardın sınırlılıklarının farkında olun. - Slither, Echidna ve Manticore, belirli bir standarttan sapmaları tespit etmenize yardımcı olacaktır. -### Araç seçimi kopya kağıdı {#tool-selection-cheatsheet} +### Araç seçim rehberi {#tool-selection-cheatsheet} -| Bileşen | Araçlar | Örnekler | -| ---------------------- | --------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Durum makinesi | Echidna, Manticore | | -| Erişim kontrolü | Slither, Echidna, Manticore | [Slither 2. alıştırma](https://github.com/crytic/slither/blob/7f54c8b948c34fb35e1d61adaa1bd568ca733253/docs/src/tutorials/exercise2.md), [Echidna 2. alıştırma](https://github.com/crytic/building-secure-contracts/blob/master/program-analysis/echidna/exercises/Exercise-2.md) | -| Aritmetik operasyonlar | Manticore, Echidna | [Echidna 1. alıştırma](https://github.com/crytic/building-secure-contracts/blob/master/program-analysis/echidna/exercises/Exercise-1.md), [Manticore 1.-3. alıştırma](https://github.com/crytic/building-secure-contracts/tree/master/program-analysis/manticore/exercises) | -| Kalıtım doğruluğu | Slither | [Slither 1. alıştırma](https://github.com/crytic/slither/blob/7f54c8b948c34fb35e1d61adaa1bd568ca733253/docs/src/tutorials/exercise1.md) | -| Harici etkileşimler | Manticore, Echidna | | -| Standart uyum | Slither, Echidna, Manticore | [`slither-erc`](https://github.com/crytic/slither/wiki/ERC-Conformance) | +| Bileşen | Araçlar | Örnekler | +| --------------------- | --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Durum makinesi | Echidna, Manticore | | +| Erişim denetimi | Slither, Echidna, Manticore | [Slither alıştırma 2](https://github.com/crytic/slither/blob/7f54c8b948c34fb35e1d61adaa1bd568ca733253/docs/src/tutorials/exercise2.md), [Echidna alıştırma 2](https://github.com/crytic/building-secure-contracts/blob/master/program-analysis/echidna/exercises/Exercise-2.md) | +| Aritmetik işlemler | Manticore, Echidna | [Echidna alıştırma 1](https://github.com/crytic/building-secure-contracts/blob/master/program-analysis/echidna/exercises/Exercise-1.md), [Manticore alıştırmaları 1 - 3](https://github.com/crytic/building-secure-contracts/tree/master/program-analysis/manticore/exercises) | +| Kalıtım doğruluğu | Slither | [Slither alıştırma 1](https://github.com/crytic/slither/blob/7f54c8b948c34fb35e1d61adaa1bd568ca733253/docs/src/tutorials/exercise1.md) | +| Harici etkileşimler | Manticore, Echidna | | +| Standartlara uygunluk | Slither, Echidna, Manticore | [`slither-erc`](https://github.com/crytic/slither/wiki/ERC-Conformance) | -Hedeflerinize bağlı olarak diğer alanların kontrol edilmesi gerekecektir, ancak bu kaba taneli odak alanları, herhangi bir akıllı sözleşme sistemi için iyi bir başlangıçtır. +Hedeflerinize bağlı olarak diğer alanların da denetlenmesi gerekecektir, ancak bu genel odak alanları herhangi bir akıllı sözleşme sistemi için iyi bir başlangıçtır. -Herkese açık denetimlerimiz, doğrulanmış veya test edilmiş özelliklerin örneklerini içerir. Gerçek dünyadaki güvenlik özelliklerini incelemek için aşağıdaki raporların `Automated Testing and Verification` bölümlerini okuyun: +Halka açık denetimlerimiz, doğrulanmış veya test edilmiş özelliklerin örneklerini içerir. Gerçek dünyadaki güvenlik özelliklerini gözden geçirmek için aşağıdaki raporların `Otomatik Test ve Doğrulama` bölümlerini okumayı düşünün: - [0x](https://github.com/trailofbits/publications/blob/master/reviews/0x-protocol.pdf) - [Balancer](https://github.com/trailofbits/publications/blob/master/reviews/BalancerCore.pdf) diff --git a/public/content/translations/tr/developers/tutorials/hello-world-smart-contract-fullstack/index.md b/public/content/translations/tr/developers/tutorials/hello-world-smart-contract-fullstack/index.md index 2c82e0bc2a2..32f2c5a2b8d 100644 --- a/public/content/translations/tr/developers/tutorials/hello-world-smart-contract-fullstack/index.md +++ b/public/content/translations/tr/developers/tutorials/hello-world-smart-contract-fullstack/index.md @@ -1,89 +1,92 @@ --- -title: Yeni Başlayanlar İçin Merhaba Dünya Akıllı Sözleşmesi - FullStack -description: Ethereum üzerinde basit bir akıllı sözleşme yazma ve dağıtmaya yönelik giriş seviyesinde öğretici. +title: Hello World Smart Contract for Beginners - Fullstack +description: "Ethereum'da basit bir akıllı sözleşme yazma ve dağıtma üzerine başlangıç seviyesi bir öğretici." author: "nstrike2" tags: - - "solidity" - - "hardhat" - - "alchemy" - - "akıllı sözleşmeler" - - "dağıtma" - - "blok bulucu" - - "ön yüz" - - "İşlemler" + [ + "solidity", + "hardhat", + "alchemy", + "akıllı kontratlar", + "dağıtma", + "block explorer", + "ön uç", + "işlemler" + ] skill: beginner lang: tr published: 2021-10-25 --- -Bu rehber, blokzincir geliştirme konusunda yeniyseniz, nereden başlayacağınızı bilmiyorsanız veya akıllı sözleşmeleri nasıl dağıtacağınızı ya da onlarla nasıl etkileşim kuracağınızı bilmiyorsanız tam size göre. Size, Goerli test ağında [MetaMask](https://metamask.io), [Solidity](https://docs.soliditylang.org/en/v0.8.0/), [Hardhat](https://hardhat.org) ve [Alchemy](https://alchemyapi.io/eth)'yi kullanarak basit bir akıllı sözleşme oluşturmayı ve dağıtmayı öğreteceğiz. +This guide is for you if you are new to blockchain development and don't know where to start or how to deploy and interact with smart contracts. We will walk through creating and deploying a simple, smart contract on the Goerli test network using [MetaMask](https://metamask.io), [Solidity](https://docs.soliditylang.org/en/v0.8.0/), [Hardhat](https://hardhat.org), and [Alchemy](https://alchemy.com/eth). -Bu öğreticiyi tamamlamak için bir Alchemy hesabına ihtiyacınız olacak. [Ücretsiz bir hesap açmak için kaydolun](https://www.alchemy.com/). +You'll need an Alchemy account to complete this tutorial. [Sign up for a free account](https://www.alchemy.com/). -Herhangi bir noktada sorunuz olursa, [Alchemy Discord](https://discord.gg/gWuC7zB)'unu ziyaret etmekten çekinmeyin! +If you have questions at any point, feel free to reach out in the [Alchemy Discord](https://discord.gg/gWuC7zB)! -## 1. Bölüm - Hardhat Kullanarak Akıllı Sözleşmenizi Oluşturma ve Dağıtma {#part-1} +## Part 1 - Create and Deploy your Smart Contract using Hardhat {#part-1} -### Ethereum ağına bağlanın {#connect-to-the-ethereum-network} +### Connect to the Ethereum network {#connect-to-the-ethereum-network} -Ethereum zincirine istek göndermenin birçok yolu vardır. Kolay anlaşılabilmesi için düğümü kendimiz çalıştırmadan Ethereum zinciriyle bağlantı kurabilmemize olanak tanıyan bir blokzincir geliştirme platformu ve API'si olan Alchemy'de açtığımız ücretsiz bir hesabı kullanacağız. Alchemy ayrıca, akıllı sözleşme dağıtımımızda arka planda neler olup bittiğini anlamak için bu öğreticide yararlanacağımız izleme ve analitiğe yönelik geliştirici araçlarına sahiptir. +Ethereum zincirine istek göndermenin birçok yolu vardır. For simplicity, we'll use a free account on Alchemy, a blockchain developer platform and API that allows us to communicate with the Ethereum chain without running a node ourselves. Alchemy also has developer tools for monitoring and analytics; we'll take advantage of these in this tutorial to understand what's going on under the hood in our smart contract deployment. -### Uygulamanızı ve API anahtarınızı oluşturun {#create-your-app-and-api-key} +### Create your app and API key {#create-your-app-and-api-key} -Bir Alchemy hesabı oluşturduktan sonra, bir uygulama yaratarak bir API anahtarı oluşturabilirsiniz. Bu Goerli test ağına taleplerde bulunmanızı sağlayacaktır. Test ağlarıyla ilgili pek bilginiz yoksa [Alchemy'nin ağ seçme rehberini okuyabilirsiniz](https://docs.alchemyapi.io/guides/choosing-a-network). +Once you've created an Alchemy account, you can generate an API key by creating an app. This will allow you to make requests to the Goerli testnet. If you're not familiar with testnets you can [read Alchemy's guide to choosing a network](https://www.alchemy.com/docs/choosing-a-web3-network). -Alchemy'nin sayfasında **Uygulamalar** seçeneğini bulun ve aşağı inip **Uygulama Oluştur**'a tıklayın. +On the Alchemy dashboard, find the **Apps** dropdown in the navigation bar and click **Create App**. ![Merhaba dünya uygulama oluşturma](./hello-world-create-app.png) -Uygulamanıza "_Merhaba Dünya_" ismini verin ve kısa bir açıklama yazın. Ortam olarak **Hazırlama**'yı ve ağ olarak da **Goerli**'yi seçin. +Give your app the name '_Hello World_' and write a short description. Select **Staging** as your environment and **Goerli** as your network. -![merhaba dünya görüntüleme uygulamasını oluşturma](./create-app-view-hello-world.png) +![uygulama oluşturma görünümü merhaba dünya](./create-app-view-hello-world.png) -_Not: **Goerli**'yi seçmezseniz bu öğretici çalışmaz._ +_Note: be sure to select **Goerli**, or this tutorial won't work._ -**Uygulama oluştur**'a tıklayın. Uygulamanız aşağıdaki tabloda görünecektir. +Click **Create app**. Your app will appear in the table below. -### Bir Ethereum hesabı oluşturun {#create-an-ethereum-account} +### Create an Ethereum account {#create-an-ethereum-account} -İşlem göndermek ve almak için bir Ethereum hesabına ihtiyacınız vardır. Kullanıcıların Ethereum hesap adreslerini yönetmelerini sağlayan bir sanal tarayıcı cüzdanı olan MetaMask'i kullanacağız. +You need an Ethereum account to send and receive transactions. We'll use MetaMask, a virtual wallet in the browser that lets users manage their Ethereum account address. -[Buradan](https://metamask.io/download) ücretsiz olarak bir MetaMask hesabı indirebilir ve oluşturabilirsiniz. Bir hesap oluştururken ya da zaten bir hesabınız varsa, sağ üstten "Goerli Test Ağına" geçin (bu sayede gerçek parayla denemeler yapmayız). +MetaMask'ı [buradan](https://metamask.io/download) ücretsiz indirip bir hesap oluşturabilirsiniz. When you are creating an account, or if you already have an account, make sure to switch over to the “Goerli Test Network” in the upper right (so that we’re not dealing with real money). ### Adım 4: Bir Musluktan ether ekleyin {#step-4-add-ether-from-a-faucet} -Akıllı sözleşmenizi test ağına dağıtmak için biraz sahte ETH'ye ihtiyacınız olacak. Goerli ağında ETH alabilmek için bir Goerli musluğuna gidin ve Goerli hesabınızın adresini girin. Goerli musluklarının son zamanlarda biraz güvenilmez olduğunu da dikkate alın; [test ağları sayfası](/developers/docs/networks/#goerli)'ndan denenebilecek seçeneklerin listesine göz atın: +To deploy your smart contract to the test network, you'll need some fake ETH. To get ETH on the Goerli network, go to a Goerli faucet and enter your Goerli account address. Note that Goerli faucets can be a bit unreliable recently - see the [test networks page](/developers/docs/networks/#goerli) for a list of options to try: -_Not: Ağ sıkışıklığı sebebiyle bu biraz zaman alabilir._ `` +_Note: due to network congestion, this might take a while._ +`` -### Adım 5: Bakiyenizi kontrol edin {#step-5-check-your-balance} +### Step 5: Check your Balance {#step-5-check-your-balance} -ETH'nin cüzdanınızda olduğundan emin olmak için [Alchemy'nin derleyici aracını](https://composer.alchemyapi.io/?composer_state=%7B%22network%22%3A0%2C%22methodName%22%3A%22eth_getBalance%22%2C%22paramValues%22%3A%5B%22%22%2C%22latest%22%5D%7D) kullanarak bir [eth_getBalance](https://docs.alchemyapi.io/alchemy/documentation/alchemy-api-reference/json-rpc#eth_getbalance) isteği oluşturalım. Bu, cüzdanımızdaki ETH miktarını döndürür. Daha fazla bilgi edinmek için [Alchemy'nin derleyici aracını kullanma hakkındaki kısa öğreticisine](https://youtu.be/r6sjRxBZJuU) göz atabilirsiniz. +To double-check the ETH is in your wallet, let’s make an [eth_getBalance](https://docs.alchemyapi.io/alchemy/documentation/alchemy-api-reference/json-rpc#eth_getbalance) request using [Alchemy’s composer tool](https://composer.alchemyapi.io/?composer_state=%7B%22network%22%3A0%2C%22methodName%22%3A%22eth_getBalance%22%2C%22paramValues%22%3A%5B%22%22%2C%22latest%22%5D%7D). Bu, cüzdanımızdaki ETH miktarını döndürür. To learn more check out [Alchemy's short tutorial on how to use the composer tool](https://youtu.be/r6sjRxBZJuU). -Metamask hesap adresinizi girin ve **İstek Gönder**'e tıklayın. Aşağıdaki ufak kod parçası gibi bir cevap göreceksiniz. +Enter you input your MetaMask account address and click **Send Request**. You will see a response that looks like the code snippet below. ```json { "jsonrpc": "2.0", "id": 0, "result": "0x2B5E3AF16B1880000" } ``` -> _Not: Bu sonuç ETH değil, wei cinsindendir. Wei, ether'ın en küçük birimi olarak kullanılır._ +> _Note: This result is in wei, not ETH. Wei is used as the smallest denomination of ether._ Vay be! Tüm sahte paramız yerli yerinde. -### Adım 6: Projemizi başlatın {#step-6-initialize-our-project} +### Step 6: Initialize our project {#step-6-initialize-our-project} -Önce, projemiz için bir klasör oluşturmamız gerekecek. Komut satırınıza gidin ve aşağıdakini girin. +First, we'll need to create a folder for our project. Navigate to your command line and input the following. ``` mkdir hello-world cd hello-world ``` -Artık proje klasörümüzün içinde olduğumuza göre, projeyi başlatmak için `npm init` kullanacağız. +Artık proje klasörümüzün içinde olduğumuza göre projeyi başlatmak için `npm init` komutunu kullanacağız. -> Eğer npm'i hala yüklemediyseniz [Node.js ve npm'i yüklemek için bu talimatları uygulayın](https://docs.alchemyapi.io/alchemy/guides/alchemy-for-macs#1-install-nodejs-and-npm). +> If you don’t have npm installed yet, follow [these instructions to install Node.js and npm](https://docs.alchemyapi.io/alchemy/guides/alchemy-for-macs#1-install-nodejs-and-npm). -Başlangıç sorularını nasıl cevapladığınız bu öğreticinin amacıyla alakasızdır. Biz referans olarak bu şekilde yaptık: +For the purpose of this tutorial, it doesn't matter how you answer the initialization questions. Here is how we did it for reference: ``` package name: (hello-world) @@ -111,13 +114,13 @@ About to write to /Users/.../.../.../hello-world/package.json: } ``` -package.json'ı onayladıktan sonra hazırız! +package.json dosyasını onaylayın ve artık hazırız! -### 7. Adım: Hardhat'i indirin {#step-7-download-hardhat} +### Step 7: Download Hardhat {#step-7-download-hardhat} Hardhat, Ethereum yazılımınızı derlemek, dağıtmak, test etmek ve hatalarını ayıklamak için bir geliştirme ortamıdır. Bu geliştiricilere canlı zincirde dağıtmadan önce akıllı sözleşmelerini ve merkeziyetsiz uygulamalarını geliştirirken yardımcı olur. -`hello-world` projemizin içinde şunu yürütün: +`hello-world` projemizin içinde şunu çalıştırın: ``` npm install --save-dev hardhat @@ -125,9 +128,9 @@ npm install --save-dev hardhat [Kurulum talimatları](https://hardhat.org/getting-started/#overview) hakkında daha fazla ayrıntı için bu sayfaya göz atın. -### Adım 8: Hardhat projesi oluşturun {#step-8-create-hardhat-project} +### Step 8: Create Hardhat project {#step-8-create-hardhat-project} -`hello-world` proje klasörümüzde aşağıdaki komutu çalıştırın: +Inside our `hello-world` project folder, run: ``` npx hardhat @@ -153,30 +156,30 @@ Create a sample project Quit ``` -Bu, projenin içinde bir `hardhat.config.js` dosyası oluşturacaktır. Bunu, bu öğreticinin içinde daha sonra projemizin kurulumunu özelleştirmek için kullanacağız. +This will generate a `hardhat.config.js` file in the project. We'll use this later in the tutorial to specify the setup for our project. -### Adım 9: Proje klasörleri ekleyin {#step-9-add-project-folders} +### Step 9: Add project folders {#step-9-add-project-folders} -Bu projeyi düzenli tutmak için iki yeni klasör daha oluşturalım. Komut satırına `hello-world` projenizin kök rehberine gidip şunları yazın: +To keep the project organized, let's create two new folders. In the command line, navigate to the root directory of your `hello-world` project and type: ``` mkdir contracts mkdir scripts ``` -- `contracts/` merhaba dünya akıllı sözleşme kod dosyamızı tutacağımız yerdir -- `scripts/`, sözleşmemizi dağıtmak ve etkileşim kurmak için komut dosyalarını tutacağımız yerdir +- `contracts/`, merhaba dünya akıllı sözleşme kodu dosyamızı tutacağımız yerdir +- `scripts/`, sözleşmemizi dağıtmak ve onunla etkileşim kurmak için komut dosyalarını tutacağımız yerdir -### Adım 10: Sözleşmemizi yazın {#step-10-write-our-contract} +### Step 10: Write our contract {#step-10-write-our-contract} -Kendinize, ne zaman kod yazmaya başlayacağız diye mi soruyorsunuz? İşte o vakit geldi! +You might be asking yourself, when are we going to write code? It's time! -En sevdiğiniz düzenleyicide hello-world projenizi açın. Akıllı sözleşmeler genelde Solidity'de yazılır, biz de akıllı sözleşmemizi yazmak için onu kullanacağız. +Open up the hello-world project in your favorite editor. Smart contracts most commonly are written in Solidity, which we will use to write our smart contract.‌ -1. `contracts` klasörüne gidin ve `HelloWorld.sol` adında bir dosya oluşturun -2. Aşağıda bu öğreticide kullanacağımız örnek bir Hello World akıllı sözleşmesi var. Aşağıdaki içerikleri `HelloWorld.sol` dosyasına kopyalayın. +1. Navigate to the `contracts` folder and create a new file called `HelloWorld.sol` +2. Below is a sample Hello World smart contract that we will be using for this tutorial. Copy the contents below into the `HelloWorld.sol` file. -_Not: Bu sözleşmenin ne yaptığını anlayabilmek için yorumları okuduğunuzdan emin olun._ +_Note: Be sure to read the comments to understand what this contract does._ ``` // Specifies the version of Solidity, using semantic versioning. @@ -212,15 +215,15 @@ contract HelloWorld { } ``` -Bu, oluşturma aşaması tamamlandığında bir mesaj depolayan temel bir akıllı sözleşmedir. `update` fonksiyonunu kullanarak bu akıllı sözleşmeyi güncelleyebiliriz. +This is a basic smart contract that stores a message upon creation. It can be updated by calling the `update` function. -### Adım 11: MetaMask ve Alchemy'i projenize bağlayın {#step-11-connect-metamask-alchemy-to-your-project} +### Step 11: Connect MetaMask & Alchemy to your project {#step-11-connect-metamask-alchemy-to-your-project} -Bir MetaMask cüzdanı ile Alchemy hesabı oluşturduk ve akıllı sözleşmemizi yazdık, şimdi üçünü birleştirme zamanı. +Bir MetaMask cüzdanı ve Alchemy hesabı oluşturduk ve akıllı sözleşmemizi yazdık, şimdi bu üçünü birbirine bağlama zamanı. -Cüzdanınızdan gönderilen her işlem kendi benzersiz özel anahtarınızı kullanan bir imzaya ihtiyaç duyar. Programımıza bu izni sağlamak için özel anahtarımızı bir ortam dosyasında güvenle saklayabiliriz. Ayrıca burada, Alchemy için bir API anahtarı da depolayacağız. +Every transaction sent from your wallet requires a signature using your unique private key. To provide our program with this permission, we can safely store our private key in an environment file. We will also store an API key for Alchemy here. -> İşlem gönderme hakkında daha fazla bilgi edinmek için web3 kullanarak işlem gönderme ile ilgili [bu öğreticiye](https://docs.alchemyapi.io/alchemy/tutorials/sending-transactions-using-web3-and-alchemy) göz atın. +> To learn more about sending transactions, check out [this tutorial](https://www.alchemy.com/docs/hello-world-smart-contract#step-11-connect-metamask--alchemy-to-your-project) on sending transactions using web3. İlk önce dotenv paketini proje dizininize kurun: @@ -228,14 +231,14 @@ Cüzdanınızdan gönderilen her işlem kendi benzersiz özel anahtarınızı ku npm install dotenv --save ``` -Sonra, projenin kök rehberinde bir `.env` dosyası oluşturun. MetaMask özel anahtarınızı ve HTTP Alchemy API URL'nizi bu dosyaya ekleyin. +Then, create a `.env` file in the root directory of the project. Add your MetaMask private key and HTTP Alchemy API URL to it. -Ortam dosyanızın adı `.env` olmak zorundadır, aksi takdirde ortam dosyası olarak tanınmaz. +Your environment file must be named `.env` or it won't be recognized as an environment file. -Dosyanıza `process.env`, `.env-custom` ya da başka bir isim vermeyin. +Do not name it `process.env` or `.env-custom` or anything else. -- Özel anahtarınızı almak için [şu talimatları](https://metamask.zendesk.com/hc/en-us/articles/360015289632-How-to-Export-an-Account-Private-Key) takip edin -- HTTP Alchemy API URL'sini almak için aşağıya göz atın +- Follow [these instructions](https://metamask.zendesk.com/hc/en-us/articles/360015289632-How-to-Export-an-Account-Private-Key) to export your private key +- HTTP Alchemy API URL'sini almak için aşağıya bakın ![](./get-alchemy-api-key.gif) @@ -246,13 +249,13 @@ API_URL = "https://eth-goerli.alchemyapi.io/v2/your-api-key" PRIVATE_KEY = "your-metamask-private-key" ``` -Bunları kodumuza gerçekten bağlamak için, adım 13'te `hardhat.config.js` dosyamızda bu değişkenlere başvuracağız. +Bunları gerçekten kodumuza bağlamak için 13. adımda `hardhat.config.js` dosyamızdaki bu değişkenlere başvuracağız. -### Adım 12: Ethers.js'yi kurun {#step-12-install-ethersjs} +### Adım 12: Ethers.js'i Yükleyin {#step-12-install-ethersjs} -Ethers.js, [standart JSON-RPC yöntemlerini](https://docs.alchemyapi.io/alchemy/documentation/alchemy-api-reference/json-rpc) daha kullanıcı dostu yöntemlerle birleştirerek Ethereum'la etkileşimde bulunmayı ve Ethereum'a istek göndermeyi kolaylaştıran bir kütüphanedir. +Ethers.js is a library that makes it easier to interact and make requests to Ethereum by wrapping [standard JSON-RPC methods](https://docs.alchemyapi.io/alchemy/documentation/alchemy-api-reference/json-rpc) with more user friendly methods. -Hardhat, ek araçlar ve daha fazla işlevsellik için [eklentiler](https://hardhat.org/plugins/) kullanmamıza olanak tanır. Sözleşme dağıtımı için [Ethers eklentisinden](https://hardhat.org/docs/plugins/official-plugins#hardhat-ethers) yararlanacağız. +Hardhat allows us to integrate [plugins](https://hardhat.org/plugins/) for additional tooling and extended functionality. We’ll be taking advantage of the [Ethers plugin](https://hardhat.org/docs/plugins/official-plugins#hardhat-ethers) for contract deployment. Proje klasörünüzde şunu yazın: @@ -260,11 +263,11 @@ Proje klasörünüzde şunu yazın: npm install --save-dev @nomiclabs/hardhat-ethers "ethers@^5.0.0" ``` -### Adım 13: hardhat.config.js'yi güncelleyin {#step-13-update-hardhat-configjs} +### Step 13: Update hardhat.config.js {#step-13-update-hardhat-configjs} -Şimdiye kadar birkaç bağımlılık ve eklenti ekledik, şimdi projemizin bunların hepsini tanıması için `hardhat.config.js`'yi güncellememiz gerekiyor. +Şimdiye kadar birkaç bağımlılık ve eklenti ekledik, şimdi projemizin hepsini tanıması için `hardhat.config.js` dosyasını güncellememiz gerekiyor. -`hardhat.config.js` dosyanızı şöyle görünecek şekilde güncelleyin: +`hardhat.config.js` dosyanızı aşağıdaki gibi görünecek şekilde güncelleyin: ```javascript /** @@ -289,9 +292,9 @@ module.exports = { } ``` -### Adım 14: Sözleşmemizi derleyin {#step-14-compile-our-contract} +### Step 14: Compile our contract {#step-14-compile-our-contract} -Şimdiye kadar yaptığımız her şeyin çalıştığından emin olmak için sözleşmemizi derleyelim. `compile` görevi, yerleşik hardhat görevlerden biridir. +Şimdiye kadar yaptığımız her şeyin çalıştığından emin olmak için sözleşmemizi derleyelim. `compile` görevi, yerleşik hardhat görevlerinden biridir. Komut satırından şunu yürütün: @@ -299,13 +302,13 @@ Komut satırından şunu yürütün: npx hardhat compile ``` -`SPDX license identifier not provided in source file` uyarısı alabilirsiniz, ancak bunun için endişelenmenize gerek yok, geri kalan her şey düzgün olacaktır! Düzgün değilse, istediğiniz zaman [Alchemy discord](https://discord.gg/u72VCg3)'da mesaj gönderebilirsiniz. +You might get a warning about `SPDX license identifier not provided in source file`, but no need to worry about that — hopefully everything else looks good! Sorun yaşarsanız [Alchemy Discord](https://discord.gg/u72VCg3) üzerinden her zaman mesaj atabilirsiniz. -### Adım 15: Dağıtım komut dosyamızı yazın {#step-15-write-our-deploy-script} +### Step 15: Write our deploy script {#step-15-write-our-deploy-script} Artık sözleşmemiz yazıldığına ve yapılandırma dosyamız kullanıma hazır olduğuna göre, sözleşme dağıtım komut dosyanızı yazmanın zamanı geldi. -`scripts/` klasörüne gidin ve aşağıdaki içeriği ekleyerek `deploy.js` adlı yeni bir dosya oluşturun: +`scripts/` klasörüne gidin ve `deploy.js` adında yeni bir dosya oluşturup içine aşağıdaki içeriği ekleyin: ```javascript async function main() { @@ -324,23 +327,23 @@ main() }) ``` -Hardhat, bu kod satırlarının her birinin ne işe yaradığını [Sözleşme öğreticisinde](https://hardhat.org/tutorial/testing-contracts.html#writing-tests) harika bir şekilde açıklıyor, Hardhat açıklamalarını buraya aktardık. +Hardhat, [Sözleşmeler öğreticisinde](https://hardhat.org/tutorial/testing-contracts.html#writing-tests) bu kod satırlarının her birinin ne işe yaradığını harika bir şekilde açıklıyor, biz de buraya onların açıklamalarını aldık. ```javascript const HelloWorld = await ethers.getContractFactory("HelloWorld") ``` -Ethers.js'deki bir `ContractFactory`, yeni akıllı sözleşmeleri dağıtmak için kullanılan bir soyutlamadır, bu nedenle `HelloWorld`, merhaba dünya sözleşmemizin örnekleri için bir [fabrika]()'dır. `hardhat-ethers` eklentisini kullanırken `ContractFactory` ve `Contract` örnekleri varsayılan olarak ilk imzalayana (sahip) bağlanır. +A `ContractFactory` in ethers.js is an abstraction used to deploy new smart contracts, so `HelloWorld` here is a [factory](https://en.wikipedia.org/wiki/Factory_\(object-oriented_programming\)) for instances of our hello world contract. When using the `hardhat-ethers` plugin `ContractFactory` and `Contract`, instances are connected to the first signer (owner) by default. ```javascript const hello_world = await HelloWorld.deploy() ``` -Bir `ContractFactory` üzerinde `deploy()` öğesinin çağrılması, dağıtımı başlatır ve `Contract` nesnesi olarak çözümlenen bir `Promise` döndürür. Bu, akıllı sözleşme fonksiyonlarımızın her biri için bir yöntemi olan nesnedir. +Calling `deploy()` on a `ContractFactory` will start the deployment, and return a `Promise` that resolves to a `Contract` object. Bu, akıllı sözleşme fonksiyonlarımızın her biri için bir yöntemi olan nesnedir. ### Adım 16: Sözleşmemizi dağıtın {#step-16-deploy-our-contract} -Sonunda akıllı sözleşmemizi uygulamaya hazırız! Komut satırına gidin ve şunu yürütün: +Sonunda akıllı sözleşmemizi uygulamaya hazırız! Komut satırına gidin ve şunu çalıştırın: ```bash npx hardhat run scripts/deploy.js --network goerli @@ -349,36 +352,36 @@ npx hardhat run scripts/deploy.js --network goerli Daha sonra şöyle bir şey görmelisiniz: ```bash -Contract deployed to address: 0x6cd7d44516a20882cEa2DE9f205bF401c0d23570 +Sözleşme şu adrese dağıtıldı: 0x6cd7d44516a20882cEa2DE9f205bF401c0d23570 ``` -**Bu adresi lütfen kaydedin**. Öğreticide daha sonra kullanacağız. +**Please save this address**. We will be using it later in the tutorial. -[Goerli etherscan](https://goerli.etherscan.io)'e gider ve sözleşme adresimizi aratırsak başarıyla dağıtılmış olduğunu görürüz. İşlem şunun gibi gözükecektir: +If we go to the [Goerli etherscan](https://goerli.etherscan.io) and search for our contract address we should able to see that it has been deployed successfully. İşlem şunun gibi gözükecektir: ![](./etherscan-contract.png) -`From` adresi MetaMask hesap adresinizle eşleşmelidir ve `To` adresi **Sözleşme Oluşturma** ifadesini barındıracaktır. İşleme tıklarsak `To` alanında sözleşme adresimizi görürüz. +The `From` address should match your MetaMask account address and the `To` address will say **Contract Creation**. If we click into the transaction we’ll see our contract address in the `To` field. ![](./etherscan-transaction.png) -Tebrikler! Az önce Ethereum test ağına bir akıllı sözleşme dağıttınız. +Tebrikler! You just deployed a smart contract to an Ethereum testnet. -Perde arkasında neler olduğunu anlamak için [Alchemy gösterge panelimizde](https://dashboard.alchemyapi.io/explorer) Explorer (Gezgin) sekmesine gidelim. Birden fazla Alchemy uygulamanız varsa, uygulamaya göre filtreleme yaptığınızdan ve **Merhaba Dünya**'yı seçtiğinizden emin olun. +To understand what’s going on under the hood, let’s navigate to the Explorer tab in our [Alchemy dashboard](https://dashboard.alchemy.com/explorer). If you have multiple Alchemy apps make sure to filter by app and select **Hello World**. ![](./hello-world-explorer.png) -Burada, `.deploy()` fonksiyonunu çağırdığımızda Hardhat/Ethers'ın bizim için arka planda oluşturduğu bir avuç JSON-RPC yöntemini göreceksiniz. Buradaki iki önemli yöntem, akıllı sözleşmemizi Goerli zincirine yazma isteği olan [`eth_sendRawTransaction`](https://docs.alchemyapi.io/alchemy/documentation/alchemy-api-reference/json-rpc#eth_sendrawtransaction) ve karma değerine göre işlemimiz hakkındaki bilgileri okuma isteği olan [`eth_getTransactionByHash`](https://docs.alchemyapi.io/alchemy/documentation/alchemy-api-reference/json-rpc#eth_gettransactionbyhash) öğeleridir. İşlem gönderme hakkında daha fazla bilgi edinmek için [Web3 kullanarak işlem göndermeyle ilgili öğreticimize](/developers/tutorials/sending-transactions-using-web3-and-alchemy/) göz atın. +Here you’ll see a handful of JSON-RPC methods that Hardhat/Ethers made under the hood for us when we called the `.deploy()` function. Two important methods here are [`eth_sendRawTransaction`](https://docs.alchemyapi.io/alchemy/documentation/alchemy-api-reference/json-rpc#eth_sendrawtransaction), which is the request to write our contract onto the Goerli chain, and [`eth_getTransactionByHash`](https://docs.alchemyapi.io/alchemy/documentation/alchemy-api-reference/json-rpc#eth_gettransactionbyhash), which is a request to read information about our transaction given the hash. To learn more about sending transactions, check out [our tutorial on sending transactions using Web3](/developers/tutorials/sending-transactions-using-web3-and-alchemy/). -## 2. Bölüm: Akıllı Sözleşmenizle etkileşime geçin {#part-2-interact-with-your-smart-contract} +## Part 2: Interact with your Smart Contract {#part-2-interact-with-your-smart-contract} -Akıllı sözleşmemizi Goerli ağına başarılı bir şekilde dağıttığımıza göre, artık sözleşmeyle nasıl etkileşim kuracağımızı öğrenebiliriz. +Now that we've successfully deployed a smart contract to the Goerli network let's learn how to interact with it. -### Bir interact.js dosyası oluşturun {#create-a-interactjs-file} +### Create a interact.js file {#create-a-interactjs-file} -Bu etkileşim komut dosyamızı yazacağımız dosyadır. Burada, daha önce 1.Bölüm'de yüklemiş olduğunuz Ethers.js kütüphanesini kullancağız. +This is the file where we'll write our interaction script. We'll be using the Ethers.js library that you previously installed in Part 1. -`scripts/` dosyasının içinde `interact.js` adında yeni bir dosya oluşturun ve aşağıdaki kodu ekleyin: +Inside the `scripts/`folder, create a new file named `interact.js` add the following code: ```javascript // interact.js @@ -388,13 +391,13 @@ const PRIVATE_KEY = process.env.PRIVATE_KEY const CONTRACT_ADDRESS = process.env.CONTRACT_ADDRESS ``` -### .env dosyanızı güncelleyin {#update-your-env-file} +### Update your .env file {#update-your-env-file} -Yeni ortam değişkenleri kullanacağımız için bu değişkenleri [daha önce oluşturduğumuz](#step-11-connect-metamask-&-alchemy-to-your-project) `.env` dosyasında tanımlayacağız. +We will be using new environment variables, so we need to define them in the `.env`file that [we created earlier](#step-11-connect-metamask-&-alchemy-to-your-project). -Alchemy `API_KEY`'imiz ve akıllı sözleşmenizin dağıtıldığı yer olan `CONTRACT_ADDRESS` için bir tanım eklememiz gerekecektir. +We'll need to add a definition for our Alchemy `API_KEY` and the `CONTRACT_ADDRESS` where your smart contract was deployed. -`.env` aşağıdaki gibi görünmelidir: +Your `.env` file should look something like this: ```bash # .env @@ -405,36 +408,36 @@ PRIVATE_KEY = "" CONTRACT_ADDRESS = "0x" ``` -### Sözleşme ABI'nizi alın {#grab-your-contract-ABI} +### Grab your contract ABI {#grab-your-contract-ABI} -Sözleşme [ABI 'miz (Uygulama İkili Arayüzü)](/glossary/#abi), akıllı sözleşmemizle etkileşim kurmak için kullanılan arayüzdür. Hardhat otomatik olarak bir ABI oluşturur ve `HelloWorld.json`'un içine kaydeder. ABI'yi kullanmak için `interact.js` dosyamıza aşağıdaki kod satırlarını ekleyerek içeriği ayrıştırmamız gerekir: +Our contract [ABI (Application Binary Interface)](/glossary/#abi) is the interface to interact with our smart contract. Hardhat automatically generates an ABI and saves it in `HelloWorld.json`. To use the ABI, we'll need to parse out the contents by adding the following lines of code to our `interact.js` file: ```javascript // interact.js const contract = require("../artifacts/contracts/HelloWorld.sol/HelloWorld.json") ``` -ABI'yi görmek istiyorsanız onu konsolunuza yazdırabilirsiniz: +ABI'yi görmek isterseniz konsolunuza yazdırabilirsiniz: ```javascript console.log(JSON.stringify(contract.abi)) ``` -ABI'nizin konsola yazdırıldığını görmek için terminalinize gidin ve şunu çalıştırın: +To see your ABI printed to the console, navigate to your terminal and run: ```bash npx hardhat run scripts/interact.js ``` -### Sözleşmenizin bir örneğini oluşturun {#create-an-instance-of-your-contract} +### Create an instance of your contract {#create-an-instance-of-your-contract} -Sözleşmenizle etkileşim kurmak için kodumuzda bir sözleşme örneği oluşturmamız gerekir. Bunu Ethers.js ile yapmak için üç konseptle çalışacağız: +To interact with our contract, we need to create a contract instance in our code. To do so with Ethers.js, we'll need to work with three concepts: -1. Sağlayıcı - size blockzincir için okuma ve yazma erişimi veren bir düğüm sağlayıcısıdır -2. İmzalayıcı - işlem imzalayabilen bir Ethereum hesabını gösterir -3. Sözleşme - zincir üstünde dağıtılmış olan spesifik bir sözleşmeyi temsil eden bir Ethers.js objesidir +1. Provider - a node provider that gives you read and write access to the blockchain +2. Signer - represents an Ethereum account that can sign transactions +3. Contract - an Ethers.js object representing a specific contract deployed onchain -Sözleşme örneğimizi oluşturmak için önceki adımdaki sözleşme ABI'mizi kullanacağız: +We'll use the contract ABI from the previous step to create our instance of the contract: ```javascript // interact.js @@ -456,15 +459,15 @@ const helloWorldContract = new ethers.Contract( ) ``` -Sağlayıcı, İmzalayıcı ve Sözleşmelerle ilgili [ethers.js dokümanlarından](https://docs.ethers.io/v5/) daha fazla bilgi edinebilirsiniz. +Learn more about Providers, Signers, and Contracts in the [ethers.js documentation](https://docs.ethers.io/v5/). -### Başlangıç mesajını okuyun {#read-the-init-message} +### Read the init message {#read-the-init-message} -Sözleşmemizi `initMessage = "Hello world!"` ile dağıttığımızı hatırlıyor musunuz? Şimdi akıllı sözleşmemizde depolanmış olan bu mesajı okuyacağız ve konsola yazdıracağız. +Remember when we deployed our contract with the `initMessage = "Hello world!"`? We are now going to read that message stored in our smart contract and print it to the console. -JavaScript'te ağlarla etkileşim kurulurken asenkronize fonksiyonlar kullanılır. Asenkronize fonksiyonlarla ilgili daha fazla bilgi edinmek için [bu medium makalesini okuyun](https://blog.bitsrc.io/understanding-asynchronous-javascript-the-event-loop-74cd408419ff). +In JavaScript, asynchronous functions get used when interacting with networks. To learn more about asynchronous functions, [read this medium article](https://blog.bitsrc.io/understanding-asynchronous-javascript-the-event-loop-74cd408419ff). -Akıllı sözleşmemizdeki `message` fonksiyonunu çağırmak için aşağıdaki kodu kullanın ve başlangıç mesajını okuyun: +Use the code below to call the `message` function in our smart contract and read the init message: ```javascript // interact.js @@ -478,19 +481,19 @@ async function main() { main() ``` -Dosyayı terminaldeki `npx hardhat run scripts/interact.js` öğesini kullanarak çalıştırdıktan sonra şu yanıtı görmeliyiz: +After running the file using `npx hardhat run scripts/interact.js` in the terminal we should see this response: ``` The message is: Hello world! ``` -Tebrikler! Az önce Ethereum blokzincirinden başarıyla bir akıllı sözleşme verisi okudunuz, bravo! +Tebrikler! You've just successfully read smart contract data from the Ethereum blockchain, way to go! -### Mesajı güncelleyin {#update-the-message} +### Update the message {#update-the-message} -Sadece mesajı okumak yerine, `update` fonksiyonunu kullanarak akıllı sözleşmemizde kayıtlı olan mesajı güncelleyebiliriz! Oldukça havalı, değil mi? +Instead of just reading the message, we can also update the message saved in our smart contract using the `update` function! Pretty cool, right? -Bu mesajı güncellemek için somutlaşmış sözleşme nesnemizde doğrudan `update` fonksiyonunu çağırabiliriz: +To update the message, we can directly call the `update` function on our instantiated Contract object: ```javascript // interact.js @@ -508,13 +511,13 @@ async function main() { main() ``` -11. satırda dönen işlem nesnesi için `.wait()` çağrısını yaptığımızı not alın. Bunu yapmak, komut dosyamızın fonksiyondan çıkmadan önce işlemin blokzincirde basılmasını beklediğinden emin olmamızı sağlar. Eğer `.wait()` çağrısı dahil edilmemişse komut dosyası, sözleşmedeki güncellenmiş `message` değerini görmeyebilir. +Note that on line 11, we make a call to `.wait()` on the returned transaction object. This ensures that our script waits for the transaction to get mined on the blockchain before exiting the function. If the `.wait()` call isn't included, the script may not see the updated `message` value in the contract. -### Yeni mesajı okuyun {#read-the-new-message} +### Read the new message {#read-the-new-message} -Güncellenmiş `message` değerini okumak için [önceki adımı](#read-the-init-message) tekrar edebilmelisiniz. Bir saniye durun ve yeni değeri yazdırabilmek için gerekli değişiklikleri yapıp yapamadığınıza bakın! +You should be able to repeat the [previous step](#read-the-init-message) to read the updated `message` value. Take a moment and see if you can make the changes necessary to print out that new value! -Eğer ipucuna ihtiyacınız varsa, bu noktada `interact.js` dosyanız bu şekilde görünmelidir: +If you need a hint, here's what your `interact.js` file should look like at this point: ```javascript // interact.js @@ -556,7 +559,7 @@ async function main() { main() ``` -Şimdi sadece komut dosyasını çalıştırın; eski mesajı, güncelleme durumunu ve yeni mesajı terminalinizde yazdırılmış şekilde görebilmelisiniz! +Now just run the script and you should be able to see the old message, the updating status, and the new message printed out to your terminal! `npx hardhat run scripts/interact.js --network goerli` @@ -566,29 +569,29 @@ Updating the message... The new message is: This is the new message. ``` -Komut dosyasını çalıştırırken, yeni mesaj yüklenmeden önce `Updating the message...` adımının biraz uzun sürdüğünü fark edebilirsiniz. Bunun sebebi madencilik sürecidir; işlemleri çıkarılırken takip etme konusunda meraklıysanız işlemin durumunu görüntülemek için [Alchemy bellek havuzunu](https://dashboard.alchemyapi.io/mempool) ziyaret edebilirsiniz. İşlem düştüyse, [Goerli Etherscan](https://goerli.etherscan.io)'i kontrol etmek ve işlem karmanızı aramak da faydalı olur. +While running that script, you may notice that the `Updating the message...` step takes a while to load before the new message loads. That is due to the mining process; if you are curious about tracking transactions while they are being mined, visit the [Alchemy mempool](https://dashboard.alchemyapi.io/mempool) to see the status of a transaction. If the transaction is dropped, it's also helpful to check [Goerli Etherscan](https://goerli.etherscan.io) and search for your transaction hash. -## 3. Bölüm: Akıllı Sözleşmenizi Etherscan'de yayımlayın {#part-3-publish-your-smart-contract-to-etherscan} +## Part 3: Publish your Smart Contract to Etherscan {#part-3-publish-your-smart-contract-to-etherscan} -Akıllı sözleşmenizi hayata geçirmek için tüm zor işleri hallettiniz, şimdi bunu dünyayla paylaşma zamanı! +You did all the hard work of bringing your smart contract to life; now it's time to share it with the world! -Akıllı sözleşmenizi Etherscan'de doğruladığınızda, herkes kaynak kodunuzu görebilir ve akıllı sözleşmenizle etkileşim kurabilir. Haydi başlayalım! +By verifying your smart contract on Etherscan, anyone can view your source code and interact with your smart contract. Let's get started! -### 1. Adım: Etherscan hesabınızda bir API anahtarı oluşturun {#step-1-generate-an-api-key-on-your-etherscan-account} +### Step 1: Generate an API Key on your Etherscan account {#step-1-generate-an-api-key-on-your-etherscan-account} -Etherscan API anahtarı paylaşmaya çalıştığınız akıllı sözleşmenin sahibinin siz olduğunu onaylamak için gereklidir. +An Etherscan API Key is necessary to verify that you own the smart contract you are trying to publish. -Eğer hala bir Etherscan hesabınız yoksa [hesap oluşturmak için kaydolun](https://etherscan.io/register). +If you don't have an Etherscan account already, [sign up for an account](https://etherscan.io/register). -Hesaba girdiğinizde, gezinti çubuğunda kullanıcı adınızı bulun, imleci üstüne getirin ve **Profilim** butonuna tıklayın. +Once logged in, find your username in the navigation bar, hover over it and select the **My profile** button. -Profil sayfanızda, bir yan gezinti çubuğu görmelisiniz. Yan gezinti çubuğundan **API Anahtarları**'nı seçin. Sonra, yeni bir API anahtarı oluşturmak için "Ekle" butonuna tıklayın, uygulamanıza **hello-world** adını verin ve **Yeni API Anahtarı Oluştur** butonuna tıklayın. +On your profile page, you should see a side navigation bar. From the side navigation bar, select **API Keys**. Next, press the "Add" button to create a new API key, name your app **hello-world**and press the **Create New API Key** button. -Yeni API anahtarınız API anahtar tablosunda görünüyor olmalıdır. API anahtarını panonuza kopyalayın. +Your new API key should appear in the API key table. Copy the API key to your clipboard. -Şimdi, `.env` dosyamıza Etherscan API anahtarını eklemeliyiz. +Next, we need to add the Etherscan API key to our `.env` file. -Ekledikten sonra, `.env` dosyanız şu şekilde görünmelidir: +After adding it, your `.env`file should look like this: ```javascript API_URL = "https://eth-goerli.alchemyapi.io/v2/your-api-key" @@ -598,17 +601,17 @@ CONTRACT_ADDRESS = "your-contract-address" ETHERSCAN_API_KEY = "your-etherscan-key" ``` -### Hardhat dağıtılmış akıllı sözleşmeler {#hardhat-deployed-smart-contracts} +### Hardhat-deployed smart contracts {#hardhat-deployed-smart-contracts} -#### Hardhat-etherscan'i yükleme {#install-hardhat-etherscan} +#### Install hardhat-etherscan {#install-hardhat-etherscan} -Sözleşmenizi Hardhat kullanarak Etherscan'de yayımlamak basittir. Başlamak için öncelikle `hardhat-etherscan` eklentisini yüklemeniz gerekir. `hardhat-etherscan`, akıllı sözleşmenin kaynak kodunu ve ABI'sini Etherscan'de otomatik olarak doğrulayacaktır. Bunu eklemek için `hello-world` rehberinizde şunu çalıştırın: +Publishing your contract to Etherscan using Hardhat is straightforward. You will first need to install the `hardhat-etherscan` plugin to get started. `hardhat-etherscan` will automatically verify the smart contract's source code and ABI on Etherscan. To add this, in the `hello-world` directory run: ```text npm install --save-dev @nomiclabs/hardhat-etherscan ``` -Yüklendiğinde, aşağıdaki ifadeyi `hardhat.config.js`'nizin en üstüne dahil edin ve Etherscan yapılandırma seçeneklerini ekleyin: +Once installed, include the following statement at the top of your `hardhat.config.js`, and add the Etherscan config options: ```javascript // hardhat.config.js @@ -637,19 +640,19 @@ module.exports = { } ``` -#### Akıllı Sözleşmenizi Etherscan üzerinden doğrulama {#verify-your-smart-contract-on-etherscan} +#### Verify your smart contract on Etherscan {#verify-your-smart-contract-on-etherscan} -Tüm dosyaların kaydedildiğinden ve tüm değişkenlerin `.env` doğru şekilde yapılandırıldığından emin olun. +Ensure all files are saved and all `.env` variables are correctly configured. -`verify` görevini çalıştırarak sözleşme adresinizi ve ağınızı dağıtıldığı konuma aktarın: +Run the `verify` task, passing the contract address, and the network to where it's deployed: ```text npx hardhat verify --network goerli DEPLOYED_CONTRACT_ADDRESS 'Hello World!' ``` -`DEPLOYED_CONTRACT_ADDRESS` adresinin Goerli test ağında dağıtılan akıllı sözleşmenizin adresi olduğundan emin olun. Ayrıca son bağımsız değişken olan (`'Hello World!'`), 1. Bölüm'de dağıtım aşamasında kullanılan dizi değeriyle [ aynı olmak zorundadır](#write-our-deploy-script). +Make sure that `DEPLOYED_CONTRACT_ADDRESS` is the address of your deployed smart contract on the Goerli test network. Also, the final argument (`'Hello World!'`) must be the same string value used [during the deploy step in part 1](#write-our-deploy-script). -Eğer her şey yolunda gittiyse, terminalinizde aşağıdaki mesajı göreceksiniz: +If all goes well, you will see the following message in your terminal: ```text Successfully submitted source code for contract @@ -661,48 +664,48 @@ Successfully verified contract HelloWorld on Etherscan. https://goerli.etherscan.io/address/#contracts ``` -Tebrikler! Akıllı sözleşmeniz artık Etherscan'de! +Tebrikler! Your smart contract code is on Etherscan! -### Akıllı sözleşmenize Etherscan'de göz atın! {#check-out-your-smart-contract-on-etherscan} +### Check out your smart contract on Etherscan! {#check-out-your-smart-contract-on-etherscan} -Terminalinizde sağlanan bağlantıya gittiğinizde, akıllı sözleşme kodunuzun ve ABI'nizin Etherscan'de yayımlandığını göreceksiniz! +When you navigate to the link provided in your terminal, you should be able to see your smart contract code and ABI published on Etherscan! -**Bravo, başardınız! Artık herkes akıllı sözleşmenize yazabilir ya da onu çağırabilir! Bir dahaki sefere ne geliştireceğinizi görmek için sabırsızlanıyoruz!** +**Wahooo - you did it champ! Now anyone can call or write to your smart contract! We can't wait to see what you build next!** -## 4. Bölüm - Akıllı sözleşmenizi ön yüzle entegre etme {#part-4-integrating-your-smart-contract-with-the-frontend} +## Part 4 - Integrating your smart contract with the frontend {#part-4-integrating-your-smart-contract-with-the-frontend} -Bu öğreticinin sonuna geldiğinize, şunları nasıl yapacağınızı biliyor olacaksınız: +By the end of this tutorial, you'll know how to: -- Merkeziyetsiz uygulamanıza bir MetaMask cüzdanı bağlamak -- [Alchemy Web3](https://docs.alchemy.com/alchemy/documentation/alchemy-web3) API'sini kullanarak akıllı sözleşmenizden veri okumak -- MetaMask kullanarak Ethereum işlemlerini imzalamak +- Connect a MetaMask wallet to your dapp +- Read data from your smart contract using the [Alchemy Web3](https://docs.alchemy.com/alchemy/documentation/alchemy-web3) API +- Sign Ethereum transactions using MetaMask -Bu merkeziyetsiz uygulama için ön yüz çerçevemiz olarak [React](https://reactjs.org/)'i kullanacağız, fakat genel olarak projemize Web3 işlevselliğini getirmeye odaklanacağımız için temellerini açıklamaya çok vakit ayırmayacağımızı unutmayın. +For this dapp, we'll be using [React](https://react.dev/) as our frontend framework; however, it's important to note that we won't be spending much time breaking down its fundamentals, as we'll mostly be focusing on bringing Web3 functionality to our project. -Ön şart olarak, React'i yeni başlayan seviyesinde anlıyor olmanız gerekir. Eğer böyle değilse, [Resmi React öğreticisini](https://reactjs.org/tutorial/tutorial.html) bitirmenizi tavsiye ederiz. +As a prerequisite, you should have a beginner-level understanding of React. If not, we recommend completing the official [Intro to React tutorial](https://react.dev/learn). -### Başlangıç ​​dosyalarını klonlayın {#clone-the-starter-files} +### Başlangıç dosyalarını klonlayın {#clone-the-starter-files} -İlk olarak, bu projenin başlangıç dosyalarını almak ve bu kaynağı kendi yerel makinemize klonlamak için [hello-world-part-four GitHub deposuna](https://github.com/alchemyplatform/hello-world-part-four-tutorial) gideceğiz. +First, go to the [hello-world-part-four GitHub repository](https://github.com/alchemyplatform/hello-world-part-four-tutorial) to get the starter files for this project and clone this repository to your local machine. -Klonlanmış depoyu yerel olarak açın. İki klasöre sahip olduğunu göreceksiniz: `starter-files` ve `completed`. +Open the cloned repository locally. Notice that it contains two folders: `starter-files` and `completed`. -- `starter-files`- **bu dizinde çalışacağız**, kullanıcı arayüzünü Ethereum cüzdanınıza ve [3. Bölüm](#part-3)'de Etherscan'de yayımladığımız akıllı sözleşmeye bağlayacağız. -- Bu `completed`, tamamlanmış olan öğreticiyi içerir ve sadece takıldığınızda yararlanacağınız bir kaynak olarak kullanılmalıdır. +- `starter-files`- **we will be working in this directory**, we will connect the UI to your Ethereum wallet and the smart contract we published to Etherscan in [Part 3](#part-3). +- `completed` contains the entire completed tutorial and should only be used as a reference if you get stuck. -Ardından, `starter-files` kopyanızı en sevdiğiniz kod düzenleyicide açın ve `src` klasörüne gidin. +Next, open your copy of `starter-files` to your favorite code editor, and then navigate into the `src` folder. -Yazacağımız tüm kodlar `src` klasörünün altında yer alacaktır. Projemize Web3 işlevselliğini eklemek için `HelloWorld.js` bileşenini ve `util/interact.js` JavaScript dosyalarını düzenleyeceğiz. +Yazacağımız tüm kodlar `src` klasörünün altında yer alacaktır. We'll be editing the `HelloWorld.js` component and the `util/interact.js` JavaScript files to give our project Web3 functionality. -### Başlangıç dosyalarına göz atın {#check-out-the-starter-files} +### Check out the starter files {#check-out-the-starter-files} -Kodlamaya başlamadan önce, başlangıç dosyalarında bize neler sağlandığını öğrenelim. +Before we start coding, let's explore what is provided to us in the starter files. #### React projenizi çalıştırın {#get-your-react-project-running} Tarayıcımızda React projesini çalıştırarak başlayalım. React'in güzelliği, projemizi tarayıcımızda çalıştırdıktan sonra, kaydettiğimiz tüm değişikliklerin tarayıcımızda canlı olarak güncellenmesidir. -Projeyi çalıştırmak için `starter-files` klasörünün kök dizinine gidip projenin bağımlılıklarını yüklemek için terminalinizde `npm install`'ı çalıştırın: +To get the project running, navigate to the root directory of the `starter-files` folder, and the run `npm install` in your terminal to install the dependencies of the project: ```bash cd starter-files @@ -715,15 +718,15 @@ Bunların kurulumu tamamlandıktan sonra terminalinizde `npm start` komutunu ça npm start ``` -Bunu yaptığınızda, tarayıcınızda projemizin ön ucunu göreceğiniz [http://localhost:3000/](http://localhost:3000/) adresi açılmalıdır. Bu, bir alandan \(akıllı sözleşmenizde depolanan mesajı güncellemek için bir yer\), bir "Connect Wallet" butonundan ve bir "Udate" butonundan oluşmalıdır. +Doing so should open [http://localhost:3000/](http://localhost:3000/) in your browser, where you'll see the frontend for our project. It should consist of one field \(a place to update the message stored in your smart contract\), a "Connect Wallet" button, and an "Update" button. -Butonlardan birini tıklamayı denediğinizde çalışmadığını göreceksiniz, bunun sebebi hala işlevselliklerini programlamamız gerekmesidir. +If you try clicking either button, you'll notice that they don't work—that's because we still need to program their functionality. -#### `HelloWorld.js` bileşeni {#the-helloworld-js-component} +#### The `HelloWorld.js` component {#the-helloworld-js-component} -Düzenleyicimizdeki `src` klasörüne geri dönelim ve `HelloWorld.js` dosyasını açalım. Üzerinde çalışacağımız birincil React bileşeni olduğu için bu dosyadaki her şeyi anlamamız çok önemlidir. +Let's go back into the `src` folder in our editor and open the `HelloWorld.js` file. Üzerinde çalışacağımız birincil React bileşeni olduğu için bu dosyadaki her şeyi anlamamız çok önemlidir. -Bu dosyanın en üstünde React kütüphanesini, useEffect ve useState kancalarını, `./util/interact.js`'den bazı öğeleri (bunları yakında daha detaylı anlatacağız!) ve Alchemy logosunu içeren ve projemizi çalışır hale getirmemiz için gerekli olan birkaç önemli içe aktarım ifadeleri olduğunu fark edeceksiniz. +At the top of this file, you'll notice we have several import statements that are necessary to get our project running, including the React library, useEffect and useState hooks, some items from the `./util/interact.js` (we'll describe them in more details soon!), and the Alchemy logo. ```javascript // HelloWorld.js @@ -741,7 +744,7 @@ import { import alchemylogo from "./alchemylogo.svg" ``` -Sırada, belirli olaylardan sonra güncelleyeceğimiz durum değişkenlerimiz var. +Next, we have our state variables that we will update after specific events. ```javascript // HelloWorld.js @@ -753,14 +756,14 @@ const [message, setMessage] = useState("No connection to the network.") const [newMessage, setNewMessage] = useState("") ``` -Değişkenlerin her birinin temsil ettiği şeyler: +Here's what each of the variables represents: -- `walletAddress` - kullanıcının cüzdan adresini saklayan bir dize -- `status`- kullanıcıya, merkeziyetsiz uygulama ile nasıl etkileşim kuracağı konusunda yardımcı olacak mesajlar içeren bir dizi -- `message` - akıllı sözleşmedeki güncel mesajı depolayan bir dizi -- `newMessage` - akıllı sözleşmeye yazılacak yeni mesajı depolayan bir dizi +- `walletAddress` - kullanıcının cüzdan adresini saklayan bir dizedir +- `status`- a string that stores a helpful message that guides the user on how to interact with the dapp +- `message` - a string that stores the current message in the smart contract +- `newMessage` - a string that stores the new message that will be written to the smart contract -Durum değişkenlerinden sonra, beş tane uygulanmamış fonksiyon göreceksiniz: `useEffect` ,`addSmartContractListener`, `addWalletListener`, `connectWalletPressed` ve `onUpdatePressed`. Bu fonksiyonların neler yaptığını aşağıda açıklayacağız: +After the state variables, you'll see five un-implemented functions: `useEffect` ,`addSmartContractListener`, `addWalletListener` , `connectWalletPressed`, and `onUpdatePressed`. We'll explain what they do below: ```javascript // HelloWorld.js @@ -787,11 +790,11 @@ const onUpdatePressed = async () => { } ``` -- [`useEffect`](https://reactjs.org/docs/hooks-effect.html)- bu, bileşeniniz oluşturulduktan sonra çağrılan bir React kancasıdır. İçine geçirilen boş bir `[]` dizisine sahip olduğundan \(4. satıra bakın\), yalnızca bileşenin _ilk_ oluşturmasında çağrılır. Buraya akıllı sözleşmemizde depolanan mesajı yükleyecek, akıllı sözleşmelerimizi ve cüzdan dinleyicilerimizi çağıracak ve kullanıcı arayüzümüzü, bir cüzdanın zaten bağlı olup olmadığını yansıtacak şekilde güncelleyeceğiz. -- `addSmartContractListener`- bu fonksiyon, Merhaba Dünya sözleşmemizin `UpdatedMessages` olayını takip edecek ve akıllı sözleşmemizdeki mesaj değiştiğinde kullanıcı arayüzümüzü güncelleyecek bir dinleyici oluşturur. -- `addWalletListener`- bu fonksiyon, kullanıcının bağlantıyı kesmesi ve adres değişiklikleri yapması gibi MetaMask cüzdan durumundaki değişiklikleri takip eder. -- `connectWalletPressed`- bu fonksiyon, kullanıcının MetaMask cüzdanını merkeziyetsiz uygulamamıza bağlamak için çağrılır. -- `onUpdatePressed` - bu fonksiyon, kullanıcı akıllı sözleşmede depolanan mesajı güncellemek istediğinde çağrılır. +- [`useEffect`](https://legacy.reactjs.org/docs/hooks-effect.html)- this is a React hook that is called after your component is rendered. Because it has an empty array `[]` prop passed into it \(see line 4\), it will only be called on the component's _first_ render. Here we'll load the current message stored in our smart contract, call our smart contract and wallet listeners, and update our UI to reflect whether a wallet is already connected. +- `addSmartContractListener`- this function sets up a listener that will watch for our HelloWorld contract's `UpdatedMessages` event and update our UI when the message is changed in our smart contract. +- `addWalletListener`- this function sets up a listener that detects changes in the user's MetaMask wallet state, such as when the user disconnects their wallet or switches addresses. +- `connectWalletPressed`- this function will be called to connect the user's MetaMask wallet to our dapp. +- `onUpdatePressed` - this function will be called when the user wants to update the message stored in the smart contract. Bu dosyanın sonuna doğru, bileşenimizin kullanıcı arayüzü bulunuyor. @@ -830,32 +833,33 @@ return ( - - + + + ) ``` -Bu kodu dikkatli bir şekilde tararsanız, kullanıcı arayüzümüzde çeşitli durum değişkenleri kullandığımız yeri fark edeceksiniz: +If you scan this code carefully, you'll notice where we use our various state variables in our UI: -- 6 ila 12. satırlar arasında, kullanıcının cüzdanı bağlıysa \(örn.`walletAddress.length > 0`\), "walletButton;" kimlikli butonda kullanıcının `walletAddress`'inin kırpılmış bir versiyonunu gösteririz; aksi takdirde, sadece "Connect Wallet" yazar. -- 17. satırda, akıllı sözleşmemizde depolanan ve `message` dizesinde bulunan güncel mesajımızı görüntüleriz. -- 23-26. satırlar arasında `newMessage` durum değişkenimizi metin alanındaki girdi değiştiğinde güncelleyebilmek için bir [kontrollü bileşen](https://reactjs.org/docs/forms.html#controlled-components) kullanıyoruz. +- On lines 6-12, if the user's wallet is connected \(i.e., `walletAddress.length > 0`\), we display a truncated version of the user `walletAddress` in the button with ID "walletButton;" otherwise it simply says "Connect Wallet." +- On line 17, we display the current message stored in the smart contract, which is captured in the `message` string. +- On lines 23-26, we use a [controlled component](https://legacy.reactjs.org/docs/forms.html#controlled-components) to update our `newMessage` state variable when the input in the text field changes. -Durum değişkenlerimize ek olarak `publishButton` ve `walletButton` butonları sırasıyla tıklandığında `connectWalletPressed` ve `onUpdatePressed` fonksiyonlarının çağrıldığını da göreceksiniz. +In addition to our state variables, you'll also see that `connectWalletPressed` and `onUpdatePressed` functions are called when the buttons with IDs `publishButton` and `walletButton` are clicked respectively. -Son olarak, `HelloWorld.js` bileşeninin nereye eklendiğine değinelim. +Finally, let's address where is this `HelloWorld.js` component added. -React'teki diğer tüm bileşenler için bir kapsayıcı görevi gören ana bileşen olan `App.js` dosyasına giderseniz, `HelloWorld.js` bileşenimizin 7. satıra enjekte edildiğini görürsünüz. +If you go to the `App.js` file, which is the main component in React that acts as a container for all other components, you'll see that our `HelloWorld.js` component is injected on line 7. -Sonuncu ama diğerleriyle eşit öneme sahip olarak, size sağlanan bir dosyaya daha göz atalım: `interact.js` dosyası. +Last but not least, let's check out one more file provided for you, the `interact.js` file. -#### `interact.js` dosyası {#the-interact-js-file} +#### The `interact.js` file {#the-interact-js-file} -[M-V-C](https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller) paradigmasını kurala bağlamak istediğimiz için merkeziyetsiz uygulamamızın mantığını, verilerini ve kurallarını yönetmek amacıyla fonksiyonlarımızı içeren ayrı bir dosya oluşturmak ve ardından bu fonksiyonları ön ucumuza \(our `HelloWorld.js` component\) aktarabilmek isteyeceğiz. +Because we want to prescribe to the [M-V-C](https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller) paradigm, we'll want a separate file that contains all our functions to manage the logic, data, and rules of our dapp, and then be able to export those functions to our frontend \(our `HelloWorld.js` component\). -👆🏽Bu tam olarak `interact.js` dosyamızın amacı! +👆🏽This is the exact purpose of our `interact.js` file! -`src` dizininizde `util` klasörüne gittiğinizde bütün akıllı sözleşme etkileşimlerimizi, cüzdan işlevlerini ve değişkenleri içeren `interact.js` adında bir dosya eklemiş olduğumuzu göreceksiniz. +Navigate to the `util` folder in your `src` directory, and you'll notice we've included a file called `interact.js` that will contain all of our smart contract interaction and wallet functions and variables. ```javascript // interact.js @@ -871,55 +875,55 @@ const getCurrentWalletConnected = async () => {} export const updateMessage = async (message) => {} ``` -Bu dosyanın en üstündeki `helloWorldContract` nesnesine yorum yazdığımızı fark edeceksiniz. Bu öğreticinin ilerleyen kısımlarında, nesnenin yorumkarını kaldıracak, akıllı sözleşmemimizi bu değişkenin içinde oluşturacak ve ardından `HelloWorld.js` bileşenimize aktaracağız. +You'll notice at the top of the file that we've commented out the `helloWorldContract` object. Later in this tutorial, we will uncomment this object and instantiate our smart contract in this variable, which we will then export into our `HelloWorld.js` component. -`helloWorldContract` nesnemiz aşağıdakileri yaptıktan sonra dört uygulanmamış fonksiyon: +The four unimplemented functions after our `helloWorldContract` object do the following: -- `loadCurrentMessage` - bu fonksiyon, akıllı sözleşmede depolanan güncel mesajın yüklenmesinin mantığını işler. Merhaba Dünya akıllı sözleşmesine, [Alchemy Web3 API](https://github.com/alchemyplatform/alchemy-web3)'sini kullanarak bir _okuma_ çağrısı yapacaktır. -- `connectWallet` - bu fonksiyon, kullanıcının MetaMask'ını merkeziyetsiz uygulamamıza bağlar. -- `getCurrentWalletConnected` - bu fonksiyon, sayfa yüklendiğinde merkeziyetsiz uygulamamıza zaten bir Ethereum hesabının bağlı olup olmadığını kontrol eder ve kullanıcı arayüzümüzü buna göre günceller. -- `updateMessage` - bu fonksiyon, akıllı sözleşmede depolanmış olan mesajı günceller. Merhaba Dünya akıllı sözleşmesine bir _write_ çağrısı yapar ve bu sayede kullanıcının MetaMask cüzdanının mesajı güncelleyebilmek için bir Ethereum işlemi imzalaması gerekir. +- `loadCurrentMessage` - this function handles the logic of loading the current message stored in the smart contract. It will make a _read_ call to the Hello World smart contract using the [Alchemy Web3 API](https://github.com/alchemyplatform/alchemy-web3). +- `connectWallet` - this function will connect the user's MetaMask to our dapp. +- `getCurrentWalletConnected` - this function will check if an Ethereum account is already connected to our dapp on page load and update our UI accordingly. +- `updateMessage` - this function will update the message stored in the smart contract. It will make a _write_ call to the Hello World smart contract, so the user's MetaMask wallet will have to sign an Ethereum transaction to update the message. -Ne üzerinde çalıştığımızı anladığımıza göre, akıllı sözleşmemizi nasıl okuyacağımızı öğrenelim! +Now that we understand what we're working with, let's figure out how to read from our smart contract! -### 3. Adım: Akıllı sözleşmenizden okuma {#step-3-read-from-your-smart-contract} +### Step 3: Read from your smart contract {#step-3-read-from-your-smart-contract} -Akıllı sözleşmenizi okuyabilmek için aşağıdakileri başarıyla kurmanız gerekir: +To read from your smart contract, you'll need to successfully set up: -- Ethereum zincirine bir API bağlantısı -- Akıllı sözleşmenizin yüklenmiş bir örneği -- Akıllı sözleşme fonksiyonunuzu çağıran bir fonksiyon -- Akıllı sözleşme değişikliklerinden okuduğunuz verilerin güncellemelerini takip eden bir dinleyici +- An API connection to the Ethereum chain +- A loaded instance of your smart contract +- A function to call to your smart contract function +- A listener to watch for updates when the data you're reading from the smart contract changes -Çok fazla adım varmış gibi görünebilir, fakat endişe etmeyin! Hepsini nasıl yapacağınızı adım adım göstereceğiz! :\) +This may sounds like a lot of steps, but don't worry! We'll walk you through how to do each of them step-by-step! :) -#### Ethereum zincirine bir API bağlantısı kurma {#establish-an-api-connection-to-the-ethereum-chain} +#### Establish an API connection to the Ethereum chain {#establish-an-api-connection-to-the-ethereum-chain} -Bu öğreticinin 2. Bölümü'nde [Alchemy Web3 anahtarını akıllı sözleşmemizi okuyabilmek için kullandığımızı hatırlıyor musunuz](https://docs.alchemy.com/alchemy/tutorials/hello-world-smart-contract/interacting-with-a-smart-contract#step-1-install-web3-library)? Zinciri okuyabilmek için de merkeziyetsiz uygulamanızda bir Alchemy Web3 anahtarına ihtiyacınız olacak. +So remember how in Part 2 of this tutorial, we used our [Alchemy Web3 key to read from our smart contract](https://docs.alchemy.com/alchemy/tutorials/hello-world-smart-contract/interacting-with-a-smart-contract#step-1-install-web3-library)? You'll also need an Alchemy Web3 key in your dapp to read from the chain. -Eğer sizde hala yoksa, ilk olarak kök dizininizin `starter-files` öğesinden [Alchemy Web3](https://github.com/alchemyplatform/alchemy-web3)'e gidip yüklemek için aşağıdaki kodu terminalinizde çalıştırın: +If you don't have it already, first install [Alchemy Web3](https://github.com/alchemyplatform/alchemy-web3) by navigating to the root directory of your `starter-files` and running the following in your terminal: ```text npm install @alch/alchemy-web3 ``` -[Alchemy Web3](https://github.com/alchemyplatform/alchemy-web3), [Web3.js](https://docs.web3js.org/) paketleyicisidir. Bir web3 geliştiricisi olarak hayatınızı kolaylaştıracak gelişmiş API yöntemleri ve diğer önemli avantajlar sağlar. Uygulamanızda hemen kullanmaya başlayabilmeniz için minimum yapılandırma gerektirecek şekilde tasarlanmıştır! +[Alchemy Web3](https://github.com/alchemyplatform/alchemy-web3), [Web3.js](https://docs.web3js.org/) için bir sarmalayıcıdır ve bir web3 geliştiricisi olarak hayatınızı kolaylaştırmak için gelişmiş API yöntemleri ve diğer önemli avantajları sağlar. Uygulamanızda hemen kullanmaya başlayabilmeniz için minimum yapılandırma gerektirecek şekilde tasarlanmıştır! -Ardından, API anahtarımızı aldıktan sonra depolayacağımız güvenli bir yerimiz olması için [dotenv](https://www.npmjs.com/package/dotenv) paketini proje dizinimize yükleyin. +Then, install the [dotenv](https://www.npmjs.com/package/dotenv) package in your project directory, so we have a secure place to store our API key after we fetch it. ```text npm install dotenv --save ``` -Merkeziyetsiz uygulamamız için HTTP API anahtarımız yerine **Websockets API anahtarımızı kullanıyor** olacağız; bu, bizim akıllı sözleşmemizdeki mesajların değişip değişmediğini kontrol eden bir dinleyici kurmamızı sağlayacaktır. +For our dapp, **we'll be using our Websockets API key** instead of our HTTP API key, as it will allow us to set up a listener that detects when the message stored in the smart contract changes. -API anahtarına sahip olduğunuzda, kök dizininizde bir `.env` dosyası oluşturun ve Alchemy Websockets url'nizi içine ekleyin. Sonrasında `.env` dosyanız şu şekilde görünmelidir: +Once you have your API key, create a `.env` file in your root directory and add your Alchemy Websockets url to it. Afterwards, your `.env` file should look like so: ```javascript REACT_APP_ALCHEMY_KEY = wss://eth-goerli.ws.alchemyapi.io/v2/ ``` -Artık Alchemy Web3 uç noktamızı merkeziyetsiz uygulamamıza kurmaya hazırız! `util` klasörümüzde yuvalanmış `interact.js` öğemize geri dönelim ve dosyanın başına aşağıdaki kodu ekleyelim: +Now, we're ready to set up our Alchemy Web3 endpoint in our dapp! Let's go back to our `interact.js`, which is nested inside our `util` folder and add the following code at the top of the file: ```javascript // interact.js @@ -932,23 +936,23 @@ const web3 = createAlchemyWeb3(alchemyKey) //export const helloWorldContract; ``` -Yukarıda, ilk olarak Alchemy anahtarımızı `.env` dosyasından içe aktardık ve sonra da Alchemy Web3 uç noktamızı kurmak için `alchemyKey`'imizi `createAlchemyWeb3`'e gönderdik. +Above, we first imported the Alchemy key from our `.env` file and then passed our `alchemyKey` to `createAlchemyWeb3` to establish our Alchemy Web3 endpoint. -Bu uç nokta hazır olduğuna göre akıllı sözleşmemizi yükleme zamanı! +With this endpoint ready, it's time to load our smart contract! -#### Merhaba Dünya akıllı sözleşmenizi yükleme {#loading-your-hello-world-smart-contract} +#### Loading your Hello World smart contract {#loading-your-hello-world-smart-contract} -Merhaba Dünya akıllı sözleşmenizi yükleyebilmek için sözleşmenin adresine ve ABI'sine ihtiyacınız olacak. [Bu öğreticinin 3. Bölümü'nü](/developers/tutorials/hello-world-smart-contract-fullstack/#part-3-publish-your-smart-contract-to-etherscan-part-3-publish-your-smart-contract-to-etherscan) bitirdiyseniz bunların ikisini de Etherscan'de bulabilirsiniz. +To load your Hello World smart contract, you'll need its contract address and ABI, both of which can be found on Etherscan if you completed [Part 3 of this tutorial.](/developers/tutorials/hello-world-smart-contract-fullstack/#part-3-publish-your-smart-contract-to-etherscan-part-3-publish-your-smart-contract-to-etherscan) -#### Sözleşme ABI'nizi Etherscan'den alma {#how-to-get-your-contract-abi-from-etherscan} +#### How to get your contract ABI from Etherscan {#how-to-get-your-contract-abi-from-etherscan} -Bu öğreticinin 3. Bölüm'ünü atladıysanız, [0x6f3f635A9762B47954229Ea479b4541eAF402A6A](https://goerli.etherscan.io/address/0x6f3f635a9762b47954229ea479b4541eaf402a6a#code) adresli Merhaba Dünya sözleşmesini kullanabilirsiniz. Sözleşmenin ABI'sini [burada](https://goerli.etherscan.io/address/0x6f3f635a9762b47954229ea479b4541eaf402a6a#code) bulabilirsiniz. +If you skipped Part 3 of this tutorial, you can use the HelloWorld contract with address [0x6f3f635A9762B47954229Ea479b4541eAF402A6A](https://goerli.etherscan.io/address/0x6f3f635a9762b47954229ea479b4541eaf402a6a#code). Its ABI can be found [here](https://goerli.etherscan.io/address/0x6f3f635a9762b47954229ea479b4541eaf402a6a#code). -Bir sözleşmenin hangi fonksiyonu çağıracağını belirlemek ve fonksiyonun beklediğiniz biçimde veri döndürmesini sağlamak için bir sözleşme ABI'si gereklidir. Sözleşme ABI'mizi kopyaladıktan sonra onu `src` dizinindeki `contract-abi.json` adlı JSON dosyasına kaydedelim. +A contract ABI is necessary for specifying which function a contract will invoke as well ensuring that the function will return data in the format you're expecting. Once we've copied our contract ABI, let's save it as a JSON file called `contract-abi.json` in your `src` directory. -Contract-abi.json'unuz src klasöründe depolanmış olmalıdır. +Your contract-abi.json should be stored in your src folder. -Sözleşme adresimiz, ABI ve Alchemy Web3 uç noktamız hazır olduğuna göre, sözleşmemizin bir örneğini yüklemek için bu [sözleşme yöntemini](https://docs.web3js.org/api/web3-eth-contract/class/Contract) kullanabiliriz. Sözleşme ABI'nizi `interact.js` dosyasının içine aktarın ve sözleşme adresinizi ekleyin. +Armed with our contract address, ABI, and Alchemy Web3 endpoint, we can use the [contract method](https://docs.web3js.org/api/web3-eth-contract/class/Contract) to load an instance of our smart contract. Import your contract ABI into the `interact.js` file and add your contract address. ```javascript // interact.js @@ -957,7 +961,7 @@ const contractABI = require("../contract-abi.json") const contractAddress = "0x6f3f635A9762B47954229Ea479b4541eAF402A6A" ``` -Sonunda `helloWorldContract` değişkenimizin yorumunu kaldırabilir ve AlchemyWeb3 uç noktasını kullanarak akıllı sözleşmemizi yükleyebiliriz: +We can now finally uncomment our `helloWorldContract` variable, and load the smart contract using our AlchemyWeb3 endpoint: ```javascript // interact.js @@ -967,7 +971,7 @@ export const helloWorldContract = new web3.eth.Contract( ) ``` -Hatırlatma olarak, `interact.js` kodunuzun ilk 12 satırı aşağıdaki gibi görünmelidir: +To recap, the first 12 lines of your `interact.js` should now look like this: ```javascript // interact.js @@ -986,13 +990,13 @@ export const helloWorldContract = new web3.eth.Contract( ) ``` -Sözleşmemizi yüklediğimize göre, artık `loadCurrentMessage` fonksiyonunu uygulayabiliriz! +Now that we have our contract loaded, we can implement our `loadCurrentMessage` function! -#### `interact.js` dosyanıza `loadCurrentMessage`'ı uygulama {#implementing-loadCurrentMessage-in-your-interact-js-file} +#### Implementing `loadCurrentMessage` in your `interact.js` file {#implementing-loadCurrentMessage-in-your-interact-js-file} -Bu fonksiyon aşırı basittir. Sözleşmemizi okumak için basit bir asenkronize web3 çağrısı yapacağız. Fonksiyonumuz akıllı sözleşmede depolanmış olan mesajı döndürecek: +This function is super simple. We're going make a simple async web3 call to read from our contract. Our function will return the message stored in the smart contract: -`interact.js` dosyanızdaki `loadCurrentMessage`'ı aşağıdaki şekilde güncelleyin: +Update the `loadCurrentMessage` in your `interact.js` file to the following: ```javascript // interact.js @@ -1003,7 +1007,7 @@ export const loadCurrentMessage = async () => { } ``` -Kullanıcı arayüzümüzde akıllı sözleşmeyi görüntülemek istediğimiz için `HelloWorld.js` bileşenimizdeki `useEffect` fonksiyonunu aşağıdaki şekilde güncelleyelim: +Since we want to display this smart contract in our UI, let's update the `useEffect` function in our `HelloWorld.js` component to the following: ```javascript // HelloWorld.js @@ -1015,19 +1019,19 @@ useEffect(async () => { }, []) ``` -Bileşenin ilk işlemesinde sadece `loadCurrentMessage`'ın çağrılmasını istediğimize dikkat edin. Yakında akıllı sözleşmedeki mesaj değiştiğinde kullanıcı arayüzünü otomatik olarak güncelleyen `addSmartContractListener`'ı uygulayacağız. +Note, we only want our `loadCurrentMessage` to be called once during the component's first render. We'll soon implement `addSmartContractListener` to automatically update the UI after the message in the smart contract changes. -Dinleyicimize geçmeden önce, şu anda elimizde ne olduğuna bir bakalım! `HelloWorld.js` ve `interact.js` dosyalarınızı kaydedip [http://localhost:3000/](http://localhost:3000/) öğesine gidin +Before we dive into our listener, let's check out what we have so far! Save your `HelloWorld.js` and `interact.js` files, and then go to [http://localhost:3000/](http://localhost:3000/) -Güncel mesajda artık "Ağ bağlantısı yok" yazmadığını göreceksiniz. Onun yerine, akıllı sözleşmede depolanmış olan mesajı yansıtır. İnanılmaz! +You'll notice that the current message no longer says "No connection to the network." Instead it reflects the message stored in the smart contract. Sick! -#### Kullanıcı arayüzünüz artık akıllı sözleşmede depolanan mesajı yansıtıyor olmalı {#your-UI-should-now-reflect-the-message-stored-in-the-smart-contract} +#### Your UI should now reflect the message stored in the smart contract {#your-UI-should-now-reflect-the-message-stored-in-the-smart-contract} -Dinleyiciye gelirsek... +Now speaking of that listener... -#### `addSmartContractListener`'ı uygulayın {#implement-addsmartcontractlistener} +#### Implement `addSmartContractListener` {#implement-addsmartcontractlistener} -[Bu öğretici serisinin 1. Bölümü'nde](https://docs.alchemy.com/alchemy/tutorials/hello-world-smart-contract#step-10-write-our-contract) yazdığımız `HelloWorld.sol` dosyasına dönerseniz, burada akıllı sözleşmemizin `update` fonksiyonunu çağırdıktan sonra meydana gelen `UpdatedMessages` adlı bir olay olduğunu hatırlayacaksınız \(bkz. satır 9 ve 27\): +If you think back to the `HelloWorld.sol` file we wrote in [Part 1 of this tutorial series](https://docs.alchemy.com/alchemy/tutorials/hello-world-smart-contract#step-10-write-our-contract), you'll recall that there is a smart contract event called `UpdatedMessages` that is emitted after our smart contract's `update` function is invoked \(see lines 9 and 27\): ```javascript // HelloWorld.sol @@ -1065,11 +1069,11 @@ contract HelloWorld { } ``` -Akıllı sözleşme olayları sözleşmenizin, ön yüz uygulamanızın blokzinciri üzerinde bir olay olduğunda \(yani bir _olay_ gerçekleştiğinde\) iletişim kurmasının bir yoludur. Bu yol, belli başlı olaylar için bir şeyleri dinlemek ve bu olaylar olduğunda aksiyon almak olabilir. +Smart contract events are a way for your contract to communicate that something happened \(i.e., there was an _event_\) on the blockchain to your front-end application, which can be 'listening' for specific events and take action when they happen. -`addSmartContractListener` fonksiyonu spesifik olarak Merhaba Dünya akıllı sözleşmemizin `UpdatedMessages` olayını dinleyecek ve kullanıcı arayüzümüzü yeni mesajı gösterecek şekilde güncelleyecektir. +The `addSmartContractListener` function is going to specifically listen for our Hello World smart contract's `UpdatedMessages` event, and update our UI to display the new message. -`addSmartContractListener`'ı aşağıdaki gibi değiştirin: +Modify `addSmartContractListener` to the following: ```javascript // HelloWorld.js @@ -1087,12 +1091,12 @@ function addSmartContractListener() { } ``` -Dinleyici bir olay algıladığında olacakları masaya yatıralım: +Let's break down what happens when the listener detects an event: -- Olay yayımlandığında bir hata oluşursa, `status` durum değişkenimiz bu hatayı kullanıcı arayüzüne yansıtır. -- Aksi takdirde döndürülen `data` nesnesini kullanacağız. `data.returnValues` dizinin ilk öğesinin önceki mesajı ve ikinci öğesinin güncellenmiş mesajı depoladığı sıfırdan başlatılan bir dizidir. Bütün olarak bakıldığında, başarılı bir olayda güncellenmiş mesajımıza `message` dizemizi kuracağız, `newMessage` dizesini sileceğiz ve `status` durum değişkenimizi akıllı sözleşmemizde yeni bir mesajın yayımlandığını yansıtacak şekilde güncelleyeceğiz. +- If an error occurs when the event is emitted, it will be reflected in the UI via our `status` state variable. +- Otherwise, we will use the `data` object returned. The `data.returnValues` is an array indexed at zero where the first element in the array stores the previous message and second element stores the updated one. Altogether, on a successful event we'll set our `message` string to the updated message, clear the `newMessage` string, and update our `status` state variable to reflect that a new message has been published on our smart contract. -Son olarak, `useEffect` fonksiyonumuzdaki dinleyicimizi çağırarak `HelloWorld.js` bileşenimizin ilk işlemesini başlatalım. Toparlarsak, `useEffect` fonksiyonunuz şu şekilde görünmelidir: +Finally, let's call our listener in our `useEffect` function so it is initialized on the `HelloWorld.js` component's first render. Altogether, your `useEffect` function should look like this: ```javascript // HelloWorld.js @@ -1104,45 +1108,45 @@ useEffect(async () => { }, []) ``` -Artık akıllı sözleşmemizi okuyabildiğimize göre, ona nasıl bir şeyler yazabileceğimizi öğrenmek de süper olur! Bununla birlikte, merkeziyetsiz uygulamamıza yazabilmek için önce ona bağlı bir Ethereum cüzdanı olmalıdır. +Now that we're able to read from our smart contract, it would be great to figure out how to write to it too! However, to write to our dapp, we must first have an Ethereum wallet connected to it. -Yapacağımız bir sonraki şey ise Ethereum cüzdanımızı \(MetaMask\) kurmak ve merkeziyetsiz uygulamamıza bağlamaktır! +So, next we'll tackle setting up our Ethereum wallet \(MetaMask\) and then connecting it to our dapp! -### 4. Adım: Ethereum cüzdanınızı kurun {#step-4-set-up-your-ethereum-wallet} +### Step 4: Set up your Ethereum wallet {#step-4-set-up-your-ethereum-wallet} -Kullanıcılar, Ethereum zincirine herhangi bir şey yazabilmek için sanal cüzdanlarının özel anahtarlarını kullanarak işlemler imzalamalıdır. Bu öğreticide, Ethereum hesap adresinizi yönetmeniz için tarayıcıda bulunan bir sanal cüzdan olan ve son kullanıcı için işlem imzalamayı çok basit bir hale getiren [MetaMask](https://metamask.io/)'ı kullanacağız. +To write anything to the Ethereum chain, users must sign transactions using their virtual wallet's private keys. For this tutorial, we’ll use [MetaMask](https://metamask.io/), a virtual wallet in the browser used to manage your Ethereum account address, as it makes this transaction signing super easy for the end-user. Ethereum'daki işlemlerin nasıl çalıştığı hakkında daha fazla bilgi edinmek istiyorsanız, Ethereum Vakfı'nın [bu sayfasına](/developers/docs/transactions/) göz atın. -#### MetaMask'i indirin {#download-metamask} +#### MetaMask'ı indirin {#download-metamask} -[Buradan](https://metamask.io/download) ücretsiz olarak bir MetaMask hesabı indirebilir ve oluşturabilirsiniz. Bir hesap oluştururken ya da zaten bir hesabınız varsa, sağ üstten "Goerli Test Ağına" geçin \(bu sayede gerçek parayla denemeler yapmayız\). +MetaMask'ı [buradan](https://metamask.io/download) ücretsiz indirip bir hesap oluşturabilirsiniz. When you are creating an account, or if you already have an account, make sure to switch over to the “Goerli Test Network” in the upper right \(so that we’re not dealing with real money\). -#### Bir Musluktan ether ekleyin {#add-ether-from-a-faucet} +#### Add ether from a Faucet {#add-ether-from-a-faucet} -Ethereum blokzincirinde bir işlem imzalamak için biraz sahte Eth'ye ihtiyacımız olacak. Eth almak için [FaucETH](https://fauceth.komputing.org)'e gidip Goerli hesap adresinizi girebilir, "Fon iste" öğesine tıklayıp açılır menüden "Ethereum Test Ağı Goerli" seçimi yapabilir ve son olarak tekrar "Fon iste" düğmesine tıklayabilirsiniz. Kısa bir süre sonra MetaMask hesabınızda Eth'i görmelisiniz! +To sign a transaction on the Ethereum blockchain, we’ll need some fake Eth. To get Eth you can go to the [FaucETH](https://fauceth.komputing.org) and enter your Goerli account address, click “Request funds”, then select “Ethereum Testnet Goerli” in the dropdown and finally click “Request funds” button again. Kısa bir süre sonra MetaMask hesabınızda Eth'i görmelisiniz! -#### Bakiyenizi kontrol etme {#check-your-balance} +#### Check your Balance {#check-your-balance} -Bakiyemizin yerinde olduğundan emin olmak için [Alchemy'nin düzenleyici aracını](https://composer.alchemyapi.io/?composer_state=%7B%22network%22%3A0%2C%22methodName%22%3A%22eth_getBalance%22%2C%22paramValues%22%3A%5B%22%22%2C%22latest%22%5D%7D) kullanarak bir [eth_getBalance](https://docs.alchemyapi.io/alchemy/documentation/alchemy-api-reference/json-rpc#eth_getbalance) isteği oluşturalım. Bu, cüzdanımızdaki Eth miktarını döndürür. MetaMask hesap adresinizi girdikten ve "Send Request"e tıkladıktan sonra aşağıdaki gibi bir yanıt görmelisiniz: +Bakiyemizin orada olup olmadığını iki kez kontrol etmek için [Alchemy’nin composer aracını](https://composer.alchemyapi.io/?composer_state=%7B%22network%22%3A0%2C%22methodName%22%3A%22eth_getBalance%22%2C%22paramValues%22%3A%5B%22%22%2C%22latest%22%5D%7D) kullanarak bir [eth_getBalance](https://docs.alchemyapi.io/alchemy/documentation/alchemy-api-reference/json-rpc#eth_getbalance) isteği yapalım. Bu, cüzdanımızdaki Eth miktarını döndürür. MetaMask hesap adresinizi girdikten ve "Send Request"e tıkladıktan sonra aşağıdaki gibi bir yanıt görmelisiniz: ```text {"jsonrpc": "2.0", "id": 0, "result": "0xde0b6b3a7640000"} ``` -**NOT:** Bu sonuç eth değil wei hâlindedir. Wei, ether'ın en küçük birimi olarak kullanılır. Wei'den eth'e dönüşüm: 1 eth = 10¹⁸ wei. Yani 0xde0b6b3a7640000'ı ondalık sayıya dönüştürürsek 1\*10¹⁸ elde ederiz, bu da 1 eth'e eşittir. +**NOT:** Bu sonuç eth cinsinden değil wei cinsindendir. Wei, ether'ın en küçük birimi olarak kullanılır. Wei'den eth'e dönüşüm: 1 eth = 10¹⁸ wei. Yani 0xde0b6b3a7640000'ı ondalık sayıya dönüştürürsek 1\*10¹⁸ elde ederiz, bu da 1 eth'e eşittir. -Vay be! Tüm sahte paramız yerli yerinde! 🤑 +Vay be! Tüm sahte paramız yerinde! 🤑 -### 5. Adım: MetaMask'ı kullanıcı arayüzünüze bağlayın {#step-5-connect-metamask-to-your-UI} +### Step 5: Connect MetaMask to your UI {#step-5-connect-metamask-to-your-UI} Artık MetaMask cüzdanımız kurulduğuna göre, merkeziyetsiz uygulamamızı ona bağlayalım! -#### `connectWallet` fonksiyonu {#the-connectWallet-function} +#### The `connectWallet` function {#the-connectWallet-function} -`interact.js` dosyamızda `connectWallet` fonksiyonunu uygulayalım, bu fonksiyonu sonrasında `HelloWorld.js` bileşenimizde çağırabiliriz. +In our `interact.js`file, let's implement the `connectWallet` function, which we can then call in our `HelloWorld.js` component. -`connectWallet`'u aşağıdaki gibi değiştirelim: +Let's modify `connectWallet` to the following: ```javascript // interact.js @@ -1183,26 +1187,26 @@ export const connectWallet = async () => { } ``` -Bu dev kod bloğu tam olarak ne yapar? +So what does this giant block of code do exactly? -İlk olarak, tarayıcınızda `window.ethereum`'un etkinleştirilmiş olup olmadığını kontrol eder. +Well, first, it checks if it `window.ethereum` is enabled in your browser. -`window.ethereum`, MetaMask ve diğer cüzdan sağlayıcıları tarafından enjekte edilen ve web sitelerinin kullanıcıların Ethereum hesaplarını talep etmesine izin veren küresel bir API'dir. Onaylandıysa, kullanıcının bağlı olduğu blokzincirlerden veri okuyabilir ve kullanıcıya mesajlar ve işlemler imzalamasını önerebilir. Daha fazla bilgi için [MetaMask belgelerine](https://docs.metamask.io/guide/ethereum-provider.html#table-of-contents) göz atın! +`window.ethereum`, MetaMask ve diğer cüzdan sağlayıcıları tarafından eklenen ve web sitelerinin kullanıcıların Ethereum hesaplarını talep etmesine olanak tanıyan küresel bir API'dir. If approved, it can read data from the blockchains the user is connected to, and suggest that the user sign messages and transactions . Daha fazla bilgi için [MetaMask belgelerine](https://docs.metamask.io/guide/ethereum-provider.html#table-of-contents) göz atın! -`window.ethereum` _yoksa_, MetaMask kurulu değil demektir. Bu, bir JSON nesnesinin döndürülmesiyle sonuçlanır; burada döndürülen `address` boş bir dizedir ve `status` JSX nesnesi, kullanıcının MetaMask'i yüklemesi gerektiğini bildirir. +Eğer `window.ethereum` mevcut _değilse_, bu MetaMask'in kurulu olmadığı anlamına gelir. Bu, döndürülen `address`'in boş bir dize olduğu ve `status` JSX nesnesinin kullanıcının MetaMask'i yüklemesi gerektiğini ilettiği bir JSON nesnesinin döndürülmesiyle sonuçlanır. -Şimdi, eğer `window.ethereum` _varsa_, işte o zaman işler ilginçleşiyor. +Eğer `window.ethereum` mevcut _ise_, o zaman işler ilginçleşir. -Bir deneme/yakalama döngüsü ile [`window.ethereum.request({ method: "eth_requestAccounts" });`](https://docs.metamask.io/guide/rpc-api.html#eth-requestaccounts) çağrısı yaparak MetaMask'a bağlanmaya çalışacağız. Bu fonksiyonun çağrılması, tarayıcıda MetaMask'i açar ve bu sayede kullanıcıdan cüzdanını merkeziyetsiz uygulamanıza bağlaması istenir. +Bir try/catch döngüsü kullanarak, [`window.ethereum.request({ method: \"eth_requestAccounts\" });`](https://docs.metamask.io/guide/rpc-api.html#eth-requestaccounts) çağrısı yaparak MetaMask'e bağlanmaya çalışacağız. Bu fonksiyonun çağrılması, tarayıcıda MetaMask'i açar ve bu sayede kullanıcıdan cüzdanını merkeziyetsiz uygulamanıza bağlaması istenir. -- Kullanıcı bağlanmayı seçerse, `method: "eth_requestAccounts"`, kullanıcının merkeziyetsiz uygulamaya bağlı tüm hesap adreslerini içeren bir dizi döndürür. Toplamda, `connectWallet` fonksiyonumuz bu dizideki _ilk_ `address`'i içeren bir JSON nesnesi \(9. satıra bakın\) ve kullanıcıdan akıllı sözleşmeye bir mesaj yazmasını isteyen bir `status` mesajı döndürür. -- Kullanıcı bağlantıyı reddederse, JSON nesnesi, döndürülen `address` için boş bir dize ve kullanıcının bağlantıyı reddettiğini yansıtan bir `status` mesajı içerir. +- If the user chooses to connect, `method: "eth_requestAccounts"` will return an array that contains all of the user's account addresses that connected to the dapp. Sonuç olarak, `connectWallet` fonksiyonumuz bu dizideki _ilk_ `address`'i (bkz. satır 9) ve kullanıcıyı akıllı sözleşmeye bir mesaj yazmaya yönlendiren bir `status` mesajını içeren bir JSON nesnesi döndürecektir. +- Kullanıcı bağlantıyı reddederse JSON nesnesi, döndürülen `address` için boş bir dize ve kullanıcının bağlantıyı reddettiğini yansıtan bir `status` mesajı içerir. -Artık bu `connectWallet`'ı yazdığımıza göre, sonraki adım onu `HelloWorld.js` bileşenimize çağırmaktır. +Now that we've written this `connectWallet` function, the next step is to call it to our `HelloWorld.js`component. -#### `HelloWorld.js` Kullanıcı Arayüzü Bileşenimize `connectWallet` fonksiyonunu ekleyelim {#add-the-connectWallet-function-to-your-HelloWorld-js-ui-component} +#### Add the `connectWallet` function to your `HelloWorld.js` UI Component {#add-the-connectWallet-function-to-your-HelloWorld-js-ui-component} -`HelloWorld.js` içinde bulunan `connectWalletPressed`'a gidin ve aşağıdaki gibi güncelleyin: +Navigate to the `connectWalletPressed` function in `HelloWorld.js`, and update it to the following: ```javascript // HelloWorld.js @@ -1214,25 +1218,25 @@ const connectWalletPressed = async () => { } ``` -İşlevselliğimizin çoğunun `interact.js` dosyasındaki `HelloWorld.js`'den nasıl da soyutlandığını görebiliyor musunuz? Bu, M-V-C paradigmasına uymamız içindir! +Notice how most of our functionality is abstracted away from our `HelloWorld.js` component from the `interact.js` file? Bu, M-V-C paradigmasına uymamız içindir! -`connectWalletPressed`'de, içe aktarılan `connectWallet` fonksiyonumuza bir bekleme çağrısı yaparız ve yanıtını kullanarak durum kancaları aracılığıyla `status` ve `walletAddress` değişkenlerimizi güncelleriz. +`connectWalletPressed` içinde, içe aktarılan `connectWallet` fonksiyonumuza bir `await` çağrısı yaparız ve yanıtını kullanarak `status` ve `walletAddress` değişkenlerimizi durum kancaları aracılığıyla güncelleriz. -Şimdi, iki dosyayı da \(`HelloWorld.js` and `interact.js`\) kaydedelim ve şu ana kadarki kullanıcı arayüzümüzü test edelim. +Now, let's save both files \(`HelloWorld.js` and `interact.js`\) and test out our UI so far. -[http://localhost:3000/](http://localhost:3000/) sayfasında tarayıcınızı açın ve sayfanın sağ üst tarafında bulunan "Connect Wallet" butonuna tıklayın. +Open your browser on the [http://localhost:3000/](http://localhost:3000/) page, and press the "Connect Wallet" button on the top right of the page. MetaMask yüklüyse, cüzdanınızı merkeziyetsiz uygulamanıza bağlamanız istenecektir. Bağlanmak için daveti kabul edin. -Cüzdan butonunuzun, adresinizin artık bağlı olduğunu gösterdiğini görmeniz beklenir! Eveeet 🔥 +You should see that the wallet button now reflects that your address is connected! Yasssss 🔥 -Ardından, sayfayı yenilemeyi deneyin... Garip. Cüzdan düğmemiz zaten bağlı olmasına rağmen MetaMask'i bağlamamızı istiyor... +Şimdi, sayfayı yenilemeyi deneyin... bu garip. Cüzdan düğmemiz zaten bağlı olmasına rağmen MetaMask'i bağlamamızı istiyor... -Yine de korkmanıza gerek yok! Bunu, `getCurrentWalletConnected`'ı uygulayarak kolaylıkla adresleyebiliriz (anladınız mı)?; bu da merkeziyetsiz uygulamamıza bir adresin bağlı olup olmadığını kontrol edecek ve buna göre kullanıcı arayüzümüzü güncelleyecektir! +However, have no fear! We easily can address that (get it?) by implementing `getCurrentWalletConnected`, which will check if an address is already connected to our dapp and update our UI accordingly! -#### `getCurrentWalletConnected` fonksiyonu {#the-getcurrentwalletconnected-function} +#### The `getCurrentWalletConnected` function {#the-getcurrentwalletconnected-function} -`interact.js` dosyasındaki `getCurrentWalletConnected` fonksiyonunuzu aşağıdaki gibi güncelleyin: +Update your `getCurrentWalletConnected` function in the `interact.js` file to the following: ```javascript // interact.js @@ -1279,11 +1283,11 @@ export const getCurrentWalletConnected = async () => { } ``` -Bu kod, önceki adımda yazdığımız `connectWallet` fonksiyonuna _çok_ benzer. +This code is _very_ similar to the `connectWallet` function we just wrote in the previous step. -Temel fark, kullanıcının cüzdanını bağlaması için MetaMask'i açan `eth_requestAccounts` yöntemini çağırmak yerine, burada yalnızca şu anda merkeziyetsiz uygulamamıza bağlı olan MetaMask adreslerini içeren bir dizi döndüren `eth_accounts` yöntemini çağırmamızdır. +Temel fark, kullanıcının cüzdanını bağlaması için MetaMask'i açan `eth_requestAccounts` yöntemini çağırmak yerine, burada yalnızca merkeziyetsiz uygulamamıza bağlı olan MetaMask adreslerini içeren bir dizi döndüren `eth_accounts` yöntemini çağırıyoruz. -Bu fonksiyonu çalışırken görmek için onu `HelloWorld.js` bileşenimizin `useEffect` fonksiyonuyla çağıralım: +To see this function in action, let's call it in our `useEffect` function of our `HelloWorld.js` component: ```javascript // HelloWorld.js @@ -1299,17 +1303,17 @@ useEffect(async () => { }, []) ``` -Dikkat edin, `walletAddress` ve `status` durum değişkenlerimizi güncellemek için `getCurrentWalletConnected` çağrımızın yanıtını kullanıyoruz. +Dikkat edin, `getCurrentWalletConnected` çağrımızın yanıtını `walletAddress` ve `status` durum değişkenlerimizi güncellemek için kullanıyoruz. -Artık bu kodu eklediğinize göre, sayfayı yenilemeyi deneyin. +Now that you've added this code, let's try refreshing our browser window. -Güzeeeeeel! Düğme, bağlı olduğunuzu söylemeli ve yeniledikten sonra bile bağlı cüzdanınızın adresinin bir önizlemesini göstermelidir! +Niceeeee! Düğme, bağlı olduğunuzu söylemeli ve yeniledikten sonra bile bağlı cüzdanınızın adresinin bir önizlemesini göstermelidir! -#### `addWalletListener`'ı uygulayın {#implement-addwalletlistener} +#### Implement `addWalletListener` {#implement-addwalletlistener} Merkeziyetsiz uygulama cüzdanı kurulumumuzun son adımı, örneğin kullanıcı bağlantısını keserek veya hesap değiştirerek cüzdanımızın durumunu değiştirdiğinde kullanıcı arayüzümüzün güncellenmesi için cüzdan dinleyicisini uygulamaktır. -`HelloWorld.js` dosyanızda `addWalletListener` fonksiyonunu aşağıdaki gibi değiştirin: +In your `HelloWorld.js` file, modify your `addWalletListener` function as the following: ```javascript // HelloWorld.js @@ -1338,13 +1342,13 @@ function addWalletListener() { } ``` -Bu noktada ne olup bittiğini anlamak için bizim yardımımıza ihtiyacınız olmadığına bahse girebilirim, fakat hiçbir ayrıntıyı atlamamak adına hızlıca anlatalım: +I bet you don't even need our help to understand what's going on here at this point, but for thoroughness purposes, let's quickly break it down: -- İlk olarak, fonksiyonumuz `window.ethereum`'un etkin olup olmadığını kontrol eder \(yani MetaMask kurulu olup olmadığını\). - - Değilse, `status` durum değişkenimizi, kullanıcının MetaMask'i yüklemesini isteyen bir JSX dizesine ayarlamamız yeterlidir. - - Etkinleştirilirse, 3. satırda `window.ethereum.on("accountsChanged")` dinleyicisini kurarız ve bu dinleyici MetaMask cüzdanındaki, kullanıcının merkeziyetsiz uygulamaya ek bir hesap bağladığı, hesapları değiştirdiği veya bir hesabın bağlantısını kestiği anları da içeren durum değişikliklerini dinler. Bağlı en az bir hesap varsa, `walletAddress` durum değişkeni, dinleyici tarafından döndürülen `accounts` dizisindeki ilk hesap olarak güncellenir. Aksi takdirde, `walletAddress` boş bir dize olarak ayarlanır. +- İlk olarak fonksiyonumuz `window.ethereum`'un etkin olup olmadığını kontrol eder (yani MetaMask'in kurulu olup olmadığını). + - Etkin değilse, `status` durum değişkenimizi, kullanıcıyı MetaMask'i yüklemeye yönlendiren bir JSX dizesine ayarlarız. + - Etkinleştirilmişse, kullanıcının merkeziyetsiz uygulamaya ek bir hesap bağlaması, hesapları değiştirmesi veya bir hesabın bağlantısını kesmesi gibi MetaMask cüzdanındaki durum değişikliklerini dinleyen `window.ethereum.on(\"accountsChanged\")` dinleyicisini 3. satırda kurarız. Bağlı en az bir hesap varsa, `walletAddress` durum değişkeni, dinleyici tarafından döndürülen `accounts` dizisindeki ilk hesap olarak güncellenir. Aksi takdirde, `walletAddress` boş bir dize olarak ayarlanır. -Son ama bir o kadar da önemli olarak, bunu `useEffect` fonksiyonumuzda çağırmalıyız: +Last but not least, we must call it in our `useEffect` function: ```javascript // HelloWorld.js @@ -1362,23 +1366,23 @@ useEffect(async () => { }, []) ``` -İşte bu kadar! Cüzdan fonksiyonlarımızın tümünün programlanmasını başarıyla tamamladık! Şimdi sıra son görevimizde: akıllı sözleşmemizde depolanan mesajı güncellemek! +İşte bu kadar! We've successfully completed programming all of our wallet functionality! Now onto our last task: updating the message stored in our smart contract! -### 6. Adım: `updateMessage` fonksiyonunu uygulama {#step-6-implement-the-updateMessage-function} +### Step 6: Implement the `updateMessage` function {#step-6-implement-the-updateMessage-function} -Evet dostum, evimizdeki rahatlığa ulaştık! `interact.js` dosyanızın `updateMessage` kısmında şunları yapacağız: +Alrighty fam, we've arrived at the home stretch! In the `updateMessage` of your `interact.js` file, we're going to do the following: -1. Yayımlayamak istediğimiz mesajın geçerli olduğundan emin olmak -2. MetaMask kullanarak işlemimizi imzalamak -3. `HelloWorld.js` ön yüz bileşenimizden bu fonksiyonu çağırmak +1. Make sure the message we wish to publish in our smart contact is valid +2. Sign our transaction using MetaMask +3. Call this function from our `HelloWorld.js` frontend component -Bu, fazla zaman almayacak; hadi bu merkeziyetsiz uygulamayı bitirelim! +This won't take very long; let's finish this dapp! -#### Girdi hatası işleme {#input-error-handling} +#### Giriş hata yönetimi {#input-error-handling} -Doğal olarak, fonksiyonun başında bir çeşit girdi hatasını işlemek mantıklı olur. +Naturally, it makes sense to have some sort of input error handling at the start of the function. -Yüklü bir MetaMask uzantısı veya bağlı bir cüzdan yoksa \(yani aktarılan `address` boş bir dizeyse\) ya da `message` boş bir dizeyse fonksiyonumuzun erken dönüş yapmasını isteriz. Hadi `updateMessage`'a aşağıdaki hata işlemeleri ekleyelim: +We'll want our function to return early if there is no MetaMask extension installed, there is no wallet connected \(i.e., the `address` passed in is an empty string\), or the `message` is an empty string. Let's add the following error handling to `updateMessage`: ```javascript // interact.js @@ -1399,11 +1403,11 @@ export const updateMessage = async (address, message) => { } ``` -Artık düzgün bir girdi hatası işleme sistemimiz olduğuna göre, işlemi MetaMask üzerinden imzalama zamanı geldi demektir! +Now that it have proper input error handling, it's time to sign the transaction via MetaMask! -#### İşlemimizi imzalama {#signing-our-transaction} +#### Signing our transaction {#signing-our-transaction} -Geleneksel web3 Ethereum işlemleri ile haşır neşirseniz, az sonra yazacağımız kod tanıdık gelecektir. Girdi hatası işleme kodunuzun altında `updateMessage`'a şunları ekleyin: +If you're already comfortable with traditional web3 Ethereum transactions, the code we write next will be very familiar. Below your input error handling code, add the following to `updateMessage`: ```javascript // interact.js @@ -1441,20 +1445,20 @@ try { } ``` -Olan biteni açıklayalım. Önce, işlem parametrelerimizi oluşturuyoruz; burada: +Let's breakdown what's happening. First, we set up our transactions parameters, where: -- `to` alıcı adresini belirtir \(akıllı sözleşmemiz\) -- `from`, fonksiyonumuza aktardığımız `address` değişkeni olan işlemin imzalayıcısını belirtir -- `data` ise Merhaba Dünya akıllı sözleşmesinin `update` yöntemlerine yönelik çağrıları içerir ve `message` dizesi değişkenlerini girdi olarak alır +- `to` alıcı adresini belirtir (akıllı sözleşmemiz) +- `from` specifies the signer of the transaction, the `address` variable we passed into our function +- `data` contains the call to our Hello World smart contract's `update` method, receiving our `message` string variable as input -Ardından, MetaMask'ten işlemi imzalamasını istediğimiz bir `window.ethereum.request` bekleme çağrısı yaparız. 11. ve 12. satırlarda eth yöntemimizi, `eth_sendTransaction`, belirttiğimizi ve `transactionParameters`'ımıza aktardığımızı gözdn kaçırmayın. +Then, we make an await call, `window.ethereum.request`, where we ask MetaMask to sign the transaction. Notice, on lines 11 and 12, we're specifying our eth method, `eth_sendTransaction`and passing in our `transactionParameters`. Bu noktada, MetaMask tarayıcıda açılır ve kullanıcıdan işlemi imzalamasını veya reddetmesini ister. -- İşlem başarılı olursa fonksiyon, `status` JSX dizesinin kullanıcıya Etherscan'den işlem hakkında daha fazla bilgi edinmesini anımsattığı bir JSON nesnesi döndürür. -- İşlem başarısız olursa fonksiyon, `status` dizesinin hata mesajını aktardığı bir JSON öğesi döndürür. +- If the transaction is successful, the function will return a JSON object where the `status` JSX string prompts the user to check out Etherscan for more information about their transaction. +- If the transaction fails, the function will return a JSON object where the `status` string relays the error message. -Toparlarsak, `updateMessage` fonksiyonumuz şu şekilde görünmelidir: +Altogether, our `updateMessage` function should look like this: ```javascript // interact.js @@ -1508,11 +1512,11 @@ export const updateMessage = async (address, message) => { } ``` -Son ama bir o kadar da önemli olarak, `updateMessage` fonksiyonumuzu `HelloWorld.js` bileşenimize bağlamalıyız. +Last but not least, we need to connect our `updateMessage` function to our `HelloWorld.js` component. -#### `updateMessage`'ı `HelloWorld.js` ön yüzüne bağlama {#connect-updatemessage-to-the-helloworld-js-frontend} +#### Connect `updateMessage` to the `HelloWorld.js` frontend {#connect-updatemessage-to-the-helloworld-js-frontend} -`onUpdatePressed` fonksiyonumuz içeri aktarılan `updateMessage` fonksiyonuna bir bekleme çağrısı yapmalı ve `status` durum değişkenini işlemimizin başarılı ya da başarısız olduğunu yansıtacak şekilde güncellemelidir: +Our `onUpdatePressed` function should make an await call to the imported `updateMessage` function and modify the `status` state variable to reflect whether our transaction succeeded or failed: ```javascript // HelloWorld.js @@ -1523,18 +1527,18 @@ const onUpdatePressed = async () => { } ``` -Bu çok açık ve basit. Bilin bakalım ne oldu? MERKEZİYETSİZ UYGULAMANIZ TAMAMLANDI!!! +It's super clean and simple. And guess what... YOUR DAPP IS COMPLETE!!! -Devam edin ve **Güncelle** butonunu test edin! +Go ahead and test out the **Update** button! -### Kişiye özel merkeziyetsiz uygulamanızı üretin {#make-your-own-custom-dapp} +### Make your own custom dapp {#make-your-own-custom-dapp} -Tebrikler, öğreticinin sonuna geldiniz! Hatırlatma olarak, burada şunları nasıl yapacağınızı öğrendiniz: +Wooooo, you made it to the end of the tutorial! To recap, you learned how to: -- Merkeziyetsiz uygulama projenize bir MetaMask cüzdanı bağlama -- [Alchemy Web3](https://docs.alchemy.com/alchemy/documentation/alchemy-web3) API'sini kullanarak akıllı sözleşmenizden veri okumak -- MetaMask kullanarak Ethereum işlemlerini imzalamak +- Connect a MetaMask wallet to your dapp project +- Read data from your smart contract using the [Alchemy Web3](https://docs.alchemy.com/alchemy/documentation/alchemy-web3) API +- Sign Ethereum transactions using MetaMask -Artık bu öğreticide size verilmiş olan bu becerileri kullanarak kendi kişisel merkeziyetsiz uygulama projenizi yapabilirsiniz! Her zamanki gibi, herhangi bir sorunuz varsa yardım istemek için bize [Alchemy Discord](https://discord.gg/gWuC7zB) aracılığıyla ulaşmaktan çekinmeyin. 🧙‍♂️ +Now you're fully equipped to apply the skills from this tutorial to build out your own custom dapp project! As always, if you have any questions, don't hesitate to reach out to us for help in the [Alchemy Discord](https://discord.gg/gWuC7zB). 🧙‍♂️ -Bu öğreticiyi bitirdiğinize, yaşadığınız deneyimi ya da yorumlarınızı Twitter'dan [@alchemyplatform](https://twitter.com/AlchemyPlatform) bizi etiketleyerek aktarabilirsiniz! +Once you complete this tutorial, let us know how your experience was or if you have any feedback by tagging us on Twitter [@alchemyplatform](https://twitter.com/AlchemyPlatform)! diff --git a/public/content/translations/tr/developers/tutorials/hello-world-smart-contract/index.md b/public/content/translations/tr/developers/tutorials/hello-world-smart-contract/index.md index 4b6d3489ffc..bdf4c216d97 100644 --- a/public/content/translations/tr/developers/tutorials/hello-world-smart-contract/index.md +++ b/public/content/translations/tr/developers/tutorials/hello-world-smart-contract/index.md @@ -1,73 +1,69 @@ --- -title: Yeni Başlayanlar için Merhaba Dünya Akıllı Sözleşmesi -description: Ethereum üzerinde basit bir akıllı sözleşme yazma ve dağıtmaya yönelik giriş seviyesinde öğretici. +title: "Yeni Başlayanlar için Merhaba Dünya Akıllı Sözleşmesi" +description: "Ethereum'da basit bir akıllı sözleşme yazma ve dağıtma üzerine başlangıç seviyesi bir öğretici." author: "elanh" tags: - - "solidity" - - "hardhat" - - "alchemy" - - "akıllı sözleşmeler" - - "dağıtma" + [ + "solidity", + "hardhat", + "alchemy", + "akıllı kontratlar", + "dağıtma" + ] skill: beginner lang: tr published: 2021-03-31 --- -Blok zinciri geliştirme konusunda yeniyseniz ve nereden başlayacağınızı bilmiyorsanız veya akıllı sözleşmelerin nasıl dağıtıldığını ve bunlarla nasıl etkileşime geçileceğini anlamak istiyorsanız bu rehber tam size göre. Size Goerli test ağında [MetaMask](https://metamask.io/), [Solidity](https://docs.soliditylang.org/en/v0.8.0/), [Hardhat](https://hardhat.org/) ve [Alchemy](https://alchemyapi.io/eth)'yi kullanarak basit bir akıllı sözleşme oluşturmayı ve dağıtmayı göstereceğiz (bunların ne anlama geldiğini henüz bilmiyorsanız endişelenmeyin, anlatacağız). +Blok zinciri geliştirme konusunda yeniyseniz ve nereden başlayacağınızı bilmiyorsanız veya sadece akıllı sözleşmelerin nasıl dağıtılacağını ve onlarla nasıl etkileşim kurulacağını anlamak istiyorsanız, bu kılavuz tam size göre. Sanal bir [MetaMask](https://metamask.io/) cüzdanı, [Solidity](https://docs.soliditylang.org/en/v0.8.0/), [Hardhat](https://hardhat.org/) ve [Alchemy](https://www.alchemy.com/eth) kullanarak Sepolia test ağında basit bir akıllı sözleşme oluşturma ve dağıtma sürecini adım adım anlatacağız (bu terimlerin ne anlama geldiğini henüz bilmiyorsanız endişelenmeyin, açıklayacağız). -> **Uyarı** -> -> 🚧 Kullanımdan Kaldırma Bildirimi -> -> Bu rehberin tamamında, sözleşme oluşturmak ve dağıtmak için Goerli test ağı kullanılacaktır. Yine de, Ethereum Foundation'ın [Goerli'nin yakında kullanımdan kaldırılacağını duyurduğunu](https://www.alchemy.com/blog/goerli-faucet-deprecation) lütfen unutmayın. -> -> Bu öğretici için [Sepolia'yı](https://www.alchemy.com/overviews/sepolia-testnet) ve [Sepolia musluğunu](https://sepoliafaucet.com/) kullanmanızı öneriyoruz. +Bu öğreticinin [2. bölümünde](https://docs.alchemy.com/docs/interacting-with-a-smart-contract), akıllı sözleşmemiz dağıtıldıktan sonra onunla nasıl etkileşim kurabileceğimizi ele alacağız ve [3. bölümde](https://www.alchemy.com/docs/submitting-your-smart-contract-to-etherscan) ise Etherscan'de nasıl yayınlayacağımızı anlatacağız. -Bu öğreticinin [2. bölümünde](https://docs.alchemy.com/docs/interacting-with-a-smart-contract) sözleşmemiz burada dağıtıldığında akıllı sözleşmemizle nasıl etkileşim kurabileceğimizi ele alacak ve [3. bölümde](https://docs.alchemy.com/docs/submitting-your-smart-contract-to-etherscan) sözleşmenizi Etherscan'de nasıl yayımlayacağınızı anlatacağız. - -Herhangi bir noktada sorularınız varsa, [Alchemy Discord](https://discord.gg/gWuC7zB)'da bize ulaşmaktan çekinmeyin! +Herhangi bir noktada sorularınız olursa [Alchemy Discord](https://discord.gg/gWuC7zB) üzerinden bize ulaşmaktan çekinmeyin! ## Adım 1: Ethereum ağına bağlanın {#step-1} -Ethereum zincirine istek göndermenin birçok yolu vardır. Basit olması için, kendi düğümlerimizi çalıştırmak zorunda kalmadan Ethereum zinciriyle iletişim kurmamıza izin veren bir blok zinciri geliştirici platformu ve API olan Alchemy'de ücretsiz bir hesap kullanacağız. Platform ayrıca, akıllı sözleşme dağıtımımızda arka planda neler olup bittiğini anlamak için bu öğreticide yararlanacağımız izleme ve analitik için geliştirici araçlarına sahiptir. Henüz bir Alchemy hesabınız yoksa, [buradan ücretsiz kaydolabilirsiniz](https://dashboard.alchemyapi.io/signup). +Ethereum zincirine istek göndermenin birçok yolu vardır. Basit olması için, kendi düğümlerimizi çalıştırmak zorunda kalmadan Ethereum zinciriyle iletişim kurmamıza olanak tanıyan bir blok zinciri geliştirici platformu ve API'si olan Alchemy'de ücretsiz bir hesap kullanacağız. Platform ayrıca, bu öğreticide akıllı sözleşme dağıtımımızın perde arkasında neler olup bittiğini anlamak için yararlanacağımız izleme ve analiz için geliştirici araçlarına da sahiptir. Henüz bir Alchemy hesabınız yoksa, [buradan ücretsiz olarak kaydolabilirsiniz](https://dashboard.alchemy.com/signup). ## Adım 2: Uygulamanızı (ve API anahtarınızı) oluşturun {#step-2} -Bir Alchemy hesabı oluşturduktan sonra, bir uygulama yaratarak bir API anahtarı oluşturabilirsiniz. Bu, Goerli test ağına taleplerde bulunmamızı sağlayacaktır. Eğer test ağlarına aşina değilseniz, [bu sayfaya](/developers/docs/networks/) bakınız. +Bir Alchemy hesabı oluşturduktan sonra, bir uygulama yaratarak bir API anahtarı oluşturabilirsiniz. Bu, Sepolia test ağına istekte bulunmamıza izin verecektir. Test ağlarına aşina değilseniz, [bu sayfaya](/developers/docs/networks/) göz atın. -1. İmlecinizi gezinme çubuğundaki "Apps"in (Uygulamalar) üzerine gelip "Create App"e (Uygulama Oluştur) tıklayarak Alchemy Gösterge Panelinizdeki "Create App" sayfasına gidin +1. Alchemy Panonuzda, gezinme çubuğundan "Bir uygulama seçin" ögesini seçip "Yeni uygulama oluştur" düğmesine tıklayarak "Yeni uygulama oluştur" sayfasına gidin. ![Merhaba dünya uygulama oluşturma](./hello-world-create-app.png) -2. Uygulamanıza "Merhaba Dünya" adını verin, kısa bir açıklama yazın, Ortam için "Hazırlama"yı (uygulama muhasebeniz için kullanılır) seçin ve ağınız olarak da "Goerli"yi seçin. +2. Uygulamanıza “Merhaba Dünya” adını verin, kısa bir açıklama sunun ve örneğin "Altyapı ve Araçlar" gibi bir kullanım durumu seçin. Ardından, "Ethereum" için arama yapın ve ağı seçin. + +![uygulama oluşturma görünümü merhaba dünya](./create-app-view-hello-world.png) -![merhaba dünya görüntüleme uygulamasını oluşturma](./create-app-view-hello-world.png) +3. Devam etmek için "İleri"ye, ardından “Uygulama oluştur”a tıklayın, hepsi bu kadar! Uygulamanız, kopyalanmaya hazır bir API Anahtarı ile birlikte gezinme çubuğundaki açılır menüde görünmelidir. -3. "Create app"e (Uygulama oluştur) tıklamanız yeterlidir! Uygulamanız aşağıdaki tabloda görünmelidir. +## Adım 3: Bir Ethereum hesabı (adres) oluşturun {#step-3} -## Adım 3: Bir Ethereum hesabı oluşturun (adres) {#step-3} +İşlem göndermek ve almak için bir Ethereum hesabına ihtiyacımız var. Bu öğretici için, Ethereum hesap adresinizi yönetmek için kullanılan tarayıcıda sanal bir cüzdan olan MetaMask'ı kullanacağız. [İşlemler](/developers/docs/transactions/) hakkında daha fazla bilgi. -İşlem göndermek ve almak için bir Ethereum hesabına ihtiyacımız var. Bu eğitim için, Ethereum hesap adresinizi yönetmek için kullanılan tarayıcı üstü bir sanal cüzdan olan MetaMask'i kullanacağız. [İşlemler](/developers/docs/transactions/) üzerine dahası. +[Buradan](https://metamask.io/download) MetaMask'ı indirebilir ve ücretsiz bir Ethereum hesabı oluşturabilirsiniz. Bir hesap oluştururken veya zaten bir hesabınız varsa, (gerçek parayla işlem yapmamak için) ağ açılır menüsünü kullanarak "Sepolia" test ağına geçtiğinizden emin olun. -[Buradan](https://metamask.io/download) ücretsiz olarak indirebilir ve bir Metamask hesabı oluşturabilirsiniz. Bir hesap oluştururken ya da zaten bir hesabınız varsa, sağ üstten "Goerli Test Ağına" geçin (bu sayede gerçek parayla denemeler yapmayız). +Sepolia'yı listede görmüyorsanız, menüye, ardından Gelişmiş'e gidin ve "Test ağlarını göster" seçeneğini açmak için aşağı kaydırın. Ağ seçim menüsünde, test ağları listesini bulmak için "Özel" sekmesini seçin ve "Sepolia"yı seçin. -![metamask ropsten örneği](./metamask-ropsten-example.png) +![metamask sepolia örneği](./metamask-sepolia-example.png) -## Adım 4: Bir Musluktan ether ekleyin {#step-4} +## Adım 4: Bir musluktan ether ekleyin {#step-4} -Akıllı sözleşmemizi test ağına dağıtmak için biraz sahte Eth'ye ihtiyacımız olacak. Eth alabilmek için [Goerli musluğuna](https://goerlifaucet.com/) gidip Alchemy hesabınıza giriş yapın ve cüzdan adresinizi girin, sonra da "Bana Eth gönder"e tıklayın. Ağ trafiği nedeniyle sahte Eth'nizi almanız biraz zaman alabilir. (Bunu yazarken denediğimizde, 30 dakika civarı sürdü) Eth'yi kısa süre içinde MetaMask hesabınızda görmelisiniz! +Akıllı sözleşmemizi test ağına dağıtmak için sahte Eth'ye ihtiyacımız olacak. Sepolia ETH almak için, çeşitli muslukların bir listesini görüntülemek üzere [Sepolia ağ ayrıntıları](/developers/docs/networks/#sepolia) sayfasına gidebilirsiniz. Biri çalışmazsa, başka birini deneyin çünkü bazen kaynakları tükenebilir. Ağ trafiği nedeniyle sahte ETH'nizi almanız biraz zaman alabilir. Kısa bir süre sonra MetaMask hesabınızda ETH'yi görmelisiniz! ## Adım 5: Bakiyenizi kontrol edin {#step-5} -Bakiyemizin yerinde olduğundan emin olmak için [Alchemy düzenleyici arayıcını](https://composer.alchemyapi.io?composer_state=%7B%22network%22%3A0%2C%22methodName%22%3A%22eth_getBalance%22%2C%22paramValues%22%3A%5B%22%22%2C%22latest%22%5D%7D) kullanarak bir [eth_getBalance](https://docs.alchemyapi.io/alchemy/documentation/alchemy-api-reference/json-rpc#eth_getbalance) talebi oluşturalım. Bu, cüzdanımızdaki ETH miktarını döndürür. MetaMask hesap adresinizi girdikten ve "Send Request"e tıkladıktan sonra aşağıdaki gibi bir yanıt görmelisiniz: +Bakiyemizin orada olup olmadığını iki kez kontrol etmek için, [Alchemy'nin oluşturucu aracını](https://sandbox.alchemy.com/?network=ETH_SEPOLIA&method=eth_getBalance&body.id=1&body.jsonrpc=2.0&body.method=eth_getBalance&body.params%5B0%5D=&body.params%5B1%5D=latest) kullanarak bir [eth_getBalance](/developers/docs/apis/json-rpc/#eth_getbalance) isteği yapalım. Bu, cüzdanımızdaki ETH miktarını döndürür. MetaMask hesap adresinizi girdikten ve "Send Request"e tıkladıktan sonra aşağıdaki gibi bir yanıt görmelisiniz: ```json { "jsonrpc": "2.0", "id": 0, "result": "0x2B5E3AF16B1880000" } ``` -> **NOT:** Bu sonuç ETH değil, wei cinsindendir. Wei, ether'ın en küçük birimi olarak kullanılır. Wei'den ETH'ye dönüştürme: 1 eth = 1018 wei şeklindedir. Yani 0x2B5E3AF16B1880000'ı ondalık sayıya dönüştürürsek 5\*10¹⁸ elde ederiz ve bu da 5 ETH'ye eşittir. +> **NOT:** Bu sonuç ETH değil, wei cinsindendir. Wei, ether'ın en küçük birimi olarak kullanılır. wei'den ETH'ye dönüşüm: 1 eth = 1018 wei'dir. Yani 0x2B5E3AF16B1880000 ondalık sayıya dönüştürürsek, 5 ETH'ye eşit olan 5\*10¹⁸ değerini elde ederiz. > -> Vay be! Tüm sahte paramız yerli yerinde . +> Vay be! Sahte paramızın tamamı burada . ## Adım 6: Projemizi başlatın {#step-6} @@ -78,18 +74,18 @@ mkdir hello-world cd hello-world ``` -Artık proje klasörümüzün içinde olduğumuza göre, projeyi başlatmak için `npm init` kullanacağız. Hâlihazırda npm kurulu değilse, [bu talimatları izleyin](https://docs.alchemyapi.io/alchemy/guides/alchemy-for-macs#1-install-nodejs-and-npm) (Node.js'ye de ihtiyacımız olacak, onu da indirin!). +Artık proje klasörümüzün içinde olduğumuza göre projeyi başlatmak için `npm init` komutunu kullanacağız. Eğer npm zaten kurulu değilse, [bu talimatları](https://docs.alchemyapi.io/alchemy/guides/alchemy-for-macs#1-install-nodejs-and-npm) izleyin (Node.js'e de ihtiyacımız olacak, bu yüzden onu da indirin!). ``` npm init ``` -Kurulum sorularına nasıl cevap verdiğiniz çok önemli değil; referans olması için nasıl yaptığımız aşağıda açıklanmıştır: +Kurulum sorularını nasıl yanıtladığınız gerçekten önemli değil, referans olması için bizim nasıl yaptığımız aşağıda verilmiştir: ``` package name: (hello-world) version: (1.0.0) -description: hello world smart contract +description: merhaba dünya akıllı sözleşmesi entry point: (index.js) test command: git repository: @@ -101,23 +97,23 @@ About to write to /Users/.../.../.../hello-world/package.json: { "name": "hello-world", "version": "1.0.0", - "description": "hello world smart contract", + "description": "merhaba dünya akıllı sözleşmesi", "main": "index.js", "scripts": { - "test": "echo \\"Error: no test specified\\" && exit 1" + "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", "license": "ISC" } ``` -package.json'ı onayladıktan sonra hazırız! +package.json dosyasını onaylayın ve artık hazırız! -## Adım 7: [Hardhat](https://hardhat.org/getting-started/#overview)'i indirin {#step-7} +## Adım 7: [Hardhat](https://hardhat.org/getting-started/#overview) İndirin {#step-7} Hardhat, Ethereum yazılımınızı derlemek, dağıtmak, test etmek ve hatalarını ayıklamak için bir geliştirme ortamıdır. Bu geliştiricilere canlı zincirde dağıtmadan önce akıllı sözleşmelerini ve merkeziyetsiz uygulamalarını geliştirirken yardımcı olur. -`hello-world` projemizin içinde şunu yürütün: +`hello-world` projemizin içinde şunu çalıştırın: ``` npm install --save-dev hardhat @@ -145,15 +141,15 @@ Daha sonra bir karşılama mesajı ve ne yapmak istediğinizi seçme seçeneği 888 888 888 888 888 Y88b 888 888 888 888 888 Y88b. 888 888 "Y888888 888 "Y88888 888 888 "Y888888 "Y888 -👷 Welcome to Hardhat v2.0.11 👷‍? +👷 Hardhat v2.0.11'e Hoş Geldiniz 👷‍? -Ne yapmak istersin? … -Create a sample project -❯ Create an empty hardhat.config.js -Quit +Ne yapmak istersiniz? … +Örnek bir proje oluştur +❯ Boş bir hardhat.config.js oluştur +Çıkış ``` -Bu, bizim için bir `hardhat.config.js` dosyası oluşturacak ve burada projemiz için tüm ayarları belirteceğiz (adım 13'te). +Bu, bizim için projemizin tüm kurulumunu belirleyeceğimiz bir `hardhat.config.js` dosyası oluşturacaktır (13. adımda). ## Adım 9: Proje klasörleri ekleyin {#step-9} @@ -164,55 +160,55 @@ mkdir contracts mkdir scripts ``` -- `contracts/` merhaba dünya akıllı sözleşme kod dosyamızı tutacağımız yerdir -- `scripts/`, sözleşmemizi dağıtmak ve etkileşim kurmak için komut dosyalarını tutacağımız yerdir +- `contracts/`, merhaba dünya akıllı sözleşme kodu dosyamızı tutacağımız yerdir +- `scripts/`, sözleşmemizi dağıtmak ve onunla etkileşim kurmak için komut dosyalarını tutacağımız yerdir ## Adım 10: Sözleşmemizi yazın {#step-10} -Ne zaman kod yazmaya başlayacağınızı merak ediyor olabilirsiniz. Evet, Adım 10'a kadar geldik. +Ne zaman kod yazmaya başlayacağımızı merak ediyor olabilirsiniz?? İşte geldik, 10. adıma. -Favori düzenleyicinizde hello-world projesini açın. (biz [VSCode](https://code.visualstudio.com/)'u tercih ediyoruz). Akıllı sözleşmeler, HelloWorld.sol akıllı sözleşmemizi yazmak için kullanacağımız Solidity adlı bir dilde yazılır.‌ +hello-world projesini favori düzenleyicinizde açın (biz [VSCode](https://code.visualstudio.com/)'u seviyoruz). Akıllı sözleşmeler, HelloWorld.sol akıllı sözleşmemizi yazmak için kullanacağımız Solidity adlı bir dilde yazılır.‌ -1. "Sözleşmeler" klasörüne gidin ve HelloWorld.sol adlı yeni bir dosya oluşturun -2. Aşağıda, bu öğretici için kullanacağımız Ethereum Vakfı'ndan örnek bir Hello World akıllı sözleşmesi bulunmaktadır. Aşağıdaki içeriği kopyalayıp HelloWorld.sol dosyanıza yapıştırın ve bu sözleşmenin ne yaptığını anlamak için yorumları okuduğunuzdan emin olun: +1. “contracts” klasörüne gidin ve HelloWorld.sol adında yeni bir dosya oluşturun. +2. Aşağıda, bu öğretici için kullanacağımız Ethereum Vakfı'ndan örnek bir Merhaba Dünya akıllı sözleşmesi bulunmaktadır. Aşağıdaki içeriği kopyalayıp HelloWorld.sol dosyanıza yapıştırın ve bu sözleşmenin ne yaptığını anlamak için yorumları okuduğunuzdan emin olun: ```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ümleme kullanarak Solidity sürümünü belirtir. +// Daha fazla bilgi edinin: https://solidity.readthedocs.io/en/v0.5.10/layout-of-source-files.html#pragma pragma solidity ^0.7.0; -// 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 blok zincirinde belirli bir adreste bulunur. Daha fazla bilgi edinin: 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 `message` adında bir 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, kurucu yalnızca sözleşme oluşturulurken yürütülen özel bir fonksiyondur. + // Kurucular, sözleşmenin verilerini başlatmak için kullanılır. Daha fazla bilgi edinin: https://solidity.readthedocs.io/en/v0.5.10/contracts.html#constructors constructor(string memory initMessage) { - // Accepts a string argument `initMessage` and sets the value into the contract's `message` storage variable). + // `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 bir genel fonksiyon. function update(string memory newMessage) public { message = newMessage; } } ``` -Bu, oluşturulduktan sonra bir mesaj depolayan ve `update` fonksiyonu çağrılarak güncellenebilen süper basit bir akıllı sözleşmedir. +Bu, oluşturma sırasında bir mesaj depolayan ve `update` fonksiyonu çağrılarak güncellenebilen çok basit bir akıllı sözleşmedir. -## Adım 11: MetaMask ve Alchemy'i projenize bağlayın {#step-11} +## Adım 11: MetaMask ve Alchemy'yi projenize bağlayın {#step-11} -Bir MetaMask cüzdanı ile Alchemy hesabı oluşturduk ve akıllı sözleşmemizi yazdık, şimdi üçünü birleştirme zamanı. +Bir MetaMask cüzdanı ve Alchemy hesabı oluşturduk ve akıllı sözleşmemizi yazdık, şimdi bu üçünü birbirine bağlama zamanı. Sanal cüzdanınızdan gönderilen her işlem, benzersiz özel anahtarınızı kullanan bir imza gerektirir. Programımıza bu izni sağlamak için özel anahtarımızı (ve Alchemy API anahtarımızı) bir ortam dosyasında güvenle saklayabiliriz. -> İşlem gönderme hakkında daha fazla bilgi edinmek için web3 kullanarak işlem göndermeyle ilgili [bu öğreticiye](/developers/tutorials/sending-transactions-using-web3-and-alchemy/) bakın. +> İşlem gönderme hakkında daha fazla bilgi edinmek için, web3 kullanarak işlem göndermeyle ilgili [bu öğreticiye](/developers/tutorials/sending-transactions-using-web3-and-alchemy/) göz atın. İlk önce dotenv paketini proje dizininize kurun: @@ -220,37 +216,37 @@ Sanal cüzdanınızdan gönderilen her işlem, benzersiz özel anahtarınızı k npm install dotenv --save ``` -Ardından projemizin kök dizininde bir `.env` dosyası oluşturun ve buna Metamask özel anahtarınızı ve HTTP Alchemy API URL'nizi ekleyin. +Ardından, projemizin kök dizininde bir `.env` dosyası oluşturun ve MetaMask özel anahtarınızı ve HTTP Alchemy API URL'nizi buna ekleyin. -- Özel anahtarınızı almak için [şu talimatları](https://metamask.zendesk.com/hc/en-us/articles/360015289632-How-to-Export-an-Account-Private-Key) takip edin -- HTTP Alchemy API URL'sini almak için aşağıya göz atın +- Özel anahtarınızı dışa aktarmak için [bu talimatları](https://support.metamask.io/configure/accounts/how-to-export-an-accounts-private-key/) izleyin. +- HTTP Alchemy API URL'sini almak için aşağıya bakın -![alchemy api anahtarı alma](./get-alchemy-api-key.gif) +![alchemy api anahtarını al](./get-alchemy-api-key.png) -Alchemy API URL'sini kopyalayın +Alchemy API URL'sini Kopyalayın `.env` dosyanız şu şekilde görünmelidir: ``` -API_URL = "https://eth-goerli.alchemyapi.io/v2/your-api-key" +API_URL = "https://eth-sepolia.g.alchemy.com/v2/your-api-key" PRIVATE_KEY = "your-metamask-private-key" ``` -Bunları kodumuza gerçekten bağlamak için, adım 13'te `hardhat.config.js` dosyamızda bu değişkenlere başvuracağız. +Bunları gerçekten kodumuza bağlamak için 13. adımda `hardhat.config.js` dosyamızdaki bu değişkenlere başvuracağız. -.env doyasını taahhüt etmeyin! Lütfen .env dosyanızı asla kimseyle paylaşmadığınızdan veya ifşa etmediğinizden emin olun, çünkü bunu yaparken sırlarınızı tehlikeye atıyorsunuz. Sürüm kontrolü kullanıyorsanız, .env dosyanızı bir gitignore dosyasına ekleyin. +.env dosyasını commit'lemeyin! Lütfen .env dosyanızı asla kimseyle paylaşmadığınızdan veya ifşa etmediğinizden emin olun, çünkü bunu yaparken sırlarınızı tehlikeye atıyorsunuz. Sürüm kontrolü kullanıyorsanız, .env dosyanızı bir gitignore dosyasına ekleyin. -## Adım 12: Ethers.js'yi kurun {#step-12-install-ethersjs} +## Adım 12: Ethers.js'i Yükleyin {#step-12-install-ethersjs} -Ethers.js, [standart JSON-RPC yöntemlerini](/developers/docs/apis/json-rpc/) daha kullanıcı dostu yöntemlerle birleştirerek Ethereum'la etkileşimde bulunmayı ve Ethereum'a istek göndermeyi kolaylaştıran bir kütüphanedir. +Ethers.js, [standart JSON-RPC yöntemlerini](/developers/docs/apis/json-rpc/) daha kullanıcı dostu yöntemlerle sarmalayarak Ethereum ile etkileşim kurmayı ve istek göndermeyi kolaylaştıran bir kütüphanedir. -Hardhat, ek araçlar ve genişletilmiş işlevsellik için [Eklentiler](https://hardhat.org/plugins/)'i entegre etmeyi çok kolaylaştırır. Sözleşme dağıtımı için [Ethers eklentisinden](https://hardhat.org/docs/plugins/official-plugins#hardhat-ethers) yararlanacağız ([Ethers.js](https://github.com/ethers-io/ethers.js/)'nin bazı aşırı temiz sözleşme dağıtım yöntemleri vardır). +Hardhat, ek araçlar ve genişletilmiş işlevsellik için [Eklentileri](https://hardhat.org/plugins/) entegre etmeyi çok kolaylaştırır. Sözleşme dağıtımı için [Ethers eklentisinden](https://hardhat.org/docs/plugins/official-plugins#hardhat-ethers) yararlanacağız ([Ethers.js](https://github.com/ethers-io/ethers.js/) çok temiz sözleşme dağıtım yöntemlerine sahiptir). Proje klasörünüzde şunu yazın: @@ -258,13 +254,13 @@ Proje klasörünüzde şunu yazın: npm install --save-dev @nomiclabs/hardhat-ethers "ethers@^5.0.0" ``` -Bir sonraki adımda `hardhat.config.js`'mizde de ether'lara ihtiyacımız olacak. +Bir sonraki adımda `hardhat.config.js` dosyamızda da ethers gerektireceğiz. -## Adım 13: hardhat.config.js'yi güncelleyin {#step-13-update-hardhatconfigjs} +## Adım 13: hardhat.config.js dosyasını güncelleyin {#step-13-update-hardhatconfigjs} -Şimdiye kadar birkaç bağımlılık ve eklenti ekledik, şimdi projemizin bunların hepsini tanıması için `hardhat.config.js`'yi güncellememiz gerekiyor. +Şimdiye kadar birkaç bağımlılık ve eklenti ekledik, şimdi projemizin hepsini tanıması için `hardhat.config.js` dosyasını güncellememiz gerekiyor. -`hardhat.config.js` dosyanızı şöyle görünecek şekilde güncelleyin: +`hardhat.config.js` dosyanızı aşağıdaki gibi görünecek şekilde güncelleyin: ``` require('dotenv').config(); @@ -277,10 +273,10 @@ const { API_URL, PRIVATE_KEY } = process.env; */ module.exports = { solidity: "0.7.3", - defaultNetwork: "goerli", + defaultNetwork: "sepolia", networks: { hardhat: {}, - goerli: { + sepolia: { url: API_URL, accounts: [`0x${PRIVATE_KEY}`] } @@ -290,7 +286,7 @@ module.exports = { ## Adım 14: Sözleşmemizi derleyin {#step-14-compile-our-contracts} -Şimdiye kadar yaptığımız her şeyin çalıştığından emin olmak için sözleşmemizi derleyelim. `compile` görevi, yerleşik hardhat görevlerden biridir. +Şimdiye kadar yaptığımız her şeyin çalıştığından emin olmak için sözleşmemizi derleyelim. `compile` görevi, yerleşik hardhat görevlerinden biridir. Komut satırından şunu yürütün: @@ -298,21 +294,21 @@ Komut satırından şunu yürütün: npx hardhat compile ``` -`SPDX license identifier not provided in source file` uyarısı (Kaynak dosyada verilmeyen SPDX lisans tanımlayıcısı) alabilirsiniz, ancak bunun için endişelenmenize gerek yok, geri kalan her şey düzgün olacaktır! Düzgün değilse, istediğiniz zaman [Alchemy discord](https://discord.gg/u72VCg3)'da mesaj gönderebilirsiniz. +`SPDX license identifier not provided in source file` hakkında bir uyarı alabilirsiniz, ancak bunun için endişelenmenize gerek yok — umarız diğer her şey yolundadır! Sorun yaşarsanız [Alchemy Discord](https://discord.gg/u72VCg3) üzerinden her zaman mesaj atabilirsiniz. -## Adım 15: Dağıtım komut dosyamızı yazın {#step-15-write-our-deploy-scripts} +## Adım 15: Dağıtım betiğimizi yazın {#step-15-write-our-deploy-scripts} Artık sözleşmemiz yazıldığına ve yapılandırma dosyamız kullanıma hazır olduğuna göre, sözleşme dağıtım komut dosyanızı yazmanın zamanı geldi. -`scripts/` klasörüne gidin ve aşağıdaki içeriği ekleyerek `deploy.js` adlı yeni bir dosya oluşturun: +`scripts/` klasörüne gidin ve `deploy.js` adında yeni bir dosya oluşturup içine aşağıdaki içeriği ekleyin: ``` async function main() { const HelloWorld = await ethers.getContractFactory("HelloWorld"); - // Start deployment, returning a promise that resolves to a contract object + // Dağıtımı başlatır, bir sözleşme nesnesine çözümlenen bir promise döndürür const hello_world = await HelloWorld.deploy("Hello World!"); - console.log("Contract deployed to address:", hello_world.address);} + console.log("Sözleşme şu adrese dağıtıldı:", hello_world.address);} main() .then(() => process.exit(0)) @@ -322,48 +318,49 @@ main() }); ``` -Hardhat, bu kod satırlarının her birinin ne işe yaradığını [Sözleşme öğreticisinde](https://hardhat.org/tutorial/testing-contracts.html#writing-tests) harika bir şekilde açıklıyor, Hardhat açıklamalarını buraya aktardık. +Hardhat, [Sözleşmeler öğreticisinde](https://hardhat.org/tutorial/testing-contracts.html#writing-tests) bu kod satırlarının her birinin ne işe yaradığını harika bir şekilde açıklıyor, biz de buraya onların açıklamalarını aldık. ``` const HelloWorld = await ethers.getContractFactory("HelloWorld"); ``` -Ethers.js'deki bir `ContractFactory`, yeni akıllı sözleşmeleri dağıtmak için kullanılan bir soyutlamadır, bu nedenle `HelloWorld`, merhaba dünya sözleşmemizin örnekleri için bir fabrikadır. `hardhat-ethers` eklentisini kullanırken `ContractFactory` ve `Contract` örnekleri varsayılan olarak ilk imzalayana bağlanır. +ethers.js'deki bir `ContractFactory`, yeni akıllı sözleşmeler dağıtmak için kullanılan bir soyutlamadır, bu nedenle buradaki `HelloWorld`, bizim merhaba dünya sözleşmemizin örnekleri için bir fabrikadır. `hardhat-ethers` eklentisini kullanırken, `ContractFactory` ve `Contract` örnekleri varsayılan olarak ilk imzalayana bağlanır. ``` const hello_world = await HelloWorld.deploy(); ``` -Bir `ContractFactory` üzerinde `deploy()` öğesinin çağrılması, dağıtımı başlatır ve bir `Contract` olarak çözümlenen bir `Promise` döndürür. Bu, akıllı sözleşme fonksiyonlarımızın her biri için bir yöntemi olan nesnedir. +Bir `ContractFactory` üzerinde `deploy()` çağırmak dağıtımı başlatır ve bir `Contract`'a çözümlenen bir `Promise` döndürür. Bu, akıllı sözleşme fonksiyonlarımızın her biri için bir yöntemi olan nesnedir. ## Adım 16: Sözleşmemizi dağıtın {#step-16-deploy-our-contract} -Sonunda akıllı sözleşmemizi uygulamaya hazırız! Komut satırına gidin ve şunu yürütün: +Sonunda akıllı sözleşmemizi uygulamaya hazırız! Komut satırına gidin ve şunu çalıştırın: ``` -npx hardhat run scripts/deploy.js --network goerli +npx hardhat run scripts/deploy.js --network sepolia ``` Daha sonra şöyle bir şey görmelisiniz: ``` -Contract deployed to address: 0x6cd7d44516a20882cEa2DE9f205bF401c0d23570 +Sözleşme şu adrese dağıtıldı: 0x6cd7d44516a20882cEa2DE9f205bF401c0d23570 ``` -[Goerli etherscan](https://goerli.etherscan.io/)'e gider ve sözleşme adresimizi aratırsak başarıyla dağıtılmış olduğunu görürüz. İşlem şunun gibi gözükecektir: +[Sepolia etherscan](https://sepolia.etherscan.io/) sitesine gider ve sözleşme adresimizi aratırsak, başarıyla dağıtıldığını görebilmeliyiz. İşlem şunun gibi gözükecektir: ![etherscan sözleşmesi](./etherscan-contract.png) -`From` (gönderen) adresi, MetaMask hesap adresinizle eşleşmelidir ve To (alıcı) adresinde "Contract Creation" (Sözleşme Oluşturma) yazacaktır ancak işleme tıklarsak `To` alanında sözleşme adresimizi göreceğiz: +`From` adresi, MetaMask hesap adresinizle eşleşmelidir ve `To` adresinde “Contract Creation” yazar, ancak işleme tıklarsak `To` alanında sözleşme adresimizi görürüz: ![etherscan işlemi](./etherscan-transaction.png) Tebrikler! Ethereum zincirine bir akıllı sözleşme dağıttınız 🎉 -Perde arkasında neler olduğunu anlamak için [Alchemy gösterge panelimizde](https://dashboard.alchemyapi.io/explorer) Explorer (Gezgin) sekmesine gidelim. Birden fazla Alchemy uygulamanız varsa, uygulamaya göre filtreleme yaptığınızdan ve "Hello World"ü seçtiğinizden emin olun. ![merhaba dünya gezgini](./hello-world-explorer.png) +Perde arkasında neler olduğunu anlamak için [Alchemy gösterge panelimizdeki](https://dashboard.alchemyapi.io/explorer) Explorer sekmesine gidelim. Birden fazla Alchemy uygulamanız varsa, uygulamaya göre filtrelediğinizden ve “Merhaba Dünya”yı seçtiğinizden emin olun. +![merhaba dünya gezgini](./hello-world-explorer.png) -Burada, `.deploy()` fonksiyonunu çağırdığımızda Hardhat/Ethers'ın bizim için arka planda yaptığı bir avuç JSON-RPC çağrısı göreceksiniz. Burada belirtilmesi gereken iki önemli şey, akıllı sözleşmemizi Goerli zincirine yazma isteği olan [`eth_sendRawTransaction`](https://docs.alchemyapi.io/alchemy/documentation/alchemy-api-reference/json-rpc#eth_sendrawtransaction) ve karma değerine göre işlemimiz hakkındaki bilgileri okuma isteği olan (işlem gönderirken sık kullanılan bir şablon) [`eth_getTransactionByHash`](https://docs.alchemyapi.io/alchemy/documentation/alchemy-api-reference/json-rpc#eth_gettransactionbyhash) öğeleridir. İşlem gönderme hakkında daha fazlasını öğrenmek için, [Web3 kullanarak işlem gönderme](/developers/tutorials/sending-transactions-using-web3-and-alchemy/) üzerine olan şu öğreticiye göz atın +Burada, `.deploy()` fonksiyonunu çağırdığımızda Hardhat/Ethers'in bizim için perde arkasında yaptığı bir avuç JSON-RPC çağrısı göreceksiniz. Burada dikkat çekilmesi gereken iki önemli çağrı, aslında sözleşmemizi Sepolia zincirine yazma isteği olan [`eth_sendRawTransaction`](https://www.alchemy.com/docs/node/abstract/abstract-api-endpoints/eth-send-raw-transaction) ve karma değeri verildiğinde işlemimiz hakkındaki bilgileri okuma isteği olan [`eth_getTransactionByHash`](https://www.alchemy.com/docs/node/abstract/abstract-api-endpoints/eth-get-transaction-by-hash) çağrısıdır (işlemlerde tipik bir modeldir). İşlem gönderme hakkında daha fazla bilgi edinmek için, [Web3 kullanarak işlem gönderme](/developers/tutorials/sending-transactions-using-web3-and-alchemy/) hakkındaki bu öğreticiye göz atın. -Öğreticinin 1. bölümü bu kadar, 2. bölümde ilk mesajımızı güncelleyerek [akıllı sözleşmemizle gerçekten etkileşime geçeceğiz](https://docs.alchemyapi.io/alchemy/tutorials/hello-world-smart-contract#part-2-interact-with-your-smart-contract) ve 3. bölümde herkesin akıllı sözleşmemizle nasıl [etkileşimde bulunacağını bilmesi için akıllı sözleşmemizi Etherscan'da](https://docs.alchemyapi.io/alchemy/tutorials/hello-world-smart-contract#optional-part-3-publish-your-smart-contract-to-etherscan) yayınlayacağız. +Bu öğreticinin 1. bölümü bu kadar; 2. bölümde, ilk mesajımızı güncelleyerek [akıllı sözleşmemizle gerçekten etkileşime gireceğiz](https://www.alchemy.com/docs/interacting-with-a-smart-contract) ve 3. bölümde herkesin onunla nasıl etkileşim kuracağını bilmesi için [akıllı sözleşmemizi Etherscan'de yayınlayacağız](https://www.alchemy.com/docs/submitting-your-smart-contract-to-etherscan). -**Alchemy hakkında daha fazla bilgi edinmek mi istiyorsunuz? [Web sitemize](https://alchemyapi.io/eth) göz atın. Hiç bir güncellemeyi kaçırmak istemiyor musunuz? Bültenimize [buradan](https://www.alchemyapi.io/newsletter) abone olun! Ayrıca [Twitter'ımızı](https://twitter.com/alchemyplatform) takip ettiğinizden ve [Discord'umuza](https://discord.com/invite/u72VCg3) katıldığınızdan da emin olun**. +**Alchemy hakkında daha fazla bilgi edinmek mi istiyorsunuz?** [Web sitemize](https://www.alchemy.com/eth) göz atın. Hiçbir güncellemeyi kaçırmak istemiyor musunuz? [Buradan](https://www.alchemy.com/newsletter) bültenimize abone olun! [Discord](https://discord.gg/u72VCg3) sunucumuza da katıldığınızdan emin olun.\*\*. diff --git a/public/content/translations/tr/developers/tutorials/how-to-implement-an-erc721-market/index.md b/public/content/translations/tr/developers/tutorials/how-to-implement-an-erc721-market/index.md index ba843f5ffb1..af3b46eae9c 100644 --- a/public/content/translations/tr/developers/tutorials/how-to-implement-an-erc721-market/index.md +++ b/public/content/translations/tr/developers/tutorials/how-to-implement-an-erc721-market/index.md @@ -1,12 +1,14 @@ --- -title: Bir ERC-721 pazarı nasıl uygulanır -description: Merkeziyetsiz bir ilan panosunda token'laştırılmış ürünler nasıl satışa sunulur +title: "Bir ERC-721 pazarı nasıl uygulanır" +description: "Merkeziyetsiz bir ilan panosunda token'laştırılmış ürünler nasıl satışa sunulur" author: "Alberto Cuesta Cañada" tags: - - "akıllı sözleşmeler" - - "erc-721" - - "katılık" - - "token'lar" + [ + "akıllı kontratlar", + "erc-721", + "solidity", + "token'lar" + ] skill: intermediate lang: tr published: 2020-03-19 @@ -22,17 +24,17 @@ Bunların tamamı internet ile değişti. Belirli bir ilan panosunu görebilen k Blok zinciri ile bu pazarlar bir kez daha değişmeye hazır, size nasıl olduğunu göstereyim. -## Para kazanma {#monetization} +## Para Kazanma {#monetization} Halka açık bir blok zinciri ilan panosunun iş modelinin Ebay'den ve bir şirketten farklı olması gerekecektir. -İlk olarak, [merkeziyetsizleşme açısı](/developers/docs/web2-vs-web3/) bulunmaktadır. Mevcut platformların kendi sunucularını sürdürmesi gerekir. Merkeziyetsiz bir platform kullanıcıları tarafından sürdürüldüğü için çekirdek platformu çalıştırmanın maliyeti, platform sahibi için sıfıra düşer. +Öncelikle, [merkeziyetsizleştirme açısı](/developers/docs/web2-vs-web3/) vardır. Mevcut platformların kendi sunucularını sürdürmesi gerekir. Merkeziyetsiz bir platform kullanıcıları tarafından sürdürüldüğü için çekirdek platformu çalıştırmanın maliyeti, platform sahibi için sıfıra düşer. -Ardından, platforma erişim sağlayan ön uç, web sitesi veya arayüz bulunuyor. Burada birçok seçenek bulunur. Platform sahipleri, erişimi kısıtlayabilir ve bir ücret karşılığında herkesi kendi arayüzünü kullanmaya zorlayabilir. Platform sahipleri ayrıca erişimi açmaya karar vererek (Güç İnsanlarda!) herkesin platform için arayüzler oluşturmasına izin verebilir. Veya mal sahipleri, bu aşırı uçların ortasında herhangi bir yaklaşıma karar verebilir. +Ardından, platforma erişim sağlayan ön uç, web sitesi veya arayüz bulunuyor. Burada birçok seçenek bulunur. Platform sahipleri, erişimi kısıtlayabilir ve bir ücret karşılığında herkesi kendi arayüzünü kullanmaya zorlayabilir. Platform sahipleri ayrıca erişimi açmaya karar verebilir (Güç Halkındır!) ve herkesin platforma arayüzler oluşturmasına izin verebilir. Veya mal sahipleri, bu aşırı uçların ortasında herhangi bir yaklaşıma karar verebilir. _Benden daha fazla vizyona sahip iş liderleri bundan nasıl para kazanılacağını bilirler. Tek gördüğüm şey, bunun statükodan farklı olduğu ve büyük ihtimalle bundan para kazanılabileceğidir._ -Bir de otomasyon ve ödeme açısı var. Bazı şeyler gayet [verimli şekilde token'laştırılarak](https://hackernoon.com/tokenization-of-digital-assets-g0ffk3v8s?ref=hackernoon.com) bir ilan panosunda ticarete açılabilir. Token'laştırılmış varlıklar bir blok zincirinde kolayca aktarılır. Son derece karmaşık ödeme yöntemleri bir blok zincirinde kolayca uygulanabilir. +Bir de otomasyon ve ödeme açısı var. Bazı şeyler çok [etkili bir şekilde tokenleştirilebilir](https://hackernoon.com/tokenization-of-digital-assets-g0ffk3v8s?ref=hackernoon.com) ve bir seri ilanlar panosunda takas edilebilir. Token'laştırılmış varlıklar bir blok zincirinde kolayca aktarılır. Son derece karmaşık ödeme yöntemleri bir blok zincirinde kolayca uygulanabilir. Burada bir iş fırsatı kokusu alıyorum. İşletme maliyeti olmayan bir ilan panosu, her işleme dahil edilen karmaşık ödeme yollarıyla kolayca uygulanabilir. Eminim birileri bunu ne için kullanacağına dair bir fikir bulacaktır. @@ -40,9 +42,9 @@ Bunu inşa etmenin verdiği mutluluk benim için yeterli. Hadi koda bir göz ata ## Uygulama {#implementation} -Bir süre önce, iş örneği uygulamaları ve başka farklı şeyler içeren bir [açık kaynak deposu](https://github.com/HQ20/contracts?ref=hackernoon.com) başlattık, lütfen bir göz atın. +Bir süre önce, iş durumu örnek uygulamaları ve diğer güzellikleri içeren bir [açık kaynaklı depo](https://github.com/HQ20/contracts?ref=hackernoon.com) başlattık, lütfen bir göz atın. -Bu [Ethereum İlan Panosu](https://github.com/HQ20/contracts/tree/master/contracts/classifieds?ref=hackernoon.com)'nun kodları oradadır, lütfen onları kullanın ve onlardan istediğiniz gibi faydalanın. Sadece kodun denetlenmediğini ve işin içine para katmadan önce kendi durum tespitinizi yapmanız gerektiğini unutmayın. +Bu [Ethereum Seri İlanlar Panosu](https://github.com/HQ20/contracts/tree/master/contracts/classifieds?ref=hackernoon.com) için kod orada, lütfen kullanın ve dilediğiniz gibi faydalanın. Sadece kodun denetlenmediğini ve işin içine para katmadan önce kendi durum tespitinizi yapmanız gerektiğini unutmayın. Panonun temelleri karmaşık değildir. Panodaki tüm reklamlar sadece birkaç alana sahip bir yapı olacaktır: @@ -51,7 +53,7 @@ struct Trade { address poster; uint256 item; uint256 price; - bytes32 status; // Open, Executed, Cancelled + bytes32 status; // Açık, Yürütüldü, İptal Edildi } ``` @@ -67,9 +69,9 @@ Eşleştirme kullanmak, yayınlamadan önce her reklam için bir kimlik bulmamı Ardından, ilgilendiğimiz bu öğelerin neler olduğu ve işlem için ödeme yapmak için kullanılan bu para biriminin ne olduğu sorusu geliyor. -Öğeler için, [dijital varlıklarla en iyi şekilde çalışmasına](https://hackernoon.com/tokenization-of-digital-assets-g0ffk3v8s?ref=hackernoon.com) rağmen, gerçek dünya öğelerini bir blok zincirinde temsil etmenin bir yolu olan [ERC-721](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/IERC721.sol?ref=hackernoon.com) arayüzünü uygulamalarını isteyeceğiz. Yapıcıda kendi ERC721 sözleşmemizi belirteceğiz, yani ilan panomuzdaki herhangi bir varlığın önceden token'laştırılmış olması gerekir. +Öğeler için yalnızca, gerçek dünyadaki öğeleri bir blokzincirde temsil etmenin bir yolu olan [ERC-721](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/IERC721.sol?ref=hackernoon.com) arayüzünü uygulamalarını isteyeceğiz; her ne kadar [dijital varlıklarla en iyi şekilde çalışsa da](https://hackernoon.com/tokenization-of-digital-assets-g0ffk3v8s?ref=hackernoon.com). Yapıcıda kendi ERC721 sözleşmemizi belirteceğiz, yani ilan panomuzdaki herhangi bir varlığın önceden token'laştırılmış olması gerekir. -Ödemeler için de benzer bir şey yapacağız. Birçok blok zinciri projesi, kendi [ERC-20](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol?ref=hackernoon.com) kripto parasını tanımlar. Bazıları ise DAI gibi bir ana akım parayı kullanmayı tercih ediyor. Bu ilan panosunda, inşa sırasında para biriminize karar vermeniz yeterli olur. Kolay. +Ödemeler için de benzer bir şey yapacağız. Çoğu blokzincir projesi kendi [ERC-20](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol?ref=hackernoon.com) kripto parasını tanımlar. Bazıları ise DAI gibi bir ana akım parayı kullanmayı tercih ediyor. Bu ilan panosunda, inşa sırasında para biriminize karar vermeniz yeterli olur. Kolay. ```solidity constructor ( @@ -108,7 +110,7 @@ function executeTrade(uint256 _trade) public { Trade memory trade = trades[_trade]; - require(trade.status == "Open", "Trade is not Open."); + require(trade.status == "Open", "Ticaret Açık değil."); currencyToken.transferFrom(msg.sender, trade.poster, trade.price); itemToken.transferFrom(address(this), msg.sender, trade.item); trades[_trade].status = "Executed"; @@ -127,16 +129,16 @@ function cancelTrade(uint256 _trade) Trade memory trade = trades[_trade]; require( msg.sender == trade.poster, - "Trade can be cancelled only by poster." + "Ticaret sadece gönderen tarafından iptal edilebilir." ); - require(trade.status == "Open", "Trade is not Open."); + require(trade.status == "Open", "Ticaret Açık değil."); itemToken.transferFrom(address(this), trade.poster, trade.item); trades[_trade].status = "Cancelled"; emit TradeStatusChange(_trade, "Cancelled"); } ``` -Bu kadar. Uygulamanın sonuna geldiniz. Kodla ifade edildiğinde bazı iş kavramlarının ne kadar kısa olduğu oldukça şaşırtıcıdır ve bu da o durumlardan biridir. [Depomuzda](https://github.com/HQ20/contracts/blob/master/contracts/classifieds/Classifieds.sol) tam sözleşmeye bakın. +Bu kadar. Uygulamanın sonuna geldiniz. Kodla ifade edildiğinde bazı iş kavramlarının ne kadar kısa olduğu oldukça şaşırtıcıdır ve bu da o durumlardan biridir. Sözleşmenin tamamını [depomuzda](https://github.com/HQ20/contracts/blob/master/contracts/classifieds/Classifieds.sol) kontrol edin. ## Sonuç {#conclusion} @@ -146,4 +148,4 @@ Bu kadar. Uygulamanın sonuna geldiniz. Kodla ifade edildiğinde bazı iş kavra Bu makalede, bir ilan panosu işinin ticari gerçekliği ile teknolojik uygulama arasında köprü kurmaya çalıştım. Bu bilgi, doğru becerilere sahipseniz, bir vizyon ve uygulama için bir yol haritası oluşturmanıza yardımcı olacaktır. -Her zaman olduğu gibi, eğlenceli bir şey inşa etmek istiyorsanız ve tavsiye almak istiyorsanız, lütfen [bana bir şeyler yazın](https://albertocuesta.es/)! Her zaman yardımcı olmaktan memnuniyet duyarım. +Her zaman olduğu gibi, eğlenceli bir şeyler inşa ediyorsanız ve tavsiye isterseniz, lütfen [bana ulaşın](https://albertocuesta.es/)! Her zaman yardımcı olmaktan memnuniyet duyarım. diff --git a/public/content/translations/tr/developers/tutorials/how-to-mint-an-nft/index.md b/public/content/translations/tr/developers/tutorials/how-to-mint-an-nft/index.md index 8025ea396db..06f3a602f4d 100644 --- a/public/content/translations/tr/developers/tutorials/how-to-mint-an-nft/index.md +++ b/public/content/translations/tr/developers/tutorials/how-to-mint-an-nft/index.md @@ -1,28 +1,26 @@ --- -title: Bir NFT Nasıl Basılır (NFT Eğitim Serisi Bölüm 2/3) -description: Bu öğretici, akıllı sözleşmemizi ve Web3'ü kullanarak Ethereum blok zincirinde bir NFT'nin nasıl basılacağını açıklar. +title: "Bir NFT Nasıl Basılır (NFT Eğitim Serisi Bölüm 2/3)" +description: "Bu öğretici, akıllı sözleşmemizi ve Web3'ü kullanarak Ethereum blokzincirinde bir NFT'nin nasıl basılacağını açıklar." author: "Sumi Mudgil" -tags: - - "ERC-721" - - "alchemy" - - "katılık" - - "akıllı sözleşmeler" -skill: advanced +tags: [ "ERC-721", "alchemy", "solidity", "akıllı kontratlar" ] +skill: beginner lang: tr published: 2021-04-22 --- -[Beeple](https://www.nytimes.com/2021/03/11/arts/design/nft-auction-christies-beeple.html): 69 Milyon ABD Doları[3LAU](https://www.forbes.com/sites/abrambrown/2021/03/03/3lau-nft-nonfungible-tokens-justin-blau/?sh=5f72ef64643b): 11 Milyon ABD Doları [Grimes](https://www.theguardian.com/music/2021/mar/02/grimes-sells-digital-art-collection-non-fungible-tokens): 6 Milyon ABD Doları +[Beeple](https://www.nytimes.com/2021/03/11/arts/design/nft-auction-christies-beeple.html): 69 Milyon Dolar +[3LAU](https://www.forbes.com/sites/abrambrown/2021/03/03/3lau-nft-nonfungible-tokens-justin-blau/?sh=5f72ef64643b): 11 Milyon Dolar +[Grimes](https://www.theguardian.com/music/2021/mar/02/grimes-sells-digital-art-collection-non-fungible-tokens): 6 Milyon Dolar -Hepsi, Alchemy'nin güçlü API'sini kullanarak NFT'lerini bastı. Bu öğreticide, aynısını \<10 dakikada nasıl yapacağınızı size öğreteceğiz. +Hepsi, Alchemy'nin güçlü API'sini kullanarak NFT'lerini bastı. Bu öğreticide, aynısını \<10 dakika içinde nasıl yapacağınızı öğreteceğiz. -“NFT basımı”, blok zincirinde ERC-721 token'ınızın benzersiz bir örneğini yayınlama eylemidir. [NFT eğitim serisinin 1. Bölümündeki](/developers/tutorials/how-to-write-and-deploy-an-nft/) akıllı sözleşmemizi kullanarak Web3 becerilerimizi geliştirelim ve bir NFT basalım. Bu eğitimin sonunda, keyfinizin (ve cüzdanınızın) istediği kadar NFT basabileceksiniz! +“Bir NFT basmak”, ERC-721 jetonunuzun benzersiz bir örneğini blokzincirde yayınlama eylemidir. [Bu NFT öğretici serisinin 1. Bölümündeki](/developers/tutorials/how-to-write-and-deploy-an-nft/) akıllı sözleşmemizi kullanarak Web3 becerilerimizi sergileyelim ve bir NFT basalım. Bu öğreticinin sonunda, gönlünüzün (ve cüzdanınızın) çektiği kadar NFT basabileceksiniz! -Başlayalım! +Hadi başlayalım! -## Adım 1: Web3'ü yükleme {#install-web3} +## Adım 1: Web3'ü yükleyin {#install-web3} -NFT akıllı sözleşmenizi oluşturmaya ilişkin ilk öğreticiyi izlediyseniz, zaten Ethers.js kullanma deneyiminiz vardır. Web3, Ethereum blok zincirine istek oluşturmayı kolaylaştırmak için kullanılan bir kütüphane olduğu için Ethers'a benzer. Bu öğreticide, otomatik yeniden denemeler ve güçlü WebSocket desteği sunan gelişmiş bir Web3 kütüphanesi olan [Alchemy Web3](https://docs.alchemyapi.io/alchemy/documentation/alchemy-web3)'ü kullanacağız. +NFT akıllı sözleşmenizi oluşturmayla ilgili ilk öğreticiyi takip ettiyseniz Ethers.js kullanma konusunda zaten deneyiminiz vardır. Web3, Ethereum blokzincirine istek oluşturmayı kolaylaştırmak için kullanılan bir kütüphane olduğu için Ethers'a benzer. Bu öğreticide, otomatik yeniden denemeler ve sağlam WebSocket desteği sunan gelişmiş bir Web3 kütüphanesi olan [Alchemy Web3](https://docs.alchemyapi.io/alchemy/documentation/alchemy-web3)'ü kullanacağız. Projenizin ana dizininde şunu çalıştırın: @@ -30,7 +28,7 @@ Projenizin ana dizininde şunu çalıştırın: npm install @alch/alchemy-web3 ``` -## Adım 2: Bir `mint-nft.js` dosyası oluşturma {#create-mintnftjs} +## Adım 2: Bir `mint-nft.js` dosyası oluşturun {#create-mintnftjs} Komut dosyaları dizininizin içinde bir `mint-nft.js` dosyası oluşturun ve aşağıdaki kod satırlarını ekleyin: @@ -43,13 +41,13 @@ const web3 = createAlchemyWeb3(API_URL) ## Adım 3: Sözleşme ABI'nizi alın {#contract-abi} -Sözleşme ABI'miz (Uygulama İkili Arayüzü), akıllı sözleşmemizle etkileşim kurmak için kullanılan arayüzdür. Sözleşme ABI'lerı hakkında daha fazlasını [buradan](https://docs.alchemyapi.io/alchemy/guides/eth_getlogs#what-are-ab-is) öğrenebilirsiniz. Hardhat bizim için otomatik olarak bir ABI oluşturur ve bunu `MyNFT.json` dosyasına kaydeder. Bunu kullanmak için `mint-nft.js` dosyamıza aşağıdaki kod satırlarını ekleyerek içeriği ayrıştırmamız gerekir: +Sözleşme ABI'miz (Uygulama İkili Arayüzü), akıllı sözleşmemizle etkileşim kurma arayüzüdür. Sözleşme ABI'leri hakkında daha fazla bilgiyi [buradan](https://docs.alchemyapi.io/alchemy/guides/eth_getlogs#what-are-ab-is) edinebilirsiniz. Hardhat bizim için otomatik olarak bir ABI oluşturur ve bunu `MyNFT.json` dosyasına kaydeder. Bunu kullanabilmek için `mint-nft.js` dosyamıza aşağıdaki kod satırlarını ekleyerek içeriği ayrıştırmamız gerekecek: ```js const contract = require("../artifacts/contracts/MyNFT.sol/MyNFT.json") ``` -ABI'yi görmek istiyorsanız onu konsolunuza yazdırabilirsiniz: +ABI'yi görmek isterseniz konsolunuza yazdırabilirsiniz: ```js console.log(JSON.stringify(contract.abi)) @@ -61,27 +59,27 @@ console.log(JSON.stringify(contract.abi)) node scripts/mint-nft.js ``` -## Adım 4: IPFS kullanarak NFT'niz için meta verileri yapılandırın {#config-meta} +## Adım 4: IPFS kullanarak NFT'nizin meta verilerini yapılandırın {#config-meta} -Bölüm 1'deki eğitimimizden hatırlarsanız, `mintNFT` akıllı sözleşme işlevimiz, NFT'nin meta verilerini tanımlayan bir JSON belgesine çözümlenmesi gereken bir tokenURI parametresi alır - bu gerçekten NFT'yi hayata geçiren şeydir ve bir ad, açıklama, resim ve diğer nitelikler gibi yapılandırılabilir özelliklere sahip olmasını sağlar. +1. Bölüm'deki öğreticimizden hatırlayacağınız üzere, `mintNFT` akıllı sözleşme fonksiyonumuz, NFT'nin meta verilerini açıklayan bir JSON belgesine çözümlenmesi gereken bir tokenURI parametresi alır. Bu meta veriler, NFT'yi gerçekten hayata geçiren, ad, açıklama, resim ve diğer nitelikler gibi yapılandırılabilir özelliklere sahip olmasını sağlayan şeydir. > _Gezegenler Arası Dosya Sistemi (IPFS), dağıtılmış bir dosya sisteminde veri depolamak ve paylaşmak için merkeziyetsiz bir protokol ve eşler arası ağdır._ -Uygun bir IPFS API'si ve araç takımı olan Pinata'yı, NFT'mizin gerçekten merkeziyetsiz olmasını sağlamak için, NFT varlığımızı ve meta verilerimizi depolamak için kullanacağız. Pinata hesabınız yoksa [buradan](https://app.pinata.cloud) ücretsiz bir hesap açın ve e-postanızı doğrulamak için adımları tamamlayın. +NFT varlığımızı ve meta verilerimizi depolamak ve NFT'mizin gerçekten merkeziyetsiz olmasını sağlamak için kullanışlı bir IPFS API ve araç takımı olan Pinata'yı kullanacağız. Pinata hesabınız yoksa [buradan](https://app.pinata.cloud) ücretsiz bir hesap için kaydolun ve e-postanızı doğrulamak için adımları tamamlayın. -Bir hesap oluşturduğunuzda: +Bir hesap oluşturduktan sonra: -- "Files" (Dosyalar) sayfasına gidin ve sayfanın sol üst köşesindeki mavi "Upload" (Yükle) düğmesine tıklayın. +- "Dosyalar" sayfasına gidin ve sayfanın sol üst köşesindeki mavi "Yükle" düğmesine tıklayın. -- Pinata'ya bir görüntü yükleyin; bu görüntü, NFT'nizin görüntü varlığı olacaktır. Varlığa istediğiniz adı verin +- Pinata'ya bir resim yükleyin — bu, NFT'nizin resim varlığı olacaktır. Varlığa dilediğiniz adı verebilirsiniz -- Yükledikten sonra, dosya bilgilerini "Dosyalar" sayfasındaki tabloda göreceksiniz. Ayrıca bir CID sütunu göreceksiniz. Yanındaki kopyala düğmesine tıklayarak CID'yi kopyalayabilirsiniz. Yüklemenizi `https://gateway.pinata.cloud/ipfs/` adresinde görebilirsiniz. Örnek olarak IPFS üzerinde kullandığımız resmi [burada](https://gateway.pinata.cloud/ipfs/QmZdd5KYdCFApWn7eTZJ1qgJu18urJrP9Yh1TZcZrZxxB5) bulabilirsiniz. +- Yükleme yaptıktan sonra, "Dosyalar" sayfasındaki tabloda dosya bilgilerini göreceksiniz. Ayrıca bir CID sütunu da göreceksiniz. Yanındaki kopyalama düğmesine tıklayarak CID'yi kopyalayabilirsiniz. Yüklemenizi şu adresten görüntüleyebilirsiniz: `https://gateway.pinata.cloud/ipfs/`. Örneğin, IPFS'de kullandığımız görseli [burada](https://gateway.pinata.cloud/ipfs/QmZdd5KYdCFApWn7eTZJ1qgJu18urJrP9Yh1TZcZrZxxB5) bulabilirsiniz. -Görsel olarak daha iyi öğrenenler için yukarıdaki adımlar burada özetlenmiştir: +Görsel öğrenenler için yukarıdaki adımlar burada özetlenmiştir: -![Sürücünüzü Pinata'ya nasıl yüklersiniz](./instructionsPinata.gif) +![Resminizi Pinata'ya nasıl yüklersiniz](./instructionsPinata.gif) -Şimdi Pinata'ya bir belge daha yüklememiz gerekecek. Ama bunu yapmadan önce, onu yaratmamız gerekiyor! +Şimdi Pinata'ya bir belge daha yükleyeceğiz. Ama bunu yapmadan önce onu oluşturmamız gerekiyor! Kök dizininizde `nft-metadata.json` adında yeni bir dosya oluşturun ve aşağıdaki json kodunu ekleyin: @@ -89,35 +87,35 @@ Kök dizininizde `nft-metadata.json` adında yeni bir dosya oluşturun ve aşağ { "attributes": [ { - "trait_type": "Breed", + "trait_type": "Cins", "value": "Maltipoo" }, { - "trait_type": "Eye color", + "trait_type": "Göz Rengi", "value": "Mocha" } ], - "description": "The world's most adorable and sensitive pup.", + "description": "Dünyanın en sevimli ve hassas köpeği.", "image": "ipfs://QmWmvTJmJU3pozR9ZHFmQC2DNDwi2XJtf3QGyYiiagFSWb", "name": "Ramses" } ``` -json'daki veriyi değiştirmekten çekinmeyin. Nitelikler bölümündekileri kaldırabilir veya buraya ekleme yapabilirsiniz. En önemlisi, görüntü alanının IPFS görüntünüzün konumunu gösterdiğinden emin olun: Aksi takdirde NFT'niz (çok sevimli!) bir köpeğin fotoğrafını içerecektir. +json'daki verileri değiştirmekten çekinmeyin. Nitelikler bölümüne ekleme veya çıkarma yapabilirsiniz. En önemlisi, resim alanının IPFS resminizin konumunu gösterdiğinden emin olun — aksi takdirde NFT'niz (çok sevimli!) bir fotoğraf içerecektir köpek. -JSON dosyasını düzenlemeyi tamamladıktan sonra kaydedin ve resmi yüklemek için kullandığımız adımları izleyerek Pinata'ya yükleyin. +JSON dosyasını düzenlemeyi bitirdikten sonra, kaydedin ve resmi yüklemek için yaptığımız adımların aynısını izleyerek Pinata'ya yükleyin. ![nft-metadata.json dosyanızı Pinata'ya nasıl yüklersiniz](./uploadPinata.gif) ## Adım 5: Sözleşmenizin bir örneğini oluşturun {#instance-contract} -Şimdi, sözleşmemizle etkileşime geçmek için, kodumuzda onun bir örneğini oluşturmalıyız. Bunu yapmak için dağıtımdan veya [Etherscan](https://sepolia.etherscan.io/)'den sözleşmeyi dağıtmak amacıyla kullandığınız adresi arayarak alabileceğimiz sözleşme adresimize ihtiyacımız olacak. +Şimdi, sözleşmemizle etkileşim kurmak için kodumuzda onun bir örneğini oluşturmamız gerekiyor. Bunu yapmak için, sözleşmeyi dağıtmak için kullandığınız adresi arayarak dağıtımdan veya [Blockscout](https://eth-sepolia.blockscout.com/) üzerinden alabileceğimiz sözleşme adresimize ihtiyacımız olacak. -![Etherscan'da sözleşme adresinizi görüntüleyin](./view-contract-etherscan.png) +![Sözleşme adresinizi Etherscan'de görüntüleyin](./view-contract-etherscan.png) -Yukarıdaki örnekte, sözleşme adresimiz 0x5a738a5c5fe46a1fd5ee7dd7e38f722e2aef7778'dir. +Yukarıdaki örnekte sözleşme adresimiz 0x5a738a5c5fe46a1fd5ee7dd7e38f722e2aef7778'dir. -Daha sonra, ABI ve adresi kullanarak sözleşmemizi oluşturmak için Web3 [sözleşme yöntemini](https://docs.web3js.org/api/web3-eth-contract/class/Contract) kullanacağız. `mint-nft.js` dosyanıza aşağıdakini ekleyin: +Ardından, ABI ve adresi kullanarak sözleşmemizi oluşturmak için Web3 [sözleşme yöntemini](https://docs.web3js.org/api/web3-eth-contract/class/Contract) kullanacağız. `mint-nft.js` dosyanıza aşağıdakileri ekleyin: ```js const contractAddress = "0x5a738a5c5fe46a1fd5ee7dd7e38f722e2aef7778" @@ -125,11 +123,11 @@ const contractAddress = "0x5a738a5c5fe46a1fd5ee7dd7e38f722e2aef7778" const nftContract = new web3.eth.Contract(contract.abi, contractAddress) ``` -## Adım 6: `.env` dosyasını güncelleme {#update-env} +## Adım 6: `.env` dosyasını güncelleyin {#update-env} -Şimdi, Ethereum zincirine işlemler oluşturmak ve göndermek amacıyla, hesap nonce değeri almak için genel Ethereum hesap adresinizi kullanacağız (aşağıda açıklanacaktır). +Şimdi, Ethereum zincirine işlem oluşturmak ve göndermek için, hesap nonce'unu (aşağıda açıklanacaktır) almak üzere halka açık Ethereum hesap adresinizi kullanacağız. -Açık anahtarınızı `.env` dosyanıza ekleyin; öğreticinin 1. bölümünü tamamladıysanız, `.env` dosyamız artık aşağıdaki gibi görünmelidir: +Açık anahtarınızı `.env` dosyanıza ekleyin — öğreticinin 1. bölümünü tamamladıysanız, `.env` dosyanız şimdi şöyle görünmelidir: ```js API_URL = "https://eth-sepolia.g.alchemy.com/v2/your-api-key" @@ -137,27 +135,27 @@ PRIVATE_KEY = "your-private-account-address" PUBLIC_KEY = "your-public-account-address" ``` -## Adım 7: İşleminizi oluşturma {#create-txn} +## Adım 7: İşleminizi oluşturun {#create-txn} -İlk olarak, `mintNFT(tokenData)` isimli bir fonksiyon tanımlayalım ve sıradakileri yaparak işlemimizi oluşturalım: +Öncelikle, `mintNFT(tokenData)` adında bir fonksiyon tanımlayalım ve aşağıdakileri yaparak işlemimizi oluşturalım: -1. _PRIVATE_KEY_ ve _PUBLIC_KEY_ anahtarlarınızı `.env` dosyasından alın. +1. `.env` dosyasından _PRIVATE_KEY_ ve _PUBLIC_KEY_ değerlerinizi alın. -1. Sonrasında, hesap nonce değerini bulmamız gerekecek. Nonce değeri detayı, adresinizden gönderilen işlem sayısını takip etmek için kullanılır: Buna, güvenlik amaçlarından dolayı ve [tekrar saldırılarını](https://docs.alchemyapi.io/resources/blockchain-glossary#account-nonce) engellemek için ihtiyacımız vardır. Adresinizden gönderilmiş işlem sayısını almak için, [getTransactionCount](https://docs.alchemyapi.io/documentation/alchemy-api-reference/json-rpc#eth_gettransactioncount) kullanırız. +2. Sırada, hesap nonce'unu bulmamız gerekiyor. Nonce belirtimi, adresinizden gönderilen işlem sayısını takip etmek için kullanılır. Buna güvenlik amacıyla ve [tekrar saldırılarını](https://docs.alchemyapi.io/resources/blockchain-glossary#account-nonce) önlemek için ihtiyacımız vardır. Adresinizden gönderilen işlem sayısını almak için [getTransactionCount](https://docs.alchemyapi.io/documentation/alchemy-api-reference/json-rpc#eth_gettransactioncount) kullanırız. -1. Son olarak, işlemimizi aşağıdaki bilgilerle ayarlayacağız: +3. Son olarak işlemimizi aşağıdaki bilgilerle ayarlayacağız: -- `'from': PUBLIC_KEY` — İşleminizin kaynağı, açık adresimizdir +- `'from': PUBLIC_KEY` — İşlemimizin kaynağı, halka açık adresimizdir -- `'to': ContractAddress` — Etkileşimde bulunmak ve işlemi göndermek istediğimiz sözleşme +- `'to': contractAddress` — Etkileşimde bulunmak ve işlemi göndermek istediğimiz sözleşme -- `'nonce': nonce` — Adresimizden gönderilen işlem sayısını içeren hesap nonce değeri +- `'nonce': nonce` — Adresimizden gönderilen işlem sayısını içeren hesap nonce'u -- `'gas': trialGas` — İşlemi tamamlamak için gereken tahmini gaz +- `'gas': estimatedGas` — İşlemi tamamlamak için gereken tahmini gaz -- `'data': nftContract.methods.mintNFT(PUBLIC_KEY, md).encodeABI()` — Bu işlemde gerçekleştirmek istediğimiz hesaplama: Bu durumda bir NFT basımıdır +- `'data': nftContract.methods.mintNFT(PUBLIC_KEY, md).encodeABI()` — Bu işlemde gerçekleştirmek istediğimiz hesaplama, ki bu durumda bir NFT basmaktır -`mint-nft.js` dosyanız artık bu şekilde görünmelidir: +`mint-nft.js` dosyanız şimdi şöyle görünmelidir: ```js require('dotenv').config(); @@ -173,9 +171,9 @@ PUBLIC_KEY = "your-public-account-address" const nftContract = new web3.eth.Contract(contract.abi, contractAddress); async function mintNFT(tokenURI) { - const nonce = await web3.eth.getTransactionCount(PUBLIC_KEY, 'latest'); //get latest nonce + const nonce = await web3.eth.getTransactionCount(PUBLIC_KEY, 'latest'); //en son nonce'u al - //the transaction + //işlem const tx = { 'from': PUBLIC_KEY, 'to': contractAddress, @@ -186,11 +184,11 @@ PUBLIC_KEY = "your-public-account-address" }​ ``` -## Adım 8: İşlemi imzalama {#sign-txn} +## Adım 8: İşlemi imzalayın {#sign-txn} -Artık işlemimizi oluşturduğumuza göre, göndermek için imzalamamız gerekiyor. Özel anahtarımızı burada kullanacağız. +İşlemimizi oluşturduğumuza göre, göndermek için imzalamamız gerekiyor. İşte burada özel anahtarımızı kullanacağız. -`web3.eth.sendSignedTransaction` bize, işlemimizin kazıldığından ve ağdan düşmediğinden emin olmak için kullanabileceğimiz işlem hash değeri verecektir. İşlem imzalama bölümünde, işlemimizin başarılı olup olmadığını anlamamız için bazı hata kontrolleri eklediğimizi göreceksiniz. +`web3.eth.sendSignedTransaction`, bize işlem hash değerini verir. Bunu, işlemimizin mine edildiğinden ve ağ tarafından düşürülmediğinden emin olmak için kullanabiliriz. İşlem imzalama bölümünde, işlemimizin başarılı olup olmadığını bilmemiz için bazı hata denetimleri eklediğimizi fark edeceksiniz. ```js require("dotenv").config() @@ -206,9 +204,9 @@ const contractAddress = "0x5a738a5c5fe46a1fd5ee7dd7e38f722e2aef7778" const nftContract = new web3.eth.Contract(contract.abi, contractAddress) async function mintNFT(tokenURI) { - const nonce = await web3.eth.getTransactionCount(PUBLIC_KEY, "latest") //get latest nonce + const nonce = await web3.eth.getTransactionCount(PUBLIC_KEY, "latest") //en son nonce'u al - //the transaction + //işlem const tx = { from: PUBLIC_KEY, to: contractAddress, @@ -225,13 +223,13 @@ async function mintNFT(tokenURI) { function (err, hash) { if (!err) { console.log( - "The hash of your transaction is: ", + "İşleminizin hash değeri: ", hash, - "\nCheck Alchemy's Mempool to view the status of your transaction!" + "\nİşleminizin durumunu görüntülemek için Alchemy'nin Mempool'unu kontrol edin!" ) } else { console.log( - "Something went wrong when submitting your transaction:", + "İşleminizi gönderirken bir şeyler ters gitti:", err ) } @@ -239,24 +237,24 @@ async function mintNFT(tokenURI) { ) }) .catch((err) => { - console.log(" Promise failed:", err) + console.log(" Promise başarısız oldu:", err) }) } ``` -## Adım 9: `mintNFT`'yi çağırma ve `mint-nft.js` düğümünü çalıştırma {#call-mintnft-fn} +## Adım 9: `mintNFT`'yi çağırın ve `node mint-nft.js`'yi çalıştırın {#call-mintnft-fn} -Pinata'ya yüklediğiniz `metadata.json`'ı hatırlıyor musunuz? Pinata'dan karma kodunu alın ve aşağıdakileri `mintNFT` `https://gateway.pinata.cloud/ipfs/` işlevine parametre olarak aktarın +Pinata'ya yüklediğiniz `metadata.json`'ı hatırlıyor musunuz? Pinata'dan hash kodunu alın ve `mintNFT` fonksiyonuna parametre olarak şunu geçin: `https://gateway.pinata.cloud/ipfs/` -Karma kodunu şu şekilde alırsınız: +Hash kodu şu şekilde alınır: -![Pinata'da nft meta veri hash kodunuzu nasıl alırsınız](./metadataPinata.gif)_Pinata'da nft meta veri hash kodunuzu nasıl alırsınız_ +![Pinata'da NFT meta veri hash kodunuzu nasıl alırsınız](./metadataPinata.gif)_Pinata'da NFT meta veri hash kodunuzu nasıl alırsınız_ -> Kopyaladığınız hash kodunun **metadata.json**'unuza yönlendirdiğini `https://gateway.pinata.cloud/ipfs/` sayfasını ayrı bir pencereye iki kez kontrol edin. Sayfa aşağıdaki ekran görüntüsüne benzer görünmelidir: +> `https://gateway.pinata.cloud/ipfs/` adresini ayrı bir pencerede yükleyerek kopyaladığınız hash kodunun **metadata.json** dosyanıza bağlandığını iki kez kontrol edin. Sayfa aşağıdaki ekran görüntüsüne benzer görünmelidir: -![Sayfanız json meta verilerini göstermelidir](./metadataJSON.png)_Sayfanız json meta verilerini göstermelidir_ +![Sayfanız json meta verilerini görüntülemelidir](./metadataJSON.png)_Sayfanız json meta verilerini görüntülemelidir_ -Sonuç olarak kodunuz şöyle görünmelidir: +Sonuç olarak, kodunuz şuna benzer görünmelidir: ```js require("dotenv").config() @@ -272,9 +270,9 @@ const contractAddress = "0x5a738a5c5fe46a1fd5ee7dd7e38f722e2aef7778" const nftContract = new web3.eth.Contract(contract.abi, contractAddress) async function mintNFT(tokenURI) { - const nonce = await web3.eth.getTransactionCount(PUBLIC_KEY, "latest") //get latest nonce + const nonce = await web3.eth.getTransactionCount(PUBLIC_KEY, "latest") //en son nonce'u al - //the transaction + //işlem const tx = { from: PUBLIC_KEY, to: contractAddress, @@ -291,13 +289,13 @@ async function mintNFT(tokenURI) { function (err, hash) { if (!err) { console.log( - "The hash of your transaction is: ", + "İşleminizin hash değeri: ", hash, - "\nCheck Alchemy's Mempool to view the status of your transaction!" + "\nİşleminizin durumunu görüntülemek için Alchemy'nin Mempool'unu kontrol edin!" ) } else { console.log( - "Something went wrong when submitting your transaction:", + "İşleminizi gönderirken bir şeyler ters gitti:", err ) } @@ -305,25 +303,27 @@ async function mintNFT(tokenURI) { ) }) .catch((err) => { - console.log("Promise failed:", err) + console.log("Promise başarısız oldu:", err) }) } mintNFT("ipfs://QmYueiuRNmL4MiA2GwtVMm6ZagknXnSpQnB3z2gWbz36hP") ``` -Şimdi, NFT'nizi dağıtmak için `node scripts/mint-nft.js` komutunu çalıştırın. Birkaç saniye sonra terminalinizde şöyle bir yanıt görmelisiniz: +Şimdi, NFT'nizi dağıtmak için `node scripts/mint-nft.js` komutunu çalıştırın. Birkaç saniye sonra, terminalinizde şuna benzer bir yanıt görmelisiniz: - The hash of your transaction is: 0x301791fdf492001fcd9d5e5b12f3aa1bbbea9a88ed24993a8ab2cdae2d06e1e8 + ``` + İşleminizin hash değeri: 0x301791fdf492001fcd9d5e5b12f3aa1bbbea9a88ed24993a8ab2cdae2d06e1e8 + + İşleminizin durumunu görüntülemek için Alchemy'nin Mempool'unu kontrol edin! + ``` - Check Alchemy's Mempool to view the status of your transaction! +Ardından, işleminizin durumunu (beklemede, mine edilmiş veya ağdan düşürülmüş) görmek için [Alchemy mempool'unuzu](https://dashboard.alchemyapi.io/mempool) ziyaret edin. İşleminiz düşürüldüyse, [Blockscout](https://eth-sepolia.blockscout.com/)'u kontrol etmek ve işlem hash değerinizi aramak da yararlıdır. -Sonrasında, işleminizin durumunu (beklemede, kazılmış veya ağdan düşürülmüş) görmek için [Alchemy bellek havuzunuzu](https://dashboard.alchemyapi.io/mempool) ziyaret edin. İşleminiz düştüyse, [Sepolia Etherscan](https://sepolia.etherscan.io/)'i kontrol etmek ve işlem karmanızı aramak da faydalı olur. +![NFT işlem hash değerinizi Etherscan'de görüntüleyin](./view-nft-etherscan.png)_NFT işlem hash değerinizi Etherscan'de görüntüleyin_ -![Etherscan'da NFT işlem hash değerinizi görüntüleyin](./view-nft-etherscan.png)_Etherscan'da NFT işlem hash değerinizi görüntüleyin_ +İşte bu kadar! Artık Ethereum blokzincirinde bir NFT'yi dağıttınız VE bastınız -İşte bu kadar! Ethereum blok zincirinde bir NFT ile dağıtım VE basım yaptınız +`mint-nft.js` kullanarak gönlünüzün (ve cüzdanınızın) çektiği kadar NFT basabilirsiniz! NFT'nin meta verilerini açıklayan yeni bir tokenURI girdiğinizden emin olun (aksi takdirde, farklı kimliklere sahip bir sürü aynı NFT'yi oluşturmuş olursunuz). -`mint-nft.js` kullanarak canınızın (ve cüzdanınızın) istediği kadar NFT basabilirsiniz! NFT'nin meta verilerini açıklayan yeni bir tokenURI'yi ilettiğinizden emin olun (aksi takdirde, sonuç olarak farklı kimliklere sahip bir sürü özdeş NFT oluşturursunuz). - -Büyük ihtimalle cüzdanınızda NFT'nizi gösterebilmek istersiniz: Bu nedenle [3. Bölüm: NFT'nizi Cüzdanınızda Nasıl Görüntüleyebilirsiniz](/developers/tutorials/how-to-view-nft-in-metamask/) kısmına göz atmayı unutmayın! +Muhtemelen NFT'nizi cüzdanınızda sergileyebilmek istersiniz — bu yüzden [Bölüm 3: NFT'nizi Cüzdanınızda Nasıl Görüntülersiniz](/developers/tutorials/how-to-view-nft-in-metamask/) bölümüne göz atmayı unutmayın! diff --git a/public/content/translations/tr/developers/tutorials/how-to-mock-solidity-contracts-for-testing/index.md b/public/content/translations/tr/developers/tutorials/how-to-mock-solidity-contracts-for-testing/index.md index 78aceac8dff..7674504e325 100644 --- a/public/content/translations/tr/developers/tutorials/how-to-mock-solidity-contracts-for-testing/index.md +++ b/public/content/translations/tr/developers/tutorials/how-to-mock-solidity-contracts-for-testing/index.md @@ -1,30 +1,32 @@ --- -title: Solidity akıllı sözleşmeleri test etmek için nasıl taklit edilir? -description: Neden sözleşmelerinizi test ederken dalga geçmelisiniz? +title: "Solidity akıllı sözleşmeleri test etmek için nasıl taklit edilir?" +description: "Neden sözleşmelerinizi test ederken dalga geçmelisiniz?" author: Markus Waas lang: tr tags: - - "solidity" - - "akıllı kontratlar" - - "test etmek" - - "taklit etme" + [ + "solidity", + "akıllı kontratlar", + "test etmek", + "taklit etme" + ] skill: intermediate published: 2020-05-02 source: soliditydeveloper.com sourceUrl: https://soliditydeveloper.com/mocking-contracts --- -[Taklit nesneler](https://wikipedia.org/wiki/Mock_object) nesne yönelimli programlamada yaygın kullanılan bir tasarım modelidir. Fransızca'dan gelen "mocquer" kelimesi "dalga geçmek" anlamındadır. Bu kelime "gerçek olan bir şeyi taklit etmek" anlamına evrilmiştir ki bu, tam olarak programlamada yaptığımız şeydir. Akıllı sözleşmelerinizle lütfen sadece istediğiniz zaman dalga geçin ama her boş vaktinizde onları taklit edin. Bu, hayatınızı kolaylaştıracak. +[Taklit nesneler](https://wikipedia.org/wiki/Mock_object), nesne yönelimli programlamada yaygın olarak kullanılan bir tasarım modelidir. Fransızca'dan gelen "mocquer" kelimesi "dalga geçmek" anlamındadır. Bu kelime "gerçek olan bir şeyi taklit etmek" anlamına evrilmiştir ki bu, tam olarak programlamada yaptığımız şeydir. Akıllı sözleşmelerinizle lütfen sadece istediğiniz zaman dalga geçin ama her boş vaktinizde onları taklit edin. Bu, hayatınızı kolaylaştıracak. -## Sözleşmelere taklit yoluyla birim testi uygulama {#unit-testing-contracts-with-mocks} +## Taklit nesnelerle sözleşmelerin birim testi {#unit-testing-contracts-with-mocks} -Bir sözleşmeyi taklit etmek, sözleşmenin gerçek hali gibi davranan ve geliştirici tarafından kolayca kontrol edilebilen ikinci bir versiyonunu oluşturmak anlamına gelir. Genelde [sözleşmenin ufak bir bölümüne birim testi](/developers/docs/smart-contracts/testing/) yapmak istediğiniz karmaşık sözleşmelerle karşılaşırsınız. Buradaki sorun, ya bu ufak parçanın test edilmesi çok detaylı bir sözleşme durumu gerektiriyorsa ve buna ulaşmak zorsa? +Bir sözleşmeyi taklit etmek, sözleşmenin gerçek hali gibi davranan ve geliştirici tarafından kolayca kontrol edilebilen ikinci bir versiyonunu oluşturmak anlamına gelir. Çoğu zaman, yalnızca [sözleşmenin küçük kısımlarına birim testi yapmak](/developers/docs/smart-contracts/testing/) istediğiniz karmaşık sözleşmelerle karşılaşırsınız. Buradaki sorun, ya bu ufak parçanın test edilmesi çok detaylı bir sözleşme durumu gerektiriyorsa ve buna ulaşmak zorsa? Her seferinde sözleşmeyi istenen duruma getiren karmaşık bir test yazabilir veya "taklitlerle" işinizi kolayca halledebilirsiniz. Bir sözleşme, kalıtım yöntemiyle kolayca taklit edilebilir. Orijinal sözleşmeyi içeren ikinci bir taklit sözleşme yazın. Şimdi fonksiyonları taklit sözleşmeniz için geçersiz kılabilirsiniz. Bir örnekle görelim. ## Örnek: Özel ERC20 {#example-private-erc20} -Başlangıç özel zamanı olan örnek bir ERC-20 sözleşmesi kullanıyoruz. Sözleşmenin sahibi özel kullanıcıları yönetebilir ve başlangıçta yalnızca bu kullanıcıların jeton almasına izin verir. Belirli bir zaman geçtikten sonra herkes jetonları kullanabilecektir. Eğer merak ediyorsanız, OpenZeppelin sözleşmeleri v3 dahilindeki [`_beforeTokenTransfer`](https://docs.openzeppelin.com/contracts/5.x/extending-contracts#using-hooks)'i kullanıyoruz. +Başlangıç özel zamanı olan örnek bir ERC-20 sözleşmesi kullanıyoruz. Sözleşmenin sahibi özel kullanıcıları yönetebilir ve başlangıçta yalnızca bu kullanıcıların jeton almasına izin verir. Belirli bir zaman geçtikten sonra herkes jetonları kullanabilecektir. Merak ediyorsanız, yeni OpenZeppelin sözleşmeleri v3'ten gelen [`_beforeTokenTransfer`](https://docs.openzeppelin.com/contracts/5.x/extending-contracts#using-hooks) kancasını kullanıyoruz. ```solidity pragma solidity ^0.6.0; @@ -51,7 +53,7 @@ contract PrivateERC20 is ERC20, Ownable { function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual override { super._beforeTokenTransfer(from, to, amount); - require(_validRecipient(to), "PrivateERC20: invalid recipient"); + require(_validRecipient(to), "PrivateERC20: geçersiz alıcı"); } function _validRecipient(address to) private view returns (bool) { @@ -87,20 +89,20 @@ contract PrivateERC20Mock is PrivateERC20 { Şu hata mesajlarından birini alacaksınız: -- `PrivateERC20Mock.sol: TypeError: Overriding function is missing "override" specifier.` -- `PrivateERC20.sol: TypeError: Trying to override non-virtual function. Did you forget to add "virtual"?.` +- `PrivateERC20Mock.sol: TypeError: Geçersiz kılan fonksiyon "override" niteleyicisini içermiyor.` +- `PrivateERC20.sol: TypeError: Sanal olmayan bir işlevi geçersiz kılmaya çalışılıyor. "virtual" eklemeyi unuttunuz mu?.` -Yeni 0.6 Solidity sürümünü kullandığımızdan geçersiz kılınabilecek fonksiyonlar için `virtual` anahtar kelimesini ve geçersiz kılma fonksiyonu için geçersiz kıl kelimesini eklememiz gerekir. Şimdi bunları her iki `isPublic` fonksiyonuna ekleyelim. +Yeni Solidity 0.6 sürümünü kullandığımız için, üzerine yazılabilecek fonksiyonlar için `virtual` anahtar kelimesini ve üzerine yazan fonksiyon için de override anahtar kelimesini eklemeliyiz. Öyleyse bunları her iki `isPublic` fonksiyonuna da ekleyelim. -Artık birim testlerinizde bunun yerine `PrivateERC20Mock` kullanabilirsiniz. Özel kullanım zamanlarında nasıl tepki vereceğini test etmek isterseniz, `setIsPublic(false)` komutunu ve `setIsPublic(true)` komutunu da genel kullanım zamanını test etmek için kullanabilirsiniz. Elbette bizim örneğimizde, zamanları buna göre değiştirmek için [zaman yardımcılarını](https://docs.openzeppelin.com/test-helpers/0.5/api#increase) da kullanabiliriz. Ancak taklit amacı artık açık olmalıdır ve bunun sadece zamanı ilerletmek kadar kolay olmadığı durumları hayal edebilirsiniz. +Artık birim testlerinizde bunun yerine `PrivateERC20Mock` kullanabilirsiniz. Özel kullanım süresi sırasındaki davranışı test etmek istediğinizde `setIsPublic(false)` kullanın ve benzer şekilde, genel kullanım süresini test etmek için `setIsPublic(true)` kullanın. Elbette örneğimizde, zamanları buna göre değiştirmek için [zaman yardımcılarını](https://docs.openzeppelin.com/test-helpers/0.5/api#increase) da kullanabiliriz. Ancak taklit amacı artık açık olmalıdır ve bunun sadece zamanı ilerletmek kadar kolay olmadığı durumları hayal edebilirsiniz. -## Çok sayıda sözleşmeyi taklit etme {#mocking-many-contracts} +## Birçok sözleşmeyi taklit etme {#mocking-many-contracts} -Her taklit için ayrı bir sözleşme oluşturmak karışıklık oluşturabilir. Eğer bu sizi rahatsız ediyorsa, [MockContract](https://github.com/gnosis/mock-contract) kütüphanesine bakabilirsiniz. Size anlık olarak sözleşmelerin davranışlarını değiştirme ve geçersiz kılma olanağı sağlar. Ancak, yalnızca diğer bir sözleşmeye yapılan taklitler için çalışır; bu nedenle, örneğimizde işe yaramaz. +Her taklit için ayrı bir sözleşme oluşturmak karışıklık oluşturabilir. Bu durum sizi rahatsız ediyorsa, [MockContract](https://github.com/gnosis/mock-contract) kütüphanesine göz atabilirsiniz. Size anlık olarak sözleşmelerin davranışlarını değiştirme ve geçersiz kılma olanağı sağlar. Ancak, yalnızca diğer bir sözleşmeye yapılan taklitler için çalışır; bu nedenle, örneğimizde işe yaramaz. -## Taklit etme, daha da güçlü olabilir {#mocking-can-be-even-more-powerful} +## Taklit etme daha da güçlü olabilir {#mocking-can-be-even-more-powerful} Taklit etmenin gücü burada bitmiyor. -- Fonksiyon ekleme: Sadece belirli bir işlevi geçersiz kılmak açısından değil, aynı zamanda ilave fonksiyonlar eklemek açısından da kullanışlıdır. Jetonlar için iyi bir örnek, herhangi bir kullanıcının ücretsiz olarak yeni jetonlar almasına izin vermek için ek bir `mint` işlevine sahip olmaktır. +- Fonksiyon ekleme: Sadece belirli bir işlevi geçersiz kılmak açısından değil, aynı zamanda ilave fonksiyonlar eklemek açısından da kullanışlıdır. Jetonlar için iyi bir örnek, herhangi bir kullanıcının ücretsiz olarak yeni jetonlar almasını sağlamak için ek bir `mint` işlevine sahip olmaktır. - Test ağlarında kullanım: Sözleşmelerinizi merkeziyetsiz uygulamalarınızla birlikte test ağlarına dağıtıp test ettiğinizde, taklit sürümlerini kullanmayı düşünün. Mecbur kalmadıkça fonksiyonları geçersiz kılmaktan kaçının. Sonuçta arkasındaki gerçek mantığı test etmek istiyorsunuz. Fakat örneğin, sözleşme durumunu en başa sıfırlayan ve yeni bir dağıtım gerektirmeyen bir sıfırlama işlevi eklemek de yararlı olabilir. Tabii ki de bunu bir Ana Ağ sözleşmesinde kullanmak istemezsiniz. diff --git a/public/content/translations/tr/developers/tutorials/how-to-use-echidna-to-test-smart-contracts/index.md b/public/content/translations/tr/developers/tutorials/how-to-use-echidna-to-test-smart-contracts/index.md index 24a78012d8c..06612e1acc2 100644 --- a/public/content/translations/tr/developers/tutorials/how-to-use-echidna-to-test-smart-contracts/index.md +++ b/public/content/translations/tr/developers/tutorials/how-to-use-echidna-to-test-smart-contracts/index.md @@ -1,17 +1,19 @@ --- -title: Akıllı sözleşmeleri test etmek için Echidna nasıl kullanılır -description: Akıllı sözleşmeleri otomatik olarak test etmek için Echidna nasıl kullanılır +title: "Akıllı sözleşmeleri test etmek için Echidna nasıl kullanılır" +description: "Akıllı sözleşmeleri otomatik olarak test etmek için Echidna nasıl kullanılır" author: "Trailofbits" lang: tr tags: - - "solidity" - - "akıllı kontratlar" - - "güvenlik" - - "test etmek" - - "bulandırma" + [ + "solidity", + "akıllı kontratlar", + "güvenlik", + "test etmek", + "bulandırma" + ] skill: advanced published: 2020-04-10 -source: Güvenli sözleşmeler oluşturmak +source: Building secure contracts sourceUrl: https://github.com/crytic/building-secure-contracts/tree/master/program-analysis/echidna --- @@ -26,7 +28,7 @@ docker pull trailofbits/eth-security-toolbox docker run -it -v "$PWD":/home/training trailofbits/eth-security-toolbox ``` -_Son komut, geçerli dizininize erişimi olan bir docker'da eth-security-toolbox'ı çalıştırır. Dosyaları ana makinenizden değiştirebilir ve dosyalar üzerindeki araçları docker'dan çalıştırabilirsiniz_ +_Son komut, geçerli dizininize erişimi olan bir docker'da eth-security-toolbox'ı çalıştırır. Dosyaları ana makinenizden değiştirebilir ve docker'dan dosyalar üzerindeki araçları çalıştırabilirsiniz_ Docker'ın içinde şunu çalıştırın: @@ -35,37 +37,37 @@ solc-select 0.5.11 cd /home/training ``` -### İkili {#binary} +### İkili dosya {#binary} [https://github.com/crytic/echidna/releases/tag/v1.4.0.0](https://github.com/crytic/echidna/releases/tag/v1.4.0.0) ## Özellik tabanlı bulandırmaya giriş {#introduction-to-property-based-fuzzing} -Echidna, önceki blog yazılarımızda tanımladığımız bir özellik tabanlı bulandırıcıdır ([1](https://blog.trailofbits.com/2018/03/09/echidna-a-smart-fuzzer-for-ethereum/), [2](https://blog.trailofbits.com/2018/05/03/state-machine-testing-with-echidna/), [3](https://blog.trailofbits.com/2020/03/30/an-echidna-for-all-seasons/)). +Echidna, önceki blog yazılarımızda ([1](https://blog.trailofbits.com/2018/03/09/echidna-a-smart-fuzzer-for-ethereum/), [2](https://blog.trailofbits.com/2018/05/03/state-machine-testing-with-echidna/), [3](https://blog.trailofbits.com/2020/03/30/an-echidna-for-all-seasons/)) açıkladığımız gibi özellik tabanlı bir bulandırıcıdır. ### Bulandırma {#fuzzing} -[Bulandırma ](https://wikipedia.org/wiki/Fuzzing) (Fuzzing), güvenlik topluluğunda iyi bilinen bir tekniktir. Programdaki hataları bulmak için hemen hemen rastgele girdiler oluşturmayı içerir. Geleneksel yazılım için bulandırıcılar ([AFL](http://lcamtuf.coredump.cx/afl/) veya [LibFuzzer](https://llvm.org/docs/LibFuzzer.html) gibi) hata tespiti için verimli araçlar olarak bilinirler. +[Bulandırma](https://wikipedia.org/wiki/Fuzzing), güvenlik topluluğunda iyi bilinen bir tekniktir. Programdaki hataları bulmak için aşağı yukarı rastgele girdiler oluşturmayı içerir. Geleneksel yazılımlar için bulandırıcıların ([AFL](http://lcamtuf.coredump.cx/afl/) veya [LibFuzzer](https://llvm.org/docs/LibFuzzer.html) gibi) hata bulmak için etkili araçlar olduğu bilinmektedir. Tamamen rastgele girdi oluşturmanın ötesinde, iyi girdiler üretmek için aşağıdakiler de dahil olmak üzere birçok teknik ve strateji vardır: -- Her yürütmeden geri bildirim alın ve bunu, oluşturmaya rehberlik etmek için kullanın. Örneğin, yeni oluşturulan bir girdi yeni bir yolun keşfine yol açıyorsa, ona yakın yeni girdiler oluşturmak mantıklı olabilir. -- Yapısal bir kısıtlamaya göre girdi oluşturma. Örneğin, girdiniz sağlama toplamı olan bir başlık içeriyorsa, bulandırıcının sağlama toplamını doğrulayan girdi oluşturmasına izin vermek mantıklı olacaktır. -- Yeni girdiler oluşturmak için bilinen girdileri kullanma: Eğer büyük bir geçerli girdi veri setine erişiminiz varsa, bulandırıcınız sıfırdan üretime başlamak yerine onlardan yeni girdiler üretebilir. Bunlara genellikle _tohum_ denir. +- Her yürütmeden geri bildirim alın ve bunu oluşturmaya rehberlik etmek için kullanın. Örneğin, yeni oluşturulan bir girdi yeni bir yolun keşfine yol açarsa, ona yakın yeni girdiler oluşturmak mantıklı olabilir. +- Yapısal bir kısıtlamaya göre girdi oluşturma. Örneğin, girdiniz bir sağlama toplamı içeren bir başlık içeriyorsa, bulandırıcının sağlama toplamını doğrulayan girdi oluşturmasına izin vermek mantıklı olacaktır. +- Yeni girdiler oluşturmak için bilinen girdileri kullanma: Büyük bir geçerli girdi veri kümesine erişiminiz varsa, bulandırıcınız sıfırdan oluşturmaya başlamak yerine bunlardan yeni girdiler üretebilir. Bunlara genellikle _tohumlar_ denir. -### Özellik temelli bulandırma {#property-based-fuzzing} +### Özellik tabanlı bulandırma {#property-based-fuzzing} -Echidna spesifik bir bulandırıcı ailesine mensuptur: özellik temelli bulandırma çoğunlukla [QuickCheck](https://wikipedia.org/wiki/QuickCheck)'ten ilham almıştır. Çökmeleri bulmaya çalışan klasik bulandırıcının aksine Echidna, kullanıcı tanımlı değişmezleri kırmaya çalışacaktır. +Echidna, özel bir bulandırıcı ailesine aittir: büyük ölçüde [QuickCheck](https://wikipedia.org/wiki/QuickCheck)'ten ilham alan özellik tabanlı bir bulandırma. Çökmeleri bulmaya çalışan klasik bulandırıcıların aksine Echidna, kullanıcı tanımlı değişmezleri kırmaya çalışacaktır. -Akıllı sözleşmelerde değişmezler, sözleşmenin ulaşabileceği herhangi bir yanlış veya geçersiz durumu temsil edebilen Solidity fonksiyonlarıdır: +Akıllı sözleşmelerde değişmezler, sözleşmenin ulaşabileceği ve aşağıdakileri içeren herhangi bir yanlış veya geçersiz durumu temsil edebilen Solidity fonksiyonlarıdır: -- Hatalı erişim denetimi: Saldırgan sözleşmenin sahibi oldu. -- Hatalı durum makinesi: Sözleşme duraklatılmışken token'lar aktarılabilir. -- Hatalı aritmetik: Kullanıcı bakiyesini yetersiz gösterip sınırsız ücretsiz token alabilir. +- Yanlış erişim denetimi: Saldırgan sözleşmenin sahibi oldu. +- Yanlış durum makinesi: Sözleşme duraklatılmışken jetonlar aktarılabilir. +- Yanlış aritmetik: kullanıcı bakiyesinde bir aşağı taşma yaratarak sınırsız ücretsiz jeton alabilir. ### Echidna ile bir özelliği test etme {#testing-a-property-with-echidna} -Echidna ile akıllı bir sözleşmenin nasıl test edileceğini göreceğiz. Hedef, aşağıdaki akıllı sözleşme [`token.sol`'dür](https://github.com/crytic/building-secure-contracts/blob/master/program-analysis/echidna/example/token.sol): +Echidna ile bir akıllı sözleşmenin nasıl test edileceğini göreceğiz. Hedef, aşağıdaki akıllı sözleşmedir: [`token.sol`](https://github.com/crytic/building-secure-contracts/blob/master/program-analysis/echidna/example/token.sol): ```solidity contract Token{ @@ -83,26 +85,26 @@ contract Token{ } ``` -Bu token'ın aşağıdaki özelliklere sahip olması gerektiği varsayımını yapacağız: +Bu jetonun aşağıdaki özelliklere sahip olması gerektiği varsayımında bulunacağız: -- Herkes en fazla 1000 token'a sahip olabilir -- Token transfer edilemez (bir ERC20 token'ı değildir) +- Herkes en fazla 1000 jetona sahip olabilir +- Jeton transfer edilemez (bu bir ERC20 jetonu değildir) -### Bir özellik yazın {#write-a-property} +### Bir özellik yazma {#write-a-property} -Echidna özellikleri, Solidity fonksiyonlarıdır. Bir özellikte şunlar bulunmalı: +Echidna özellikleri Solidity fonksiyonlarıdır. Bir özellik şunları yapmalıdır: -- Argümanı olmamalı -- Başarılıysa `true` döndürmeli -- Adı `echidna` ile başlıyor olmalı +- Argümanı olmamalıdır +- Başarılı olursa `true` döndürmelidir +- Adı `echidna` ile başlamalıdır -Echidna şunları yapacaktır: +Echidna şunları yapar: -- Özelliği test etmek için otomatik olarak rastgele işlemler oluşturacak. -- Bir özelliğin `false` döndürmesine veya bir hata vermesine neden olan tüm işlemleri bildirecek. -- Bir özelliği çağırırken yan etkiyi atacak (yani özellik bir durum değişkenini değiştirirse, testten sonra atılır) +- Özelliği test etmek için otomatik olarak rastgele işlemler oluşturur. +- Bir özelliğin `false` döndürmesine veya bir hata atmasına neden olan tüm işlemleri bildirir. +- Bir özelliği çağırırken yan etkiyi atar (yani, özellik bir durum değişkenini değiştirirse, testten sonra atılır) -Aşağıdaki özellik, çağıranın 1000'den fazla token'a sahip olup olmadığını kontrol eder: +Aşağıdaki özellik, çağıranın 1000'den fazla jetona sahip olmadığını kontrol eder: ```solidity function echidna_balance_under_1000() public view returns(bool){ @@ -110,7 +112,7 @@ function echidna_balance_under_1000() public view returns(bool){ } ``` -Sözleşmenizi özelliklerinizden ayırmak için kalıtımı kullanın: +Sözleşmenizi özelliklerinden ayırmak için kalıtım kullanın: ```solidity contract TestToken is Token{ @@ -120,28 +122,28 @@ contract TestToken is Token{ } ``` -[`token.sol`](https://github.com/crytic/building-secure-contracts/blob/master/program-analysis/echidna/example/token.sol) özelliği uygular ve token'dan kalıtım gerçekleştirir. +[`token.sol`](https://github.com/crytic/building-secure-contracts/blob/master/program-analysis/echidna/example/token.sol), özelliği uygular ve jetondan miras alır. -### Bir sözleşme başlatın {#initiate-a-contract} +### Bir sözleşme başlatma {#initiate-a-contract} -Echidna, argümanı olmayan bir [yapıcıya](/developers/docs/smart-contracts/anatomy/#constructor-functions) ihtiyaç duyar. Sözleşmenizin özel bir başlatmaya ihtiyacı varsa, bunu yapıcıda yapmanız gerekir. +Echidna'nın argümansız bir [kurucuya](/developers/docs/smart-contracts/anatomy/#constructor-functions) ihtiyacı vardır. Sözleşmenizin belirli bir başlatmaya ihtiyacı varsa, bunu kurucuda yapmanız gerekir. Echidna'da bazı özel adresler vardır: -- `0x00a329c0648769A73afAc7F9381E08FB43dBEA72` yapıcıyı çağırır. -- `0x10000`, `0x20000`, ve `0x00a329C0648769a73afAC7F9381e08fb43DBEA70` diğer fonksiyonları rastgele çağırır. +- `0x00a329c0648769A73afAc7F9381E08FB43dBEA72`, kurucuyu çağırır. +- `0x10000`, `0x20000` ve `0x00a329C0648769a73afAC7F9381e08fb43DBEA70`, diğer fonksiyonları rastgele çağırır. -Mevcut örneğimizde herhangi bir özel başlatmaya ihtiyacımız yok, bu yüzden yapıcımız boş. +Mevcut örneğimizde herhangi bir özel başlatmaya ihtiyacımız yok, bu nedenle kurucumuz boş. -### Echidna'yı çalıştırın {#run-echidna} +### Echidna'yı Çalıştırma {#run-echidna} -Echidna şöyle başlatılır: +Echidna şununla başlatılır: ```bash echidna-test contract.sol ``` -Contract.sol birden fazla sözleşme içeriyorsa hedefi belirtebilirsiniz: +Eğer contract.sol birden fazla sözleşme içeriyorsa, hedefi belirtebilirsiniz: ```bash echidna-test contract.sol --contract MyContract @@ -149,7 +151,7 @@ echidna-test contract.sol --contract MyContract ### Özet: Bir özelliği test etme {#summary-testing-a-property} -Aşağıdaki, örneğimizde echidna'nın çalışmasını özetler: +Aşağıdakiler, Echidna'nın örneğimizde çalıştırılmasını özetlemektedir: ```solidity contract TestToken is Token{ @@ -172,11 +174,12 @@ echidna_balance_under_1000: failed!💥 ... ``` -Echidna, `backdoor` çağrılırsa özelliğin ihlal edildiğini tespit etti. +Echidna, `backdoor` çağrılırsa özelliğin ihlal edildiğini buldu. -## Bir bulandırma işlemi sırasında çağrılacak filtreleme işlevleri {#filtering-functions-to-call-during-a-fuzzing-campaign} +## Bir bulandırma kampanyası sırasında çağrılacak fonksiyonları filtreleme {#filtering-functions-to-call-during-a-fuzzing-campaign} -Bulandırılacak fonksiyonların nasıl filtreleneceğini göreceğiz. Hedef, aşağıdaki akıllı sözleşmedir: +Bulandırmaya tabi tutulacak fonksiyonların nasıl filtreleneceğini göreceğiz. +Hedef, aşağıdaki akıllı sözleşmedir: ```solidity contract C { @@ -227,7 +230,9 @@ contract C { } ``` -Bu küçük örnek, Echidna'yı bir durum değişkenini değiştirmek için belirli bir işlem dizisini bulmaya zorlar. Bu bir bulandırıcı için zordur ([Manticore](https://github.com/trailofbits/manticore) gibi sembolik bir yürütme aracı kullanılması önerilir). Bunu doğrulamak için Echidna'yı çalıştırabiliriz: +Bu küçük örnek, Echidna'yı bir durum değişkenini değiştirmek için belirli bir işlem dizisi bulmaya zorlar. +Bu bir bulandırıcı için zordur ([Manticore](https://github.com/trailofbits/manticore) gibi sembolik bir yürütme aracı kullanılması önerilir). +Bunu doğrulamak için Echidna'yı çalıştırabiliriz: ```bash echidna-test multi.sol @@ -238,28 +243,30 @@ Seed: -3684648582249875403 ### Fonksiyonları filtreleme {#filtering-functions} -Echidna, iki sıfırlama fonksiyonu (`reset1` ve `reset2`) tüm durum değişkenlerini `false` olarak ayarlayacağından, bu sözleşmeyi test etmek için doğru sırayı bulmakta zorlanıyor. Ancak, sıfırlama fonksiyonunu kara listeye almak veya yalnızca `f`, `g`, `h` ve `i` fonksiyonlarını beyaz listeye almak için özel bir Echidna özelliğini kullanabiliriz. +İki sıfırlama fonksiyonu (`reset1` ve `reset2`) tüm durum değişkenlerini `false` olarak ayarlayacağından, Echidna bu sözleşmeyi test etmek için doğru diziyi bulmakta zorlanır. +Ancak, sıfırlama fonksiyonunu kara listeye almak veya yalnızca `f`, `g`, +`h` ve `i` fonksiyonlarını beyaz listeye almak için özel bir Echidna özelliği kullanabiliriz. -İşlevleri kara listeye almak için bu yapılandırma dosyasını kullanabiliriz: +Fonksiyonları kara listeye almak için bu yapılandırma dosyasını kullanabiliriz: ```yaml filterBlacklist: true filterFunctions: ["reset1", "reset2"] ``` -Fonksiyonları filtrelemek için başka bir yaklaşım, beyaz listeye alınan fonksiyonları listelemektir. Bunu yapmak için şu yapılandırma dosyasını kullanabiliriz: +Fonksiyonları filtrelemek için başka bir yaklaşım, beyaz listeye alınmış fonksiyonları listelemektir. Bunu yapmak için şu yapılandırma dosyasını kullanabiliriz: ```yaml filterBlacklist: false filterFunctions: ["f", "g", "h", "i"] ``` -- `filterBlacklist` varsayılan olarak `true` hâldedir. -- Filtreleme sadece ada göre yapılacaktır (parametreler olmadan). Eğer `f()` ve `f(uint256)` varsa, `"f"` filtresi iki fonksiyon ile de eşleşecektir. +- `filterBlacklist` varsayılan olarak `true` değerindedir. +- Filtreleme yalnızca isme göre (parametreler olmadan) gerçekleştirilecektir. `f()` ve `f(uint256)` fonksiyonlarınız varsa, `"f"` filtresi her iki fonksiyonla da eşleşecektir. -### Echidna'yı çalıştırın {#run-echidna-1} +### Echidna'yı Çalıştırma {#run-echidna-1} -Echidna'yı bir `blacklist.yaml` yapılandırma dosyası ile çalıştırmak için: +`blacklist.yaml` yapılandırma dosyasıyla Echidna'yı çalıştırmak için: ```bash echidna-test multi.sol --config blacklist.yaml @@ -272,11 +279,11 @@ echidna_state4: failed!💥 i() ``` -Echidna, özelliği tahrif edecek işlemlerin sırasını neredeyse anında bulacaktır. +Echidna, özelliği yanlışlayacak işlem dizisini neredeyse anında bulacaktır. ### Özet: Fonksiyonları filtreleme {#summary-filtering-functions} -Echidna, aşağıdakileri kullanarak bulanıklaştırma çalışması sırasında çağrılacak fonksiyonları kara veya beyaz listeye alabilir: +Echidna, bir bulandırma kampanyası sırasında çağrılacak fonksiyonları aşağıdakileri kullanarak kara listeye veya beyaz listeye alabilir: ```yaml filterBlacklist: true @@ -288,11 +295,11 @@ echidna-test contract.sol --config config.yaml ... ``` -Echidna, `f1`, `f2` ve `f3`'ü kara listeye alarak veya `filterBlacklist` boolean değerine göre yalnızca bunları çağırarak bir bulanıklaştırma çalışması başlatır. +Echidna, `filterBlacklist` boole değerine göre ya `f1`, `f2` ve `f3`'ü kara listeye alarak ya da sadece bunları çağırarak bir bulandırma kampanyası başlatır. -## Solidity'nin teyidi Echidna ile nasıl test edilir {#how-to-test-soliditys-assert-with-echidna} +## Echidna ile Solidity'nin assert'ünü test etme {#how-to-test-soliditys-assert-with-echidna} -Bu kısa öğreticide, sözleşmelerde teyit kontrolünü test etmek için Echidna'nın nasıl kullanılacağını göstereceğiz. Diyelim ki şuna benzer bir sözleşmemiz var: +Bu kısa öğreticide, sözleşmelerde iddia kontrolünü test etmek için Echidna'nın nasıl kullanılacağını göstereceğiz. Diyelim ki elimizde şöyle bir sözleşme var: ```solidity contract Incrementor { @@ -307,9 +314,10 @@ contract Incrementor { } ``` -### Bir teyit yazın {#write-an-assertion} +### Bir iddia yazma {#write-an-assertion} -Farkını döndürdükten sonra `tmp` öğesinin `counter` değerinden küçük veya eşit olduğundan emin olmak istiyoruz. Bir Echidna özelliği yazabiliriz, ancak `tmp` değerini bir yerde saklamamız gerekecek. Onun yerine, bunun gibi bir teyit kullanabilirdik: +Farklarını döndürdükten sonra `tmp`'nin `counter`'dan küçük veya ona eşit olduğundan emin olmak istiyoruz. Bir +Echidna özelliği yazabiliriz, ancak `tmp` değerini bir yerde saklamamız gerekir. Bunun yerine, şöyle bir iddia kullanabiliriz: ```solidity contract Incrementor { @@ -324,15 +332,15 @@ contract Incrementor { } ``` -### Echidna'yı çalıştırın {#run-echidna-2} +### Echidna'yı Çalıştırma {#run-echidna-2} -Teyit hatası testini etkinleştirmek için bir [Echidna yapılandırma dosyası](https://github.com/crytic/echidna/wiki/Config) `config.yaml` oluşturun: +İddia hatası testini etkinleştirmek için bir [Echidna yapılandırma dosyası](https://github.com/crytic/echidna/wiki/Config) olan `config.yaml` dosyasını oluşturun: ```yaml checkAsserts: true ``` -Bu sözleşmeyi Echidna'da çalıştırdığımızda, beklenen sonuçları elde ediyoruz: +Bu sözleşmeyi Echidna'da çalıştırdığımızda beklenen sonuçları elde ederiz: ```bash echidna-test assert.sol --config config.yaml @@ -346,15 +354,15 @@ assertion in inc: failed!💥 Seed: 1806480648350826486 ``` -Gördüğünüz gibi, Echidna `inc` fonksiyonunda bazı onaylama hataları bildiriyor. Fonksiyon başına birden fazla teyit eklemek mümkündür, ancak Echidna hangi iddianın başarısız olduğunu söyleyemez. +Gördüğünüz gibi, Echidna `inc` fonksiyonunda bir iddia hatası bildiriyor. Fonksiyon başına birden fazla iddia eklemek mümkündür, ancak Echidna hangi iddianın başarısız olduğunu söyleyemez. -### Teyitler nerede ve nasıl kullanılır {#when-and-how-use-assertions} +### İddialar ne zaman ve nasıl kullanılır {#when-and-how-use-assertions} -Teyitler, özellikle kontrol edilecek koşullar bazı `f` işlemlerinin doğru kullanımıyla doğrudan ilgiliyse, açık özelliklere alternatif olarak kullanılabilir. Bazı kodlardan sonra teyitler eklemek, kontrolün yürütüldükten hemen sonra yapılmasını zorunlu kılar: +İddialar, özellikle kontrol edilecek koşullar doğrudan bir `f` işleminin doğru kullanımıyla ilgiliyse, açık özelliklere alternatif olarak kullanılabilir. Bir koddan sonra iddia eklemek, kontrolün kod yürütüldükten hemen sonra gerçekleşmesini sağlar: ```solidity function f(..) public { - // some complex code + // karmaşık bir kod ... assert (condition); ... @@ -362,7 +370,7 @@ function f(..) public { ``` -Aksine, açık bir echidna özelliği kullanmak işlemleri rastgele yürütecektir ve tam olarak ne zaman kontrol edileceğini zorlamanın kolay bir yolu yoktur. Bu geçici çözümü yapmak hâlâ mümkündür: +Aksine, açık bir Echidna özelliği kullanmak işlemleri rastgele yürütecektir ve tam olarak ne zaman kontrol edileceğini zorlamanın kolay bir yolu yoktur. Yine de bu geçici çözümü uygulamak mümkündür: ```solidity function echidna_assert_after_f() public returns (bool) { @@ -371,22 +379,22 @@ function echidna_assert_after_f() public returns (bool) { } ``` -Ancak, bazı sorunlar vardır: +Ancak, bazı sorunlar var: -- `f` `internal` veya `external` olarak duyurulursa başarısız olur. -- `f`'u çağırmak için hangi bağımsız değişkenlerin kullanılması gerektiği açık değil. +- `f` `internal` veya `external` olarak bildirilirse başarısız olur. +- `f` fonksiyonunu çağırmak için hangi argümanların kullanılması gerektiği belirsizdir. - `f` geri dönerse, özellik başarısız olur. -Genel olarak, teyitlerin nasıl kullanılacağına ilişkin [John Regehr'in tavsiyesini](https://blog.regehr.org/archives/1091) izlemenizi öneririz: +Genel olarak, iddiaların nasıl kullanılacağı konusunda [John Regehr'in tavsiyesine](https://blog.regehr.org/archives/1091) uymanızı öneririz: -- Teyit kontrolü sırasında herhangi bir yan etkiyi zorlamayın. Örnek olarak: `assert(ChangeStateAndReturn() == 1)` -- Açık ifadeleri teyit etmeyin. Örnek olarak `var`'ın `uint` olarak duyurulduğu yerde `assert(var >= 0)` olması gibi. +- İddia kontrolü sırasında herhangi bir yan etkiyi zorlamayın. Örneğin: `assert(ChangeStateAndReturn() == 1)` +- Açık ifadeleri iddia etmeyin. Örneğin, `var` `uint` olarak bildirildiğinde `assert(var >= 0)`. -Son olarak, Echidna bunu algılamayacağı (ancak sözleşme yine de geri dönecek) için lütfen `assert` yerine `require` **kullanmayın**. +Son olarak, lütfen `assert` yerine `require` **kullanmayın**, çünkü Echidna bunu tespit edemeyecektir (ancak sözleşme yine de geri dönecektir). -### Özet: Teyit Kontrolü {#summary-assertion-checking} +### Özet: İddia Kontrolü {#summary-assertion-checking} -Aşağıdakiler, örneğimizde echidna'nın çalışmasını özetler: +Aşağıdakiler, Echidna'nın örneğimizde çalıştırılmasını özetlemektedir: ```solidity contract Incrementor { @@ -413,11 +421,11 @@ assertion in inc: failed!💥 Seed: 1806480648350826486 ``` -Echidna, bu fonksiyon büyük argümanlarla birden çok kez çağrılırsa `inc` içindeki teyidin başarısız olabileceğini buldu. +Echidna, bu fonksiyon büyük argümanlarla birden çok kez çağrılırsa `inc` içindeki iddianın başarısız olabileceğini buldu. -## Bir Echidna korpusunu toplama ve değiştirme {#collecting-and-modifying-an-echidna-corpus} +## Bir Echidna korpusu toplama ve değiştirme {#collecting-and-modifying-an-echidna-corpus} -Echidna ile bir işlem korpusunun nasıl toplanıp kullanılacağını göreceğiz. Hedef, aşağıdaki akıllı sözleşme [`magic.sol`'dur](https://github.com/crytic/building-secure-contracts/blob/master/program-analysis/echidna/example/magic.sol): +Echidna ile bir işlem korpusunun nasıl toplanacağını ve kullanılacağını göreceğiz. Hedef, aşağıdaki akıllı sözleşmedir: [`magic.sol`](https://github.com/crytic/building-secure-contracts/blob/master/program-analysis/echidna/example/magic.sol): ```solidity contract C { @@ -437,7 +445,9 @@ contract C { } ``` -Bu küçük örnek, Echidna'yı bir durum değişkenini değiştirmek için belirli değerleri bulmaya zorlar. Bu, bir bulandırıcı için zordur ([Manticore](https://github.com/trailofbits/manticore) gibi sembolik bir yürütme aracı kullanılması önerilir). Bunu doğrulamak için Echidna'yı çalıştırabiliriz: +Bu küçük örnek, Echidna'yı bir durum değişkenini değiştirmek için belirli değerleri bulmaya zorlar. Bu bir bulandırıcı için zordur +([Manticore](https://github.com/trailofbits/manticore) gibi sembolik bir yürütme aracı kullanılması önerilir). +Bunu doğrulamak için Echidna'yı çalıştırabiliriz: ```bash echidna-test magic.sol @@ -448,7 +458,7 @@ echidna_magic_values: passed! 🎉 Seed: 2221503356319272685 ``` -Ancak, bu bulandırma çalışmasını yürütürken korpus toplamak için hâlâ Echidna'yı kullanabiliriz. +Ancak, bu bulandırma kampanyasını yürütürken korpus toplamak için yine de Echidna'yı kullanabiliriz. ### Bir korpus toplama {#collecting-a-corpus} @@ -458,7 +468,7 @@ Korpus toplamayı etkinleştirmek için bir korpus dizini oluşturun: mkdir corpus-magic ``` -Bir [Echidna konfigürasyon dosyası](https://github.com/crytic/echidna/wiki/Config) `config.yaml` da oluşturun: +Ve bir [Echidna yapılandırma dosyası](https://github.com/crytic/echidna/wiki/Config) olan `config.yaml` dosyasını oluşturun: ```yaml coverage: true @@ -471,7 +481,8 @@ corpusDir: "corpus-magic" echidna-test magic.sol --config config.yaml ``` -Echidna hâlâ doğru sihirli değerleri bulamıyor ancak topladığı korpusa bakabiliriz. Örneğin bu dosyalardan biri şuydu: +Echidna hala doğru sihirli değerleri bulamıyor, ancak topladığı korpusa bakabiliriz. +Örneğin, bu dosyalardan biri şuydu: ```json [ @@ -516,17 +527,18 @@ Echidna hâlâ doğru sihirli değerleri bulamıyor ancak topladığı korpusa b ] ``` -Bu girdinin özelliğimizdeki başarısızlığı tetiklemeyeceği açıktır. Ancak bir sonraki adımda bunun için nasıl yapılandırılabileceğini göreceğiz. +Açıkçası, bu girdi özelliğimizdeki başarısızlığı tetiklemeyecektir. Ancak, bir sonraki adımda bunun için nasıl değiştirileceğini göreceğiz. -### Bir korpus tohumlama {#seeding-a-corpus} +### Bir korpusu besleme {#seeding-a-corpus} -Echidna'nın `magic` fonksiyonuyla başa çıkabilmesi için biraz yardıma ihtiyacı var. Bunun için uygun parametreleri kullanmak için girdiyi kopyalayıp değiştireceğiz: +Echidna'nın `magic` fonksiyonuyla başa çıkabilmesi için biraz yardıma ihtiyacı var. Bunun için uygun +parametreleri kullanmak üzere girdiyi kopyalayıp değiştireceğiz: ```bash cp corpus/2712688662897926208.txt corpus/new.txt ``` -`magic(42,129,333,0)` çağırması için `new.txt`'yi düzenleyeceğiz. Şimdi, Echidna'yı yeniden çalıştırabiliriz: +`magic(42,129,333,0)` fonksiyonunu çağırmak için `new.txt` dosyasını değiştireceğiz. Şimdi, Echidna'yı yeniden çalıştırabiliriz: ```bash echidna-test magic.sol --config config.yaml @@ -542,11 +554,11 @@ Seed: -7293830866560616537 ``` -Bu kez, özelliğin ihlal edildiğini hemen tespit etti. +Bu kez, özelliğin anında ihlal edildiğini buldu. -## Yüksek gaz tüketimi olan işlemleri bulma {#finding-transactions-with-high-gas-consumption} +## Yüksek gaz tüketimli işlemleri bulma {#finding-transactions-with-high-gas-consumption} -Echidna ile yüksek gaz tüketimi olan işlemleri nasıl bulacağımızı göreceğiz. Hedef, aşağıdaki akıllı sözleşmedir: +Echidna ile yüksek gaz tüketimli işlemlerin nasıl bulunacağını göreceğiz. Hedef, aşağıdaki akıllı sözleşmedir: ```solidity contract C { @@ -571,9 +583,10 @@ contract C { } ``` -Burada `expensive` büyük bir gaz tüketimine sahip olabilir. +Burada `expensive` yüksek bir gaz tüketimine sahip olabilir. -Şu anda Echidna'nın test etmek için her zaman bir özelliğe ihtiyacı vardır: burada `echidna_test` her zaman `true` değerini döndürür. Bunu doğrulamak için Echidna'yı çalıştırabiliriz: +Şu anda, Echidna'nın test etmek için her zaman bir özelliğe ihtiyacı vardır: burada `echidna_test` her zaman `true` döndürür. +Bunu doğrulamak için Echidna'yı çalıştırabiliriz: ``` echidna-test gas.sol @@ -583,7 +596,7 @@ echidna_test: passed! 🎉 Seed: 2320549945714142710 ``` -### Gaz Tüketimini Hesaplama {#measuring-gas-consumption} +### Gaz Tüketimini Ölçme {#measuring-gas-consumption} Echidna ile gaz tüketimini etkinleştirmek için bir `config.yaml` yapılandırma dosyası oluşturun: @@ -591,16 +604,16 @@ Echidna ile gaz tüketimini etkinleştirmek için bir `config.yaml` yapılandır estimateGas: true ``` -Bu örnekte, sonuçların anlaşılmasını kolaylaştırmak için işlem sırasının boyutunu da azaltacağız: +Bu örnekte, sonuçların daha kolay anlaşılmasını sağlamak için işlem dizisinin boyutunu da azaltacağız: ```yaml seqLen: 2 estimateGas: true ``` -### Echidna'yı çalıştırın {#run-echidna-3} +### Echidna'yı Çalıştırma {#run-echidna-3} -Yapılandırma dosyasını oluşturduktan sonra Echidna'yı şu şekilde çalıştırabiliriz: +Yapılandırma dosyası oluşturulduktan sonra, Echidna'yı şu şekilde çalıştırabiliriz: ```bash echidna-test gas.sol --config config.yaml @@ -617,12 +630,13 @@ Seed: -325611019680165325 ``` -- Gösterilen gaz [HEVM](https://github.com/dapphub/dapptools/tree/master/src/hevm#hevm-) tarafından sağlanan bir tahmindir. +- Gösterilen gaz, [HEVM](https://github.com/dapphub/dapptools/tree/master/src/hevm#hevm-) tarafından sağlanan bir tahmindir. -### Gaz Düşürücü Çağrıları Filtreleme {#filtering-out-gas-reducing-calls} +### Gaz Azaltan Çağrıları Filtreleme {#filtering-out-gas-reducing-calls} -Yukarıdaki **bir bulandırma çalışması sırasında çağrılacak fonksiyonları filtreleme** hakkındaki öğretici, bazı fonksiyonların testinizden nasıl kaldırılacağını gösterir. -Bu, doğru bir gaz tahmini elde etmek için kritik öneme sahiptir. Aşağıdaki örneği göz önünde bulundurun: +Yukarıdaki **bir bulandırma kampanyası sırasında çağrılacak fonksiyonları filtreleme** öğreticisi, testlerinizden bazı fonksiyonları nasıl kaldıracağınızı gösterir. +Bu, doğru bir gaz tahmini elde etmek için kritik olabilir. +Aşağıdaki örneği inceleyin: ```solidity contract C { @@ -648,7 +662,7 @@ contract C { } ``` -Echidna tüm fonksiyonları çağırabilirse yüksek gaz maliyeti olan işlemleri kolayca bulamaz: +Echidna tüm fonksiyonları çağırabilirse, yüksek gaz maliyetli işlemleri kolayca bulamaz: ``` echidna-test pushpop.sol --config config.yaml @@ -662,7 +676,8 @@ clear used a maximum of 35916 gas push used a maximum of 40839 gas ``` -Bunun nedeni, maliyetin `addrs` boyutuna bağlı olması ve rastgele aramaların diziyi neredeyse boş bırakma eğiliminde olmasıdır. Ancak `pop` ve `clear`'ı kara listeye almak bize çok daha iyi sonuçlar verir: +Bunun nedeni, maliyetin `addrs` boyutuna bağlı olması ve rastgele çağrıların diziyi neredeyse boş bırakma eğiliminde olmasıdır. +Ancak, `pop` ve `clear` fonksiyonlarını kara listeye almak bize çok daha iyi sonuçlar verir: ```yaml filterBlacklist: true @@ -677,9 +692,9 @@ push used a maximum of 40839 gas check used a maximum of 1484472 gas ``` -### Özet: Yüksek gaz tüketimi olan işlemleri bulma {#summary-finding-transactions-with-high-gas-consumption} +### Özet: Yüksek gaz tüketimli işlemleri bulma {#summary-finding-transactions-with-high-gas-consumption} -Echidna, `estimateGas` yapılandırma seçeneğini kullanarak yüksek gaz tüketimi olan işlemleri bulabilir: +Echidna, `estimateGas` yapılandırma seçeneğini kullanarak yüksek gaz tüketimli işlemleri bulabilir: ```yaml estimateGas: true @@ -690,4 +705,4 @@ echidna-test contract.sol --config config.yaml ... ``` -Echidna, bulandırma çalışması sona erdiğinde her fonksiyon için maksimum gaz tüketimine sahip bir dizi raporlayacaktır. +Echidna, bulandırma kampanyası bittiğinde her fonksiyon için maksimum gaz tüketimine sahip bir dizi raporlayacaktır. diff --git a/public/content/translations/tr/developers/tutorials/how-to-use-manticore-to-find-smart-contract-bugs/index.md b/public/content/translations/tr/developers/tutorials/how-to-use-manticore-to-find-smart-contract-bugs/index.md index 106290ff162..61778241e60 100644 --- a/public/content/translations/tr/developers/tutorials/how-to-use-manticore-to-find-smart-contract-bugs/index.md +++ b/public/content/translations/tr/developers/tutorials/how-to-use-manticore-to-find-smart-contract-bugs/index.md @@ -1,17 +1,19 @@ --- -title: Akıllı sözleşme açıkları bulmak için Manticore nasıl kullanılır -description: Akıllı sözleşmeleri test etmek için Echidna otomatik olarak nasıl kullanılır +title: "Akıllı sözleşmelerdeki hataları bulmak için Manticore nasıl kullanılır" +description: "Akıllı sözleşmelerdeki hataları otomatik olarak bulmak için Manticore nasıl kullanılır" author: Trailofbits lang: tr tags: - - "solidity" - - "akıllı kontratlar" - - "güvenlik" - - "test etmek" - - "resmi doğrulama" -skill: beginner + [ + "solidity", + "akıllı kontratlar", + "güvenlik", + "test etmek", + "resmi doğrulama" + ] +skill: advanced published: 2020-01-13 -source: Güvenli sözleşmeler oluşturmak +source: Building secure contracts sourceUrl: https://github.com/crytic/building-secure-contracts/tree/master/program-analysis/manticore --- @@ -19,35 +21,35 @@ Bu öğreticinin amacı, akıllı sözleşmelerdeki hataları otomatik olarak bu ## Kurulum {#installation} -Manticore >= python 3.6 gerektirir. Pip veya docker kullanılarak kurulabilir. +Manticore, Python 3.6 veya üzerini gerektirir. Pip veya docker kullanılarak kurulabilir. -### Docker aracılığıyla Manticore {#manticore-through-docker} +### Docker ile Manticore {#manticore-through-docker} ```bash docker pull trailofbits/eth-security-toolbox docker run -it -v "$PWD":/home/training trailofbits/eth-security-toolbox ``` -_Son komut, geçerli dizininize erişimi olan bir docker'da eth-security-toolbox'ı çalıştırır. Dosyaları ana makinenizden değiştirebilir ve dosyalar üzerindeki araçları docker'dan çalıştırabilirsiniz_ +_Son komut, geçerli dizininize erişimi olan bir docker'da eth-security-toolbox'ı çalıştırır. Dosyaları ana makinenizden değiştirebilir ve docker'dan dosyalar üzerindeki araçları çalıştırabilirsiniz_ -Docker'ın içinde şunu çalıştırın: +Docker içinde şunu çalıştırın: ```bash solc-select 0.5.11 cd /home/trufflecon/ ``` -### Pip aracılığıyla Manticore {#manticore-through-pip} +### Pip ile Manticore {#manticore-through-pip} ```bash pip3 install --user manticore ``` -solc 0.5.11 tavsiye edilir. +solc 0.5.11 sürümü tavsiye edilir. -### Bir komut dosyası çalıştırma {#running-a-script} +### Bir betik çalıştırma {#running-a-script} -Python 3 ile bir python komut dosyası çalıştırmak için: +Python 3 ile bir python betiği çalıştırmak için: ```bash python3 script.py @@ -57,58 +59,58 @@ python3 script.py ### Özetle Dinamik Sembolik Yürütme {#dynamic-symbolic-execution-in-a-nutshell} -Dinamik sembolik yürütme (DSE), yüksek derecede semantik farkındalık ile bir durum uzayını araştıran bir program analiz tekniğidir. Bu teknik, `path predicates` (yol belirteçleri) olarak adlandırılan matematiksel formüller olarak temsil edilen "program yollarının" keşfine dayanır. Kavramsal olarak, bu teknik iki adımda yol belirteçleri üzerinde çalışır: +Dinamik sembolik yürütme (DSE), yüksek derecede anlamsal farkındalıkla bir durum uzayını araştıran bir program analizi tekniğidir. Bu teknik, `yol koşulları` (path predicates) olarak adlandırılan matematiksel formüller olarak temsil edilen "program yollarının" keşfine dayanır. Kavramsal olarak, bu teknik yol koşulları üzerinde iki adımda çalışır: -1. Programın girdisi üzerindeki kısıtlamalar kullanılarak oluşturulurlar. +1. Programın girdisindeki kısıtlamalar kullanılarak oluşturulurlar. 2. İlişkili yolların yürütülmesine neden olacak program girdileri oluşturmak için kullanılırlar. -Bu yaklaşım, tanımlanmış tüm program durumlarının somut yürütme sırasında tetiklenmesi şeklinde yanlış pozitifler üretmez. Örneğin, analiz bir tamsayı taşması bulursa, bunun tekrarlanabilir olması garanti edilir. +Bu yaklaşım, tanımlanan tüm program durumları somut yürütme sırasında tetiklenebildiği için yanlış pozitif sonuç üretmez. Örneğin, analiz bir tam sayı taşması bulursa, bunun yeniden üretilebilir olması garanti edilir. -### Yol Belirteci Örneği {#path-predicate-example} +### Yol Koşulu Örneği {#path-predicate-example} -DSE'nin nasıl çalıştığına dair bir fikir edinmek için aşağıdaki örneği göz önünde bulundurun: +DSE'nin nasıl çalıştığına dair bir fikir edinmek için aşağıdaki örneği inceleyin: ```solidity function f(uint a){ if (a == 65) { - // A bug is present + // Bir hata mevcut } } ``` -`f()` iki yol içerdiği için, DSE iki farklı yol belirteci inşa eder: +`f()` iki yol içerdiğinden, bir DSE iki farklı yol koşulu oluşturacaktır: -- Path 1: `a == 65` -- Path 2: `Not (a == 65)` +- Yol 1: `a == 65` +- Yol 2: `Not (a == 65)` -Her yol belirteci, denklemi çözmeye çalışacak sözde [SMT çözücüsüne](https://wikipedia.org/wiki/Satisfiability_modulo_theories) verilebilecek matematiksel bir formüldür. `Path 1` için, çözücü yolun `a = 65` ile keşfedileceğini söyleyecektir. `Path 2` için, çözücü `a`'ya 65'ten farklı herhangi bir değer verebilir, örneğin `a = 0`. +Her yol koşulu, denklemi çözmeye çalışacak olan ve [SMT çözücü](https://wikipedia.org/wiki/Satisfiability_modulo_theories) olarak adlandırılan bir araca verilebilen matematiksel bir formüldür. `Yol 1` için çözücü, yolun `a = 65` ile keşfedilebileceğini söyleyecektir. `Yol 2` için çözücü `a`'ya 65'ten farklı herhangi bir değer verebilir, örneğin `a = 0`. ### Özellikleri doğrulama {#verifying-properties} -Manticore, her yolun tüm yürütülmesi üzerinde tam kontrole izin verir. Sonuç olarak, hemen hemen her şeye keyfi kısıtlamalar eklemenize izin verir. Bu kontrol, sözleşmedeki özelliklerin oluşturulmasına izin verir. +Manticore, her yolun tüm yürütümü üzerinde tam kontrol sağlar. Sonuç olarak, neredeyse her şeye isteğe bağlı kısıtlamalar eklemenize olanak tanır. Bu kontrol, sözleşme üzerinde özellikler oluşturulmasına olanak tanır. -Aşağıdaki örneği göz önünde bulundurun: +Aşağıdaki örneği inceleyin: ```solidity function unsafe_add(uint a, uint b) returns(uint c){ - c = a + b; // no overflow protection + c = a + b; // taşma koruması yok return c; } ``` -Burada fonksiyonda keşfedilecek tek bir yol var: +Burada fonksiyonda keşfedilecek tek bir yol vardır: -- Path 1: `c = a + b` +- Yol 1: `c = a + b` -Manticore'u kullanarak taşma olup olmadığını kontrol edebilir ve yol belirtecine kısıtlamalar ekleyebilirsiniz: +Manticore'u kullanarak taşmayı kontrol edebilir ve yol koşuluna kısıtlamalar ekleyebilirsiniz: - `c = a + b AND (c < a OR c < b)` -`a` ve `b` için yukarıdaki yol belirtecinin uygun olduğu bir değerleme bulmak mümkünse, bir taşma bulmuşsunuz demektir. Örneğin çözücü `a = 10 , b = MAXUINT256` girdisini oluşturabilir. +`a` ve `b` için yukarıdaki yol koşulunun uygulanabilir olduğu bir değerleme bulmak mümkünse bu, bir taşma bulduğunuz anlamına gelir. Örneğin, çözücü `a = 10, b = MAXUINT256` girdisini oluşturabilir. -Sabit bir versiyonu düşünürseniz: +Düzeltilmiş bir sürümü düşünürsek: ```solidity function safe_add(uint a, uint b) returns(uint c){ @@ -119,17 +121,17 @@ function safe_add(uint a, uint b) returns(uint c){ } ``` -Taşma denetimiyle ilişkili formül şöyle olacaktır: +Taşma kontrolü ile ilişkili formül şöyle olacaktır: - `c = a + b AND (c >= a) AND (c=>b) AND (c < a OR c < b)` -Bu formül çözülemez; başka bir deyişle bu, `safe_add`'da `c`'nin her zaman artacağının **ispatıdır**. +Bu formül çözülemez; başka bir deyişle bu, `safe_add` içinde `c`'nin her zaman artacağının bir **kanıtıdır**. -Bu nedenle DSE, kodunuzdaki keyfi kısıtlamaları doğrulayabilen güçlü bir araçtır. +Bu nedenle DSE, kodunuzdaki isteğe bağlı kısıtlamaları doğrulayabilen güçlü bir araçtır. -## Manticore altında çalışma {#running-under-manticore} +## Manticore altında çalıştırma {#running-under-manticore} -Manticore API ile akıllı bir sözleşmeyi nasıl keşfedeceğimizi göreceğiz. Hedef, aşağıdaki akıllı sözleşme [`example.sol`'dür](https://github.com/crytic/building-secure-contracts/blob/master/program-analysis/manticore/examples/example.sol): +Manticore API'si ile bir akıllı sözleşmenin nasıl keşfedileceğini göreceğiz. Hedef, aşağıdaki akıllı sözleşmedir: [`example.sol`](https://github.com/crytic/building-secure-contracts/blob/master/program-analysis/manticore/examples/example.sol): ```solidity pragma solidity >=0.4.24 <0.6.0; @@ -143,62 +145,63 @@ contract Simple { } ``` -### Bağımsız bir keşif çalıştırın {#run-a-standalone-exploration} +### Bağımsız bir keşif çalıştırma {#run-a-standalone-exploration} -Aşağıdaki komutla Manticore'u doğrudan akıllı sözleşme üzerinde çalıştırabilirsiniz (`project` bir Solidity Dosyası veya bir proje dizini olabilir): +Aşağıdaki komutla Manticore'u doğrudan akıllı sözleşme üzerinde çalıştırabilirsiniz (`project` bir Solidity dosyası veya bir proje dizini olabilir): ```bash $ manticore project ``` -Bunun gibi test senaryolarının çıktısını alacaksınız (sıra değişebilir): +Bunun gibi test senaryolarının çıktısını alırsınız (sıra değişebilir): ``` ... -... m.c.manticore:INFO: Generated testcase No. 0 - STOP -... m.c.manticore:INFO: Generated testcase No. 1 - REVERT -... m.c.manticore:INFO: Generated testcase No. 2 - RETURN -... m.c.manticore:INFO: Generated testcase No. 3 - REVERT -... m.c.manticore:INFO: Generated testcase No. 4 - STOP -... m.c.manticore:INFO: Generated testcase No. 5 - REVERT -... m.c.manticore:INFO: Generated testcase No. 6 - REVERT -... m.c.manticore:INFO: Results in /home/ethsec/workshops/Automated Smart Contracts Audit - TruffleCon 2018/manticore/examples/mcore_t6vi6ij3 +... m.c.manticore:INFO: Oluşturulan test senaryosu No. 0 - STOP +... m.c.manticore:INFO: Oluşturulan test senaryosu No. 1 - REVERT +... m.c.manticore:INFO: Oluşturulan test senaryosu No. 2 - RETURN +... m.c.manticore:INFO: Oluşturulan test senaryosu No. 3 - REVERT +... m.c.manticore:INFO: Oluşturulan test senaryosu No. 4 - STOP +... m.c.manticore:INFO: Oluşturulan test senaryosu No. 5 - REVERT +... m.c.manticore:INFO: Oluşturulan test senaryosu No. 6 - REVERT +... m.c.manticore:INFO: Sonuçlar: /home/ethsec/workshops/Automated Smart Contracts Audit - TruffleCon 2018/manticore/examples/mcore_t6vi6ij3 ... ``` -Ek bilgi olmadan Manticore, sözleşmede yeni yollar keşfetmeyene kadar sözleşmeyi yeni sembolik işlemlerle keşfedecektir. Manticore, başarısız bir işlemden sonra (örneğin: bir geri alma işleminden sonra) yeni işlemler çalıştırmaz. +Ek bilgi olmadan Manticore, sözleşmede yeni yollar keşfetmeyene kadar sözleşmeyi yeni sembolik +işlemlerle keşfedecektir. Manticore, başarısız bir işlemden sonra (ör. bir geri döndürmeden sonra) yeni işlemler çalıştırmaz. -Manticore, bilgileri bir `mcore_*` dizininde çıkaracaktır. Diğerlerinin yanı sıra bu dizinde şunları bulacaksınız: +Manticore, bilgileri bir `mcore_*` dizinine çıkaracaktır. Diğerlerinin yanı sıra bu dizinde şunları bulacaksınız: -- `global.summary`: kapsam ve derleme uyarıları -- `test_XXXXX.summary`: kapsam, son talimat, test durumu başına hesap bakiyeleri -- `test_XXXXX.tx`: test durumu başına detaylı işlem listesi +- `global.summary`: kapsam ve derleyici uyarıları +- `test_XXXXX.summary`: kapsam, son talimat, test senaryosu başına hesap bakiyeleri +- `test_XXXXX.tx`: test senaryosu başına ayrıntılı işlem listesi Burada Manticore, aşağıdakilere karşılık gelen 7 test senaryosu bulur (dosya adı sırası değişebilir): -| | İşlem 0 | İşlem 1 | İşlem 2 | Sonuç | -|:--------------------:|:------------------:|:-------------------:| ------------------- |:------:| -| **test_00000000.tx** | Sözleşme oluşturma | f(!=65) | f(!=65) | STOP | -| **test_00000001.tx** | Sözleşme oluşturma | fallback fonksiyonu | | REVERT | -| **test_00000002.tx** | Sözleşme oluşturma | | | RETURN | -| **test_00000003.tx** | Sözleşme oluşturma | f(65) | | REVERT | -| **test_00000004.tx** | Sözleşme oluşturma | f(!=65) | | STOP | -| **test_00000005.tx** | Sözleşme oluşturma | f(!=65) | f(65) | REVERT | -| **test_00000006.tx** | Sözleşme oluşturma | f(!=65) | fallback fonksiyonu | REVERT | +| | İşlem 0 | İşlem 1 | İşlem 2 | Sonuç | +| :-------------------------------------------------------: | :----------------: | :------------------------: | -------------------------- | :----: | +| **test_00000000.tx** | Sözleşme oluşturma | f(!=65) | f(!=65) | STOP | +| **test_00000001.tx** | Sözleşme oluşturma | yedek fonksiyon | | REVERT | +| **test_00000002.tx** | Sözleşme oluşturma | | | RETURN | +| **test_00000003.tx** | Sözleşme oluşturma | f(65) | | REVERT | +| **test_00000004.tx** | Sözleşme oluşturma | f(!=65) | | STOP | +| **test_00000005.tx** | Sözleşme oluşturma | f(!=65) | f(65) | REVERT | +| **test_00000006.tx** | Sözleşme oluşturma | f(!=65) | yedek fonksiyon | REVERT | -_Keşif özeti f(!=65), 65'ten farklı herhangi bir değerle çağrılan f'yi ifade eder._ +_Keşif özeti `f(!=65)`, f'nin 65'ten farklı herhangi bir değerle çağrıldığını belirtir._ -Gördüğünüz üzere, Manticore her başarılı veya geri alınan işlem için benzersiz bir test senaryosu oluşturur. +Fark edebileceğiniz gibi, Manticore her başarılı veya geri döndürülen işlem için benzersiz bir test senaryosu oluşturur. -Eğer hızlı kod keşfi istiyorsanız `--quick-mode` bayrağını kullanın (hata algılayıcıları, gaz hesaplamalarını vb. devre dışarı bırakır) +Hızlı kod keşfi istiyorsanız `--quick-mode` bayrağını kullanın (hata algılayıcılarını, gaz hesaplamasını vb. devre dışı bırakır) -### API aracılığıyla bir akıllı sözleşmeyi değiştirin {#manipulate-a-smart-contract-through-the-api} +### API aracılığıyla bir akıllı sözleşmeyi yönetme {#manipulate-a-smart-contract-through-the-api} -Bu bölüm, Manticore Python API aracılığıyla bir akıllı sözleşmenin nasıl değiştirileceğini açıklar. `*.py` python uzantılı yeni bir dosya oluşturabilir ve bu dosyaya API komutlarını (temelleri aşağıda anlatılacaktır) ekleyerek gerekli kodu yazabilir ve ardından `$ python3 *.py` komutu ile çalıştırabilirsiniz. Ayrıca aşağıdaki komutları doğrudan python konsolunda çalıştırabilirsiniz, konsolu çalıştırmak için `$ python3` komutunu kullanın. +Bu bölüm, Manticore Python API'si aracılığıyla bir akıllı sözleşmenin nasıl yönetileceğini ayrıntılarıyla açıklar. Python uzantısı `*.py` olan yeni bir dosya oluşturabilir ve bu dosyaya API komutlarını (temelleri aşağıda açıklanacaktır) ekleyerek gerekli kodu yazabilir ve ardından `$ python3 *.py` komutuyla çalıştırabilirsiniz. Ayrıca aşağıdaki komutları doğrudan python konsolunda yürütebilirsiniz, konsolu çalıştırmak için `$ python3` komutunu kullanın. -### Hesap oluşturma {#creating-accounts} +### Hesap Oluşturma {#creating-accounts} -Yapmanız gereken ilk şey, aşağıdaki komutlarla yeni bir blok zinciri başlatmaktır: +Yapmanız gereken ilk şey, aşağıdaki komutlarla yeni bir blokzincir başlatmaktır: ```python from manticore.ethereum import ManticoreEVM @@ -225,7 +228,7 @@ contract Simple { } } ''' -# Initiate the contract +# Sözleşmeyi başlat contract_account = m.solidity_create_contract(source_code, owner=user_account) ``` @@ -242,7 +245,7 @@ Manticore iki tür işlemi destekler: #### Ham işlem {#raw-transaction} -Bir ham işlem [m.transaction](https://manticore.readthedocs.io/en/latest/evm.html?highlight=transaction#manticore.ethereum.ManticoreEVM.transaction) ile yürütülür: +Ham bir işlem [m.transaction](https://manticore.readthedocs.io/en/latest/evm.html?highlight=transaction#manticore.ethereum.ManticoreEVM.transaction) kullanılarak yürütülür: ```python m.transaction(caller=user_account, @@ -251,7 +254,7 @@ m.transaction(caller=user_account, value=value) ``` -Çağıran, adres, veri veya işlemin değeri somut veya sembolik olabilir: +Çağıran, adres, veri veya işlemin değeri somut ya da sembolik olabilir: - [m.make_symbolic_value](https://manticore.readthedocs.io/en/latest/evm.html?highlight=make_symbolic_value#manticore.ethereum.ManticoreEVM.make_symbolic_value) sembolik bir değer oluşturur. - [m.make_symbolic_buffer(size)](https://manticore.readthedocs.io/en/latest/evm.html?highlight=make_symbolic_buffer#manticore.ethereum.ManticoreEVM.make_symbolic_buffer) sembolik bir bayt dizisi oluşturur. @@ -267,40 +270,41 @@ m.transaction(caller=user_account, value=symbolic_value) ``` -Veriler sembolik ise, Manticore işlemin yürütülmesi sırasında sözleşmenin tüm fonksiyonlarını keşfedecektir. Fonksiyon seçiminin nasıl çalıştığını anlamak için [Ethernaut CTF Kullanımı](https://blog.trailofbits.com/2017/11/06/hands-on-the-ethernaut-ctf/) makalesindeki Fallback Function açıklamasına göz atmak faydalı olacaktır. +Veri sembolik ise Manticore, işlem yürütme sırasında sözleşmenin tüm fonksiyonlarını keşfedecektir. Fonksiyon seçiminin nasıl çalıştığını anlamak için [Ethernaut CTF'ye Giriş](https://blog.trailofbits.com/2017/11/06/hands-on-the-ethernaut-ctf/) makalesindeki Yedek Fonksiyon açıklamasını görmek faydalı olacaktır. #### Adlandırılmış işlem {#named-transaction} -İşlevler, adları aracılığıyla yürütülebilir. `f(uint var)` komutunu user_account'tan sembolik bir değerle ve 0 ether ile yürütmek için şunu kullanın: +Fonksiyonlar adları aracılığıyla yürütülebilir. +`f(uint var)` öğesini sembolik bir değerle, `user_account`'tan ve 0 ether ile yürütmek için şunu kullanın: ```python symbolic_var = m.make_symbolic_value() contract_account.f(symbolic_var, caller=user_account, value=0) ``` -İşlemin `value` değeri belirtilmemişse, varsayılan olarak 0'dır. +İşlemin `value` değeri belirtilmemişse varsayılan olarak 0'dır. #### Özet {#summary-1} - Bir işlemin argümanları somut veya sembolik olabilir -- Ham işlem tüm fonksiyonları keşfedecek -- Fonksiyonlar, isimleriyle çağrılabilir +- Ham bir işlem tüm fonksiyonları keşfedecektir +- Fonksiyonlar adlarıyla çağrılabilir ### Çalışma Alanı {#workspace} `m.workspace`, oluşturulan tüm dosyalar için çıktı dizini olarak kullanılan dizindir: ```python -print("Results are in {}".format(m.workspace)) +print("Sonuçlar burada: {}".format(m.workspace)) ``` -### Keşfi Durdurma {#terminate-the-exploration} +### Keşfi Sonlandırma {#terminate-the-exploration} -Keşfi durdurmak için [m.finalize()](https://manticore.readthedocs.io/en/latest/evm.html?highlight=finalize#manticore.ethereum.ManticoreEVM.finalize) kullanın. Bu yöntem çağrıldığında ve Manticore keşfedilen yolların her biri için test senaryoları oluşturduğunda başka işlem gönderilmeyecektir. +Keşfi durdurmak için [m.finalize()](https://manticore.readthedocs.io/en/latest/evm.html?highlight=finalize#manticore.ethereum.ManticoreEVM.finalize) kullanın. Bu yöntem çağrıldıktan ve Manticore keşfedilen her yol için test senaryoları oluşturduktan sonra başka işlem gönderilmemelidir. -### Özet: Manticore altında çalışma {#summary-running-under-manticore} +### Özet: Manticore altında çalıştırma {#summary-running-under-manticore} -Önceki tüm adımları bir araya getirerek şunu elde ederiz: +Önceki tüm adımları bir araya getirdiğimizde şunu elde ederiz: ```python from manticore.ethereum import ManticoreEVM @@ -316,15 +320,15 @@ contract_account = m.solidity_create_contract(source_code, owner=user_account) symbolic_var = m.make_symbolic_value() contract_account.f(symbolic_var) -print("Results are in {}".format(m.workspace)) -m.finalize() # stop the exploration +print("Sonuçlar burada: {}".format(m.workspace)) +m.finalize() # keşfi durdur ``` -Yukarıdaki kodların tamamını [`example_run.py`](https://github.com/crytic/building-secure-contracts/blob/master/program-analysis/manticore/examples/example_run.py) içinde bulabilirsiniz +Yukarıdaki kodun tamamını [`example_run.py`](https://github.com/crytic/building-secure-contracts/blob/master/program-analysis/manticore/examples/example_run.py) dosyasında bulabilirsiniz -## Atış yollarını alma {#getting-throwing-paths} +## Hata Veren Yolları Alma {#getting-throwing-paths} -Şimdi `f()` içinde bir istisna belirten yollar için spesifik girdiler oluşturacağız. Hedef hâlâ şu akıllı sözleşmedir [`example.sol`](https://github.com/crytic/building-secure-contracts/blob/master/program-analysis/manticore/examples/example.sol): +Şimdi `f()` içinde bir istisna oluşturan yollar için belirli girdiler oluşturacağız. Hedef, aşağıdaki akıllı sözleşmedir: [`example.sol`](https://github.com/crytic/building-secure-contracts/blob/master/program-analysis/manticore/examples/example.sol): ```solidity pragma solidity >=0.4.24 <0.6.0; @@ -337,35 +341,35 @@ contract Simple { } ``` -### Durum bilgisini kullanmak {#using-state-information} +### Durum bilgilerini kullanma {#using-state-information} -Yürütülen her yolun kendi blok zinciri durumu vardır. Bir durum ya hazırdır ya da öldürülmüştür, yani bir THROW veya REVERT komutuna ulaştığı anlamına gelir: +Yürütülen her yolun blokzincirde kendi durumu vardır. Bir durum ya hazırdır ya da sonlandırılmıştır, yani bir THROW veya REVERT talimatına ulaşmıştır: -- [m.ready_states](https://manticore.readthedocs.io/en/latest/states.html#accessing): hazır olan durumların listesi (REVERT/INVALID yürütmediler) -- [m.killed_states](https://manticore.readthedocs.io/en/latest/states.html#accessings): öldürülmüş durumların listesi +- [m.ready_states](https://manticore.readthedocs.io/en/latest/states.html#accessing): hazır olan durumların listesi (bir REVERT/INVALID yürütmediler) +- [m.killed_states](https://manticore.readthedocs.io/en/latest/states.html#accessings): sonlandırılmış durumların listesi - [m.all_states](https://manticore.readthedocs.io/en/latest/states.html#accessings): tüm durumlar ```python for state in m.all_states: - # do something with state + # durum ile bir şeyler yap ``` -Durum bilgisine erişebilirsiniz. Örneğin: +Durum bilgilerine erişebilirsiniz. Örneğin: - `state.platform.get_balance(account.address)`: hesabın bakiyesi -- `state.platform.transactions`: işlem listesi -- `state.platform.transactions[-1].return_data`: son işlemden döndürülen veri +- `state.platform.transactions`: işlemlerin listesi +- `state.platform.transactions[-1].return_data`: son işlem tarafından döndürülen veri -Son işlem tarafından döndürülen veriler, ABI.deserialize ile bir değere dönüştürülebilen bir dizidir, örneğin: +Son işlem tarafından döndürülen veri, örneğin `ABI.deserialize` ile bir değere dönüştürülebilen bir dizidir: ```python data = state.platform.transactions[0].return_data data = ABI.deserialize("uint", data) ``` -### Test durumu nasıl oluşturulur {#how-to-generate-testcase} +### Test senaryosu nasıl oluşturulur {#how-to-generate-testcase} -Test durumu oluşturmak için [m.generate_testcase(state, name)](https://manticore.readthedocs.io/en/latest/evm.html?highlight=generate_testcase#manticore.ethereum.ManticoreEVM.generate_testcase) kullanın: +Test senaryosu oluşturmak için [m.generate_testcase(state, name)](https://manticore.readthedocs.io/en/latest/evm.html?highlight=generate_testcase#manticore.ethereum.ManticoreEVM.generate_testcase) kullanın: ```python m.generate_testcase(state, 'BugFound') @@ -373,13 +377,13 @@ m.generate_testcase(state, 'BugFound') ### Özet {#summary-2} -- m.all_states ile durumu yineleyebilirsiniz -- `state.platform.get_balance(account.address)` hesabın bakiyesini döndürür -- `state.platform.transactions` işlemlerin listesini döndürür +- `m.all_states` ile durum üzerinde yineleme yapabilirsiniz +- `state.platform.get_balance(account.address)`, hesabın bakiyesini döndürür +- `state.platform.transactions`, işlemlerin listesini döndürür - `transaction.return_data` döndürülen veridir - `m.generate_testcase(state, name)` durum için girdiler oluşturur -### Özet: Atış Yolunu Almak {#summary-getting-throwing-path} +### Özet: Hata Veren Yolu Alma {#summary-getting-throwing-path} ```python from manticore.ethereum import ManticoreEVM @@ -395,21 +399,23 @@ contract_account = m.solidity_create_contract(source_code, owner=user_account) symbolic_var = m.make_symbolic_value() contract_account.f(symbolic_var) -## Check if an execution ends with a REVERT or INVALID +## Bir yürütmenin REVERT veya INVALID ile bitip bitmediğini kontrol edin + for state in m.terminated_states: last_tx = state.platform.transactions[-1] if last_tx.result in ['REVERT', 'INVALID']: - print('Throw found {}'.format(m.workspace)) + print('Hata bulundu {}'.format(m.workspace)) m.generate_testcase(state, 'ThrowFound') ``` -Yukarıdaki kodların tamamını [`example_run.py`](https://github.com/crytic/building-secure-contracts/blob/master/program-analysis/manticore/examples/example_run.py) içinde bulabilirsiniz +Yukarıdaki kodun tamamını [`example_run.py`](https://github.com/crytic/building-secure-contracts/blob/master/program-analysis/manticore/examples/example_run.py) dosyasında bulabilirsiniz -_terminated_state tarafından döndürülen tüm durumların sonuçlarında REVERT veya INVALID olduğundan çok daha basit bir komut dosyası oluşturabileceğimizi unutmayın: Bu örnek yalnızca API'nin nasıl değiştirileceğini göstermek içindir._ +_`terminated_state` tarafından döndürülen tüm durumların sonucunda REVERT veya INVALID olduğundan çok daha basit bir betik oluşturabileceğimizi unutmayın: bu örnek yalnızca API'nin nasıl yönetileceğini göstermek içindi._ -## Kısıtlamalar ekleme {#adding-constraints} +## Kısıtlama ekleme {#adding-constraints} -Keşfi nasıl kısıtlayabileceğimizi göreceğiz. `f()` belgesinin, fonksiyonun hiçbir zaman `a == 65` ile çağrılmadığını belirttiği varsayımını yapacağız, bu nedenle `a == 65` ile herhangi bir hata gerçek bir hata değildir. Hedef hâlâ aşağıdaki akıllı sözleşmedir [`example.sol`](https://github.com/crytic/building-secure-contracts/blob/master/program-analysis/manticore/examples/example.sol): +Keşfi nasıl kısıtlayacağımızı göreceğiz. `f()` belgesinin, fonksiyonun asla `a == 65` ile çağrılmadığını +belirttiğini varsayacağız, bu nedenle `a == 65` ile ilgili herhangi bir hata gerçek bir hata değildir. Hedef, aşağıdaki akıllı sözleşmedir: [`example.sol`](https://github.com/crytic/building-secure-contracts/blob/master/program-analysis/manticore/examples/example.sol): ```solidity pragma solidity >=0.4.24 <0.6.0; @@ -424,22 +430,22 @@ contract Simple { ### Operatörler {#operators} -[Operatörler](https://github.com/trailofbits/manticore/blob/master/manticore/core/smtlib/operators.py) modülü, sağladığı diğer şeylerin yanı sıra kısıtlamaların değiştirilmesini kolaylaştırır: +[Operatörler](https://github.com/trailofbits/manticore/blob/master/manticore/core/smtlib/operators.py) modülü, kısıtlamaların yönetimini kolaylaştırır ve diğerlerinin yanı sıra şunları sağlar: - Operators.AND, - Operators.OR, -- Operators.UGT (unsigned greater than), -- Operators.UGE (unsigned greater than or equal to), -- Operators.ULT (unsigned lower than), -- Operators.ULE (unsigned lower than or equal to). +- Operators.UGT (işaretsiz büyüktür), +- Operators.UGE (işaretsiz büyük veya eşittir), +- Operators.ULT (işaretsiz küçüktür), +- Operators.ULE (işaretsiz küçük veya eşittir). -Modülü içe aktarmak için aşağıdakileri kullanın: +Modülü içe aktarmak için aşağıdakini kullanın: ```python from manticore.core.smtlib import Operators ``` -`Operators.CONCAT` bir diziyi bir değerle birleştirmek için kullanılır. Örneğin, bir işlemin return_data'sının başka bir değere karşı kontrol edilmesi için bir değerle değiştirilmesi gerekir: +`Operators.CONCAT`, bir diziyi bir değere birleştirmek için kullanılır. Örneğin, bir işlemin `return_data`'sının başka bir değere karşı kontrol edilmesi için bir değere dönüştürülmesi gerekir: ```python last_return = Operators.CONCAT(256, *last_return) @@ -447,11 +453,12 @@ last_return = Operators.CONCAT(256, *last_return) ### Kısıtlamalar {#state-constraint} -Kısıtlamaları global olarak veya belirli bir durum için kullanabilirsiniz. +Kısıtlamaları genel olarak veya belirli bir durum için kullanabilirsiniz. -#### Global kısıtlama {#state-constraint} +#### Genel kısıtlama {#state-constraint} -Global bir kısıtlama eklemek için `m.constrain(constraint)` kullanın. Örneğin, sembolik bir adresten bir sözleşmeyi arayabilir ve bu adresi belirli değerlerle sınırlandırabilirsiniz: +Genel bir kısıtlama eklemek için `m.constrain(constraint)` kullanın. +Örneğin, sembolik bir adresten bir sözleşme çağırabilir ve bu adresi belirli değerler olacak şekilde kısıtlayabilirsiniz: ```python symbolic_address = m.make_symbolic_value() @@ -464,19 +471,21 @@ m.transaction(caller=user_account, #### Durum kısıtlaması {#state-constraint} -Belirli bir duruma kısıtlama eklemek için [state.constrain(constraint)](https://manticore.readthedocs.io/en/latest/states.html?highlight=StateBase#manticore.core.state.StateBase.constrain) kullanın. Üzerindeki bazı özellikleri kontrol etmek için keşfinden sonra durumu kısıtlamak için kullanılabilir. +Belirli bir duruma kısıtlama eklemek için [state.constrain(constraint)](https://manticore.readthedocs.io/en/latest/states.html?highlight=StateBase#manticore.core.state.StateBase.constrain) kullanın. +Üzerindeki bazı özellikleri kontrol etmek için keşfinden sonra durumu kısıtlamak için kullanılabilir. -### Kısıtlamaları kontrol etmek {#checking-constraint} +### Kısıtlamayı Kontrol Etme {#checking-constraint} -Eğer bir kısıtlamanın hâlâ mümkün olup olmadığını görmek istiyorsanız `solver.check(state.constraints)` kullanın. Örneğin, aşağıdakiler symbolic_value'yu 65'ten farklı olacak şekilde kısıtlar ve durumun hâlâ uygulanabilir olup olmadığını kontrol eder: +Bir kısıtlamanın hala uygulanabilir olup olmadığını öğrenmek için `solver.check(state.constraints)` kullanın. +Örneğin, aşağıdakiler `symbolic_value` değerini 65'ten farklı olacak şekilde kısıtlayacak ve durumun hala uygulanabilir olup olmadığını kontrol edecektir: ```python state.constrain(symbolic_var != 65) if solver.check(state.constraints): - # state is feasible + # durum uygulanabilir ``` -### Özet: Kısıtlamalar Ekleme {#summary-adding-constraints} +### Özet: Kısıtlama Ekleme {#summary-adding-constraints} Önceki koda kısıtlama ekleyerek şunu elde ederiz: @@ -499,18 +508,19 @@ contract_account.f(symbolic_var) no_bug_found = True -## Check if an execution ends with a REVERT or INVALID +## Bir yürütmenin REVERT veya INVALID ile bitip bitmediğini kontrol edin + for state in m.terminated_states: last_tx = state.platform.transactions[-1] if last_tx.result in ['REVERT', 'INVALID']: - # we do not consider the path were a == 65 + # a == 65 olduğu yolu dikkate almıyoruz condition = symbolic_var != 65 if m.generate_testcase(state, name="BugFound", only_if=condition): - print(f'Bug found, results are in {m.workspace}') + print(f'Hata bulundu, sonuçlar burada: {m.workspace}') no_bug_found = False if no_bug_found: - print(f'No bug found') + print(f'Hata bulunamadı') ``` -Yukarıdaki kodların tamamını [`example_run.py`](https://github.com/crytic/building-secure-contracts/blob/master/program-analysis/manticore/examples/example_run.py) içinde bulabilirsiniz +Yukarıdaki kodun tamamını [`example_run.py`](https://github.com/crytic/building-secure-contracts/blob/master/program-analysis/manticore/examples/example_run.py) dosyasında bulabilirsiniz diff --git a/public/content/translations/tr/developers/tutorials/how-to-use-slither-to-find-smart-contract-bugs/index.md b/public/content/translations/tr/developers/tutorials/how-to-use-slither-to-find-smart-contract-bugs/index.md index c38e8510d55..b74cf128299 100644 --- a/public/content/translations/tr/developers/tutorials/how-to-use-slither-to-find-smart-contract-bugs/index.md +++ b/public/content/translations/tr/developers/tutorials/how-to-use-slither-to-find-smart-contract-bugs/index.md @@ -1,28 +1,29 @@ --- -title: Akıllı sözleşme hatalarını bulmak için Slither nasıl kullanılır -description: Akıllı sözleşmelerdeki hataları otomatik olarak bulmak için Slither nasıl kullanılır +title: "Akıllı sözleşme hatalarını bulmak için Slither nasıl kullanılır?" +description: "Akıllı sözleşmelerdeki hataları otomatik olarak bulmak için Slither'ı kullanma" author: Trailofbits lang: tr tags: - - "solidity" - - "akıllı kontratlar" - - "güvenlik" - - "test etmek" - - "statik analiz" + [ + "solidity", + "akıllı kontratlar", + "güvenlik", + "test etmek" + ] skill: advanced published: 2020-06-09 -source: Güvenli sözleşmeler oluşturmak +source: Building secure contracts sourceUrl: https://github.com/crytic/building-secure-contracts/tree/master/program-analysis/slither --- -## Slither nasıl kullanılır {#how-to-use-slither} +## Slither Nasıl Kullanılır? {#how-to-use-slither} Bu öğreticinin amacı, akıllı sözleşmelerdeki hataları otomatik olarak bulmak için Slither'ın nasıl kullanılacağını göstermektir. - [Kurulum](#installation) - [Komut satırı kullanımı](#command-line) -- [Statik analize giriş](#static-analysis): Statik analize kısa giriş -- [API](#api-basics): Python API açıklaması +- [Statik analize giriş](#static-analysis): Statik analize kısa bir giriş +- [API](#api-basics): Python API'si açıklaması ## Kurulum {#installation} @@ -41,18 +42,18 @@ docker pull trailofbits/eth-security-toolbox docker run -it -v "$PWD":/home/trufflecon trailofbits/eth-security-toolbox ``` -_Son komut, geçerli dizininize erişimi olan bir docker'da eth-security-toolbox'ı çalıştırır. Dosyaları ana makinenizden değiştirebilir ve dosyalar üzerindeki araçları docker'dan çalıştırabilirsiniz_ +_Son komut, geçerli dizininize erişimi olan bir docker'da eth-security-toolbox'ı çalıştırır. Dosyaları ana makinenizden değiştirebilir ve docker'dan dosyalar üzerindeki araçları çalıştırabilirsiniz_ -Docker'ın içinde şunu çalıştırın: +Docker içinde şunu çalıştırın: ```bash solc-select 0.5.11 cd /home/trufflecon/ ``` -### Bir komut dosyası çalıştırma {#running-a-script} +### Bir betik çalıştırma {#running-a-script} -Python 3 ile bir python komut dosyası çalıştırmak için: +Python 3 ile bir python betiği çalıştırmak için: ```bash python3 script.py @@ -66,17 +67,17 @@ python3 script.py slither project_paths ``` -Algılayıcılara ek olarak Slither, [yazıcıları](https://github.com/crytic/slither#printers) ve [araçları](https://github.com/crytic/slither#tools) aracılığıyla kod inceleme kabiliyetlerine sahiptir. +Dedektörlere ek olarak Slither, [yazıcıları](https://github.com/crytic/slither#printers) ve [araçları](https://github.com/crytic/slither#tools) aracılığıyla kod inceleme yeteneklerine sahiptir. -Özel algılayıcılara ve GitHub entegrasyonuna erişmek için [crytic.io](https://github.com/crytic) kullanın. +Özel dedektörlere ve GitHub entegrasyonuna erişmek için [crytic.io](https://github.com/crytic) kullanın. ## Statik analiz {#static-analysis} -Slither statik analiz çerçevesinin kabiliyetleri ve dizaynı, blog gönderilerinde ([1](https://blog.trailofbits.com/2018/10/19/slither-a-solidity-static-analysis-framework/), [2](https://blog.trailofbits.com/2019/05/27/slither-the-leading-static-analyzer-for-smart-contracts/)) ve bir [akademik kağıtta](https://github.com/trailofbits/publications/blob/master/papers/wetseb19.pdf) açıklanmıştır. +Slither statik analiz çatısının yetenekleri ve tasarımı, blog gönderilerinde ([1](https://blog.trailofbits.com/2018/10/19/slither-a-solidity-static-analysis-framework/), [2](https://blog.trailofbits.com/2019/05/27/slither-the-leading-static-analyzer-for-smart-contracts/)) ve bir [akademik makalede](https://github.com/trailofbits/publications/blob/master/papers/wetseb19.pdf) açıklanmıştır. -Statik analiz çeşit çeşittir. Büyük olasılıkla [clang](https://clang-analyzer.llvm.org/) ve [gcc](https://lwn.net/Articles/806099/) gibi derleyicilerin bu araştırma tekniklerine bağlı olduğunun farkındasınızdır ancak bu, aynı zamanda [Infer](https://fbinfer.com/), [CodeClimate](https://codeclimate.com/), [FindBugs](http://findbugs.sourceforge.net/) ve [Frama-C](https://frama-c.com/) ve [Polyspace](https://www.mathworks.com/products/polyspace.html) gibi resmî yöntemlere dayalı araçların da önemini vurgular. +Statik analizin farklı türleri mevcuttur. [clang](https://clang-analyzer.llvm.org/) ve [gcc](https://lwn.net/Articles/806099/) gibi derleyicilerin bu araştırma tekniklerine dayandığını büyük olasılıkla fark etmişsinizdir, ancak bu aynı zamanda [Infer](https://fbinfer.com/), [CodeClimate](https://codeclimate.com/), [FindBugs](http://findbugs.sourceforge.net/) ve [Frama-C](https://frama-c.com/) ile [Polyspace](https://www.mathworks.com/products/polyspace.html) gibi resmi yöntemlere dayalı araçların da temelini oluşturur. -Burada statik analiz tekniklerini ve araştırmacıyı etraflıca incelemeyeceğiz. Bunun yerine, hataları bulmak ve kodu anlamak amacıyla onu daha etkili bir şekilde kullanabilmeniz için Slither'ın nasıl çalıştığını anlamak için gerekenlere odaklanacağız. +Burada statik analiz tekniklerini ve araştırmalarını kapsamlı bir şekilde incelemeyeceğiz. Bunun yerine, hataları bulmak ve kodu anlamak amacıyla onu daha etkili bir şekilde kullanabilmeniz için Slither'ın nasıl çalıştığını anlamak için gerekenlere odaklanacağız. - [Kod temsili](#code-representation) - [Kod analizi](#analysis) @@ -84,13 +85,13 @@ Burada statik analiz tekniklerini ve araştırmacıyı etraflıca incelemeyeceğ ### Kod temsili {#code-representation} -Tek bir yürütme yolu hakkında mantık oluşturan dinamik bir analizin aksine, statik analiz aynı anda tüm yollar hakkında mantık oluşturur. Bunu yapmak için farklı bir kod temsiline dayanır. Soyut söz dizimi ağacı (AST) ve kontrol akış grafiği (CFG) en yaygın iki statik analiz yöntemidir. +Tek bir yürütme yolunu değerlendiren dinamik analizin aksine, statik analiz aynı anda tüm yolları değerlendirir. Bunu yapmak için farklı bir kod temsiline dayanır. En yaygın iki tanesi soyut sözdizimi ağacı (AST) ve kontrol akış grafiğidir (CFG). -### Soyut Söz Dizimi Ağaçları (AST) {#abstract-syntax-trees-ast} +### Soyut Sözdizimi Ağaçları (AST) {#abstract-syntax-trees-ast} -AST, derleyici her kod ayrıştırdığında kullanılır. Muhtemelen statik analizin yapılabileceği en temel yapıdır. +AST, derleyici kodu her ayrıştırdığında kullanılır. Bu, muhtemelen statik analizin gerçekleştirilebileceği en temel yapıdır. -Özetle bir AST, genellikle her yaprağın bir değişken veya sabit içerdiği ve dahili düğümlerin işlenenler veya kontrol akışı işlemleri olduğu yapılandırılmış bir ağaçtır. Aşağıdaki kodu göz önünde bulundurun: +Özetle bir AST, genellikle her yaprağın bir değişken veya bir sabit içerdiği ve iç düğümlerin işlenenler veya kontrol akışı işlemleri olduğu yapılandırılmış bir ağaçtır. Aşağıdaki kodu göz önünde bulundurun: ```solidity function safeAdd(uint a, uint b) pure internal returns(uint){ @@ -107,9 +108,9 @@ function safeAdd(uint a, uint b) pure internal returns(uint){ Slither, solc tarafından dışa aktarılan AST'yi kullanır. -Oluşturulması basit olsa da, AST iç içe geçmiş bir yapıdır. Bazen, bunun analiz edilmesi pek kolay olmayabilir. Örnek olarak, `a + b <= a` ifadesi tarafından kullanılan operasyonları tanımlamak için, öncelikle `<=` ve sonrasında `+` analiz etmelisiniz. Yaygın bir yaklaşım, ağaçta yinelemeli olarak gezinen sözde ziyaretçi desenini kullanmaktır. Slither, [`ExpressionVisitor`](https://github.com/crytic/slither/blob/master/slither/visitors/expression/expression.py) içinde genel bir ziyaretçi bulundurur. +Oluşturulması basit olsa da, AST iç içe geçmiş bir yapıdır. Bazen, bunu analiz etmek pek kolay olmayabilir. Örneğin, `a + b <= a` ifadesinin kullandığı işlemleri belirlemek için önce `<=` ve ardından `+`yı analiz etmelisiniz. Yaygın bir yaklaşım, ağaçta özyinelemeli olarak gezinen ziyaretçi desenini kullanmaktır. Slither, [`ExpressionVisitor`](https://github.com/crytic/slither/blob/master/slither/visitors/expression/expression.py) içinde jenerik bir ziyaretçi içerir. -Aşağıdaki kod, ifadenin bir ekleme içerip içermediğini algılamak için `ExpressionVisitor` kullanır: +Aşağıdaki kod, ifadenin bir toplama işlemi içerip içermediğini tespit etmek için `ExpressionVisitor` kullanır: ```python from slither.visitors.expression.expression import ExpressionVisitor @@ -124,58 +125,58 @@ class HasAddition(ExpressionVisitor): if expression.type == BinaryOperationType.ADDITION: self._result = True -visitor = HasAddition(expression) # expression is the expression to be tested -print(f'The expression {expression} has a addition: {visitor.result()}') +visitor = HasAddition(expression) # expression, test edilecek ifadedir +print(f'{expression} ifadesi bir toplama içeriyor: {visitor.result()}') ``` ### Kontrol Akış Grafiği (CFG) {#control-flow-graph-cfg} -İkinci en yaygın kod temsili, kontrol akış grafiğidir (CFG). Adından da anlaşılacağı gibi, tüm yürütme yollarını ortaya çıkaran grafik tabanlı bir gösterimdir. Her düğüm bir veya birden fazla talimat içerir. Grafikteki kenarlar, kontrol akışı işlemlerini temsil eder (if/then/else, loop vb.). Önceki örneğimizin CFG'si: +İkinci en yaygın kod temsili kontrol akış grafiğidir (CFG). Adından da anlaşılacağı gibi, bu, tüm yürütme yollarını ortaya çıkaran graf tabanlı bir gösterimdir. Her düğüm bir veya daha fazla talimat içerir. Grafikteki kenarlar kontrol akışı işlemlerini (if/then/else, döngü vb.) temsil eder. Önceki örneğimizin CFG'si şöyledir: ![CFG](./cfg.png) CFG, analizlerin çoğunun üzerine inşa edildiği temsildir. -Diğer birçok kod temsili mevcuttur. Her temsilin yapmak istediğiniz analize göre avantajları ve dezavantajları vardır. +Daha birçok kod gösterimi mevcuttur. Her bir gösterimin, gerçekleştirmek istediğiniz analize göre avantajları ve dezavantajları vardır. ### Analiz {#analysis} -Slither ile yapabileceğiniz en basit analiz türü söz dizimsel analizdir. +Slither ile gerçekleştirebileceğiniz en basit analiz türleri sözdizimsel analizlerdir. -### Söz Dizimi Analizi {#syntax-analysis} +### Sözdizimi analizi {#syntax-analysis} -Slither, desen eşleştirme benzeri bir yaklaşım kullanarak tutarsızlıkları ve kusurları bulmak için kodun farklı bileşenleri ve temsilleri arasında gezinebilir. +Slither, desen eşleştirme benzeri bir yaklaşım kullanarak tutarsızlıkları ve kusurları bulmak için kodun farklı bileşenleri ve onların gösterimleri arasında gezinebilir. -Örneğin, aşağıdaki algılayıcılar söz dizimi ile ilgili sorunları arar: +Örneğin, aşağıdaki dedektörler söz dizimiyle ilgili sorunları arar: -- [Durum değişkeni gölgelemesi](https://github.com/crytic/slither/wiki/Detector-Documentation#state-variable-shadowing): tüm durum değişkenleri üzerinde yinelenir ve devralınan bir sözleşmeden bir değişkenin gölgelenip gölgelenmediğini kontrol eder ([state.py#L51-L62](https://github.com/crytic/slither/blob/0441338e055ab7151b30ca69258561a5a793f8ba/slither/detectors/shadowing/state.py#L51-L62)) +- [Durum değişkeni gölgeleme](https://github.com/crytic/slither/wiki/Detector-Documentation#state-variable-shadowing): tüm durum değişkenleri üzerinde yinelenir ve herhangi birinin kalıtılmış bir sözleşmeden bir değişkeni gölgeleyip gölgelemediğini kontrol eder ([state.py#L51-L62](https://github.com/crytic/slither/blob/0441338e055ab7151b30ca69258561a5a793f8ba/slither/detectors/shadowing/state.py#L51-L62)) -- [Hatalı ERC20 arayüzü](https://github.com/crytic/slither/wiki/Detector-Documentation#incorrect-erc20-interface): hatalı ERC20 fonksiyon imzalarını arayın ([incorrect_erc20_interface.py#L34-L55](https://github.com/crytic/slither/blob/0441338e055ab7151b30ca69258561a5a793f8ba/slither/detectors/erc/incorrect_erc20_interface.py#L34-L55)) +- [Hatalı ERC20 arayüzü](https://github.com/crytic/slither/wiki/Detector-Documentation#incorrect-erc20-interface): hatalı ERC20 fonksiyon imzalarını arar ([incorrect_erc20_interface.py#L34-L55](https://github.com/crytic/slither/blob/0441338e055ab7151b30ca69258561a5a793f8ba/slither/detectors/erc/incorrect_erc20_interface.py#L34-L55)) -### Semantik analiz {#semantic-analysis} +### Anlamsal analiz {#semantic-analysis} -Söz dizimi analizinin aksine, semantik bir analiz daha derine inecek ve kodun "anlamını" analiz edecektir. Bu aile, bazı geniş analiz türlerini içerir. Daha güçlü ve kullanışlı sonuçlara yol açarlar, ancak aynı zamanda bunları yazmak daha karmaşıktır. +Sözdizimi analizinin aksine, anlamsal bir analiz daha derine iner ve kodun "anlamını" analiz eder. Bu aile, bazı genel analiz türlerini içerir. Bunlar daha güçlü ve kullanışlı sonuçlara yol açar, ancak yazılmaları da daha karmaşıktır. -Semantik analiz, en gelişmiş güvenlik açığı tespitleri için kullanılır. +Anlamsal analizler, en gelişmiş güvenlik açığı tespitleri için kullanılır. #### Veri bağımlılığı analizi {#fixed-point-computation} -`variable_a` değerinin `variable_b` tarafından etkilendiği bir yol varsa, `variable_a` değişkeninin `variable_b` değişkenine veri bağımlı olduğu söylenir. +`variable_a`'nın değerinin `variable_b`'den etkilendiği bir yol varsa, `variable_a` değişkeninin `variable_b`'ye veri bağımlı olduğu söylenir. -Sıradaki kodda, `variable_a`, `variable_b`'ye bağımlıdır: +Aşağıdaki kodda `variable_a` değişkeni `variable_b`'ye bağımlıdır: ```solidity // ... variable_a = variable_b + 1; ``` -Slither, ara temsil özelliği sayesinde (sonraki bir bölümde bahsedilecek) yerleşik [veri bağımlılığı](https://github.com/crytic/slither/wiki/data-dependency) kabiliyetleriyle gelir. +Slither, ara gösterimi (ileriki bir bölümde ele alınacaktır) sayesinde yerleşik [veri bağımlılığı](https://github.com/crytic/slither/wiki/data-dependency) yetenekleriyle birlikte gelir. -Veri bağımlılığı kullanımının bir örneği [zararlı katı eşitlik algılayıcısında](https://github.com/crytic/slither/wiki/Detector-Documentation#dangerous-strict-equalities) bulunabilir. Burada Slither, tehlikeli bir değerle ([incorrect_strict_equality.py#L86-L87](https://github.com/crytic/slither/blob/6d86220a53603476f9567c3358524ea4db07fb25/slither/detectors/statements/incorrect_strict_equality.py#L86-L87)) katı bir eşitlik karşılaştırması arayacak ve bir saldırganın sözleşmeyi tuzağa düşürmesini önlemek için kullanıcıya `==` yerine `>=` veya `<=` kullanması gerektiğini bildirecektir. Diğerlerinin yanı sıra algılayıcı, `balanceOf(address)` ([incorrect_strict_equality.py#L63-L64](https://github.com/crytic/slither/blob/6d86220a53603476f9567c3358524ea4db07fb25/slither/detectors/statements/incorrect_strict_equality.py#L63-L64)) çağrısının dönüş değerini tehlikeli olarak değerlendirecektir ve kullanımını izlemek için veri bağımlılığı motorunu kullanır. +Veri bağımlılığı kullanımına bir örnek, [tehlikeli katı eşitlik dedektöründe](https://github.com/crytic/slither/wiki/Detector-Documentation#dangerous-strict-equalities) bulunabilir. Burada Slither, tehlikeli bir değere katı eşitlik karşılaştırması arar ([incorrect_strict_equality.py#L86-L87](https://github.com/crytic/slither/blob/6d86220a53603476f9567c3358524ea4db07fb25/slither/detectors/statements/incorrect_strict_equality.py#L86-L87)) ve bir saldırganın sözleşmeyi tuzağa düşürmesini önlemek için kullanıcıya `==` yerine `>=` veya `<=` kullanması gerektiğini bildirir. Diğer şeylerin yanı sıra dedektör, `balanceOf(address)` çağrısının dönüş değerini tehlikeli olarak kabul eder ([incorrect_strict_equality.py#L63-L64](https://github.com/crytic/slither/blob/6d86220a53603476f9567c3358524ea4db07fb25/slither/detectors/statements/incorrect_strict_equality.py#L63-L64)) ve kullanımını izlemek için veri bağımlılığı motorunu kullanır. -#### Sabit-nokta hesaplaması {#fixed-point-computation} +#### Sabit nokta hesaplaması {#fixed-point-computation} -Analiziniz CFG'de geziniyor ve kenarları takip ediyorsa, muhtemelen önceden ziyaret edilmiş düğümleri görmeniz olasıdır. Örneğin, aşağıda gösterildiği gibi bir döngü sunulursa: +Analiziniz CFG içinde gezinir ve kenarları takip ederse, daha önce ziyaret edilmiş düğümleri görmeniz olasıdır. Örneğin, bir döngü aşağıda gösterildiği gibi sunulursa: ```solidity for(uint i; i < range; ++){ @@ -183,23 +184,23 @@ for(uint i; i < range; ++){ } ``` -Analizinizin ne zaman duracağını bilmesi gerekecek. Burada iki ana strateji vardır: (1) her bir düğümde sınırlı sayıda yineleme yapın, (2) _düzeltme noktası_ olarak adlandırılan bir noktayı hesaplayın. Bir düzeltme noktası temel olarak, bu düğümü analiz etmenin herhangi bir anlamlı bilgi sağlamadığı anlamına gelir. +Analizinizin ne zaman duracağını bilmesi gerekir. Burada iki ana strateji vardır: (1) her düğümde sonlu sayıda yineleme yapmak, (2) _sabit nokta_ adı verilen bir şeyi hesaplamak. Sabit nokta, temel olarak bu düğümü analiz etmenin artık anlamlı bir bilgi sağlamadığı anlamına gelir. -Kullanılan bir sabitleme noktası örneği yeniden giriş algılayıcılarında bulunabilir: Slither düğümleri araştırır ve harici çağrıları arar, belleğe yazar ve okur. Bir düzeltme noktasına ulaştığında ([reentrancy.py#L125-L131](https://github.com/crytic/slither/blob/master/slither/detectors/reentrancy/reentrancy.py#L125-L131)), keşfi durdurur ve farklı yeniden giriş modelleri aracılığıyla bir yeniden girişin olup olmadığını görmek için sonuçları analiz eder ([reentrancy_benign.py](https://github.com/crytic/slither/blob/b275bcc824b1b932310cf03b6bfb1a1fef0ebae1/slither/detectors/reentrancy/reentrancy_benign.py), [reentrancy_read_before_write.py](https://github.com/crytic/slither/blob/b275bcc824b1b932310cf03b6bfb1a1fef0ebae1/slither/detectors/reentrancy/reentrancy_read_before_write.py), [reentrancy_eth.py](https://github.com/crytic/slither/blob/b275bcc824b1b932310cf03b6bfb1a1fef0ebae1/slither/detectors/reentrancy/reentrancy_eth.py)). +Kullanılan bir sabit nokta örneği, yeniden giriş dedektörlerinde bulunabilir: Slither düğümleri araştırır ve harici çağrıları, depolamaya yazma ve okuma işlemlerini arar. Bir sabit noktaya ulaştığında ([reentrancy.py#L125-L131](https://github.com/crytic/slither/blob/master/slither/detectors/reentrancy/reentrancy.py#L125-L131)), keşfi durdurur ve farklı yeniden giriş desenleri ([reentrancy_benign.py](https://github.com/crytic/slither/blob/b275bcc824b1b932310cf03b6bfb1a1fef0ebae1/slither/detectors/reentrancy/reentrancy_benign.py), [reentrancy_read_before_write.py](https://github.com/crytic/slither/blob/b275bcc824b1b932310cf03b6bfb1a1fef0ebae1/slither/detectors/reentrancy/reentrancy_read_before_write.py), [reentrancy_eth.py](https://github.com/crytic/slither/blob/b275bcc824b1b932310cf03b6bfb1a1fef0ebae1/slither/detectors/reentrancy/reentrancy_eth.py)) aracılığıyla bir yeniden girişin mevcut olup olmadığını görmek için sonuçları analiz eder. -Etkili sabit nokta hesaplama kullanarak analiz yazmak, analizin bilgilerini nasıl yaydığının iyi anlaşılmasını gerektirir. +Verimli sabit nokta hesaplaması kullanarak analizler yazmak, analizin kendi bilgilerini nasıl yaydığını iyi anlamayı gerektirir. ### Ara temsil {#intermediate-representation} -Bir ara temsil (IR), statik analize orijinalinden daha uygun olması amaçlanan bir dildir. Slither, Solidity'yi kendi IR'ına çevirir: [SlithIR](https://github.com/crytic/slither/wiki/SlithIR). +Bir ara temsil (IR), statik analize orijinalinden daha elverişli olması amaçlanan bir dildir. Slither, Solidity'yi kendi IR'si olan [SlithIR](https://github.com/crytic/slither/wiki/SlithIR)'ye çevirir. -Yalnızca temel kontroller yazmak istiyorsanız SlithIR'ı anlamak gerekli değildir. Ancak, ileri düzey anlamsal analiz yazmayı planlıyorsanız kullanışlı olacaktır. [SlithIR](https://github.com/crytic/slither/wiki/Printer-documentation#slithir) ve [SSA](https://github.com/crytic/slither/wiki/Printer-documentation#slithir-ssa) yazıcıları, kodun nasıl çevirildiğini anlamanıza yardımcı olacaktır. +Yalnızca temel kontroller yazmak istiyorsanız SlithIR'ı anlamanız gerekli değildir. Ancak, gelişmiş anlamsal analizler yazmayı planlıyorsanız kullanışlı olacaktır. [SlithIR](https://github.com/crytic/slither/wiki/Printer-documentation#slithir) ve [SSA](https://github.com/crytic/slither/wiki/Printer-documentation#slithir-ssa) yazıcıları, kodun nasıl çevrildiğini anlamanıza yardımcı olacaktır. ## API Temelleri {#api-basics} -Slither, sözleşmenin temel özelliklerini ve fonksiyonlarını keşfetmenizi sağlayan bir API'ye sahiptir. +Slither'ın, sözleşmenin ve fonksiyonlarının temel niteliklerini keşfetmenizi sağlayan bir API'si vardır. -Bir kod temelini yüklemek için: +Bir kod tabanını yüklemek için: ```python from slither import Slither @@ -209,30 +210,30 @@ slither = Slither('/path/to/project') ### Sözleşmeleri ve fonksiyonları keşfetme {#exploring-contracts-and-functions} -Bir `Slither` objesi şunlara sahiptir: +Bir `Slither` nesnesi şunlara sahiptir: - `contracts (list(Contract)`: sözleşme listesi -- `contracts_derived (list(Contract)`: Başka bir sözleşme tarafından kalıtılmayan sözleşmelerin listesi (sözleşmelerin alt kümesi) -- `get_contract_from_name (str)`: İsminden bir sözleşmeyi döndürür +- `contracts_derived (list(Contract)`: başka bir sözleşme tarafından kalıtılmayan sözleşmelerin listesi (sözleşmelerin alt kümesi) +- `get_contract_from_name (str)`: Adından bir sözleşme döndürür -Bir `Contract` objesi şunlara sahiptir: +Bir `Contract` nesnesi şunlara sahiptir: - `name (str)`: Sözleşmenin adı - `functions (list(Function))`: Fonksiyon listesi -- `modifiers (list(Modifier))`: Fonksiyon listesi -- `all_functions_called (list(Function/Modifier))`: Sözleşme tarafından erişilebilen tüm iç fonksiyonların listesi -- `inheritance (list(Contract))`: Kalıtılan sözleşmelerin listesi -- `get_function_from_signature (str)`: İmzasından bir Function döndürür -- `get_modifier_from_signature (str)`: İmzasından bir Modifier döndürür -- `get_state_variable_from_name (str)`: İsminden bir StateVariable döndürür +- `modifiers (list(Modifier))`: Niteleyici listesi +- `all_functions_called (list(Function/Modifier))`: Sözleşme tarafından erişilebilen tüm dahili fonksiyonların listesi +- `inheritance (list(Contract))`: Kalıtılmış sözleşmelerin listesi +- `get_function_from_signature (str)`: İmzasından bir Fonksiyon döndürür +- `get_modifier_from_signature (str)`: İmzasından bir Niteleyici döndürür +- `get_state_variable_from_name (str)`: Adından bir StateVariable (Durum Değişkeni) döndürür -Bir `Function` veya `Modifier` objesi şunlara sahiptir: +Bir `Function` veya `Modifier` nesnesi şunlara sahiptir: - `name (str)`: Fonksiyonun adı -- `contract (contract)`: Fonksiyonun duyurulduğu sözleşmenin adı -- `nodes (list(Node))`: Fonksiyonun/niteleyicinin CFG'sini tutan düğümlerin listesi -- `entry_point (Node)`: CFG giriş noktası +- `contract (contract)`: fonksiyonun bildirildiği sözleşme +- `nodes (list(Node))`: Fonksiyonun/niteleyicinin CFG'sini oluşturan düğümlerin listesi +- `entry_point (Node)`: CFG'nin giriş noktası - `variables_read (list(Variable))`: Okunan değişkenlerin listesi - `variables_written (list(Variable))`: Yazılan değişkenlerin listesi -- `state_variables_read (list(StateVariable))`: Okunan durum değişkenlerinin listesi (okunan değişkenlerin alt kümesi) -- `state_variables_written (list(StateVariable))`: Yazılan durum değişkenlerinin listesi (yazılan değişkenlerin alt kümesi) +- `state_variables_read (list(StateVariable))`: Okunan durum değişkenlerinin listesi (okunan `değişkenlerin` alt kümesi) +- `state_variables_written (list(StateVariable))`: Yazılan durum değişkenlerinin listesi (yazılan `değişkenlerin` alt kümesi) diff --git a/public/content/translations/tr/developers/tutorials/how-to-use-tellor-as-your-oracle/index.md b/public/content/translations/tr/developers/tutorials/how-to-use-tellor-as-your-oracle/index.md index 12d001be4f6..693517ef06f 100644 --- a/public/content/translations/tr/developers/tutorials/how-to-use-tellor-as-your-oracle/index.md +++ b/public/content/translations/tr/developers/tutorials/how-to-use-tellor-as-your-oracle/index.md @@ -1,55 +1,52 @@ --- -title: Tellor Kâhininiz olarak nasıl kurulur -description: Tellor kâhinini protokolünüze entegre etmeye başlamak için bir rehber +title: "Tellor'u Kâhininiz Olarak Nasıl Kurarsınız?" +description: "Tellor kâhinini protokolünüze entegre etmeye başlamak için bir rehber" author: "Tellor" lang: tr -tags: - - "solidity" - - "akıllı kontratlar" - - "kâhinler" -skill: intermediate +tags: [ "solidity", "akıllı kontratlar", "kâhinler" ] +skill: beginner published: 2021-06-29 -source: Tellor Belgeleri +source: Tellor Docs sourceUrl: https://docs.tellor.io/tellor/ --- -Hızlı Soru: Protokolünüz tamamlanmak üzere ancak zincir dışı verilere erişmek için bir kâhine ihtiyacı var... Ne yaparsınız? +Hızlı Soru: Protokolünüz tamamlanmak üzere, ancak zincir dışı verilere erişmek için bir kâhine ihtiyacı var... Ne yaparsınız? -## (Hafif) Ön Koşullar {#soft-prerequisites} +## (Yumuşak) Ön Koşullar {#soft-prerequisites} Bu gönderi, bir kâhin akışına erişmeyi mümkün olduğunca basit ve anlaşılır hâle getirmeyi amaçlamaktadır. Bununla birlikte, kâhin yönüne odaklanmak için kodlama beceri seviyeniz hakkında aşağıdakileri varsayıyoruz. Varsayımlar: -- bir terminalde gezinebildiğiniz, -- npm'yi kurduğunuz -- bağımlılıkları yönetmek için npm'yi nasıl kullanacağınızı bildiğiniz +- bir terminalde gezinebilmeniz +- npm'nin kurulu olması +- bağımlılıkları yönetmek için npm'yi nasıl kullanacağınızı bilmeniz -Tellor, uygulamaya hazır yayınlanmış ve açık kaynaklı bir kâhindir. Bu başlangıç rehberi, projenize tamamen merkeziyetsiz ve sansüre dayanıklı bir kâhin sağlayarak Tellor ile çalışmaya başlamanın kolaylığını gösterme amacı taşır. +Tellor, uygulamaya hazır, canlı ve açık kaynaklı bir kâhindir. Bu başlangıç kılavuzu, projenize tamamen merkeziyetsiz ve sansüre dayanıklı bir kâhin sağlayarak Tellor'u kullanmaya başlamanın ne kadar kolay olduğunu göstermek için hazırlanmıştır. ## Genel Bakış {#overview} -Tellor, tarafların zincir dışı bir veri noktasının (örneğin BTC/USD) değerini talep edebildiği ve raporlayıcıların bu değeri tüm Ethereum akıllı sözleşmeleri tarafından erişilebilen zincir üstü bir veri bankasına eklemek için rekabet ettiği bir kâhin sistemidir. Bu veri bankasına yapılan girdiler, stake edilmiş muhabirlerden oluşan bir ağ tarafından güvence altına alınmıştır. Tellor, raporlayıcılar tarafından sağlanan dürüst veri kayıtlarını ödüllendiren, Tributes (TRB) Tellor jetonunun piyasaya sürülmesi ve uyuşmazlık mekanizması aracılığıyla kötü niyetli davrananları cezalandıran kripto ekonomik teşvik mekanizmalarını kullanır. +Tellor, tarafların zincir dışı bir veri noktasının (ör. BTC/USD) değerini talep edebildiği ve raporlayıcıların bu değeri tüm Ethereum akıllı sözleşmeleri tarafından erişilebilen, zincir üstü bir veri bankasına eklemek için rekabet ettiği bir kâhin sistemidir. Bu veri bankasına yapılan girdiler, stake edilmiş raporlayıcılardan oluşan bir ağ tarafından güvence altına alınır. Tellor; raporlayıcılar tarafından dürüst veri gönderimlerini ödüllendiren ve Tellor'un jetonu olan Tributes (TRB) ihracı ve bir uyuşmazlık mekanizması aracılığıyla kötü niyetli aktörleri cezalandıran, kripto-ekonomik teşvik mekanizmalarından yararlanır. -Bu öğreticide şunların üzerinden geçeceğiz: +Bu öğreticide şunları ele alacağız: -- Kurup çalıştırmanız gereken başlangıç araç setinin kurulumu. -- Basit bir örneğe genel bakış. -- Şu anda Tellor'ı test edebileceğiniz ağların test ağlarının adreslerini listelemek. +- Çalışmaya başlamak için ihtiyacınız olacak ilk araç setinin kurulumu. +- Basit bir örnek üzerinden ilerleme. +- Tellor'ı şu anda test edebileceğiniz ağların test ağı adreslerini listeleme. -## UsingTellor {#usingtellor} +## UsingTellor Kullanımı {#usingtellor} -Yapmak isteyeceğiniz ilk şey, Tellor'ı kâhininiz olarak kullanmak için gerekli olan temel araçları kurmaktır. Tellor Kullanıcı Sözleşmelerini yüklemek için [bu paketi](https://github.com/tellor-io/usingtellor) kullanın: +Yapmak isteyeceğiniz ilk şey, Tellor'u kâhininiz olarak kullanmak için gerekli temel araçları kurmaktır. Tellor Kullanıcı Sözleşmelerini kurmak için [bu paketi](https://github.com/tellor-io/usingtellor) kullanın: `npm install usingtellor` -Kurulduktan sonra bu, sözleşmelerinizin "UsingTellor" sözleşmesinden fonksiyonları devralmasına olanak tanır. +Kurulduktan sonra bu, sözleşmelerinizin 'UsingTellor' sözleşmesinden fonksiyonları devralmasına olanak tanır. -Harika! Artık araçları hazırladığınıza göre, bitcoin fiyatını alacağımız basit bir alıştırmadan geçelim: +Harika! Artık araçlar hazır olduğuna göre, bitcoin fiyatını aldığımız basit bir alıştırma yapalım: ### BTC/USD Örneği {#btcusd-example} -UsingTellor sözleşmesini kalıtım yoluya alarak Tellor adresini bir yapıcı argüman olarak geçirmek: +Tellor adresini bir yapıcı argümanı olarak geçirerek UsingTellor sözleşmesini kalıtın: İşte bir örnek: @@ -59,7 +56,7 @@ import "usingtellor/contracts/UsingTellor.sol"; contract PriceContract is UsingTellor { uint256 public btcPrice; - //This Contract now has access to all functions in UsingTellor + //Bu Sözleşme artık UsingTellor'daki tüm fonksiyonlara erişebilir constructor(address payable _tellorAddress) UsingTellor(_tellorAddress) public {} @@ -77,8 +74,8 @@ function setBtcPrice() public { } ``` -Sözleşme adreslerinin tam listesi için [buraya](https://docs.tellor.io/tellor/the-basics/contracts-reference) başvurun. +Sözleşme adreslerinin tam listesi için [buraya](https://docs.tellor.io/tellor/the-basics/contracts-reference) bakın. -Kullanım kolaylığı sağlamak adına, UsingTellor deposu kolay entegrasyon için [Tellor Playground](https://github.com/tellor-io/TellorPlayground) sözleşmesiyle birlikte sunulur. Yardımcı işlevlerin bir listesini görmek için [buraya](https://github.com/tellor-io/sampleUsingTellor#tellor-playground) bakın. +Kullanım kolaylığı için UsingTellor deposu, daha kolay entegrasyon için [Tellor Playground](https://github.com/tellor-io/TellorPlayground) sözleşmesinin bir sürümünü içerir. Yardımcı fonksiyonların listesi için [buraya](https://github.com/tellor-io/sampleUsingTellor#tellor-playground) bakın. Tellor kâhininin daha sağlam bir uygulaması için mevcut fonksiyonların tam listesine [buradan](https://github.com/tellor-io/usingtellor/blob/master/README.md) göz atın. diff --git a/public/content/translations/tr/developers/tutorials/how-to-view-nft-in-metamask/index.md b/public/content/translations/tr/developers/tutorials/how-to-view-nft-in-metamask/index.md index a8c21ec37bc..4cf687e9d21 100644 --- a/public/content/translations/tr/developers/tutorials/how-to-view-nft-in-metamask/index.md +++ b/public/content/translations/tr/developers/tutorials/how-to-view-nft-in-metamask/index.md @@ -1,36 +1,33 @@ --- -title: NFT'nizi Cüzdanınızda Nasıl Görüntüleyebilirsiniz (NFT Öğretici Serisi Bölüm 3/3) -description: Bu öğretici, MetaMask'ta mevcut bir NFT'nin nasıl görüntüleneceğini açıklar! +title: "NFT'nizi Cüzdanınızda Nasıl Görüntüleyebilirsiniz (NFT Öğretici Serisi Bölüm 3/3)" +description: "Bu öğretici, MetaMask'ta mevcut bir NFT'nin nasıl görüntüleneceğini açıklar!" author: "Sumi Mudgil" -tags: - - "ERC-721" - - "Alchemy" - - "Solidity" -skill: advanced +tags: [ "ERC-721", "Alchemy", "Solidity" ] +skill: beginner lang: tr published: 2021-04-22 --- -Bu öğretici, yeni basılmış NFT'mizi görüntülediğimiz NFT Öğretici serisinin Bölüm 3/3'üdür. Ancak, Mainnet veya herhangi bir test ağı dahil olmak üzere MetaMask kullanan herhangi bir ERC-721 token'ı için genel öğreticiyi kullanabilirsiniz. Ethereum üzerinde kendi NFT'nizi nasıl basacağınızı öğrenmek istiyorsanız, [Bir NFT Nasıl Yazılır ve Dağıtılır](/developers/tutorials/how-to-write-and-deploy-an-nft) kısmına göz atmalısınız! +Bu öğretici, yeni basılmış NFT'mizi görüntülediğimiz NFT Öğretici serisinin Bölüm 3/3'üdür. Ancak, Mainnet veya herhangi bir test ağı dahil olmak üzere MetaMask kullanan herhangi bir ERC-721 token'ı için genel öğreticiyi kullanabilirsiniz. Ethereum üzerinde kendi NFT'nizi nasıl basacağınızı öğrenmek istiyorsanız, Bir NFT Nasıl Yazılır ve Dağıtılır kısmına göz atmalısınız! Tebrikler! NFT öğretici serimizin en kısa ve en basit kısmına geldiniz: Yeni basılmış NFT'nizi sanal bir cüzdanda görüntüleme. Önceki iki bölümde onu kullandığımızdan dolayı bu örnek için MetaMask kullanacağız. -Bir ön koşul olarak, MetaMask'in mobil cihazınızda zaten kurulu olması ve NFT'nizi bastığınız hesabı içermesi gerekir: Uygulamayı [iOS](https://apps.apple.com/us/app/metamask-blockchain-wallet/id1438144202) veya [Android](https://play.google.com/store/apps/details?id=io.metamask&hl=en_US&gl=US) üzerinden ücretsiz edinebilirsiniz. +Ön koşul olarak, mobil cihazınızda MetaMask'in kurulu olması ve NFT'nizi bastığınız hesabın dahil olması gerekir. Uygulamayı [iOS](https://apps.apple.com/us/app/metamask-blockchain-wallet/id1438144202) veya [Android](https://play.google.com/store/apps/details?id=io.metamask&hl=en_US&gl=US) için ücretsiz olarak edinebilirsiniz. -## Adım 1: Ağınızı Sepolia'ya ayarlayın {#set-network-to-sepolia} +## Adım 1: Ağınızı Sepolia olarak ayarlayın {#set-network-to-sepolia} -Uygulamanın üst kısmındaki "Wallet" (Cüzdan) düğmesine basın, ardından bir ağ seçmeniz istenecektir. NFT'miz Sepolia ağında basıldığından, ağınız olarak Sepolia'yı seçmeniz makuldür. +Uygulamanın üst kısmındaki "Wallet" (Cüzdan) düğmesine basın, ardından bir ağ seçmeniz istenecektir. NFT'miz Sepolia ağında basıldığı için ağınız olarak Sepolia'yı seçmelisiniz. -![MetaMask Mobile üzerinde ağınızı Sepolia olarak ayarlama](./goerliMetamask.gif) +![MetaMask Mobile'da ağınızı Sepolia olarak ayarlama](./goerliMetamask.gif) ## Adım 2: Koleksiyon öğenizi MetaMask'e ekleyin {#add-nft-to-metamask} Sepolia ağına girdikten sonra, sağdaki "Collectibles" (Koleksiyon Öğeleri) sekmesini seçip NFT akıllı sözleşme adresini ve NFT'nizin ERC-721 jeton kimliğini ekleyin: Bunu, öğreticimizin 2. Bölümünde dağıtılan NFT'nizin işlem karması temelinde Etherscan'de bulabilirsiniz. -![İşlem hash değerinizi ve ERC-721 token kimliğinizi nasıl bulabilirsiniz](./findNFTEtherscan.png) +![İşlem karmanızı ve ERC-721 jeton kimliğinizi bulma](./findNFTEtherscan.png) -NFT'nizi görüntülemek için birkaç kez yenilemeniz gerekebilir ancak kesinle orada olacaktır! +NFT'nizi görüntülemek için birkaç kez yenilemeniz gerekebilir ancak kesinlikle orada olacaktır ! -![NFT'nizi MetaMask'e nasıl yüklersiniz](./findNFTMetamask.gif) +![NFT'nizi MetaMask'e yükleme](./findNFTMetamask.gif) Tebrikler! Bir NFT'yi başarıyla bastınız ve şimdi onu görüntüleyebilirsiniz! NFT dünyasını nasıl kasıp kavuracağınızı görmek için sabırsızlanıyoruz! diff --git a/public/content/translations/tr/developers/tutorials/how-to-write-and-deploy-an-nft/index.md b/public/content/translations/tr/developers/tutorials/how-to-write-and-deploy-an-nft/index.md index 3ebd559f150..00fdc778644 100644 --- a/public/content/translations/tr/developers/tutorials/how-to-write-and-deploy-an-nft/index.md +++ b/public/content/translations/tr/developers/tutorials/how-to-write-and-deploy-an-nft/index.md @@ -1,13 +1,9 @@ --- -title: Bir NFT Nasıl Yazılır ve Dağıtılır (NFT Öğretici Serisi Bölüm 1/3) -description: Bu öğretici, Ethereum ve Gezegenler Arası Dosya Sistemi (IPFS) kullanarak bir Değiştirilemez Token (ERC-721 token'ı) akıllı sözleşmesinin nasıl yazılacağı ve dağıtılacağı konusunda adım adım yol gösterecek olan NFT'lerle ilgili bir dizinin 1. Bölümüdür. +title: "Bir NFT Nasıl Yazılır ve Dağıtılır (NFT Öğretici Serisi Bölüm 1/3)" +description: "Bu öğretici, Ethereum ve Gezegenler Arası Dosya Sistemi (IPFS) kullanarak bir Değiştirilemez Token (ERC-721 token'ı) akıllı sözleşmesinin nasıl yazılacağı ve dağıtılacağı konusunda adım adım yol gösterecek olan NFT'lerle ilgili bir dizinin 1. Bölümüdür." author: "Sumi Mudgil" -tags: - - "ERC-721" - - "Alchemy" - - "Solidity" - - "akıllı sözleşmeler" -skill: advanced +tags: [ "ERC-721", "Alchemy", "Solidity", "akıllı kontratlar" ] +skill: beginner lang: tr published: 2021-04-22 --- @@ -16,23 +12,23 @@ NFT'lerin blokzinciri geniş kitlelere tanıtmasıyla, Ethereum blokzinciri üze Alchemy; Makersplace (son zamanlarda Christie's'de 69 Milyon ABD Doları değerinde rekor bir dijital sanat eseri satışı gerçekleştirdi), Dapper Labs (NBA Top Shot ve Crypto Kitties'in yaratıcıları), OpenSea (dünyanın en büyük NFT pazarı), Zora, Super Rare, NFTfi, Foundation, Enjin, Origin Protocol, Immutable ve daha fazlası gibi NFT alanındaki büyük isimleri desteklemekten büyük bir gurur duyuyor. -Bu öğreticide; [MetaMask](https://metamask.io/), [Solidity](https://docs.soliditylang.org/en/v0.8.0/), [Hardhat](https://hardhat.org/), [Pinata](https://pinata.cloud/) ve [Alchemy](https://alchemy.com/signup/eth) kullanarak Sepolia test ağında ERC-721 akıllı sözleşmesi oluşturma ve dağıtma adımlarını inceleyeceğiz (ne olduğunu anlamıyorsanız üzülmeyin, açıklayacağız!). +Bu öğreticide, [MetaMask](https://metamask.io/), [Solidity](https://docs.soliditylang.org/en/v0.8.0/), [Hardhat](https://hardhat.org/), [Pinata](https://pinata.cloud/) ve [Alchemy](https://alchemy.com/signup/eth) kullanarak Sepolia test ağında bir ERC-721 akıllı sözleşmesi oluşturma ve dağıtma adımlarını inceleyeceğiz (bunların ne anlama geldiğini henüz anlamıyorsanız endişelenmeyin, açıklayacağız!). Bu öğreticinin 2. Bölümünde, bir NFT'yi basmak için akıllı sözleşmemizi nasıl kullanabileceğimizi inceleyeceğiz ve 3. Bölümde NFT'nizi MetaMask üzerinde nasıl görüntüleyeceğinizi açıklayacağız. -Ve elbette, herhangi bir noktada sorunuz olursa, [Alchemy Discord](https://discord.gg/gWuC7zB)'dan bize ulaşmaktan veya [Alchemy'nin NFT API belgelerini](https://docs.alchemy.com/alchemy/enhanced-apis/nft-api) ziyaret etmekten çekinmeyin! +Ve elbette, herhangi bir noktada sorularınız olursa, [Alchemy Discord](https://discord.gg/gWuC7zB)'dan bize ulaşmaktan veya [Alchemy'nin NFT API belgelerini](https://docs.alchemy.com/alchemy/enhanced-apis/nft-api) ziyaret etmekten çekinmeyin! ## Adım 1: Ethereum ağına bağlanın {#connect-to-ethereum} -Ethereum blok zincirine istek göndermenin birçok yolu vardır, ancak işleri kolaylaştırmak için, kendi düğümlerimizi çalıştırmak zorunda kalmadan Ethereum zinciri ile iletişim kurmamızı sağlayan bir blok zinciri geliştirici platformu ve API'si olan[Alchemy](https://alchemy.com/signup/eth)'de ücretsiz bir hesap kullanacağız. +Ethereum blok zincirine istek göndermenin birçok yolu vardır, ancak işleri kolaylaştırmak için, kendi düğümlerimizi çalıştırmak zorunda kalmadan Ethereum zinciri ile iletişim kurmamızı sağlayan bir blok zinciri geliştirici platformu ve API'si olan [Alchemy](https://alchemy.com/signup/eth)'de ücretsiz bir hesap kullanacağız. Bu eğitimde, akıllı sözleşme dağıtımımızda perde arkasında neler olup bittiğini anlamak için Alchemy'nin izleme ve analitik geliştirici araçlarından da yararlanacağız. Henüz bir Alchemy hesabınız yoksa, [buradan](https://alchemy.com/signup/eth) ücretsiz kaydolabilirsiniz. ## Adım 2: Uygulamanızı (ve API anahtarınızı) oluşturun {#make-api-key} -Bir Alchemy hesabı oluşturduktan sonra, bir uygulama oluşturarak bir API anahtarı oluşturabilirsiniz. Bu, Sepolia test ağına istekte bulunmamıza izin verecektir. Eğer test ağları hakkında daha fazlasını öğrenmeye meraklıysanız [bu rehbere](https://docs.alchemyapi.io/guides/choosing-a-network) göz atın. +Bir Alchemy hesabı oluşturduktan sonra, bir uygulama yaratarak bir API anahtarı oluşturabilirsiniz. Bu, Sepolia test ağına istekte bulunmamıza izin verecektir. Test ağları hakkında daha fazla bilgi edinmek isterseniz [bu kılavuza](https://docs.alchemyapi.io/guides/choosing-a-network) göz atın. -1. Gezinme çubuğundaki "Uygulamalar"ın üzerine gelip "Uygulama Oluştur"a tıklayarak Simya Panonuzdaki "Uygulama Oluştur" sayfasına gidin +1. İmlecinizi gezinme çubuğundaki "Apps"in (Uygulamalar) üzerine gelip "Create App"e (Uygulama Oluştur) tıklayarak Alchemy Gösterge Panelinizdeki "Create App" sayfasına gidin ![Uygulamanızı oluşturun](./create-your-app.png) @@ -40,27 +36,29 @@ Bir Alchemy hesabı oluşturduktan sonra, bir uygulama oluşturarak bir API anah ![Uygulamanızı yapılandırın ve yayınlayın](./alchemy-explorer-sepolia.png) -3. "Uygulama oluştur"u tıklayın, işte bu kadar! Uygulamanız aşağıdaki tabloda görünmelidir. +3. "Create app"e (Uygulama oluştur) tıklamanız yeterlidir! Uygulamanız aşağıdaki tabloda görünmelidir. ## Adım 3: Bir Ethereum hesabı oluşturun (adres) {#create-eth-address} -İşlem göndermek ve almak için bir Ethereum hesabına ihtiyacımız var. Bu eğitim için, Ethereum hesap adresinizi yönetmek için kullanılan tarayıcı üstü bir sanal cüzdan olan MetaMask'i kullanacağız. Ethereum'daki işlemlerin nasıl çalıştığı hakkında daha fazla bilgi edinmek istiyorsanız, Ethereum Vakfı'nın [bu sayfasına](/developers/docs/transactions/) göz atın. +İşlem göndermek ve almak için bir Ethereum hesabına ihtiyacımız var. Bu öğretici için, Ethereum hesap adresinizi yönetmek için kullanılan tarayıcıda sanal bir cüzdan olan MetaMask'ı kullanacağız. Ethereum'daki işlemlerin nasıl çalıştığı hakkında daha fazla bilgi edinmek istiyorsanız, Ethereum Vakfı'nın [bu sayfasına](/developers/docs/transactions/) göz atın. -[Buradan](https://metamask.io/download) ücretsiz olarak bir MetaMask hesabı indirebilir ve oluşturabilirsiniz. Bir hesap oluştururken, ya da bir hesabınız çoktan varsa, sağ üstten Sepolia Test Ağına geçtiğinizden emin olun (bu sayede gerçek parayla denemeler yapmayız). +MetaMask'ı [buradan](https://metamask.io/download) ücretsiz indirip bir hesap oluşturabilirsiniz. Bir hesap oluştururken, ya da bir hesabınız çoktan varsa, sağ üstten Sepolia Test Ağına geçtiğinizden emin olun (bu sayede gerçek parayla denemeler yapmayız). ![Sepolia'yı ağınız olarak ayarlayın](./metamask-goerli.png) ## Adım 4: Bir Musluktan ether ekleyin {#step-4-add-ether-from-a-faucet} -Akıllı sözleşmemizi test ağına dağıtmak için biraz sahte ETH'ye ihtiyacımız olacak. ETH alabilmek için Alchemy tarafından barındırılan [Sepolia Musluğuna](https://sepoliafaucet.com/) gidin, hesabınızın adresini girin, sonra da "Bana ETH gönder"e tıklayın. Kısa bir süre sonra MetaMask hesabınızda ETH'yi görmelisiniz! +Akıllı sözleşmemizi test ağına dağıtmak için biraz sahte ETH'ye ihtiyacımız olacak. ETH almak için Alchemy tarafından barındırılan [Sepolia Musluğuna](https://sepoliafaucet.com/) gidin, oturum açın, hesap adresinizi girin ve “Bana ETH Gönder”e tıklayın. Kısa bir süre sonra Metamask hesabınızda ETH'yi görmelisiniz! ## Adım 5: Bakiyenizi kontrol edin {#check-balance} -Bakiyemizin yerinde olduğundan emin olmak için [Alchemy düzenleyici arayıcını](https://composer.alchemyapi.io?composer_state=%7B%22network%22%3A0%2C%22methodName%22%3A%22eth_getBalance%22%2C%22paramValues%22%3A%5B%22%22%2C%22latest%22%5D%7D) kullanarak bir [eth_getBalance](https://docs.alchemyapi.io/alchemy/documentation/alchemy-api-reference/json-rpc#eth_getbalance) talebi oluşturalım. Bu, cüzdanımızdaki ETH miktarını döndürür. MetaMask hesap adresinizi girdikten ve "Send Request"e tıkladıktan sonra aşağıdaki gibi bir yanıt görmelisiniz: +Bakiyemizin mevcut olup olmadığını iki kez kontrol etmek için [Alchemy'nin Composer aracını](https://composer.alchemyapi.io?composer_state=%7B%22network%22%3A0%2C%22methodName%22%3A%22eth_getBalance%22%2C%22paramValues%22%3A%5B%22%22%2C%22latest%22%5D%7D) kullanarak bir [eth_getBalance](https://docs.alchemyapi.io/alchemy/documentation/alchemy-api-reference/json-rpc#eth_getbalance) isteği yapalım. Bu, cüzdanımızdaki ETH miktarını döndürür. MetaMask hesap adresinizi girdikten ve "Send Request"e tıkladıktan sonra aşağıdaki gibi bir yanıt görmelisiniz: + ``` `{"jsonrpc": "2.0", "id": 0, "result": "0xde0b6b3a7640000"}` + ``` -> **NOT:** Bu sonuç ETH değil, wei biçimindedir. Wei, ether'ın en küçük birimi olarak kullanılır. Wei'den ETH'ye dönüştürme 1 eth = 1018 wei şeklindedir. Yani 0xde0b6b3a7640000'ı ondalık sayıya dönüştürürsek 1\*1018 wei elde ederiz, bu da 1 ETH'ye eşittir. +> **Not**: Bu sonuç ETH değil, wei cinsindendir. Wei, ether'ın en küçük birimi olarak kullanılır. Wei'den ETH'ye dönüştürme 1 eth = 1018 wei şeklindedir. Yani 0xde0b6b3a7640000'ı ondalık sayıya dönüştürürsek 1\*1018 wei elde ederiz, bu da 1 ETH'ye eşittir. Vay be! Tüm sahte paramız yerli yerinde. @@ -68,18 +66,23 @@ Vay be! Tüm sahte paramız yerli yerinde. Öncelikle projemiz için bir klasör oluşturmamız gerekecek. Komut satırınıza gidin ve şunu yazın: + ``` mkdir my-nft cd my-nft + ``` -Artık proje klasörümüzün içinde olduğumuza göre, projeyi başlatmak için npm init kullanacağız. Hâlihazırda npm kurulu değilse, [bu talimatları izleyin](https://docs.alchemyapi.io/alchemy/guides/alchemy-for-macs#1-install-nodejs-and-npm) ([Node.js](https://nodejs.org/en/download/)'ye de ihtiyacımız olacak, onu da indirin!). +Artık proje klasörümüzün içinde olduğumuza göre, projeyi başlatmak için npm init kullanacağız. Eğer npm zaten kurulu değilse, [bu talimatları](https://docs.alchemyapi.io/alchemy/guides/alchemy-for-macs#1-install-nodejs-and-npm) takip edin ([Node.js](https://nodejs.org/en/download/)'e de ihtiyacımız olacak, bu yüzden onu da indirin!). + ``` npm init + ``` Kurulum sorularına nasıl cevap verdiğiniz çok önemli değil; referans olması için nasıl yaptığımızı aşağıda açıkladık: + ```json package name: (my-nft) version: (1.0.0) - description: My first NFT! + description: İlk NFT'm! entry point: (index.js) test command: git repository: @@ -91,7 +94,7 @@ Kurulum sorularına nasıl cevap verdiğiniz çok önemli değil; referans olmas { "name": "my-nft", "version": "1.0.0", - "description": "My first NFT!", + "description": "İlk NFT'm!", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" @@ -100,15 +103,18 @@ Kurulum sorularına nasıl cevap verdiğiniz çok önemli değil; referans olmas "license": "ISC" } ``` + package.json'ı onaylayın ve artık hazırız! -## Adım 7: [Hardhat](https://hardhat.org/getting-started/#overview)'i kurun {#install-hardhat} +## Adım 7: [Hardhat](https://hardhat.org/getting-started/#overview)'i Kurun {#install-hardhat} Hardhat, Ethereum yazılımınızı derlemek, dağıtmak, test etmek ve hatalarını ayıklamak için bir geliştirme ortamıdır. Bu geliştiricilere canlı zincirde dağıtmadan önce akıllı sözleşmelerini ve merkeziyetsiz uygulamalarını geliştirirken yardımcı olur. my-nft projemizin içinde şunu yürütün: + ``` npm install --save-dev hardhat + ``` [Kurulum talimatları](https://hardhat.org/getting-started/#overview) hakkında daha fazla ayrıntı için bu sayfaya göz atın. @@ -116,10 +122,13 @@ my-nft projemizin içinde şunu yürütün: Proje klasörümüzün içinde şunu yürütün: + ``` npx hardhat + ``` Daha sonra bir karşılama mesajı ve ne yapmak istediğinizi seçme seçeneği görmelisiniz. "create an empty hardhat.config.js"yi (boş bir hardhat.config.js oluştur) seçin: + ``` 888 888 888 888 888 888 888 888 888 888 888 888 888 888 888 @@ -128,11 +137,12 @@ Daha sonra bir karşılama mesajı ve ne yapmak istediğinizi seçme seçeneği 888 888 .d888888 888 888 888 888 888 .d888888 888 888 888 888 888 888 Y88b 888 888 888 888 888 Y88b. 888 888 "Y888888 888 "Y88888 888 888 "Y888888 "Y888 - 👷 Hardhat v2.0.11 Hoşgeldin 👷‍ - ? Ne yapmak istersin? … - Create a sample project - ❯ Create an empty hardhat.config.js - Quit + 👷 Hardhat v2.0.11 sürümüne hoş geldiniz 👷‍ + ? Ne yapmak istersiniz? … + Örnek bir proje oluşturun + ❯ Boş bir hardhat.config.js oluşturun + Çıkış + ``` Bu, bizim için bir hardhat.config.js dosyası oluşturacak ve burada projemiz için tüm ayarları belirteceğiz (adım 13'te). @@ -140,8 +150,10 @@ Bu, bizim için bir hardhat.config.js dosyası oluşturacak ve burada projemiz i Projemizi düzenli tutmak için iki yeni klasör oluşturacağız. Komut satırınızda projenizin kök dizinine gidin ve şunu yazın: + ``` mkdir contracts mkdir scripts + ``` - contracts/, NFT akıllı sözleşme kodumuzu tutacağımız yerdir @@ -151,14 +163,14 @@ Projemizi düzenli tutmak için iki yeni klasör oluşturacağız. Komut satır Artık ortamımız hazır olduğuna göre, daha heyecan verici şeylere geçelim: _akıllı sözleşme kodumuzu yazmak!_ -Favori düzenleyicinizde my-nft projesini açın. (biz [VSCode](https://code.visualstudio.com/)'u tercih ediyoruz). Akıllı sözleşmeler, MyNFT.sol akıllı sözleşmemizi yazmak için kullanacağımız Solidity adlı bir dilde yazılır.‌ +`my-nft` projesini tercih ettiğiniz bir düzenleyicide açın (biz [VSCode](https://code.visualstudio.com/)'u tercih ediyoruz). Akıllı sözleşmeler, MyNFT.sol akıllı sözleşmemizi yazmak için kullanacağımız Solidity adlı bir dilde yazılır.‌ -1. `contracts` klasörüne gidin ve MyNFT.sol adlı yeni bir dosya oluşturun +1. `contracts` klasörüne gidin ve `MyNFT.sol` adında yeni bir dosya oluşturun. -2. Aşağıda, [OpenZeppelin](https://docs.openzeppelin.com/contracts/3.x/erc721) kütüphanesinin ERC-721 uygulamasını temel aldığımız NFT akıllı sözleşme kodumuz yer almaktadır. Aşağıdaki içeriği kopyalayıp MyNFT.sol dosyanıza yapıştırın. +2. Aşağıda, [OpenZeppelin](https://docs.openzeppelin.com/contracts/3.x/erc721) kütüphanesinin ERC-721 uygulamasını temel alan NFT akıllı sözleşme kodumuz bulunmaktadır. Aşağıdaki içeriği kopyalayıp MyNFT.sol dosyanıza yapıştırın. ```solidity - //Contract based on [https://docs.openzeppelin.com/contracts/3.x/erc721](https://docs.openzeppelin.com/contracts/3.x/erc721) + //Sözleşme [https://docs.openzeppelin.com/contracts/3.x/erc721](https://docs.openzeppelin.com/contracts/3.x/erc721)'i temel almıştır. // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; @@ -188,68 +200,74 @@ Favori düzenleyicinizde my-nft projesini açın. (biz [VSCode](https://code.vis } ``` -3. Sınıfları OpenZeppelin sözleşme kütüphanesinden aldığımız için, kütüphaneyi klasörümüze kurmak için komut satırınızda `npm install @openzeppelin/contracts` komutunu yürütün. +3. OpenZeppelin sözleşme kütüphanesinden sınıfları miras aldığımız için, komut satırınızda `npm install @openzeppelin/contracts^4.0.0` komutunu çalıştırarak kütüphaneyi klasörümüze kurun. Peki, bu kod tam olarak ne _yapar_? Satır satır inceleyelim. -Akıllı sözleşmemizin en üstüne, üç tane [OpenZeppelin](https://openzeppelin.com/) akıllı sözleşme sınıfını içe aktararak ekliyoruz: +Akıllı sözleşmemizin en üstünde, üç [OpenZeppelin](https://openzeppelin.com/) akıllı sözleşme sınıfını içe aktarıyoruz: -- @openzeppelin/contracts/token/ERC721/ERC721.sol, NFT akıllı sözleşmemizin devralacağı ERC-721 standardının uygulamasını içerir. (Geçerli bir NFT olması için akıllı sözleşmenizin ERC-721 standardının tüm yöntemlerini uygulaması gerekir.) Devralınan ERC-721 fonksiyonları hakkında daha fazla bilgi edinmek için [buradaki](https://eips.ethereum.org/EIPS/eip-721) arayüz tanımına bakın. +- @openzeppelin/contracts/token/ERC721/ERC721.sol, NFT akıllı sözleşmemizin devralacağı ERC-721 standardının uygulamasını içerir. (Geçerli bir NFT olması için akıllı sözleşmenizin ERC-721 standardının tüm yöntemlerini uygulaması gerekir.) Miras alınan ERC-721 fonksiyonları hakkında daha fazla bilgi edinmek için [buradaki](https://eips.ethereum.org/EIPS/eip-721) arayüz tanımına göz atın. - @openzeppelin/contracts/utils/Counters.sol, yalnızca bir artırılabilen veya azaltılabilen sayaçlar sağlar. Akıllı sözleşmemiz, basılan toplam NFT sayısını takip etmek ve yeni NFT'mizde benzersiz kimliği belirlemek için bir sayaç kullanır. (Akıllı bir sözleşme kullanılarak basılan her NFT'ye benzersiz bir kimlik atanmalıdır: Burada benzersiz kimliğimiz yalnızca mevcut toplam NFT sayısı tarafından belirlenir. Örneğin, akıllı sözleşmemizle bastığımız ilk NFT'nin kimliği "1", ikinci NFT'mizin kimliği "2" vb. olacaktır.) -- @openzeppelin/contracts/access/Ownable.sol, akıllı sözleşmemizde sadece akıllı sözleşmenin sahibinin (sizin) NFT basabilmesi için [erişim kontrolü](https://docs.openzeppelin.com/contracts/3.x/access-control) kurulumu yapar. (Erişim kontrolünün dahil edilmesinin tamamen bir tercih olduğunu unutmayın. Herhangi birinin akıllı sözleşmenizi kullanarak bir NFT basabilmesini istiyorsanız, 10. satırdaki Ownable ve 17. satırdaki onlyOwner kelimelerini kaldırın.) +- `@openzeppelin/contracts/access/Ownable.sol`, akıllı sözleşmemizde [erişim kontrolü](https://docs.openzeppelin.com/contracts/3.x/access-control) kurar, böylece yalnızca akıllı sözleşmenin sahibi (yani siz) NFT basabilir. (Erişim kontrolünün dahil edilmesinin tamamen bir tercih olduğunu unutmayın. Herhangi birinin akıllı sözleşmenizi kullanarak bir NFT basabilmesini istiyorsanız, 10. satırdaki Ownable ve 17. satırdaki onlyOwner kelimelerini kaldırın.) -İçe aktarma ifadelerimizden sonra, şaşırtıcı derecede kısa olan özel NFT akıllı sözleşmemiz var: Yalnızca bir sayaç, bir oluşturucu ve tek bir fonksiyon içeriyor! Bu, NFT'nin sahibini döndüren `ownerOf` ve `transferFrom` gibi bir NFT oluşturmak için ihtiyaç duyduğumuz yöntemlerin çoğunu uygulayan devralınan, NFT'nin sahipliğini bir hesaptan diğerine aktaran OpenZeppelin sözleşmelerimiz sayesindedir. +İçe aktarma ifadelerimizden sonra, şaşırtıcı derecede kısa olan özel NFT akıllı sözleşmemiz var: Yalnızca bir sayaç, bir oluşturucu ve tek bir fonksiyon içeriyor! Bu, miras aldığımız OpenZeppelin sözleşmeleri sayesindedir. Bu sözleşmeler, bir NFT oluşturmak için ihtiyaç duyduğumuz yöntemlerin çoğunu uygular; örneğin NFT'nin sahibini döndüren `ownerOf` ve NFT'nin sahipliğini bir hesaptan diğerine aktaran `transferFrom`. ERC-721 oluşturucumuzda, "MyNFT" ve "NFT" olmak üzere 2 dize geçirdiğimizi göreceksiniz. İlk değişken akıllı sözleşmenin adı, ikincisi ise sembolüdür. Bu değişkenlerin her birine dilediğiniz gibi isim verebilirsiniz! Son olarak, bir NFT basmamızı sağlayan `mintNFT(address recipient, string memory tokenURI)` fonksiyonumuz var! Bu fonksiyonun iki değişken aldığını fark edeceksiniz: -- `recipient`, yeni basılmış NFT'nizi alacak adresi belirtir +- `address recipient`, yeni bastığınız NFT'yi alacak adresi belirtir. - `string memory tokenURI`, NFT'nin meta verilerini tanımlayan bir JSON belgesine çözümlenmesi gereken bir dizedir. Bir NFT'nin meta verileri, onu gerçekten hayata geçiren şeydir ve bir ad, açıklama, görüntü ve diğer nitelikler gibi yapılandırılabilir özelliklere sahip olmasını sağlar. Bu öğreticinin 2. bölümünde, bu meta verilerin nasıl yapılandırılacağını açıklayacağız. `mintNFT`, devralınan ERC-721 kitaplığından bazı yöntemleri çağırır ve nihayetinde yeni basılmış NFT'nin kimliğini temsil eden bir sayı döndürür. -## Adım 11: MetaMask ve Alchemy'i projenize bağlayın {#connect-metamask-and-alchemy} +## Adım 11: MetaMask ve Alchemy'yi projenize bağlayın {#connect-metamask-and-alchemy} Artık bir MetaMask cüzdanı ile Alchemy hesabı oluşturduğumuza ve akıllı sözleşmemizi yazdığımıza göre, üçünü birbirine bağlamanın zamanı geldi. Sanal cüzdanınızdan gönderilen her işlem, benzersiz özel anahtarınızı kullanan bir imza gerektirir. Programımıza bu izni sağlamak için özel anahtarımızı (ve Alchemy API anahtarımızı) bir ortam dosyasında güvenle saklayabiliriz. -İşlem gönderme hakkında daha fazla bilgi edinmek için web3 kullanarak işlem göndermeyle ilgili [bu öğreticiye](/developers/tutorials/sending-transactions-using-web3-and-alchemy/) bakın. +İşlem gönderme hakkında daha fazla bilgi edinmek için, web3 kullanarak işlem göndermeyle ilgili [bu öğreticiye](/developers/tutorials/sending-transactions-using-web3-and-alchemy/) göz atın. İlk önce dotenv paketini proje dizininize kurun: + ``` npm install dotenv --save + ``` -Ardından projemizin kök dizininde bir `.env` dosyası oluşturun ve buna Metamask özel anahtarınızı ve HTTP Alchemy API URL'nizi ekleyin. +Ardından, projemizin kök dizininde bir `.env` dosyası oluşturun ve MetaMask özel anahtarınızı ve HTTP Alchemy API URL'nizi buna ekleyin. -- Özel anahtarınızı MetaMask'ten almak için [şu talimatları](https://metamask.zendesk.com/hc/en-us/articles/360015289632-How-to-Export-an-Account-Private-Key) takip edin +- MetaMask'ten özel anahtarınızı dışa aktarmak için [bu talimatları](https://metamask.zendesk.com/hc/en-us/articles/360015289632-How-to-Export-an-Account-Private-Key) izleyin. - HTTP Alchemy API URL'sini almak ve panonuza kopyalamak için aşağıya göz atın ![Alchemy API URL'nizi kopyalayın](./copy-alchemy-api-url.gif) -`.env` artık şöyle görünmelidir: +`.env` dosyanız şimdi şöyle görünmelidir: + ``` API_URL="https://eth-sepolia.g.alchemy.com/v2/your-api-key" PRIVATE_KEY="your-metamask-private-key" + ``` Bunları kodumuza gerçekten bağlamak için adım 13'te hardhat.config.js dosyamızda bu değişkenlere başvuracağız. -## Adım 12: Ethers.js'yi kurun {#install-ethers} +## Adım 12: Ethers.js Kurun {#install-ethers} -Ethers.js, [standart JSON-RPC yöntemlerini](/developers/docs/apis/json-rpc/) daha kullanıcı dostu yöntemlerle birleştirerek Ethereum'la etkileşimde bulunmayı ve Ethereum'a istek göndermeyi kolaylaştıran bir kütüphanedir. +Ethers.js, [standart JSON-RPC yöntemlerini](/developers/docs/apis/json-rpc/) daha kullanıcı dostu yöntemlerle sarmalayarak Ethereum ile etkileşim kurmayı ve istek göndermeyi kolaylaştıran bir kütüphanedir. -Hardhat, ek araçlar ve genişletilmiş işlevsellik için [Eklentiler](https://hardhat.org/plugins/)'i entegre etmeyi çok kolaylaştırır. Sözleşme dağıtımı için [Ethers eklentisinden](https://hardhat.org/docs/plugins/official-plugins#hardhat-ethers) yararlanacağız ([Ethers.js](https://github.com/ethers-io/ethers.js/)'nin bazı aşırı temiz sözleşme dağıtım yöntemleri vardır). +Hardhat, ek araçlar ve genişletilmiş işlevsellik için [Eklentileri](https://hardhat.org/plugins/) entegre etmeyi çok kolaylaştırır. Sözleşme dağıtımı için [Ethers eklentisinden](https://hardhat.org/docs/plugins/official-plugins#hardhat-ethers) yararlanacağız ([Ethers.js](https://github.com/ethers-io/ethers.js/) çok temiz sözleşme dağıtım yöntemlerine sahiptir). Proje klasörünüzde şunu yazın: + ``` npm install --save-dev @nomiclabs/hardhat-ethers ethers@^5.0.0 + ``` Bir sonraki adımda hardhat.config.js'mizde de ether'lere ihtiyacımız olacak. @@ -285,24 +303,26 @@ Hardhat.config.js dosyanızı şöyle görünecek şekilde güncelleyin: Komut satırından şunu yürütün: + ``` npx hardhat compile + ``` -Kaynak dosyada verilmeyen SPDX lisans tanımlayıcısı hakkında bir uyarı alabilirsiniz, ancak bunun için endişelenmenize gerek yok, geri kalan her şey düzgün olacaktır! Düzgün değilse, istediğiniz zaman [Alchemy discord](https://discord.gg/u72VCg3)'da mesaj gönderebilirsiniz. +Kaynak dosyada verilmeyen SPDX lisans tanımlayıcısı hakkında bir uyarı alabilirsiniz, ancak bunun için endişelenmenize gerek yok, geri kalan her şey düzgün olacaktır! Sorun yaşarsanız [Alchemy Discord](https://discord.gg/u72VCg3) üzerinden her zaman mesaj atabilirsiniz. -## Adım 15: Dağıtım komut dosyamızı yazın {#write-deploy} +## Adım 15: Dağıtım betiğimizi yazın {#write-deploy} Artık sözleşmemiz yazıldığına ve yapılandırma dosyamız kullanıma hazır olduğuna göre, sözleşme dağıtım komut dosyanızı yazmanın zamanı geldi. -`scripts/` klasörüne gidin ve aşağıdaki içerikleri ekleyerek `deploy.js` adlı yeni bir dosya oluşturun: +`scripts/` klasörüne gidin ve `deploy.js` adında yeni bir dosya oluşturup aşağıdaki içeriği ekleyin: ```js async function main() { const MyNFT = await ethers.getContractFactory("MyNFT") - // Start deployment, returning a promise that resolves to a contract object + // Dağıtımı başlat, bir sözleşme nesnesine dönüşecek bir promise döndürür const myNFT = await MyNFT.deploy() await myNFT.deployed() - console.log("Contract deployed to address:", myNFT.address) + console.log("Sözleşme şu adrese dağıtıldı:", myNFT.address) } main() @@ -313,13 +333,17 @@ main() }) ``` -Hardhat, bu kod satırlarının her birinin ne işe yaradığını [Sözleşme öğreticisinde](https://hardhat.org/tutorial/testing-contracts.html#writing-tests) harika bir şekilde açıklıyor, Hardhat açıklamalarını buraya aktardık. +Hardhat, [Sözleşmeler öğreticisinde](https://hardhat.org/tutorial/testing-contracts.html#writing-tests) bu kod satırlarının her birinin ne işe yaradığını harika bir şekilde açıklıyor, biz de buraya onların açıklamalarını aldık. + ``` const MyNFT = await ethers.getContractFactory("MyNFT"); + ``` Ethers.js'deki ContractFactory, yeni akıllı sözleşmeleri dağıtmak için kullanılan bir soyutlamadır, bu nedenle MyNFT burada, NFT sözleşmemizin örnekleri için bir fabrikadır. Hardhat-ethers eklentisini kullanırken ContractFactory ve Sözleşme örnekleri, varsayılan olarak ilk imzalayana bağlanır. + ``` const myNFT = await MyNFT.deploy(); + ``` Bir ContractFactory üzerinde deploy() öğesinin çağrılması, dağıtımı başlatır ve bir çözümlendiğinde Sözleşme oluşturacak bir Söz döndürür. Bu, akıllı sözleşme fonksiyonlarımızın her biri için bir yöntemi olan nesnedir. @@ -327,26 +351,30 @@ Bir ContractFactory üzerinde deploy() öğesinin çağrılması, dağıtımı b Sonunda akıllı sözleşmemizi uygulamaya hazırız! Proje dizininizin kök dizinine geri dönün ve komut satırında şunu çalıştırın: + ``` npx hardhat --network sepolia run scripts/deploy.js + ``` Daha sonra şöyle bir şey görmelisiniz: - Contract deployed to address: 0x4C5266cCc4b3F426965d2f51b6D910325a0E7650 + ``` + Sözleşme şu adrese dağıtıldı: 0x4C5266cCc4b3F426965d2f51b6D910325a0E7650 + ``` -[Sepolia etherscan](https://sepolia.etherscan.io/)'e gidip sözleşme adresimizi aratığımızda, başarıyla dağıtıldığını görebiliriz. Bu işlem biraz zaman alabileceğinden dolayı hemen göremezseniz lütfen biraz bekleyin. İşlem şunun gibi gözükecektir: +[Sepolia etherscan](https://sepolia.etherscan.io/) adresine gidip sözleşme adresimizi aratırsak, başarıyla dağıtıldığını görebilmeliyiz. Bu işlem biraz zaman alabileceğinden dolayı hemen göremezseniz lütfen biraz bekleyin. İşlem şunun gibi gözükecektir: ![İşlem adresinizi Etherscan'de görüntüleyin](./etherscan-sepoila-contract-creation.png) -Gönderici adresi, MetaMask hesap adresinizle eşleşmelidir ve Alıcı adresinde "Sözleşme Oluşturma" yazacaktır. İşleme tıklarsak, Alıcı alanında sözleşme adresimizi görürüz: +`From` adresi MetaMask hesap adresinizle eşleşmeli ve `To` adresinde “Sözleşme Oluşturma” yazmalıdır. İşleme tıklarsak, Alıcı alanında sözleşme adresimizi görürüz: -![Etherscan'da sözleşme adresinizi görüntüleyin](./etherscan-sepolia-tx-details.png) +![Sözleşme adresinizi Etherscan'de görüntüleyin](./etherscan-sepolia-tx-details.png) Evet! NFT akıllı sözleşmenizi Ethereum (test ağı) zincirinde dağıttınız! -Perde arkasında neler olduğunu anlamak için [Alchemy gösterge panelimizde](https://dashboard.alchemyapi.io/explorer) Explorer (Gezgin) sekmesine gidelim. Birden fazla Alchemy uygulamanız varsa, uygulamaya göre filtreleme yaptığınızdan ve "MyNFT"yi seçtiğinizden emin olun. +Perde arkasında neler olduğunu anlamak için [Alchemy gösterge panelimizdeki](https://dashboard.alchemyapi.io/explorer) Explorer sekmesine gidelim. Birden fazla Alchemy uygulamanız varsa, uygulamaya göre filtreleme yaptığınızdan ve "MyNFT"yi seçtiğinizden emin olun. -![Alchemy'nin Gezgin Gösterge Paneli ile "perde arkasında" yapılan çağrıları görüntüleyin](./alchemy-explorer-goerli.png) +![Alchemy'nin Explorer Panosu ile “perde arkasında” yapılan çağrıları görüntüleyin](./alchemy-explorer-goerli.png) -Burada, .deploy() fonksiyonunu çağırdığımızda Hardhat/Ethers'in bizim için arka planda yaptığı birkaç JSON-RPC çağrısı göreceksiniz. Burada belirtilmesi gereken iki önemli şey, akıllı sözleşmemizi Ropsten zincirine yazma isteği olan [eth_sendRawTransaction](/developers/docs/apis/json-rpc/#eth_sendrawtransaction) ve hash değerine göre işlemimiz hakkındaki bilgileri okuma isteği olan (işlem gönderirken sık kullanılan bir şablon) [eth_getTransactionByHash](/developers/docs/apis/json-rpc/#eth_gettransactionbyhash) öğeleridir. İşlem gönderme hakkında daha fazla bilgi edinmek için web3 kullanarak işlem göndermeyle ilgili [bu öğreticiye](/developers/tutorials/sending-transactions-using-web3-and-alchemy/) göz atın. +Burada, .deploy() fonksiyonunu çağırdığımızda Hardhat/Ethers'in bizim için arka planda yaptığı birkaç JSON-RPC çağrısı göreceksiniz. Burada değinilmesi gereken iki önemli olanı şunlardır: akıllı sözleşmemizi Sepolia zincirine yazma isteği olan [eth_sendRawTransaction](/developers/docs/apis/json-rpc/#eth_sendrawtransaction) ve karma değeri verildiğinde işlemimiz hakkındaki bilgileri okuma isteği olan [eth_getTransactionByHash](/developers/docs/apis/json-rpc/#eth_gettransactionbyhash) (işlem gönderirken tipik bir model). İşlem gönderme hakkında daha fazla bilgi edinmek için [Web3 kullanarak işlem gönderme](/developers/tutorials/sending-transactions-using-web3-and-alchemy/) hakkındaki bu öğreticiye göz atın. -Bu öğreticinin 1. Bölümü bu kadardı. [2. Bölümde, bir NFT'yi basarak](/developers/tutorials/how-to-mint-an-nft/) akıllı sözleşmemizle gerçekten etkileşime geçeceğiz ve [3. Bölümde, Ethereum cüzdanınızda NFT'nizi nasıl görüntüleyeceğinizi göstereceğiz](/developers/tutorials/how-to-view-nft-in-metamask/)! +Bu öğreticinin 1. Bölümü bu kadardı. [2. Bölüm'de, bir NFT basarak akıllı sözleşmemizle gerçekten etkileşime gireceğiz](/developers/tutorials/how-to-mint-an-nft/) ve [3. Bölüm'de, NFT'nizi Ethereum cüzdanınızda nasıl görüntüleyeceğinizi göstereceğiz](/developers/tutorials/how-to-view-nft-in-metamask/)! diff --git a/public/content/translations/tr/developers/tutorials/interact-with-other-contracts-from-solidity/index.md b/public/content/translations/tr/developers/tutorials/interact-with-other-contracts-from-solidity/index.md index 0c77ebf3848..43d9b10bc52 100644 --- a/public/content/translations/tr/developers/tutorials/interact-with-other-contracts-from-solidity/index.md +++ b/public/content/translations/tr/developers/tutorials/interact-with-other-contracts-from-solidity/index.md @@ -1,13 +1,15 @@ --- -title: Solidity'nin diğer sözleşmeleriyle etkileşime geçin -description: Mevcut bir sözleşmeden akıllı bir sözleşme nasıl kurulur ve onunla nasıl etkileşim kurulur +title: "Solidity'den diğer sözleşmelerle etkileşime geçme" +description: "Mevcut bir sözleşmeden akıllı sözleşme dağıtma ve onunla etkileşim kurma" author: "jdourlens" tags: - - "akıllı sözleşmeler" - - "solidity" - - "remix" - - "dağıtma" - - "birleştirilebilirlik" + [ + "akıllı kontratlar", + "solidity", + "remix", + "dağıtma", + "birleştirilebilirlik" + ] skill: advanced lang: tr published: 2020-04-05 @@ -16,9 +18,9 @@ sourceUrl: https://ethereumdev.io/interact-with-other-contracts-from-solidity/ address: "0x19dE91Af973F404EDF5B4c093983a7c6E3EC8ccE" --- -Önceki öğreticilerde [ilk akıllı sözleşmenizi nasıl dağıtacağınızla](/developers/tutorials/deploying-your-first-smart-contract/) ve ona nasıl [niteleyicilerle erişim kontrolü](https://ethereumdev.io/organize-your-code-and-control-access-to-your-smart-contract-with-modifiers/) veya [Solidity'de hata işleme](https://ethereumdev.io/handle-errors-in-solidity-with-require-and-revert/) gibi bazı özellikler ekleyeceğinizle ilgili çok şey öğrendik. Bu öğreticide, mevcut bir sözleşmeden akıllı bir sözleşmenin nasıl dağıtılacağını ve onunla nasıl etkileşime geçileceğini öğreneceğiz. +Önceki öğreticilerde [ilk akıllı sözleşmenizi nasıl dağıtacağınız](/developers/tutorials/deploying-your-first-smart-contract/) gibi pek çok şey öğrendik ve ona [değiştiricilerle erişimi kontrol etme](https://ethereumdev.io/organize-your-code-and-control-access-to-your-smart-contract-with-modifiers/) veya [Solidity'de hata yönetimi](https://ethereumdev.io/handle-errors-in-solidity-with-require-and-revert/) gibi bazı özellikler ekledik. Bu öğreticide mevcut bir sözleşmeden bir akıllı sözleşme dağıtmayı ve onunla etkileşim kurmayı öğreneceğiz. -Bunun için bir fabrika oluşturarak herkesin kendi `Counter` (Sayaç) akıllı sözleşmesine sahip olmasını sağlayan bir sözleşme yapacağız, adı `CounterFactory` (Sayaç Fabrikası) olacak. İlk olarak, ilk `Counter` akıllı sözleşmemizin kodu: +Bunun için bir fabrika oluşturarak herkesin kendi `Counter` akıllı sözleşmesine sahip olmasını sağlayan bir sözleşme yapacağız, adı `CounterFactory` olacak. İlk olarak, ilk `Counter` akıllı sözleşmemizin kodu: ```solidity pragma solidity 0.5.17; @@ -31,12 +33,12 @@ contract Counter { modifier onlyOwner(address caller) { - require(caller == _owner, "You're not the owner of the contract"); + require(caller == _owner, "Sözleşmenin sahibi siz değilsiniz"); _; } modifier onlyFactory() { - require(msg.sender == _factory, "You need to use the factory"); + require(msg.sender == _factory, "Fabrikayı kullanmanız gerekir"); _; } @@ -56,19 +58,19 @@ contract Counter { } ``` -Fabrikanın adresini ve sözleşme sahibinin adresini takip etmek için sözleşme kodunu biraz değiştirdiğimizi unutmayın. Başka bir sözleşmeden bir sözleşme kodunu aradığınızda, msg.sender sözleşmeli fabrikamızın adresine başvuracaktır. Diğer sözleşmelerle etkileşim kurmak için bir sözleşme kullanmak yaygın bir uygulama olduğundan, bu **anlaşılması gerçekten önemli bir noktadır**. Bu nedenle, karmaşık durumlarda gönderenin kim olduğuna dikkat etmelisiniz. +Fabrikanın adresini ve sözleşme sahibinin adresini takip etmek için sözleşme kodunu biraz değiştirdiğimizi unutmayın. Başka bir sözleşmeden bir sözleşme kodu çağırdığınızda, `msg.sender` sözleşme fabrikamızın adresini gösterecektir. Diğer sözleşmelerle etkileşim kurmak için bir sözleşme kullanmak yaygın bir uygulama olduğundan, bu **anlaşılması gerçekten önemli bir noktadır**. Bu nedenle, karmaşık durumlarda göndericinin kim olduğuna dikkat etmelisiniz. -Bunun için ayrıca, durum değiştirme işlevinin yalnızca orijinal çağrı yapan parametre olarak geçirecek olan fabrika tarafından çağrılabilmesini sağlayan bir `onlyFactory` niteleyicisi ekledik. +Bunun için, durum değiştiren fonksiyonun yalnızca orijinal çağırıcıyı parametre olarak geçiren fabrika tarafından çağrılabilmesini sağlayan bir `onlyFactory` değiştiricisi de ekledik. -Diğer tüm Counter'ları yönetecek olan yeni `CounterFactory`'nin içine, bir sahibi karşı sözleşmenin adresiyle ilişkilendirecek bir eşleştirme ekleyeceğiz: +Diğer tüm Sayaçları yönetecek olan yeni `CounterFactory`'mizin içine, bir sahibini kendi sayaç sözleşmesinin adresiyle ilişkilendirecek bir eşleme ekleyeceğiz: ```solidity mapping(address => Counter) _counters; ``` -Ethereum'da eşleştirme, javascript'teki nesnelerin eş değeridir, A tipi bir anahtarı B tipi bir değere eşlemeyi sağlar. Bu durumda, bir sahibinin adresini Counter'ın örneğiyle eşleştiririz. +Ethereum'da, eşlemeler javascript'teki nesnelerin eşdeğeridir; A türünde bir anahtarı B türünde bir değere eşlemeyi sağlarlar. Bu durumda, bir sahibinin adresini onun Counter örneği ile eşleriz. -Birisi için yeni bir Counter başlatmak şöyle görünür: +Birisi için yeni bir Counter örneği oluşturmak şöyle görünür: ```solidity function createCounter() public { @@ -77,9 +79,9 @@ Birisi için yeni bir Counter başlatmak şöyle görünür: } ``` -Önce kişinin zaten bir counter'ı olup olmadığını kontrol ediyoruz. Eğer bir counter'ı yoksa, adresini `Counter` yapıcısına ileterek yeni bir counter başlatırız ve yeni oluşturulan örneği eşleştirmeye atarız. +Önce kişinin zaten bir `Counter`'ı olup olmadığını kontrol ederiz. Eğer bir `Counter`'ı yoksa, adresini `Counter` yapıcısına geçirerek yeni bir `Counter` örneği oluştururuz ve yeni oluşturulan örneği eşlemeye atarız. -Belirli bir Counter'ın sayısını almak için şöyle görünür: +Belirli bir `Counter`'ın sayımını almak şöyle görünür: ```solidity function getCount(address account) public view returns (uint256) { @@ -92,7 +94,7 @@ function getMyCount() public view returns (uint256) { } ``` -İlk işlev, belirli bir adres için Counter sözleşmesinin var olup olmadığını kontrol eder ve ardından örnekten `getCount` yöntemini çağırır. İkinci fonksiyon: `getMyCount` sadece `getCount` fonksiyonuna doğrudan msg.sender geçirmek için bir kısayoldur. +İlk fonksiyon, belirtilen adres için `Counter` sözleşmesinin mevcut olup olmadığını kontrol eder ve ardından örnekten `getCount` metodunu çağırır. İkinci fonksiyon olan `getMyCount`, `msg.sender`'ı doğrudan `getCount` fonksiyonuna geçirmek için kullanılan bir kısayoldur. `increment` fonksiyonu oldukça benzerdir ancak orijinal işlem göndericisini `Counter` sözleşmesine iletir: @@ -103,11 +105,11 @@ function increment() public { } ``` -Birçok kez aranırsa, counter'ımızın muhtemelen bir taşma kurbanı olabileceğini unutmayın. Bu olası durumdan korunmak için mümkün olduğunca [SafeMath kütüphanesini](https://ethereumdev.io/using-safe-math-library-to-prevent-from-overflows/) kullanmalısınız. +Çok fazla kez çağrılırsa, `counter`'ımızın bir taşma hatasına maruz kalabileceğini unutmayın. Bu olası duruma karşı korunmak için [SafeMath kütüphanesini](https://ethereumdev.io/using-safe-math-library-to-prevent-from-overflows/) mümkün olduğunca kullanmalısınız. -Sözleşmemizi dağıtmak için hem `CounterFactory` kodunu hem de `Counter` kodunu sağlamanız gerekir. Örneğin Remix'te dağıtırken CounterFactory'yi seçmeniz gerekir. +Sözleşmemizi dağıtmak için hem `CounterFactory` hem de `Counter` kodunu sağlamanız gerekecektir. Örneğin Remix'te dağıtım yaparken `CounterFactory`'yi seçmeniz gerekecektir. -Tam kod burada: +İşte kodun tamamı: ```solidity pragma solidity 0.5.17; @@ -120,12 +122,12 @@ contract Counter { modifier onlyOwner(address caller) { - require(caller == _owner, "You're not the owner of the contract"); + require(caller == _owner, "Sözleşmenin sahibi siz değilsiniz"); _; } modifier onlyFactory() { - require(msg.sender == _factory, "You need to use the factory"); + require(msg.sender == _factory, "Fabrikayı kullanmanız gerekir"); _; } @@ -170,8 +172,8 @@ contract CounterFactory { } ``` -Derlemeden sonra, Remix dağıtımı bölümünde dağıtılacak fabrikayı seçeceksiniz: +Derleme işleminden sonra, Remix dağıtım bölümünde dağıtılacak fabrikayı seçeceksiniz: -![Remix'te dağıtılacak fabrikanın seçilmesi](./counterfactory-deploy.png) +![Remix'te dağıtılacak fabrikayı seçme](./counterfactory-deploy.png) -Ardından sözleşmeli fabrikanızla oynayabilir ve değerin değiştiğini kontrol edebilirsiniz. Akıllı sözleşmeyi farklı bir adresten aramak isterseniz, Remix'in Hesap seçiminde adresi değiştirmeniz gerekir. +Ardından sözleşme fabrikanızla denemeler yapabilir ve değerin değiştiğini kontrol edebilirsiniz. Akıllı sözleşmeyi farklı bir adresten çağırmak isterseniz Remix'in `Hesap` seçimi bölümündeki adresi değiştirmeniz gerekir. diff --git a/public/content/translations/tr/developers/tutorials/ipfs-decentralized-ui/index.md b/public/content/translations/tr/developers/tutorials/ipfs-decentralized-ui/index.md new file mode 100644 index 00000000000..f9d5776cb3b --- /dev/null +++ b/public/content/translations/tr/developers/tutorials/ipfs-decentralized-ui/index.md @@ -0,0 +1,73 @@ +--- +title: "Merkeziyetsiz kullanıcı arayüzleri için IPFS" +description: "Bu öğretici, okuyucuya bir merkeziyetsiz uygulama için kullanıcı arayüzünü saklamak üzere IPFS'in nasıl kullanılacağını öğretir. Uygulamanın verileri ve iş mantığı merkeziyetsiz olsa da sansüre dayanıklı bir kullanıcı arayüzü olmadan kullanıcılar yine de ona erişimini kaybedebilir." +author: Ori Pomerantz +tags: [ "ipfs" ] +skill: beginner +lang: tr +published: 2024-06-29 +--- + +İnanılmaz yeni bir merkeziyetsiz uygulama yazdınız. Hatta onun için bir [kullanıcı arayüzü](/developers/tutorials/creating-a-wagmi-ui-for-your-contract/) bile yazdınız. Ama şimdi birisinin, bulutta bulunan tek bir sunucu olan kullanıcı arayüzünüzü çökertmek suretiyle onu sansürlemeye çalışacağından korkuyorsunuz. Bu öğreticide, kullanıcı arayüzünüzü **[gezegenler arası dosya sistemine (IPFS)](https://ipfs.tech/developers/)** koyarak sansürden nasıl kaçınacağınızı öğreneceksiniz, böylece ilgilenen herkes gelecekteki erişim için onu bir sunucuya sabitleyebilecek. + +Tüm işi yapmak için [Fleek](https://resources.fleek.xyz/docs/) gibi üçüncü taraf bir hizmeti kullanabilirsiniz. Bu öğretici, daha fazla iş olsa bile ne yaptıklarını anlayacak kadarını yapmak isteyen kişiler içindir. + +## Yerel olarak başlarken {#getting-started-locally} + +Birden fazla [üçüncü taraf IPFS sağlayıcısı](https://docs.ipfs.tech/how-to/work-with-pinning-services/#use-a-third-party-pinning-service) vardır, ancak test için IPFS'i yerel olarak çalıştırarak başlamak en iyisidir. + +1. [IPFS kullanıcı arayüzünü](https://docs.ipfs.tech/install/ipfs-desktop/#install-instructions) kurun. + +2. Web sitenizle bir dizin oluşturun. [Vite](https://vite.dev/) kullanıyorsanız bu komutu kullanın: + + ```sh + pnpm vite build + ``` + +3. IPFS Desktop'ta, **İçe Aktar > Klasör**'e tıklayın ve önceki adımda oluşturduğunuz dizini seçin. + +4. Az önce yüklediğiniz klasörü seçin ve **Yeniden Adlandır**'a tıklayın. Ona daha anlamlı bir isim verin. + +5. Tekrar seçin ve **Bağlantıyı paylaş**'a tıklayın. URL'yi panoya kopyalayın. Bağlantı, `https://ipfs.io/ipfs/QmaCuQ7yN6iyBjLmLGe8YiFuCwnePoKfVu6ue8vLBsLJQJ` gibi olacaktır. + +6. **Durum**'a tıklayın. Ağ geçidi adresini görmek için **Gelişmiş** sekmesini genişletin. Örneğin, benim sistemimde adres `http://127.0.0.1:8080` şeklindedir. + +7. Adresinizi bulmak için bağlantı adımındaki yolu ağ geçidi adresiyle birleştirin. Örneğin, yukarıdaki örnek için URL `http://127.0.0.1:8080/ipfs/QmaCuQ7yN6iyBjLmLGe8YiFuCwnePoKfVu6ue8vLBsLJQJ` şeklindedir. Sitenizi görmek için bu URL'yi bir tarayıcıda açın. + +## Yükleme {#uploading} + +Artık dosyaları yerel olarak sunmak için IPFS kullanabilirsiniz ki bu pek heyecan verici değil. Sonraki adım, çevrimdışıyken onları dünyaya sunmaktır. + +Çok sayıda iyi bilinen [sabitleme hizmetleri](https://docs.ipfs.tech/concepts/persistence/#pinning-services) vardır. Onlardan birini seçin. Hangi hizmeti kullanırsanız kullanın, bir hesap oluşturmanız ve IPFS masaüstünüzdeki **içerik tanımlayıcısını (CID)** ona sağlamanız gerekir. + +Şahsen, [4EVERLAND](https://docs.4everland.org/storage/4ever-pin/guides) uygulamasını kullanımının en kolay olduğunu gördüm. Bunun için talimatlar şunlardır: + +1. [Kontrol paneline](https://dashboard.4everland.org/overview) gidin ve cüzdanınızla giriş yapın. + +2. Sol kenar çubuğunda **Depolama > 4EVER Pin**'e tıklayın. + +3. **Yükle > Seçilen CID**'ye tıklayın. İçeriğinize bir ad verin ve IPFS masaüstünden CID'yi sağlayın. Şu anda bir CID, `QmaCuQ7yN6iyBjLmLGe8YiFuCwnePoKfVu6ue8vLBsLJQJ` gibi [base-58 kodlu](https://medium.com/bootdotdev/base64-vs-base58-encoding-c25553ff4524) bir karmayı temsil eden, `Qm` ile başlayıp 44 harf ve rakamla devam eden bir dizedir, ancak [bunun değişmesi muhtemeldir](https://docs.ipfs.tech/concepts/content-addressing/#version-1-v1). + +4. İlk durum **Sırada**'dır. **Sabitlendi** olarak değişene kadar yeniden yükleyin. + +5. Bağlantıyı almak için CID'nize tıklayın. Uygulamamı [burada](https://bafybeifqka2odrne5b6l5guthqvbxu4pujko2i6rx2zslvr3qxs6u5o7im.ipfs.dweb.link/) görebilirsiniz. + +6. Bir aydan uzun bir süre boyunca sabitlenmesi için hesabınızı etkinleştirmeniz gerekebilir. Hesap etkinleştirme maliyeti yaklaşık 1 dolardır. Kapattıysanız, tekrar etkinleştirme istenmesi için çıkış yapın ve tekrar giriş yapın. + +## IPFS'den kullanma {#using-from-ipfs} + +Bu noktada, IPFS içeriğinizi sunan merkezi bir ağ geçidine bir bağlantınız var. Kısacası, kullanıcı arayüzünüz biraz daha güvenli olabilir ancak hâlâ sansüre dayanıklı değil. Gerçek sansür direnci için, kullanıcıların IPFS'i [doğrudan bir tarayıcıdan](https://docs.ipfs.tech/install/ipfs-companion/#prerequisites) kullanmaları gerekir. + +Bunu kurduktan sonra (ve masaüstü IPFS çalışırken), herhangi bir sitede [/ipfs/``](https://any.site/ipfs/bafybeifqka2odrne5b6l5guthqvbxu4pujko2i6rx2zslvr3qxs6u5o7im) adresine gidebilirsiniz ve bu içeriği merkeziyetsiz bir şekilde sunulmuş olarak alırsınız. + +## Dezavantajlar {#drawbacks} + +IPFS dosyalarını güvenilir bir şekilde silemezsiniz, bu nedenle kullanıcı arayüzünüzü değiştirdiğiniz sürece, onu ya merkezi bırakmak ya da IPFS'nin üzerinde değişkenlik sağlayan bir sistem olan [gezegenler arası isim sistemini (IPNS)](https://docs.ipfs.tech/concepts/ipns/#mutability-in-ipfs) kullanmak muhtemelen en iyisidir. Elbette, değişken olan her şey, IPNS durumunda karşılık geldiği özel anahtara sahip kişiye baskı yaparak sansürlenebilir. + +Ek olarak, bazı paketlerin IPFS ile sorunu vardır, bu nedenle web siteniz çok karmaşıksa bu iyi bir çözüm olmayabilir. Ve tabii ki, sunucu entegrasyonuna dayanan herhangi bir şey, sadece istemci tarafını IPFS üzerinde bulundurarak merkeziyetsiz hale getirilemez. + +## Sonuç {#conclusion} + +Ethereum'un, merkeziyetsiz uygulamanızın veritabanı ve iş mantığı yönlerini merkeziyetsizleştirmenize olanak tanıdığı gibi, IPFS de kullanıcı arayüzünü merkeziyetsizleştirmenize olanak tanır. Bu, merkeziyetsiz uygulamanıza karşı bir saldırı vektörünü daha kapatmanıza olanak tanır. + +[Çalışmalarımdan daha fazlası için buraya bakın](https://cryptodocguy.pro/). diff --git a/public/content/translations/tr/developers/tutorials/kickstart-your-dapp-frontend-development-with-create-eth-app/index.md b/public/content/translations/tr/developers/tutorials/kickstart-your-dapp-frontend-development-with-create-eth-app/index.md index 11e12a931a9..93283f85848 100644 --- a/public/content/translations/tr/developers/tutorials/kickstart-your-dapp-frontend-development-with-create-eth-app/index.md +++ b/public/content/translations/tr/developers/tutorials/kickstart-your-dapp-frontend-development-with-create-eth-app/index.md @@ -1,26 +1,27 @@ --- -title: create-eth-app ile dapp ön uç geliştirmenizi başlatın -description: Create-eth-app ve özelliklerinin nasıl kullanılacağına genel bakış +title: "create-eth-app ile dapp ön uç geliştirmenizi başlatın" +description: "Create-eth-app ve özelliklerinin nasıl kullanılacağına genel bakış" author: "Markus Waas" tags: - - "create-eth-app" - - "ön uç" - - "javascript" - - "ethers.js" - - "the graph" - - "defi" -skill: advanced + [ + "ön uç", + "javascript", + "ethers.js", + "the graph", + "defi" + ] +skill: beginner lang: tr published: 2020-04-27 source: soliditydeveloper.com sourceUrl: https://soliditydeveloper.com/create-eth-app --- -Geçen sefer [Solidity'nin büyük resmine baktık ve](https://soliditydeveloper.com/solidity-overview-2020) hâlihazırda [create-eth-app](https://github.com/PaulRBerg/create-eth-app)'den bahsettik. Şimdi onu nasıl kullanacağınızı, hangi özelliklerin entegre olduğunu ve nasıl genişleteceğinize dair ek fikirleri öğreneceksiniz. [Sablier](http://sablier.com/)'in kurucusu Paul Razvan Berg tarafından başlatılan bu uygulama, ön uç geliştirmenizi başlatacak ve beraberinde aralarından seçim yapabileceğiniz çeşitli isteğe bağlı entegrasyonlar getiriyor. +Geçen sefer [Solidity'nin genel resmine](https://soliditydeveloper.com/solidity-overview-2020) göz atmış ve [create-eth-app]'ten (https://github.com/PaulRBerg/create-eth-app) zaten bahsetmiştik. Şimdi onu nasıl kullanacağınızı, hangi özelliklerin entegre olduğunu ve nasıl genişleteceğinize dair ek fikirleri öğreneceksiniz. [Sablier](http://sablier.com/)'in kurucusu Paul Razvan Berg tarafından başlatılan bu uygulama, ön uç geliştirmenizi başlatacak ve aralarından seçim yapabileceğiniz çeşitli isteğe bağlı entegrasyonlarla birlikte gelir. ## Kurulum {#installation} -Kurulum için Yarn 0.25 veya üstü gerekir (`npm install thread --global`). Şunları çalıştırmak kadar kolaydır: +Kurulum için Yarn 0.25 veya üzeri gereklidir (`npm install yarn --global`). Şunları çalıştırmak kadar basittir: ```bash yarn create eth-app my-eth-app @@ -28,44 +29,44 @@ cd my-eth-app yarn react-app:start ``` -Perde arkasında [create-react-app](https://github.com/facebook/create-react-app) kullanır. Uygulamanızı görmek için, `http://localhost:3000/` bağlantısını açın. Üretime dağıtmaya hazır olduğunuzda, yarn build ile küçültülmüş bir paket oluşturun. Bunu sunmanın kolay yollarından biri [Netlify](https://www.netlify.com/)'dır. Bir Github deposu oluşturmanız, Netlify'a eklemeniz ve build komutunu kurmanız yeterli olur! Uygulamanız barındırılacak ve herkes tarafından kullanılabilir olacak. Ve hepsi ücretsiz. +Arka planda [create-react-app](https://github.com/facebook/create-react-app) kullanır. Uygulamanızı görmek için `http://localhost:3000/` adresini açın. Üretime dağıtmaya hazır olduğunuzda, `yarn build` ile küçültülmüş bir paket oluşturun. Bunu barındırmanın kolay bir yolu [Netlify](https://www.netlify.com/)'dır. Bir GitHub deposu oluşturabilir, onu Netlify'a ekleyebilir, derleme komutunu ayarlayabilir ve işlem tamamdır! Uygulamanız barındırılacak ve herkes tarafından kullanılabilir olacak. Ve hepsi ücretsiz. ## Özellikler {#features} ### React ve create-react-app {#react--create-react-app} -Öncelikle uygulamanın kalbi: React ve _create-react-app_ ile gelen tüm ek özellikler. Sadece bunu kullanmak, Ethereum'u entegre etmek istemiyorsanız harika bir seçenektir. [React](https://reactjs.org/) kendi başına interaktif UI'lar yapmayı gerçekten kolaylaştırır. [Vue](https://vuejs.org/) kadar yeni başlayanlar için uygun olmayabilir, ancak yine de çoğunlukla kullanılmaktadır, daha fazla özelliğe sahiptir ve en önemlisi aralarından seçim yapabileceğiniz binlerce ek kütüphane vardır. _create-react-app_, onunla başlamayı gerçekten kolaylaştırır ve şunları içerir: +Öncelikle uygulamanın kalbi: React ve _create-react-app_ ile gelen tüm ek özellikler. Sadece bunu kullanmak, Ethereum'u entegre etmek istemiyorsanız harika bir seçenektir. [React](https://react.dev/) kendi başına etkileşimli kullanıcı arayüzleri oluşturmayı gerçekten kolaylaştırır. [Vue](https://vuejs.org/) kadar başlangıç seviyesine uygun olmayabilir, ancak yine de çoğunlukla kullanılır, daha fazla özelliğe sahiptir ve en önemlisi aralarından seçim yapabileceğiniz binlerce ek kütüphanesi vardır. _create-react-app_ ile başlamak da gerçekten çok kolaydır ve şunları içerir: - React, JSX, ES6, TypeScript, Flow söz dizimi desteği. - Nesne yayma operatörü gibi ES6'nın ötesinde dil ekstraları. -- Autoprefixer CSS, yani -webkit- veya diğer ön eklere ihtiyacınız yok. +- Otomatik olarak ön eklenen CSS, bu nedenle `-webkit-` veya diğer ön eklere ihtiyacınız olmaz. - Kapsam raporlaması için yerleşik desteğe sahip hızlı etkileşimli birim test çalıştırıcısı. - Yaygın hatalar hakkında uyaran canlı bir geliştirme sunucusu. - Hash değerleri ve kaynak haritaları içeren, üretim için JS, CSS ve görüntüleri bir araya getirmeye yarayan bir derleme komut dosyası. -Özellikle _create-eth-app_, yeni [kanca efektlerini](https://reactjs.org/docs/hooks-effect.html) kullanır. Güçlü, ancak çok küçük sözde fonksiyonel bileşenler yazmak için bir yöntem. _create-eth-app_'de nasıl kullanıldığını öğrenmek için aşağıdaki Apollo hakkındaki bölüme bakın. +Özellikle _create-eth-app_ yeni [hook etkilerinden](https://legacy.reactjs.org/docs/hooks-effect.html) yararlanır. Güçlü, ancak çok küçük sözde fonksiyonel bileşenler yazmak için bir yöntem. _create-eth-app_ içinde nasıl kullanıldıklarını görmek için Apollo ile ilgili aşağıdaki bölüme bakın. ### Yarn Workspaces {#yarn-workspaces} -[Yarn Workspaces](https://classic.yarnpkg.com/en/docs/workspaces/), birden çok pakete sahip olmanızın yanı sıra kök klasörden hepsini aynı anda `yarn install` kullanarak yönetmenize izin verir. Bu, özellikle her ikisi de `create-eth-app`'in bir parçası olan akıllı sözleşme adresleri/ABI yönetimi (hangi akıllı sözleşmeleri nereye yerleştirdiğiniz ve bunlarla nasıl iletişim kuracağınızla ilgili bilgiler) veya grafik entegrasyonu gibi daha küçük ek paketler için mantıklıdır. +[Yarn Workspaces](https://classic.yarnpkg.com/en/docs/workspaces/) birden fazla pakete sahip olmanıza olanak tanır, ancak hepsini kök klasörden yönetebilir ve `yarn install` kullanarak tüm bağımlılıkları tek seferde kurabilirsiniz. Bu, özellikle `create-eth-app`'in bir parçası olan, akıllı sözleşme adresleri/ABI yönetimi (hangi akıllı sözleşmeleri nereye dağıttığınız ve onlarla nasıl iletişim kuracağınız hakkındaki bilgiler) veya grafik entegrasyonu gibi daha küçük ek paketler için mantıklıdır. ### ethers.js {#ethersjs} -Hâlâ çoğunlukla [Web3](https://docs.web3js.org/) kullanılıyor olsa da, [ethers.js](https://docs.ethers.io/) son bir yıl içinde bir alternatif olarak büyük ivme kazanmış ve _create-eth-app_ içine entegre edilmiştir. Bununla çalışabilir, onu Web3 olarak değiştirebilir veya neredeyse beta sürümünden çıkmış olan [ethers.js v5](https://docs.ethers.org/v5/)'e yükseltmeyi düşünebilirsiniz. +[Web3](https://docs.web3js.org/) hala çoğunlukla kullanılıyor olsa da, [ethers.js](https://docs.ethers.io/) son bir yılda bir alternatif olarak çok daha fazla ilgi gördü ve _create-eth-app_'e entegre edilen kütüphanedir. Bununla çalışabilir, Web3'e geçebilir veya neredeyse beta sürümünden çıkmış olan [ethers.js v5](https://docs.ethers.org/v5/)'e yükseltmeyi düşünebilirsiniz. ### The Graph {#the-graph} -[GraphQL](https://graphql.org/), [Restful API](https://restfulapi.net/)'ye kıyasla verileri işlemenin alternatif bir yoludur. Özellikle merkeziyetsiz blok zinciri verileri için Restful Api'lere göre çeşitli avantajları vardır. Eğer bunun ardındaki sebepler konusunda meraklıysanız, [GraphQL Merkeziyetsiz Ağı Güçlendirecek](https://medium.com/graphprotocol/graphql-will-power-the-decentralized-web-d7443a69c69a)'e bir göz atın. +[GraphQL](https://graphql.org/), bir [Restful API](https://restfulapi.net/) ile karşılaştırıldığında verileri işlemek için alternatif bir yoldur. Özellikle merkeziyetsiz blokzincir verileri için Restful API'lere göre çeşitli avantajları vardır. Bunun arkasındaki mantığı merak ediyorsanız, [GraphQL Will Power the Decentralized Web](https://medium.com/graphprotocol/graphql-will-power-the-decentralized-web-d7443a69c69a) makalesine göz atın. -Genellikle akıllı sözleşmenizden doğrudan veri alırsınız. En son işlemin gerçekleştiği zamanı okumak mı istiyorsunuz? Sadece Ethereum düğümünden merkeziyetsiz uygulamanıza veriyi getiren `MyContract.methods.latestTradeTime().call()`'u çağırın. Peki ya yüzlerce farklı veri noktasına ihtiyacınız varsa? Bu, düğüme yüzlerce veri alınmasına yol açar ve bu alımların her biri bir [RTT](https://wikipedia.org/wiki/Round-trip_delay_time) gerektirerek merkeziyetsiz uygulamanızı yavaş ve verimsiz hâle getirir. Bir geçici çözüm, sözleşmenizin içinde aynı anda birden çok veri döndüren bir alıcı çağrı işlevi olabilir. Ancak bu her zaman ideal değildir. +Genellikle akıllı sözleşmenizden doğrudan veri alırsınız. En son işlemin gerçekleştiği zamanı okumak mı istiyorsunuz? Bir Ethereum düğümünden merkeziyetsiz uygulamanıza veri çeken `MyContract.methods.latestTradeTime().call()` fonksiyonunu çağırmanız yeterlidir. Peki ya yüzlerce farklı veri noktasına ihtiyacınız varsa? Bu durum, düğüme yüzlerce veri getirilmesine neden olur ve her seferinde bir [RTT](https://wikipedia.org/wiki/Round-trip_delay_time) gerektirerek merkeziyetsiz uygulamanızı yavaş ve verimsiz hale getirir. Bir geçici çözüm, sözleşmenizin içinde aynı anda birden çok veri döndüren bir alıcı çağrı işlevi olabilir. Ancak bu her zaman ideal değildir. -Tarihsel verilerle de ilgileniyor olabilirsiniz. Yalnızca son işlem zamanını değil, kendi yaptığınız tüm işlemlerin zamanlarını da bilmek istiyorsunuz. _create-eth-app_ alt grafik paketini kullanın, [belgeleri](https://thegraph.com/docs/en/subgraphs/developing/creating/starting-your-subgraph) okuyun ve kendi sözleşmelerinize uyarlayın. Popüler akıllı sözleşmeler arıyorsanız, zaten bir alt grafik bile olabilir. [Alt grafik gezgini](https://thegraph.com/explorer/)'ne bir göz atın. +Tarihsel verilerle de ilgileniyor olabilirsiniz. Yalnızca son işlem zamanını değil, kendi yaptığınız tüm işlemlerin zamanlarını da bilmek istiyorsunuz. _create-eth-app_ subgraph paketini kullanın, [dokümanları](https://thegraph.com/docs/en/subgraphs/developing/creating/starting-your-subgraph) okuyun ve kendi sözleşmelerinize uyarlayın. Popüler akıllı sözleşmeler arıyorsanız, zaten bir alt grafik bile olabilir. [Subgraph explorer](https://thegraph.com/explorer/)'a göz atın. -Bir alt grafiğiniz olduğunda, ihtiyacınız olan geçmiş veriler de dahil olmak üzere tüm önemli blok zinciri verilerini alan merkeziyetsiz uygulamanıza basit bir sorgu yazmanıza olanak tanır, yalnızca tek bir getirme gerekir. +Bir alt grafiğiniz olduğunda, bu, ihtiyacınız olan geçmiş veriler de dahil olmak üzere tüm önemli blokzincir verilerini alan merkeziyetsiz uygulamanıza basit bir sorgu yazmanıza olanak tanır; bunun için yalnızca tek bir getirme işlemi gerekir. ### Apollo {#apollo} -[Apollo Boost](https://www.apollographql.com/docs/react/get-started/) entegrasyonu sayesinde grafiği React merkeziyetsiz uygulamanıza kolayca entegre edebilirsiniz. Özellikle [React hooks ve Apollo](https://www.apollographql.com/blog/apollo-client-now-with-react-hooks) kullanılırken, verileri almak, bileşeninize tek bir GraphQl sorgusu yazmak kadar basittir: +[Apollo Boost](https://www.apollographql.com/docs/react/get-started/) entegrasyonu sayesinde grafiği React merkeziyetsiz uygulamanıza kolayca entegre edebilirsiniz. Özellikle [React hook'larını ve Apollo'yu](https://www.apollographql.com/blog/apollo-client-now-with-react-hooks) kullanırken, veri getirmek bileşeninize tek bir GraphQL sorgusu yazmak kadar basittir: ```js const { loading, error, data } = useQuery(myGraphQlQuery) @@ -79,32 +80,32 @@ React.useEffect(() => { ## Şablonlar {#templates} -Üstte birkaç farklı şablon arasından seçim yapabilirsiniz. Bir Aave, Compound, UniSwap veya sablier entegrasyonu kullanabilirsiniz. Hepsi, önceden yapılmış alt grafik entegrasyonlarının yanı sıra önemli hizmet akıllı sözleşme adresleri ekler. Şablonu, oluşturma komutuna `yarn create eth-app my-eth-app --with-template aave` şeklinde eklemeniz yeterlidir. +Ayrıca birkaç farklı şablon arasından seçim yapabilirsiniz. Şu ana kadar bir Aave, Compound, Uniswap veya Sablier entegrasyonu kullanabilirsiniz. Hepsi, önceden yapılmış alt grafik entegrasyonlarının yanı sıra önemli hizmet akıllı sözleşme adresleri ekler. Şablonu oluşturma komutuna `yarn create eth-app my-eth-app --with-template aave` gibi eklemeniz yeterlidir. ### Aave {#aave} -[Aave](https://aave.com/) merkeziyetsiz bir borç verme piyasasıdır. Mevduat sahipleri pasif bir gelir elde etmek için piyasaya likidite sağlarken, borçlular teminat kullanarak borç alabilirler. Aave'nin benzersiz bir özelliği, krediyi tek işlemde iade ettiğiniz sürece herhangi bir teminat olmadan borç para almanıza olanak tanıyan [hızlı kredilerdir](https://docs.aave.com/developers/guides/flash-loans). Bu, örneğin arbitraj ticaretinde size ekstra nakit vermek için faydalı olabilir. +[Aave](https://aave.com/) merkeziyetsiz bir para borç verme piyasasıdır. Mevduat sahipleri pasif bir gelir elde etmek için piyasaya likidite sağlarken, borçlular teminat kullanarak borç alabilirler. Aave'nin benzersiz özelliklerinden biri, krediyi tek bir işlem içinde iade ettiğiniz sürece, herhangi bir teminat olmadan borç para almanıza olanak tanıyan [hızlı kredilerdir](https://aave.com/docs/developers/flash-loans). Bu, örneğin arbitraj ticaretinde size ekstra nakit vermek için faydalı olabilir. -Size faiz kazandıran takas edilmiş token'lara _aTokens_ denir. +Size faiz kazandıran işlem görmüş token'lara _aTokens_ denir. -Aave'yi _create-eth-app_ ile entegre etmek istediğinizde, bir [alt grafik entegrasyonu](https://docs.aave.com/developers/getting-started/using-graphql) alacaksınız. Aave, The Graph'i kullanır ve size [Ropsten](https://thegraph.com/explorer/subgraph/aave/protocol-ropsten) ve [Mainnet'te](https://thegraph.com/explorer/subgraph/aave/protocol) [saf](https://thegraph.com/explorer/subgraph/aave/protocol-raw) veya [formatlanmış](https://thegraph.com/explorer/subgraph/aave/protocol) olarak birkaç kullanıma hazır alt grafik sağlar. +_create-eth-app_ ile Aave'yi entegre etmeyi seçtiğinizde, bir [subgraph entegrasyonu](https://docs.aave.com/developers/getting-started/using-graphql) elde edersiniz. Aave, The Graph'i kullanır ve size [Ropsten](https://thegraph.com/explorer/subgraph/aave/protocol-ropsten) ve [Ana Ağ](https://thegraph.com/explorer/subgraph/aave/protocol) üzerinde [ham](https://thegraph.com/explorer/subgraph/aave/protocol-raw) veya [biçimlendirilmiş](https://thegraph.com/explorer/subgraph/aave/protocol) biçimde kullanıma hazır birkaç alt grafik sunar. -![Aave Hızlı Kredi meme'i - "Şey, hızlı kredimi 1 işlemden daha uzun süre tutabilseydim, bu müthiş olurdu"](./flashloan-meme.png) +![Aave Hızlı Kredi mem'i – "Evet, hızlı kredimi 1 işlemden daha uzun süre tutabilseydim, harika olurdu"](./flashloan-meme.png) ### Compound {#compound} -[Compound](https://compound.finance/), Aave'ye benzer. Bu entegrasyon hâlihazırda yeni [Compound v2 Alt Grafiğini](https://medium.com/graphprotocol/https-medium-com-graphprotocol-compound-v2-subgraph-highlight-a5f38f094195) kapsar. Burada faiz kazandıran token'lara şaşırtıcı bir şekilde _cTokens_ denir. +[Compound](https://compound.finance/), Aave'ye benzer. Entegrasyon, yeni [Compound v2 Subgraph](https://medium.com/graphprotocol/https-medium-com-graphprotocol-compound-v2-subgraph-highlight-a5f38f094195)'ı zaten içeriyor. Burada faiz kazandıran token'lara şaşırtıcı bir şekilde _cTokens_ denir. ### Uniswap {#uniswap} -[Uniswap](https://uniswap.exchange/), merkeziyetsiz bir borsadır (DEX). Likidite sağlayıcıları, bir ticaretin her iki tarafı için gerekli token'ları veya ether'ı sağlayarak ücret kazanabilir. Yaygın olarak kullanılır ve bu nedenle çok çeşitli token'lar için en yüksek likiditelerden birine sahiptir. Örneğin, kullanıcıların ETH'lerini DAI ile takas etmelerine olanak tanımak için merkeziyetsiz uygulamanıza kolayca entegre edebilirsiniz. +[Uniswap](https://uniswap.exchange/) merkeziyetsiz bir borsadır (DEX). Likidite sağlayıcıları, bir işlemin her iki tarafı için gerekli token'ları veya ether'i sağlayarak ücret kazanabilir. Yaygın olarak kullanılır ve bu nedenle çok çeşitli token'lar için en yüksek likiditelerden birine sahiptir. Örneğin, kullanıcıların ETH'lerini DAI ile takas etmelerine olanak tanımak için merkeziyetsiz uygulamanıza kolayca entegre edebilirsiniz. -Ne yazık ki, bu yazının yazıldığı sırada entegrasyon yalnızca Uniswap v1 içindir ve [yeni yayınlanan v2](https://uniswap.org/blog/uniswap-v2/) için değildir. +Ne yazık ki, bu yazı yazıldığı sırada entegrasyon yalnızca Uniswap v1 içindir, [yeni çıkan v2](https://uniswap.org/blog/uniswap-v2/) için değildir. ### Sablier {#sablier} -[Sablier](https://sablier.com/), kullanıcıların para ödemesi akışlarını yürütmesine olanak tanır. Tek bir ödeme günü yerine, ilk kurulumdan sonra başka bir yönetim olmaksızın paranızı sürekli olarak alırsınız. Bu entegrasyon [kendi alt grafiğini](https://thegraph.com/explorer/subgraph/sablierhq/sablier) içerir. +[Sablier](https://sablier.com/) kullanıcılara sürekli para ödemesi yapma olanağı tanır. Tek bir ödeme günü yerine, ilk kurulumdan sonra başka bir işleme gerek kalmadan paranızı sürekli olarak alırsınız. Entegrasyon, [kendi alt grafiğini](https://thegraph.com/explorer/subgraph/sablierhq/sablier) içerir. ## Sırada ne var? {#whats-next} -_create-eth-app_ hakkında sorularınız varsa, _create-eth-app_'in yazarlarıyla iletişim kurabileceğiniz [Sablier topluluk sunucusuna](https://discord.gg/bsS8T47) gidebilirsiniz. Bir sonraki adım olarak [Material UI](https://material-ui.com/) gibi bir UI çerçevesini entegre edebilir, ihtiyacınız olan veriler için GraphQL sorguları yazabilir ve dağıtımı kurabilirsiniz. +_create-eth-app_ hakkında sorularınız varsa, _create-eth-app_ yazarlarıyla iletişime geçebileceğiniz [Sablier topluluk sunucusuna](https://discord.gg/bsS8T47) gidin. Bir sonraki adım olarak [Material UI](https://mui.com/material-ui/) gibi bir kullanıcı arayüzü (UI) çerçevesi entegre edebilir, gerçekten ihtiyacınız olan veriler için GraphQL sorguları yazabilir ve dağıtımı kurabilirsiniz. diff --git a/public/content/translations/tr/developers/tutorials/learn-foundational-ethereum-topics-with-sql/index.md b/public/content/translations/tr/developers/tutorials/learn-foundational-ethereum-topics-with-sql/index.md index cf065f7196a..07151d690d1 100644 --- a/public/content/translations/tr/developers/tutorials/learn-foundational-ethereum-topics-with-sql/index.md +++ b/public/content/translations/tr/developers/tutorials/learn-foundational-ethereum-topics-with-sql/index.md @@ -1,11 +1,8 @@ --- -title: SQL ile Temel Ethereum Konularını Öğrenin -description: Bu öğretici, okuyucuların Yapılandırılmış Sorgu Dili (SQL) ile zincir verilerini sorgulayarak işlemler, bloklar ve gaz dahil olmak üzere temel Ethereum kavramlarını anlamalarına yardımcı olur. +title: "SQL ile Temel Ethereum Konularını Öğrenin" +description: "Bu öğretici, okuyucuların Yapılandırılmış Sorgu Dili (SQL) ile zincir üstü verileri sorgulayarak işlemler, bloklar ve gaz dahil olmak üzere temel Ethereum kavramlarını anlamalarına yardımcı olur." author: "Paul Apivat" -tags: - - "SQL" - - "Sorgulama" - - "İşlemler" +tags: [ "SQL", "Sorgulama", "İşlemler" ] skill: beginner lang: tr published: 2021-05-11 @@ -13,27 +10,27 @@ source: paulapivat.com sourceUrl: https://paulapivat.com/post/query_ethereum/ --- -Birçok Ethereum öğreticisi geliştiricileri hedefler, ancak veri analisti veya bir istemci veya düğüm çalıştırmadan zincir üstü verileri görmek isteyen kişiler için eğitim kaynağı eksikliği vardır. +Birçok Ethereum öğreticisi geliştiricileri hedeflese de veri analistleri ya da bir istemci veya düğüm çalıştırmadan zincir üstü verileri görmek isteyen kişiler için yeterli eğitim kaynağı bulunmamaktadır. -Bu öğretici, [Dune Analytics](https://dune.xyz/home) tarafından sağlanan bir arayüz aracılığıyla yapılandırılmış sorgu dili (SQL) ile okuyucuların zincir verilerini sorgulayarak işlemler, bloklar ve gaz dahil olmak üzere temel Ethereum kavramlarını anlamalarına yardımcı olur. +Bu öğretici, okuyucuların [Dune Analytics](https://dune.com/) tarafından sağlanan bir arayüz aracılığıyla yapılandırılmış sorgu dili (SQL) ile zincir üstü verileri sorgulayarak işlemler, bloklar ve gaz dahil olmak üzere temel Ethereum kavramlarını anlamalarına yardımcı olur. -Zincir üstü veriler, Ethereum'u bir ağ ve bir bilgi işlem gücü ekonomisi olarak anlamamıza yardımcı olabilir ve bugün Ethereum'un karşılaştığı zorlukları (yani artan gaz fiyatları) ve daha da önemlisi ölçeklendirme çözümleri hakkındaki tartışmaları anlamak için bir temel görevi görebilir. +Zincir üstü veriler, Ethereum'u, ağı ve bir bilgi işlem gücü ekonomisi olarak anlamamıza yardımcı olabilir ve günümüzde Ethereum'un karşılaştığı zorlukları (yani artan gaz fiyatları) ve daha da önemlisi, ölçeklendirme çözümleri etrafındaki tartışmaları anlamak için bir temel oluşturmalıdır. ### İşlemler {#transactions} -Bir kullanıcının Ethereum'daki yolculuğu, kullanıcı tarafından kontrol edilen bir hesabı veya ETH bakiyesi olan bir varlığı başlatmakla başlar. İki hesap türü vardır: Kullanıcı kontrollü hesap veya bir akıllı sözleşme (bkz. [ethereum.org](/developers/docs/accounts/)). +Bir kullanıcının Ethereum'daki yolculuğu, kullanıcı kontrollü bir hesabı veya bir ETH bakiyesine sahip bir varlığı başlatmakla başlar. İki hesap türü vardır: kullanıcı kontrollü veya akıllı sözleşme (bkz. [ethereum.org](/developers/docs/accounts/)). -Herhangi bir hesap, [Etherscan](https://etherscan.io/) gibi bir blok arayıcısında görüntülenebilir. Blok arayıcıları Ethereum'un verisine açılan bir geçittir. Bloklar, işlemler, madenciler, hesaplar ve diğer zincir içi faaliyetlerle ilgili verileri gerçek zamanlı olarak görüntülerler ([buraya](/developers/docs/data-and-analytics/block-explorers/) göz atın). +[Etherscan](https://etherscan.io/) veya [Blockscout](https://eth.blockscout.com/) gibi bir blok arayıcısında herhangi bir hesap görüntülenebilir. Blok arayıcıları, Ethereum'un verilerine açılan bir portaldır. Bloklar, işlemler, madenciler, hesaplar ve diğer zincir üstü etkinliklerle ilgili verileri gerçek zamanlı olarak görüntülerler (bkz. [burası](/developers/docs/data-and-analytics/block-explorers/)). -Bununla birlikte, bir kullanıcı, harici blok arayıcıları tarafından sağlanan bilgileri karşılaştırmak için verileri doğrudan sorgulamak isteyebilir. [Dune Analytics](https://duneanalytics.com/) SQL bilgisi olan herhangi birine bu kabiliyeti sağlar. +Ancak, bir kullanıcı harici blok arayıcıları tarafından sağlanan bilgileri karşılaştırmak için verileri doğrudan sorgulamak isteyebilir. [Dune Analytics](https://dune.com/), SQL hakkında biraz bilgisi olan herkese bu olanağı sağlar. -Referans olarak, Ethereum Vakfı (EF) için akıllı sözleşme hesabı [Etherscan](https://etherscan.io/address/0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae) adresinde görüntülenebilir. +Referans olarak, Ethereum Foundation'ın (EF) akıllı sözleşme hesabı [Blockscout](https://eth.blockscout.com/address/0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe) üzerinde görüntülenebilir. -Unutulmaması gereken bir nokta, Ethereum Vakfı'nınki de dahil olmak üzere tüm hesapların işlem göndermek ve almak için kullanılabilecek bir genel adrese sahip olmasıdır. +Unutulmaması gereken bir nokta, EF'ninki de dahil olmak üzere tüm hesapların, işlem göndermek ve almak için kullanılabilecek bir genel adrese sahip olmasıdır. -Etherscan'daki hesap bakiyesi, düzenli işlemler ve dahili işlemlerden oluşur. Adına rağmen dahili işlemler, zincirin durumunu değiştiren _gerçek_ işlemler değildir. Onlar bir sözleşmenin yürütümünden oluşturulan değer transferleridir ([kaynak](https://ethereum.stackexchange.com/questions/3417/how-to-get-contract-internal-transactions)). Dahili işlemlerin imzası olmadığı için blok zincirine **dahil edilmezler** ve Dune Analytics ile sorgulanamazlar. +Etherscan'deki hesap bakiyesi, normal işlemlerden ve dahili işlemlerden oluşur. Dahili işlemler, adlarına rağmen, zincirin durumunu değiştiren _gerçek_ işlemler değildir. Bunlar, bir sözleşmenin yürütülmesiyle başlatılan değer transferleridir ([kaynak](https://ethereum.stackexchange.com/questions/3417/how-to-get-contract-internal-transactions)). Dahili işlemlerin imzası olmadığından, blokzincirine **dahil edilmezler** ve Dune Analytics ile sorgulanamazlar. -Bu nedenle, bu öğreticide düzenli işlemlere odaklanılacaktır. Bu, şu şekilde sorgulanabilir: +Bu nedenle, bu öğretici normal işlemlere odaklanacaktır. Bu, şu şekilde sorgulanabilir: ```sql WITH temp_table AS ( @@ -61,33 +58,33 @@ SELECT FROM temp_table ``` -Bu, Etherscan'in işlem sayfasında sağlanan bilgilerin aynısını verecektir. Karşılaştırma olarak, burada iki kaynak vardır: +Bu, Etherscan'in işlem sayfasında sağlanan bilgilerin aynısını verecektir. Karşılaştırma için iki kaynak şunlardır: #### Etherscan {#etherscan} ![](./etherscan_view.png) -[Etherscan üzerinde Ethereum Vakfı'nın sözleşme sayfası.](https://etherscan.io/address/0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe) +[EF'nin Blockscout'taki sözleşme sayfası.](https://eth.blockscout.com/address/0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe) #### Dune Analytics {#dune-analytics} ![](./dune_view.png) -Gösterge panelini [burada](https://duneanalytics.com/paulapivat/Learn-Ethereum) bulabilirsiniz. Sorguyu görmek için tabloya tıklayın (yukarıya da bakın). +Panoyu [burada](https://dune.com/paulapivat/Learn-Ethereum) bulabilirsiniz. Sorguyu görmek için tabloya tıklayın (ayrıca yukarıya bakın). -### İşlemleri Parçalara Ayırma {#breaking_down_transactions} +### İşlemleri Ayrıntılandırma {#breaking_down_transactions} -Gönderilen bir işlem, şunlar da dahil olmak üzere çeşitli bilgiler içerir ([kaynak](/developers/docs/transactions/)): +Gönderilen bir işlem, aşağıdakiler de dahil olmak üzere çeşitli bilgiler içerir ([kaynak](/developers/docs/transactions/)): -- **Recipient**: Alıcı adres ("to" olarak sorgulanır) -- **Signature**: Göndericinin özel anahtarları bir işlemi imzalarken, SQL ile sorgulayabileceğimiz şey gönderenin açık adresidir ("from"). -- **Value**: Aktarılan ETH miktarı (`ether` sütununa bakınız). -- **Data**: Bu hash edilmiş olan rastgele veridir (`data` sütununa bakınız) -- **gasLimit** – işlem tarafından tüketilebilecek maksimum gaz birimi miktarı. Gaz birimleri, bilgi işlem adımlarını temsil eder +- **Alıcı**: Alıcı adres ("to" olarak sorgulanır) +- **İmza**: Bir göndericinin özel anahtarı bir işlemi imzalasa da, SQL ile sorgulayabileceğimiz şey göndericinin genel adresidir ("from"). +- **Değer**: Bu, transfer edilen ETH miktarıdır (`ether` sütununa bakın). +- **Veri**: Bu, hash'lenmiş rastgele veridir (`data` sütununa bakın) +- **gasLimit** – işlem tarafından tüketilebilecek maksimum gaz birimi miktarı. Gaz birimleri, hesaplama adımlarını temsil eder - **maxPriorityFeePerGas** - madenciye bahşiş olarak dahil edilecek maksimum gaz miktarı -- **maxFeePerGas** - işlem için ödemeye razı olunan maksimum gaz miktarı (baseFeePerGas ve maxPriorityFeePerGas dahil) +- **maxFeePerGas** - işlem için ödenmeye razı olunan maksimum gaz miktarı (baseFeePerGas ve maxPriorityFeePerGas dahil) -Ethereum Vakfı genel adresine yapılan işlemler için bu belirli bilgileri sorgulayabiliriz: +Ethereum Foundation genel adresine yapılan işlemler için bu özel bilgileri sorgulayabiliriz: ```sql SELECT @@ -106,15 +103,15 @@ ORDER BY block_time DESC ### Bloklar {#blocks} -Her işlem Ethereum sanal makinesinin ([EVM](/developers/docs/evm/)) durumunu değiştirir ([kaynak](/developers/docs/transactions/)). İşlemler doğrulanmak üzere ağa yayınlanır ve bir bloğa dahil edilir. Her işlem bir blok numarası ile ilişkilendirilir. Verileri görmek için belirli bir blok numarasını sorgulayabiliriz: 12396854 (bu yazı itibariyle Ethereum Vakfı işlemleri arasında en son blok, 11/5/21). +Her işlem, Ethereum Sanal Makinesi'nin ([EVM](/developers/docs/evm/)) durumunu değiştirir ([kaynak](/developers/docs/transactions/)). İşlemler doğrulanmak üzere ağa yayınlanır ve bir bloğa dahil edilir. Her işlem bir blok numarası ile ilişkilidir. Verileri görmek için belirli bir blok numarasını sorgulayabiliriz: 12396854 (bu yazının yazıldığı 11/5/21 tarihi itibarıyla Ethereum Foundation işlemleri arasındaki en son blok). -Ayrıca, sonraki iki bloğu sorguladığımızda, her bloğun bir önceki bloğun hash değerini (yani üst hash) içerdiğini görebiliriz, bu da blok zincirinin nasıl oluştuğunu gösterir. +Ayrıca, sonraki iki bloğu sorguladığımızda, her bloğun önceki bloğun hash'ini (yani üst hash) içerdiğini görebiliriz, bu da blok zincirinin nasıl oluştuğunu gösterir. -Her blok, üst bloğa bir referans içerir. Bu, aşağıda `hash` ve `parent_hash` sütunlarının arasında gösterilmektedir ([kaynak](/developers/docs/blocks/)): +Her blok, üst bloğuna bir referans içerir. Bu, aşağıda `hash` ve `parent_hash` sütunları arasında gösterilmektedir ([kaynak](/developers/docs/blocks/)): ![parent_hash](./parent_hash.png) -Dune Analytics üzerinde [sorgu](https://duneanalytics.com/queries/44856/88292): +İşte Dune Analytics'teki [sorgu](https://dune.com/queries/44856/88292): ```sql SELECT @@ -128,18 +125,18 @@ WHERE "number" = 12396854 OR "number" = 12396855 OR "number" = 12396856 LIMIT 10 ``` -Bir bloğu zaman, blok numarası, zorluk, hash değeri, üst hash değeri ve nonce değeri sorgulayarak inceleyebiliriz. +Bir bloğu; zaman, blok numarası, zorluk, hash değeri, üst hash değeri ve nonce değeri sorgulayarak inceleyebiliriz. -Bu sorgunun kapsamadığı tek şey, aşağıda ayrı bir sorgu gerektiren _işlem listesi_ ve _kök durumdur_. Tam veya arşivsel bir düğüm, tüm işlemleri ve durum geçişlerini depolayarak, istemcilerin herhangi bir zamanda zincirin durumunu sorgulamasına olanak tanır. Bu, büyük depolama alanı gerektirdiğinden zincir verilerini durum verilerinden ayırabiliriz: +Bu sorgunun kapsamadığı tek şey, aşağıda ayrı bir sorgu gerektiren _işlem listesi_ ve _durum köküdür_. Tam veya arşiv düğümü, tüm işlemleri ve durum geçişlerini depolayarak istemcilerin herhangi bir zamanda zincirin durumunu sorgulamasına olanak tanır. Bu, büyük depolama alanı gerektirdiğinden, zincir verilerini durum verilerinden ayırabiliriz: - Zincir verisi (blokların, işlemlerin listesi) - Durum verileri (her işlemin durum geçişinin sonucu) -Durum kökü ikinci kategoridedir ve _örtülü_ verilerdir (zincirde depolanmaz), zincir verileri ise açık ve zincirin kendisinde depolanır ([kaynak](https://ethereum.stackexchange.com/questions/359/where-is-the-state-data-stored)). +Durum kökü ikinci kategoriye girer ve _örtük_ veridir (zincir üstünde saklanmaz), zincir verileri ise açıktır ve zincirin kendisinde saklanır ([kaynak](https://ethereum.stackexchange.com/questions/359/where-is-the-state-data-stored)). -Bu eğitimde, Dune Analytics aracılığıyla SQL ile _sorgulanabilecek_ zincir üstü verilere odaklanacağız. +Bu öğreticide, Dune Analytics aracılığıyla SQL ile sorgulan_abilen_ zincir üstü verilere odaklanacağız. -Yukarıda belirtildiği gibi, her blok bir işlem listesi içerir, bunu belirli bir blok için filtreleyerek sorgulayabiliriz. En güncel olan 12396854 bloğunu deneyeceğiz: +Yukarıda belirtildiği gibi, her blok bir işlem listesi içerir; bunu belirli bir bloğa göre filtreleyerek sorgulayabiliriz. En son bloğu deneyeceğiz: 12396854 ```sql SELECT * FROM ethereum."transactions" @@ -147,13 +144,13 @@ WHERE block_number = 12396854 ORDER BY block_time DESC` ``` -Dune üzerindeki SQL çıktısı: +İşte Dune'daki SQL çıktısı: ![](./list_of_txn.png) -Zincire eklenen bu tek blok, Ethereum sanal makinesinin durumunu değiştirir ([EVM](/developers/docs/evm/)). Bazen düzinelerce ve hatta yüzlerce işlem aynı anda doğrulanır. Bu özel durumda, 222 işlem dahil edilmiştir. +Zincire eklenen bu tek blok, Ethereum Sanal Makinesi'nin ([EVM](/developers/docs/evm/)) durumunu değiştirir. Bazen onlarca, bazen de yüzlerce işlem aynı anda doğrulanır. Bu özel durumda 222 işlem dahil edildi. -Kaç tanesinin gerçekten başarılı olduğunu görmek amacıyla başarılı işlemleri saymak için başka bir filtre ekleriz: +Gerçekte kaç tanesinin başarılı olduğunu görmek için, başarılı işlemleri saymak üzere başka bir filtre ekleriz: ```sql WITH temp_table AS ( @@ -166,26 +163,26 @@ SELECT FROM temp_table ``` -12396854 bloğu için toplam 222 işlemden 204'ü başarıyla doğrulandı: +12396854 numaralı blok için, toplam 222 işlemden 204'ü başarıyla doğrulandı: ![](./successful_txn.png) İşlem istekleri saniyede onlarca kez gerçekleşir, ancak bloklar yaklaşık olarak her 15 saniyede bir işlenir ([kaynak](/developers/docs/blocks/)). -Yaklaşık olarak her 15 saniyede bir blok üretildiğini görmek için bir gündeki saniye sayısını (86400) 15'e bölerek tahmini günlük ortalama blok sayısını (yaklaşık 5760) elde edebiliriz. +Yaklaşık her 15 saniyede bir blok üretildiğini görmek için, bir gündeki saniye sayısını (86400) 15'e bölerek tahmini günlük ortalama blok sayısını (~ 5760) elde edebiliriz. -Günde üretilen Ethereum blokları tablosu (2016 - günümüz): +Günlük üretilen Ethereum blokları için grafik (2016 - günümüz) şöyledir: ![](./daily_blocks.png) -Bu süre zarfında günlük olarak üretilen ortalama blok sayısı yaklaşık olarak 5.874'tür: +Bu zaman diliminde günlük üretilen ortalama blok sayısı ~5.874'tür: ![](./avg_daily_blocks.png) -Sorgular: +Sorgular şunlardır: ```sql -# query to visualize number of blocks produced daily since 2016 +# 2016'dan bu yana günlük üretilen blok sayısını görselleştirmek için sorgu SELECT DATE_TRUNC('day', time) AS dt, @@ -194,7 +191,7 @@ FROM ethereum."blocks" GROUP BY dt OFFSET 1 -# average number of blocks produced per day +# günlük üretilen ortalama blok sayısı WITH temp_table AS ( SELECT @@ -209,13 +206,13 @@ SELECT FROM temp_table ``` -2016'dan bu yana günlük üretilen ortalama blok sayısı, 5.874 olarak bu sayının biraz üzerindedir. Alternatif olarak, 86.400 saniyenin 5874 ortalama bloğa bölünmesi 14,7 saniyeye veya her 15 saniyede bir yaklaşık bir bloğa denk gelir. +2016'dan bu yana günde üretilen ortalama blok sayısı, 5.874 ile bu sayının biraz üzerindedir. Alternatif olarak, 86400 saniyeyi 5874 ortalama bloğa bölmek 14,7 saniye veya yaklaşık olarak her 15 saniyede bir blok anlamına gelir. ### Gaz {#gas} -Bloklar boyut olarak sınırlıdır. Maksimum blok boyutu dinamiktir ve ağ talebine göre 12.500.000 ila 25.000.000 birim arasında değişir. Limitler, keyfi olarak çok büyük blok boyutlarınının disk alanı ve hız gereksinimleri ([kaynak](/developers/docs/blocks/)) açısından tam düğümlere baskı uygulamasını engellemek için gereklidir. +Blokların boyutu sınırlıdır. Maksimum blok boyutu dinamiktir ve ağ talebine göre 12.500.000 ila 25.000.000 birim arasında değişir. Keyfi olarak büyük blok boyutlarının disk alanı ve hız gereksinimleri açısından tam düğümlere yük bindirmesini önlemek için sınırlar gereklidir ([kaynak](/developers/docs/blocks/)). -Blok gaz sınırını kavramsallaştırmanın bir yolu, bunu toplu işlemlerin gerçekleştirileceği kullanılabilir blok alanının **arz** olarak düşünmektir. Blok gaz limiti 2016'dan günümüze sorgulanabilir ve görselleştirilebilir: +Blok gaz limitini kavramsallaştırmanın bir yolu, onu işlemleri gruplamak için mevcut blok alanının **arzı** olarak düşünmektir. Blok gaz limiti 2016'dan günümüze sorgulanabilir ve görselleştirilebilir: ![](./avg_gas_limit.png) @@ -228,7 +225,7 @@ GROUP BY dt OFFSET 1 ``` -Ardından, Ethereum zincirinde yapılan hesaplama için günlük olarak kullanılan gerçek gaz vardır (yani: işlem gönderme, akıllı sözleşme çağırma, NFT basma). Bu, kullanılabilir Ethereum blok alanı için **taleptir**: +Ardından, Ethereum zincirinde yapılan hesaplama için günlük olarak kullanılan gerçek gaz vardır (yani, işlem gönderme, bir akıllı sözleşme çağırma, bir NFT basma). Bu, mevcut Ethereum blok alanı için olan **taleptir**: ![](./daily_gas_used.png) @@ -241,17 +238,17 @@ GROUP BY dt OFFSET 1 ``` -Ayrıca, **talep ve arzın** nasıl sıralandığını görmek için bu iki grafiği yan yana koyabiliriz: +**Talep ve arzın** nasıl hizalandığını görmek için bu iki grafiği yan yana da koyabiliriz: ![gas_demand_supply](./gas_demand_supply.png) -Böylece, mevcut arz göz önüne alındığında, gaz fiyatlarını Ethereum blok alanı talebinin bir fonksiyonu olarak anlayabiliriz. +Bu nedenle, mevcut arz göz önüne alındığında, gaz fiyatlarını Ethereum blok alanı talebinin bir fonksiyonu olarak anlayabiliriz. -Son olarak, Ethereum zinciri için ortalama günlük gaz fiyatlarını sorgulamak isteyebiliriz, ancak bunu yapmak özellikle uzun bir sorgulama süresine neden olur. Bu nedenle sorgumuzu Ethereum Vakfı tarafından işlem başına ödenen ortalama gaz miktarına göre filtreleyeceğiz. +Son olarak, Ethereum zinciri için ortalama günlük gaz fiyatlarını sorgulamak isteyebiliriz ancak bu, özellikle uzun bir sorgu süresine neden olacaktır, bu yüzden sorgumuzu Ethereum Foundation tarafından işlem başına ödenen ortalama gaz miktarına göre filtreleyeceğiz. ![](./ef_daily_gas.png) -Yıllar içinde tüm işlemler için Ethereum Foundation adresine ödenmiş gaz ücretlerini görebiliriz. Sorgu burada: +Yıllar boyunca Ethereum Foundation adresine yapılan tüm işlemler için ödenen gaz fiyatlarını görebiliriz. Sorgu şu şekildedir: ```sql SELECT @@ -265,8 +262,8 @@ ORDER BY block_time DESC ### Özet {#summary} -Bu öğretici ile, temel Ethereum kavramlarını ve zincir üzerindeki verileri sorgulayarak ve bunlarla uğraşarak Ethereum blok zincirinin nasıl çalıştığını anlıyoruz. +Bu öğretici ile, temel Ethereum kavramlarını ve zincir üstü verileri sorgulayarak ve kavrayarak Ethereum blokzincirinin nasıl çalıştığını anlıyoruz. -Bu öğreticide kullanılan tüm kodları tutan gösterge paneli [burada](https://duneanalytics.com/paulapivat/Learn-Ethereum) bulunabilir. +Bu öğreticide kullanılan tüm kodları içeren pano [burada](https://dune.com/paulapivat/Learn-Ethereum) bulunabilir. -Verinin web3 keşfi amaçlı daha fazla kullanımı için [bana Twitter'dan ulaşın](https://twitter.com/paulapivat). +Web3'ü keşfetmek için verilerin daha fazla kullanımı hakkında bilgi için [beni Twitter'da bulun](https://twitter.com/paulapivat). diff --git a/public/content/translations/tr/developers/tutorials/logging-events-smart-contracts/index.md b/public/content/translations/tr/developers/tutorials/logging-events-smart-contracts/index.md index ad841eb1911..b1ef90fa342 100644 --- a/public/content/translations/tr/developers/tutorials/logging-events-smart-contracts/index.md +++ b/public/content/translations/tr/developers/tutorials/logging-events-smart-contracts/index.md @@ -1,12 +1,8 @@ --- -title: Olaylar ile akıllı sözleşmelerden veri toplama -description: Akıllı sözleşmelerde olayların ne olduğu ve veri toplamak için nasıl kullanıldığını öğrenin +title: "Olaylar ile akıllı sözleşmelerden veri kaydetme" +description: "Akıllı sözleşme olaylarına giriş ve bunları veri kaydetmek için nasıl kullanabileceğiniz" author: "jdourlens" -tags: - - "akıllı sözleşmeler" - - "remix" - - "solidity" - - "olaylar" +tags: [ "akıllı kontratlar", "remix", "solidity", "olaylar" ] skill: intermediate lang: tr published: 2020-04-03 @@ -15,19 +11,19 @@ sourceUrl: https://ethereumdev.io/logging-data-with-events/ address: "0x19dE91Af973F404EDF5B4c093983a7c6E3EC8ccE" --- -Solidity'de [olaylar](/developers/docs/smart-contracts/anatomy/#events-and-logs), akıllı sözleşmenin gönderebileceği kaydedilmiş sinyallerdir. Merkeziyetsiz uygulamalar ya da Ethereum JSON-RPC API'sine bağlı herhangi bir şey, bu olayları dinleyip gerektiği şekilde hareket edebilir. Her bir olay endekslenir böylece olay tarihi sonrasında tekrar aranabilir olur. +Solidity'de [olaylar](/developers/docs/smart-contracts/anatomy/#events-and-logs), akıllı sözleşmelerin tetikleyebileceği yayılan sinyallerdir. Merkeziyetsiz uygulamalar ya da Ethereum JSON-RPC API'sine bağlı herhangi bir şey, bu olayları dinleyip gerektiği şekilde hareket edebilir. Bir olay, olay geçmişinin daha sonra aranabilmesi için dizine de eklenebilir. ## Olaylar {#events} -Bu makalenin yazıldığı sırada Ethereum blok zincirindeki en yaygın olay, biri token'ları transfer ettiğinde ERC20 token'ları tarafından yayılan Transfer olayıdır. +Bu makalenin yazıldığı sırada Ethereum blokzincirindeki en yaygın olay, birisi jetonları transfer ettiğinde ERC20 jetonları tarafından yayılan Transfer olayıdır. ```solidity event Transfer(address indexed from, address indexed to, uint256 value); ``` -Olay imzası sözleşme kodu içerisinde tanımlanmıştır ve yayın anahtarıyla yayınlanabilir. Örneğin Transfer olayı, transferi kimin (_from_) gerçekleştirdiğini, kime yönelik (_to_) gerçekleştirdiğini ve ne kadar token (_value_) transfer edildiğini kayıt altına alır. +Olay imzası, sözleşme kodunun içinde bildirilir ve `emit` anahtar kelimesi ile yayılabilir. Örneğin, Transfer olayı; transferi kimin gönderdiğini (_from_), kime gönderildiğini (_to_) ve ne kadar jeton transfer edildiğini (_value_) kaydeder. -Counter (Sayaç) akıllı sözleşmemize geri dönersek ve değer her değiştiğinde oturum açmaya karar verirsek. Bu sözleşmenin dağıtılması değil, kendisini genişleterek başka bir sözleşme oluşturmak için bir temel görevi görmesi hedeflendiğinden buna soyut sözleşme denir. Sayaç örneğimizde şöyle görünür: +Eğer Counter akıllı sözleşmemize geri döner ve değer her değiştiğinde kaydetmeye karar verirsek. Bu sözleşmenin dağıtılması değil, onu genişleterek başka bir sözleşme oluşturmak için bir temel görevi görmesi amaçlandığından, buna soyut sözleşme denir. Counter örneğimizde şöyle görünür: ```solidity pragma solidity 0.5.17; @@ -36,16 +32,16 @@ contract Counter { event ValueChanged(uint oldValue, uint256 newValue); - // Private variable of type unsigned int to keep the number of counts + // Sayım sayısını tutmak için işaretsiz tamsayı türünde özel değişken uint256 private count = 0; - // Function that increments our counter + // Sayacımızı artıran işlev function increment() public { count += 1; emit ValueChanged(count - 1, count); } - // Getter to get the count value + // Sayım değerini almak için alıcı işlevi function getCount() public view returns (uint256) { return count; } @@ -53,14 +49,14 @@ contract Counter { } ``` -Şu satırlara dikkat: +Şunlara dikkat edin: -- **Satır 5**: Olayımızı ve içeriğini, eski değeri ve yeni değeri beyan ederiz. +- **5. Satır**: Olayımızı ve içerdiklerini, yani eski değeri ve yeni değeri, bildiririz. -- **Satır 13**: Değişkenimiz count değeri değiştiğinde olayımızı yayınlıyoruz. +- **13. Satır**: `count` değişkenimizi artırdığımızda, olayı yayarız. -Şimdi sözleşmemizi tekrar yayınlar ve increment fonksiyonunu çağırırsak Remix'in kayıtlarında logs dizisi içinde olayımızın gerçekleştiğini görebiliriz. +Şimdi sözleşmeyi dağıtır ve `increment` işlevini çağırırsak, `logs` adlı dizinin içindeki yeni işleme tıkladığınızda Remix'in bunu otomatik olarak görüntülediğini göreceğiz. ![Remix ekran görüntüsü](./remix-screenshot.png) -Kayıtlar, sözleşmelerdeki hataları ayıklamak için çok kullanışlıdır ve aynı zamanda sözleşmenizi kullanacak olan kişilerin nasıl kullandıklarını gözlemleyebilmenizi sağlar. İşlemler tarafından oluşturulan kayıtlar popüler blok arayıcılarında gösterilir ve ayrıca bu kayıtları, örneğin belirli olayları dinlemek ve bu olaylar gerçekleştiğinde harekete geçmek amacıyla zincir dışı komut dosyaları yaratmak için kullanabilirsiniz. +Kayıtlar, akıllı sözleşmelerinizdeki hataları ayıklamak için çok kullanışlıdır. Ayrıca, farklı kişilerin kullandığı uygulamalar geliştiriyorsanız da önemlidirler; akıllı sözleşmenizin nasıl kullanıldığını izlemek ve anlamak üzere analizler yapmayı kolaylaştırırlar. İşlemler tarafından oluşturulan kayıtlar popüler blok arayıcılarında görüntülenir ve ayrıca bunları, örneğin belirli olayları dinlemek ve bu olaylar meydana geldiğinde eyleme geçmek için zincir dışı betikler oluşturmak amacıyla da kullanabilirsiniz. diff --git a/public/content/translations/tr/developers/tutorials/merkle-proofs-for-offline-data-integrity/index.md b/public/content/translations/tr/developers/tutorials/merkle-proofs-for-offline-data-integrity/index.md index 1e281b1c0df..07f91a256f5 100644 --- a/public/content/translations/tr/developers/tutorials/merkle-proofs-for-offline-data-integrity/index.md +++ b/public/content/translations/tr/developers/tutorials/merkle-proofs-for-offline-data-integrity/index.md @@ -1,9 +1,8 @@ --- -title: Çevrimdışı veri bütünlüğü için Merkle ispatları -description: Genellikle zincir dışında saklanan verilerin zincir üstündeki veri bütünlüğünü sağlamak +title: "Çevrimdışı veri bütünlüğü için Merkle ispatları" +description: "Çoğunlukla zincir dışında depolanan veriler için zincir üstünde veri bütünlüğünün sağlanması" author: Ori Pomerantz -tags: - - "depolama" +tags: [ "depolama" ] skill: advanced lang: tr published: 2021-12-30 @@ -13,29 +12,30 @@ published: 2021-12-30 İdeal olarak tüm verileri binlerce bilgisayarda depolanan ve son derece yüksek kullanılabilirlik (veri sansürlenemez) ve bütünlüğe (veri yetkisiz bir şekilde değiştirilemez) sahip olan Ethereum depolaması üzerinde saklamak isteriz ancak 32 bayt büyüklüğünde bir kelime depolamanın maliyeti yaklaşık olarak 20,000 gazdır. Bunu yazarken, bu maliyet $6,60'a eşittir. Bayt başına 21 sentlik ücret birçok kullanıcı için çok pahalıdır. -Bu sorunu çözmek için Ethereum ekosistemi [verileri merkeziyetsiz bir şekilde depolamak için birçok alternatif yol](/developers/docs/storage/) geliştirdi. Eğer ağ müsaitse maliyet daha az olacaktır ancak ağ eğer yoğunsa maliyet daha fazla olacaktır. Ancak ağın bütünlüğü hep aynı olacaktır. +Bu sorunu çözmek için Ethereum ekosistemi, [verileri merkeziyetsiz bir şekilde depolamanın birçok alternatif yolunu](/developers/docs/storage/) geliştirdi. Eğer ağ müsaitse maliyet daha az olacaktır ancak ağ eğer yoğunsa maliyet daha fazla olacaktır. Ancak ağın bütünlüğü hep aynı olacaktır. -Bu makalede blok zinciri üzerinde veri depolamadan [Merkle ispatları](https://computersciencewiki.org/index.php/Merkle_proof) kullanarak **nasıl** veri bütünlüğü sağlanacağını öğreneceksiniz. +Bu makalede, [Merkle ispatlarını](https://computersciencewiki.org/index.php/Merkle_proof) kullanarak verileri blokzincirde depolamadan veri bütünlüğünün **nasıl** sağlanacağını +öğreneceksiniz. ## Nasıl çalışır? {#how-does-it-work} -Teoride verileri şifrelenmiş bir şeklide blok zinciri üzerinde tutup, işlem için gerekli verileri gönderebilirdik. Ancak bu hâlâ çok maliyetlidir. Bir işlem için bir bayt veri yaklaşık 16 gaz harcar. Bu, şu anda yaklaşık yarım sent veya kilobayt başına yaklaşık $5 değerindedir. Megabayt başına $5000, veriyi şifrelemenin maliyetini dahil etmesek bile bir çok kullanım alanı için çok pahalıdır. +Teorik olarak, verinin karmasını zincir üstünde depolayabilir ve tüm verileri gerektiren işlemlerde gönderebiliriz. Ancak bu hâlâ çok maliyetlidir. Bir işlem için bir bayt veri yaklaşık 16 gaz harcar. Bu, şu anda yaklaşık yarım sent veya kilobayt başına yaklaşık $5 değerindedir. Megabayt başına $5000, veriyi şifrelemenin maliyetini dahil etmesek bile bir çok kullanım alanı için çok pahalıdır. Çözüm ise, verilerin farklı alt kümelerini art arda şifrelenmiş hâle getirmektir. Böylece göndermeniz gerekmeyen veriler için sadece bir hash değeri gönderebilirsiniz. Bunu, her düğümün altındaki düğümlerin hash değerlerinden oluştuğu bir ağaç veri yapısı olan bir Merkle ağacını kullanarak yapabilirsiniz: ![Merkle Ağacı](tree.png) -Sadece kök hash değerinin ağ üzerinde depolanmış olması gerekmektedir. Bir değeri kanıtlamak için, o değeri oluşturan tüm hash değerlerini sağlamanız gerekmektedir. Örneğin `C`'yi kanıtlamak için `D`, `H(A-B)` ve `H(E-H)` sağlamak zorundasınız. +Kök karma, zincir üstünde saklanması gereken tek kısımdır. Bir değeri kanıtlamak için, o değeri oluşturan tüm hash değerlerini sağlamanız gerekmektedir. Örneğin, `C`'yi kanıtlamak için `D`, `H(A-B)` ve `H(E-H)` sağlamanız gerekir. ![C değerinin ispatı](proof-c.png) ## Uygulama {#implementation} -[Örnek kod burada sağlanmıştır](https://github.com/qbzzt/merkle-proofs-for-offline-data-integrity). +[Örnek koda buradan ulaşabilirsiniz](https://github.com/qbzzt/merkle-proofs-for-offline-data-integrity). -### Zincir dışı kod {#off-chain-code} +### Zincir dışı kod {#offchain-code} -Bu makalede zincir dışı işlemler için Javascript kullanıyoruz. Çoğu merkeziyetsiz uygulama Javascript'te zincir dışı bileşenlere sahiptir. +Bu makalede, zincir dışı hesaplamalar için JavaScript kullanıyoruz. Çoğu merkeziyetsiz uygulama Javascript'te zincir dışı bileşenlere sahiptir. #### Merkle kökünü oluşturma {#creating-the-merkle-root} @@ -45,61 +45,65 @@ Bu makalede zincir dışı işlemler için Javascript kullanıyoruz. Çoğu merk const ethers = require("ethers") ``` -[Ethers paketindeki hash fonksiyonunu kullanıyoruz](https://docs.ethers.io/v5/api/utils/hashing/#utils-keccak256). +[Ethers paketindeki karma işlevini kullanıyoruz](https://docs.ethers.io/v5/api/utils/hashing/#utils-keccak256). ```javascript -// The raw data whose integrity we have to verify. The first two bytes a -// are a user identifier, and the last two bytes the amount of tokens the -// user owns at present. +// Bütünlüğünü doğrulamamız gereken ham veriler. İlk iki bayt +// bir kullanıcı tanımlayıcısıdır ve son iki bayt kullanıcının +// şu anda sahip olduğu jeton miktarıdır. const dataArray = [ 0x0bad0010, 0x60a70020, 0xbeef0030, 0xdead0040, 0xca110050, 0x0e660060, 0xface0070, 0xbad00080, 0x060d0091, ] ``` -Örneğin her bir girişi 256-bit tam sayı değeri olacak şekilde kodlamak, bir JSON kullanmaktan daha az okunabilir olacaktır. Ancak bu, sözleşmedeki verilere erişmek için kayda değer ölçüde daha az işleme, dolayısıyla çok daha düşük gaz maliyetleri anlamına gelir. [JSON'u blok zinciri üzerinde okuyabilirsiniz](https://github.com/chrisdotn/jsmnSol) ancak bunu yapmak zorunda değilseniz kötü bir fikirdir. +Örneğin her bir girişi 256-bit tam sayı değeri olacak şekilde kodlamak, bir JSON kullanmaktan daha az okunabilir olacaktır. Ancak bu, sözleşmedeki verilere erişmek için kayda değer ölçüde daha az işleme, dolayısıyla çok daha düşük gaz maliyetleri anlamına gelir. [JSON'u zincir üstünde okuyabilirsiniz](https://github.com/chrisdotn/jsmnSol), ancak kaçınılabilecek bir durumsa bu kötü bir fikirdir. ```javascript -// The array of hash values, as BigInts +// BigInts olarak karma değerleri dizisi const hashArray = dataArray ``` Bu durumda veriler başlangıçta 256-bit değerindedir, bu yüzden herhangi bir işleme gerek yoktur. Eğer satır gibi daha karmaşık bir veri yapısı kullanıyor olsaydık, şifrelenmiş bir satır elde etmek için önce verileri şifrelediğimizden emin olmamız gerekirdi. Bunun ayrıca, kullanıcıların diğer kullanıcıların bilgilerini bilip bilmediklerini umursamamamızdan kaynaklandığını unutmayın. Aksi takdirde şifreleme yapmamız gerekecekti, böylece kullanıcı 1 kullanıcı 0'ın değerini; kullanıcı 2 kullanıcı 3'ün değerini bilmeyecekti vb. ```javascript -// Convert between the string the hash function expects and the -// BigInt we use everywhere else. +// Karma işlevinin beklediği dize ile +// başka her yerde kullandığımız BigInt arasında dönüştürür. const hash = (x) => BigInt(ethers.utils.keccak256("0x" + x.toString(16).padStart(64, 0))) ``` -Ethers hash fonksiyonu, `0x60A7` gibi onaltılık bir sayıya sahip bir JavaScript dizesi almayı bekler ve aynı yapıya sahip başka bir dizeyle yanıt verir. Ancak kodun geri kalanı için `BigInt` kullanmak daha kolaydır. Bu yüzden onu onaltılık bir dizeye ve geri eski hâline dönüştürürüz. +Ethers karma işlevi, `0x60A7` gibi onaltılık bir sayıya sahip bir JavaScript dizesi almayı bekler ve aynı yapıya sahip başka bir dizeyle yanıt verir. Ancak kodun geri kalanı için `BigInt` kullanmak daha kolaydır, bu yüzden onaltılık bir dizeye dönüştürüp sonra tekrar geri çeviririz. ```javascript -// Symmetrical hash of a pair so we won't care if the order is reversed. +// Bir çiftin simetrik karması, bu sayede sıranın tersine çevrilip çevrilmediğini önemsemeyiz. const pairHash = (a, b) => hash(hash(a) ^ hash(b)) ``` -Bu fonksiyon simetriktir ([xor](https://en.wikipedia.org/wiki/Exclusive_or) b'nin hash değeri). Bu, Merkle ispatını kontrol ettiğimizde, ispattaki değeri hesaplanan değerden önce mi sonra mı koyacağımız konusunda endişelenmemize gerek olmadığı anlamına gelir. Merkel ispatı kontrolü zincir üstünde gerçekleşir, orada ne kadar az kod kullanırsak o kadar iyi. +Bu işlev simetriktir (a'nın [xor](https://en.wikipedia.org/wiki/Exclusive_or) b'sinin karması). Bu, Merkle ispatını kontrol ettiğimizde, ispattaki değeri hesaplanan değerden önce mi sonra mı koyacağımız konusunda endişelenmemize gerek olmadığı anlamına gelir. Merkle ispatı kontrolü zincir üstünde yapılır, bu yüzden orada ne kadar az şey yapmamız gerekirse o kadar iyidir. -Uyarı: Kriptografi göründüğünden daha zordur. Bu belgenin ilk versiyonu, `hash(a^b)` karma fonksiyonuna sahipti. Bu, `a` ve `b`'nin meşru değerlerini bilmeniz durumunda `b' = a^b^a'` denklemini kullanarak istediğiniz `a'` değerini kanıtlayabileceğiniz anlamına geldiği için **kötü** bir fikirdi. Bu fonksiyonla, `hash(a') ^ hash(b')` değeri, bilinen bir değere (köke giden yolda sonraki dal) eşit olacak şekilde `b'` değerini hesaplamanız gerekecekti ve bu çok daha zordur. +Uyarı: +Kriptografi göründüğünden daha zordur. +Bu makalenin ilk versiyonunda `hash(a^b)` karma işlevi vardı. +Bu **kötü** bir fikirdi çünkü `a` ve `b`'nin meşru değerlerini biliyorsanız, istenen herhangi bir `a'` değerini kanıtlamak için `b' = a^b^a'` kullanabileceğiniz anlamına geliyordu. +Bu işlevle, `hash(a') ^ hash(b')` değerinin bilinen bir değere (köke giden yoldaki bir sonraki dal) eşit olacak şekilde `b'` değerini hesaplamanız gerekir, ki bu çok daha zordur. ```javascript -// The value to denote that a certain branch is empty, doesn't -// have a value +// Belirli bir dalın boş olduğunu, bir değere sahip olmadığını +// belirtmek için kullanılan değer const empty = 0n ``` Değerler ikinin katı tam sayılar olmadığında bunun yerine boş dalları işlememiz gerekir. Program bunu yapmak için boş dallara varsayılan değer olarak 0 atar. -![Dalları eksik olan Merkle ağacı](merkle-empty-hash.png) +![Eksik dalları olan Merkle ağacı](merkle-empty-hash.png) ```javascript -// Calculate one level up the tree of a hash array by taking the hash of -// each pair in sequence +// Her bir çiftin karmasını sırayla alarak bir karma dizisi ağacında +// bir seviye yukarı hesaplar const oneLevelUp = (inputArray) => { var result = [] - var inp = [...inputArray] // To avoid over writing the input // Add an empty value if necessary (we need all the leaves to be // paired) + var inp = [...inputArray] // Girdinin üzerine yazmayı önlemek için // Gerekirse boş bir değer ekleyin (tüm yaprakların eşleştirilmesi gerekir) if (inp.length % 2 === 1) inp.push(empty) @@ -110,13 +114,13 @@ const oneLevelUp = (inputArray) => { } // oneLevelUp ``` -Bu fonksiyon, güncel katmandaki değer çiftlerini karma hâle getirerek bir üst seviyeye "tırmanır". Bunun en verimli uygulama olmadığını unutmayın, girdiyi kopyalamaktan kaçınabilir ve uygun olduğunda döngüye `hashEmpty` ekleyebilirdik, ancak bu kod okunabilirlik için optimize edilmiştir. +Bu fonksiyon, güncel katmandaki değer çiftlerini karma hâle getirerek bir üst seviyeye "tırmanır". Bunun en verimli uygulama olmadığını, girdiyi kopyalamaktan kaçınıp döngüde uygun olduğunda `hashEmpty` ekleyebileceğimizi, ancak bu kodun okunabilirlik için optimize edildiğini unutmayın. ```javascript const getMerkleRoot = (inputArray) => { var result - result = [...inputArray] // Climb up the tree until there is only one value, that is the // root. // // If a layer has an odd number of entries the // code in oneLevelUp adds an empty value, so if we have, for example, // 10 leaves we'll have 5 branches in the second layer, 3 // branches in the third, 2 in the fourth and the root is the fifth + result = [...inputArray] // Ağaçta tek bir değer kalana kadar yukarı tırmanır, bu // köktür. // // Eğer bir katmanın tek sayıda girdisi varsa // oneLevelUp'daki kod boş bir değer ekler, yani örneğin // 10 yaprağımız varsa, ikinci katmanda 5 dal, // üçüncüde 3, dördüncüde 2 dal olur ve kök beşincidir while (result.length > 1) result = oneLevelUp(result) @@ -126,35 +130,33 @@ const getMerkleRoot = (inputArray) => { Ana değere ulaşmak için ağaçta tek bir değer kalana kadar tırmanın. -#### Bir Merkle ispatı oluşturma {#creating-a-merkle-proof} +#### Merkle ispatı oluşturma {#creating-a-merkle-proof} Bir Merkle ispatı, Merkle kökünü geri almak için kanıtlanan değerle birlikte karma hale getirilecek değerlerdir. İspatlanacak olan değer sıklıkla diğer veride bulunabilir. Bu yüzden kodun bir parçası yerine ayrı olarak sağlamayı tercih ederim. ```javascript -// A merkle proof consists of the value of the list of entries to -// hash with. Simetrik bir karma işlevi kullandığımız için, -// kanıtı doğrulamak için öğenin konumuna ihtiyacımız var, yalnızca onu oluşturmak için +// Bir merkle ispatı, birlikte karma alınacak giriş listesinin // değerinden oluşur. // Simetrik bir karma işlevi kullandığımız için, ispatı doğrulamak için öğenin konumuna ihtiyacımız // yoktur, yalnızca oluşturmak için gerekir const getMerkleProof = (inputArray, n) => {     var result = [], currentLayer = [...inputArray], currentN = n -    // Until we reach the top +    // Zirveye ulaşana kadar     while (currentLayer.length > 1) { -        // No odd length layers +        // Tek uzunluklu katmanlar olamaz         if (currentLayer.length % 2)             currentLayer.push(empty)         result.push(currentN % 2 -               // If currentN is odd, add with the value before it to the proof +               // Eğer currentN tekse, ispata ondan önceki değeri ekleyin             ? currentLayer[currentN-1] -               // If it is even, add the value after it +               // Çiftse, sonraki değeri ekleyin             : currentLayer[currentN+1]) ``` -`(v[0],v[1])`, `(v[2],v[3])` vb. şeklinde karma hale getiririz. Yani çift değerler için bir sonrakine, tek değerler için bir öncekine ihtiyacımız vardır. +`(v[0],v[1])`, `(v[2],v[3])` vb. şeklinde karma alırız. Yani çift değerler için bir sonrakine, tek değerler için bir öncekine ihtiyacımız vardır. ```javascript -        // Move to the next layer up +        // Bir üst katmana geç         currentN = Math.floor(currentN/2)         currentLayer = oneLevelUp(currentLayer)     }   // while currentLayer.length > 1 @@ -163,9 +165,9 @@ const getMerkleProof = (inputArray, n) => { }   // getMerkleProof ``` -### Zincir üstü kod {#on-chain-code} +### Zincir üstü kod {#onchain-code} -Nihayet, kanıtları kontrol eden koda ulaştık. Zincir üstü kod, [Solidity](https://docs.soliditylang.org/en/v0.8.11/) ile yazılmıştır. Gaz maliyeti yüksek olduğundan burada optimizasyon çok daha önemlidir. +Nihayet, kanıtları kontrol eden koda ulaştık. Zincir üstü kod [Solidity](https://docs.soliditylang.org/en/v0.8.11/) ile yazılmıştır. Gaz maliyeti yüksek olduğundan burada optimizasyon çok daha önemlidir. ```solidity //SPDX-License-Identifier: Public Domain @@ -174,7 +176,7 @@ pragma solidity ^0.8.0; import "hardhat/console.sol"; ``` -Bunu, [Hardhat geliştirme ortamını kullanarak yazdım](https://hardhat.org/). Bu, geliştirme yaparken [Solidity'den konsol çıktısına](https://hardhat.org/docs/cookbook/debug-logs) sahip olmamızı sağlar. +Bunu, geliştirme yaparken [Solidity'den konsol çıktısı almamızı](https://hardhat.org/docs/cookbook/debug-logs) sağlayan [Hardhat geliştirme ortamını](https://hardhat.org/) kullanarak yazdım. ```solidity @@ -185,15 +187,15 @@ contract MerkleProof {       return merkleRoot;     } -    // Extremely insecure, in production code access to -    // this function MUST BE strictly limited, probably to an -    // owner +    // Son derece güvensiz, üretim kodunda bu işleve +    // erişim MUTLAKA sıkı bir şekilde sınırlandırılmalı, muhtemelen bir +    // sahip (owner) tarafından     function setRoot(uint _merkleRoot) external {       merkleRoot = _merkleRoot;     }   // setRoot ``` -Merkle kökü için ayarlama ve getirme fonksiyonları. Bir üretim sisteminde herkesin Merkle kökünü güncellemesine izin vermek _son derece kötü bir fikirdir_. Örnek kodu basitleştirmek adına bunu burada yapıyorum. **Veri bütünlüğünün önemli olduğu bir sistemde bunu yapmayın**. +Merkle kökü için ayarlama ve getirme fonksiyonları. Bir üretim sisteminde herkesin Merkle kökünü güncellemesine izin vermek _son derece kötü bir fikirdir_. Örnek kodu basitleştirmek adına bunu burada yapıyorum. **Veri bütünlüğünün gerçekten önemli olduğu bir sistemde bunu yapmayın**. ```solidity     function hash(uint _a) internal pure returns(uint) { @@ -205,12 +207,12 @@ Merkle kökü için ayarlama ve getirme fonksiyonları. Bir üretim sisteminde h     } ``` -Bu fonksiyon bir eş karma değeri oluşturur. Bu, sadece `hash` ve `pairHash` için JavaScript kodunun Solidity çevirisidir. +Bu fonksiyon bir eş karma değeri oluşturur. Bu sadece `hash` ve `pairHash` için JavaScript kodunun Solidity çevirisidir. -**Not:** Burada da okunabilirlik için optimizasyon yapılmıştır. [Fonksiyon tanımına](https://www.tutorialspoint.com/solidity/solidity_cryptographic_functions.htm) dayanarak; [`bytes32`](https://docs.soliditylang.org/en/v0.5.3/types.html#fixed-size-byte-arrays) olarak veriyi depolamak ve dönüşümleri önlemek mümkün olabilir. +**Not:** Burada da okunabilirlik için optimizasyon yapılmıştır. [İşlev tanımına](https://www.tutorialspoint.com/solidity/solidity_cryptographic_functions.htm) dayanarak, verileri bir [`bytes32`](https://docs.soliditylang.org/en/v0.5.3/types.html#fixed-size-byte-arrays) değeri olarak depolamak ve dönüşümlerden kaçınmak mümkün olabilir. ```solidity -    // Merkle kanıtını doğrulayın +    // Bir Merkle ispatını doğrulayın     function verifyProof(uint _value, uint[] calldata _proof)         public view returns (bool) {       uint temp = _value; @@ -226,16 +228,18 @@ Bu fonksiyon bir eş karma değeri oluşturur. Bu, sadece `hash` ve `pairHash` i }  // MarkleProof ``` -Matematiksel gösterimde Merkle ispatı şöyle görünür: `H(proof_n, H(proof_n-1, H(proof_n-2, ... H(proof_1, H(proof_0, value))...)))`. Bu kod onu uygular. +Matematiksel gösterimde Merkle ispatı doğrulaması şöyle görünür: `H(proof_n, H(proof_n-1, H(proof_n-2, ...` H(proof_1, H(proof_0, value))...)))`. Bu kod onu uygular. -## Merkle ispatları ve toplamalar uyumlu değildir {#merkle-proofs-and-rollups} +## Merkle ispatları ve toplamalar birbiriyle uyuşmaz {#merkle-proofs-and-rollups} -Merkle ispatları, [toplamalar](/developers/docs/scaling/#rollups) ile iyi çalışmaz. Sebebi ise toplamalarda işlemlerin Katman 1 üzerinde yazılması ancak Katman 2 üzerinde işlenmesidir. Bir işlem ile Merkle ispatı göndermenin maliyeti katman başına ortalama 638 gazdır (güncel olarak çağrı verisinde gaz maliyeti, bayt sıfır değilse 16, sıfır ise 4'tür). Eğer 1024 kelimeden oluşan bir verimiz varsa, bir Merkle ispatı 10 katman veya 6380 gaz gerektirir. +Merkle ispatları [toplamalarla](/developers/docs/scaling/#rollups) iyi çalışmaz. Sebebi ise toplamalarda işlemlerin Katman 1 üzerinde yazılması ancak Katman 2 üzerinde işlenmesidir. Bir işlem ile Merkle ispatı göndermenin maliyeti katman başına ortalama 638 gazdır (güncel olarak çağrı verisinde gaz maliyeti, bayt sıfır değilse 16, sıfır ise 4'tür). Eğer 1024 kelimeden oluşan bir verimiz varsa, bir Merkle ispatı 10 katman veya 6380 gaz gerektirir. -Örneğin [Optimism](https://public-grafana.optimism.io/d/9hkhMxn7z/public-dashboard?orgId=1&refresh=5m)'e bakacak olursak: Katman 1 gaz yazmak ortalama 100 gwei, Katman 2 gaz yazmak ise 0,001 gwei'ye mal olmaktadır (bu, normal fiyattır ve tıkanıklık olursa artabilir). Yani bir Katman 1 gazının bedeli ile Katman 2 işlemeye yüz bin gaz harcayabiliriz. Depolamanın üzerine yazmadığımızı varsayarsak bu, bir Katman 1 gazı fiyatına Katman 2'deki depolamaya yaklaşık beş kelime yazabileceğimiz anlamına gelir. Tek bir Merkle ispatı için 1024 kelimenin tamamını depolamaya yazabiliriz (bir işlemde sağlanmak yerine zincir üzerinde hesaplayabileceklerini varsayarsak) ve hâlâ gaz maliyetinden tasarruf etme imkanımız olur. +Örneğin [Optimism](https://public-grafana.optimism.io/d/9hkhMxn7z/public-dashboard?orgId=1&refresh=5m)'e bakıldığında, L1'e yazmanın gaz maliyeti yaklaşık 100 gwei, L2'nin gaz maliyeti ise 0,001 gwei'dir (bu normal fiyattır ve tıkanıklık durumunda artabilir). Yani bir Katman 1 gazının bedeli ile Katman 2 işlemeye yüz bin gaz harcayabiliriz. Depolamanın üzerine yazmadığımızı varsayarsak bu, bir Katman 1 gazı fiyatına Katman 2'deki depolamaya yaklaşık beş kelime yazabileceğimiz anlamına gelir. Tek bir Merkle ispatı için, 1024 kelimenin tamamını depolamaya yazabilir (başlangıçta bir işlemde sağlanmak yerine zincir üstünde hesaplanabildiklerini varsayarsak) ve yine de gazın çoğu artmış olur. ## Sonuç {#conclusion} Gerçek hayatta, Merkle ağaçlarını hiçbir zaman kendi başınıza uygulamayacak olabilirsiniz. Denetlenmiş ve iyi bilinen kütüphaneler mevcuttur. Genel olarak kendi başınıza ilkel kriptografik yöntemleri uygulamamanız en iyi seçimdir. Fakat Merkle ispatlarını ve ne zaman kullanmaya değer olduklarını umarım daha iyi anlamışsınızdır. -Merkle ispatlarının, _bütünlüğü_ korurken _kullanılabilirlikten_ ödün verdiğini unutmayın. Veri deposuna erişim yoksa ve onlara erişmek için bir Merkle ağacı oluşturamıyorsanız, varlıklarınızı başka kimsenin alamayacağını bilmek küçük bir teselli olur. Yani en iyisi Merkle ağaçlarının IPFS gibi bir merkeziyetsiz depolama ile kullanılmasıdır. +Merkle ispatlarının _bütünlüğü_ korurken _kullanılabilirliği_ korumadığını unutmayın. Veri deposuna erişim yoksa ve onlara erişmek için bir Merkle ağacı oluşturamıyorsanız, varlıklarınızı başka kimsenin alamayacağını bilmek küçük bir teselli olur. Yani en iyisi Merkle ağaçlarının IPFS gibi bir merkeziyetsiz depolama ile kullanılmasıdır. + +[Çalışmalarımdan daha fazlası için buraya bakın](https://cryptodocguy.pro/). diff --git a/public/content/translations/tr/developers/tutorials/monitoring-geth-with-influxdb-and-grafana/index.md b/public/content/translations/tr/developers/tutorials/monitoring-geth-with-influxdb-and-grafana/index.md index e552612058d..67ff83c2df3 100644 --- a/public/content/translations/tr/developers/tutorials/monitoring-geth-with-influxdb-and-grafana/index.md +++ b/public/content/translations/tr/developers/tutorials/monitoring-geth-with-influxdb-and-grafana/index.md @@ -1,10 +1,8 @@ --- -title: InfluxDB ve Grafana ile Geth'i İzleme -description: +title: "InfluxDB ve Grafana ile Geth'i İzleme" +description: "Performansı izlemek ve sorunları belirlemek için InfluxDB ve Grafana'yı kullanarak Geth düğümünüz için izleme ayarlayın." author: "Mario Havel" -tags: - - "istemciler" - - "düğümler" +tags: [ "istemciler", "düğümler" ] skill: intermediate lang: tr published: 2021-01-13 @@ -12,15 +10,15 @@ published: 2021-01-13 Bu öğretici, Geth düğümünüzün performansını daha iyi anlayabilmeniz ve olası sorunları belirleyebilmeniz için izleme kurmanıza yardımcı olacaktır. -## Ön koşullar {#prerequisites} +## Ön Koşullar {#prerequisites} - Zaten bir Geth örneği çalıştırıyor olmalısınız. -- Adımların ve örneklerin çoğu linux ortamı içindir, temel terminal bilgisi yardımcı olacaktır. +- Adımların ve örneklerin çoğu Linux ortamı içindir, temel terminal bilgisi yardımcı olacaktır. - Geth'in ölçüm paketine dair bu genel bakış videosuna göz atın: [Bir Ethereum altyapısını izleme - Péter Szilágyi](https://www.youtube.com/watch?v=cOBab8IJMYI). ## İzleme yığını {#monitoring-stack} -Bir Ethereum istemcisi, kronolojik bir veri tabanı şeklinde okunabilecek çok sayıda veri toplar. İzlemeyi kolaylaştırmak için bunu veri görselleştirme yazılımına aktarabilirsiniz. Birden fazla seçenek mevcuttur: +Bir Ethereum istemcisi, kronolojik bir veritabanı şeklinde okunabilecek çok sayıda veri toplar. İzlemeyi kolaylaştırmak için bunu veri görselleştirme yazılımına aktarabilirsiniz. Birden fazla seçenek mevcuttur: - [Prometheus](https://prometheus.io/) (çekme modeli) - [InfluxDB](https://www.influxdata.com/get-influxdb/) (itme modeli) @@ -29,13 +27,14 @@ Bir Ethereum istemcisi, kronolojik bir veri tabanı şeklinde okunabilecek çok - [Datadog](https://www.datadoghq.com/) - [Chronograf](https://www.influxdata.com/time-series-platform/chronograf/) -Ayrıca InfluxDB ve Grafana ile önceden yapılandırılmış olan bir seçenek olan [Geth Prometheus Exporter](https://github.com/hunterlong/gethexporter) bulunmaktadır. +Ayrıca InfluxDB ve Grafana ile önceden yapılandırılmış bir seçenek olan [Geth Prometheus Exporter](https://github.com/hunterlong/gethexporter) da vardır. -Bu öğreticide, Geth istemcinizi bir veri tabanı oluşturmak için InfluxDB'ye ve verilerin grafik görselleştirmesini oluşturmak için Grafana'ya veri gönderecek şekilde ayarlayacağız. Bunu manuel olarak yapmak; süreci daha iyi anlamanıza, değiştirmenize ve farklı ortamlarda dağıtmanıza yardımcı olacaktır. +Bu öğreticide, Geth istemcinizi bir veritabanı oluşturmak için InfluxDB'ye ve verilerin grafik görselleştirmesini oluşturmak için Grafana'ya veri gönderecek şekilde ayarlayacağız. Bunu manuel olarak yapmak; süreci daha iyi anlamanıza, değiştirmenize ve farklı ortamlarda dağıtmanıza yardımcı olacaktır. -## InfluxDB kurulumu {#setting-up-influxdb} +## InfluxDB'yi Kurma {#setting-up-influxdb} -Öncelikle InfluxDB'yi indirip kuralım. [Influxdata yayın sayfasında](https://portal.influxdata.com/downloads/) çeşitli indirme seçenekleri bulunabilir. Ortamınıza uygun olanı seçin. Ayrıca bir [depodan](https://repos.influxdata.com/) da indirebilirsiniz. Örnek olarak Debian temelli bir dağıtımda: +Öncelikle, InfluxDB'yi indirip kuralım. Çeşitli indirme seçenekleri [Influxdata yayın sayfasında](https://portal.influxdata.com/downloads/) bulunabilir. Ortamınıza uygun olanı seçin. +Ayrıca bir [depodan](https://repos.influxdata.com/) da kurabilirsiniz. Örneğin Debian tabanlı bir dağıtımda: ``` curl -tlsv1.3 --proto =https -sL https://repos.influxdata.com/influxdb.key | sudo apt-key add @@ -48,19 +47,20 @@ sudo systemctl start influxdb sudo apt install influxdb-client ``` -InfluxDB'yi başarıyla yükledikten sonra, arka planda çalıştığından emin olun. Varsayılan olarak, `localhost:8086`'da erişilebilir. `influx` istemcisini kullanmadan önce, admin yetkileri olan yeni bir kullanıcı yaratmalısınız. Bu kullanıcı, üst düzey yönetim, veri tabanları ve kullanıcılar oluşturmaya hizmet edecektir. +InfluxDB'yi başarıyla yükledikten sonra, arka planda çalıştığından emin olun. Varsayılan olarak `localhost:8086` adresinden erişilebilir. +`influx` istemcisini kullanmadan önce, yönetici ayrıcalıklarına sahip yeni bir kullanıcı oluşturmanız gerekir. Bu kullanıcı, üst düzey yönetim, veritabanları ve kullanıcılar oluşturmaya hizmet edecektir. ``` curl -XPOST "http://localhost:8086/query" --data-urlencode "q=CREATE USER username WITH PASSWORD 'password' WITH ALL PRIVILEGES" ``` -Şimdi influx istemcisini bu kullanıcı ile [InfluxDB kabuğuna](https://docs.influxdata.com/influxdb/v1.8/tools/shell/) girmek için kullanabilirsiniz. +Artık bu kullanıcıyla [InfluxDB kabuğuna](https://docs.influxdata.com/influxdb/v1.8/tools/shell/) girmek için `influx` istemcisini kullanabilirsiniz. ``` influx -username 'username' -password 'password' ``` -Kabuğunun içinden InfluxDB ile doğrudan iletişim kurarak, geth ölçümleri için veri tabanı ve kullanıcı oluşturabilirsiniz. +Kabuğunda InfluxDB ile doğrudan iletişim kurarak, Geth ölçümleri için veritabanı ve kullanıcı oluşturabilirsiniz. ``` create database geth @@ -82,9 +82,10 @@ exit InfluxDB, Geth'ten gelen ölçümleri depolamak için çalışıyor ve yapılandırıldı. -## Geth'i hazırlama {#preparing-geth} +## Geth'i Hazırlama {#preparing-geth} -Veri tabanını kurduktan sonra Geth'te ölçüm toplamayı etkinleştirmemiz gerekiyor. `geth --help` içindeki `METRICS AND STATS OPTIONS`'a dikkat edin. Orada birden fazla seçenek bulunabilir, bu durumda Geth'in verileri InfluxDB'ye göndermesini istiyoruz. Temel kurulum, InfluxDB'nin erişilebilir olduğu uç noktayı ve veri tabanı için kimlik doğrulamasını belirtir. +Veritabanını kurduktan sonra Geth'te ölçüm toplamayı etkinleştirmemiz gerekiyor. `geth --help` içindeki `METRICS AND STATS OPTIONS` bölümüne dikkat edin. Orada birden fazla seçenek bulunabilir, bu durumda Geth'in verileri InfluxDB'ye göndermesini istiyoruz. +Temel kurulum, InfluxDB'nin erişilebilir olduğu uç noktayı ve veritabanı için kimlik doğrulamasını belirtir. ``` geth --metrics --metrics.influxdb --metrics.influxdb.endpoint "http://0.0.0.0:8086" --metrics.influxdb.username "geth" --metrics.influxdb.password "chosenpassword" @@ -92,16 +93,17 @@ geth --metrics --metrics.influxdb --metrics.influxdb.endpoint "http://0.0.0.0:80 Bu bayraklar, istemciyi başlatan bir komuta eklenebilir veya yapılandırma dosyasına kaydedilebilir. -Geth'in verileri başarıyla ilettiğini, örneğin veri tabanındaki ölçümleri listeleyerek doğrulayabilirsiniz. InfluxDB kabuğunda: +Geth'in verileri başarıyla gönderdiğini, örneğin veritabanındaki ölçümleri listeleyerek doğrulayabilirsiniz. InfluxDB kabuğunda: ``` use geth show measurements ``` -## Grafana kurulumu {#setting-up-grafana} +## Grafana'yı Kurma {#setting-up-grafana} -Bir sonraki adım, verileri grafiksel olarak yorumlayacak olan Grafana'yı kurmaktır. Grafana belgelerinde ortamınız için kurulum sürecini takip edin. Başka türlü istemiyorsanız, OSS sürümünü yüklediğinizden emin olun. Depo kullanan Debian dağıtımları için örnek kurulum adımları: +Bir sonraki adım, verileri grafiksel olarak yorumlayacak olan Grafana'yı kurmaktır. Grafana belgelerinde ortamınız için kurulum sürecini takip edin. Başka türlü istemiyorsanız, OSS sürümünü yüklediğinizden emin olun. +Depo kullanan Debian dağıtımları için örnek kurulum adımları: ``` curl -tlsv1.3 --proto =https -sL https://packages.grafana.com/gpg.key | sudo apt-key add - @@ -112,15 +114,16 @@ sudo systemctl enable grafana-server sudo systemctl start grafana-server ``` -Grafana'yı çalıştırdığınızda, `localhost:3000` adresinden erişilebilir olmalıdır. Bu yola erişmek için tercih ettiğiniz tarayıcıyı kullanın, ardından varsayılan kimlik bilgileriyle oturum açın (kullanıcı: `admin` ve şifre: `admin`). İstendiğinde, varsayılan şifreyi değiştirin ve kaydedin. +Grafana'yı çalıştırdığınızda, `localhost:3000` adresinden erişilebilir olmalıdır. +Bu yola erişmek için tercih ettiğiniz tarayıcıyı kullanın, ardından varsayılan kimlik bilgileriyle (kullanıcı: `admin` ve şifre: `admin`) oturum açın. İstendiğinde, varsayılan şifreyi değiştirin ve kaydedin. ![](./grafana1.png) -Grafana ana sayfasına yönlendirileceksiniz. İlk olarak, kaynak verinizi hazırlayın. Sol çubuktaki yapılandırma simgesine tıklayın ve "Data sources"'ı (Veri kaynakları) seçin. +Grafana ana sayfasına yönlendirileceksiniz. Öncelikle, kaynak verilerinizi ayarlayın. Sol çubuktaki yapılandırma simgesine tıklayın ve "Data sources" (Veri kaynakları) seçeneğini seçin. ![](./grafana2.png) -Henüz oluşturulmuş veri kaynağı yok, birini tanımlamak için "Add data source"a (Veri kaynağı ekle) tıklayın. +Henüz oluşturulmuş veri kaynağı yok, birini tanımlamak için "Add data source" (Veri kaynağı ekle) seçeneğine tıklayın. ![](./grafana3.png) @@ -128,20 +131,21 @@ Bu kurulum için "InfluxDB"yi seçin ve devam edin. ![](./grafana4.png) -Araçları aynı makinede çalıştırıyorsanız, veri kaynağı yapılandırması oldukça basittir. Veri tabanına erişmek için InfluxDB adresini ve ayrıntılarını ayarlamanız gerekir. Aşağıdaki resme başvurun. +Araçları aynı makinede çalıştırıyorsanız, veri kaynağı yapılandırması oldukça basittir. Veritabanına erişmek için InfluxDB adresini ve ayrıntılarını ayarlamanız gerekir. Aşağıdaki resme başvurun. ![](./grafana5.png) -Her şey tamamlandıysa ve InfluxDB erişilebilir durumdaysa, "Save and test"e (Kaydet ve test et) tıklayın ve onayın görünmesini bekleyin. +Her şey tamamlandıysa ve InfluxDB erişilebilir durumdaysa, "Save and test" (Kaydet ve test et) seçeneğine tıklayın ve onayın görünmesini bekleyin. ![](./grafana6.png) -Grafana artık InfluxDB'den veri okumak üzere ayarlanmıştır. Şimdi, onu yorumlayacak ve gösterecek bir gösterge paneli oluşturmanız gerekiyor. Gösterge paneli özellikleri, herkes tarafından oluşturulabilen ve kolayca içe aktarılabilen JSON dosyalarında kodlanmıştır. Sol çubukta, "Create and Import"a (Oluştur ve İçe Aktar) tıklayın. +Grafana artık InfluxDB'den veri okumak üzere ayarlanmıştır. Şimdi, onu yorumlayacak ve gösterecek bir gösterge paneli oluşturmanız gerekiyor. Gösterge paneli özellikleri, herkes tarafından oluşturulabilen ve kolayca içe aktarılabilen JSON dosyalarında kodlanmıştır. Sol çubukta, "Create and Import" (Oluştur ve İçe Aktar) seçeneğine tıklayın. ![](./grafana7.png) -Bir Geth izleme gösterge paneli için [bu gösterge panelinin](https://grafana.com/grafana/dashboards/13877/) kimliğini kopyalayın ve Grafana'daki "Import page"e (İçe Aktarma sayfası) yapıştırın. Gösterge panelini kaydettikten sonra şöyle görünmelidir: +Bir Geth izleme gösterge paneli için [bu gösterge panelinin](https://grafana.com/grafana/dashboards/13877/) kimliğini kopyalayın ve Grafana'daki "Import page" (İçe Aktarma sayfası) bölümüne yapıştırın. Gösterge panelini kaydettikten sonra şöyle görünmelidir: ![](./grafana8.png) -Gösterge panellerinizi değiştirebilirsiniz. Her panel düzenlenebilir, taşınabilir, kaldırılabilir veya eklenebilir. Yapılandırmalarınızı değiştirebilirsiniz. Size kalmış! Eğer gösterge panellerin nasıl çalıştığı hakkında dahasını öğrenmek istiyorsanız, [Grafana'nın belgelerine](https://grafana.com/docs/grafana/latest/dashboards/) başvurun. Ayrıca [Alerting](https://grafana.com/docs/grafana/latest/alerting/) ilginizi çekebilir. Bu, ölçümler belirli değerlere ulaştığında uyarı bildirimleri ayarlamanıza olanak tanır. Çeşitli iletişim kanalları desteklenir. +Gösterge panellerinizi değiştirebilirsiniz. Her panel düzenlenebilir, taşınabilir, kaldırılabilir veya eklenebilir. Yapılandırmalarınızı değiştirebilirsiniz. Size kalmış! Gösterge panellerinin nasıl çalıştığı hakkında daha fazla bilgi edinmek için [Grafana'nın dökümantasyonuna](https://grafana.com/docs/grafana/latest/dashboards/) başvurun. +[Uyarılar](https://grafana.com/docs/grafana/latest/alerting/) da ilginizi çekebilir. Bu, ölçümler belirli değerlere ulaştığında uyarı bildirimleri ayarlamanıza olanak tanır. Çeşitli iletişim kanalları desteklenir. diff --git a/public/content/translations/tr/developers/tutorials/nft-minter/index.md b/public/content/translations/tr/developers/tutorials/nft-minter/index.md index eef4bf3b35d..bbcb3a6eff4 100644 --- a/public/content/translations/tr/developers/tutorials/nft-minter/index.md +++ b/public/content/translations/tr/developers/tutorials/nft-minter/index.md @@ -1,14 +1,16 @@ --- -title: NFT Minter Öğreticisi -description: Bu eğitimde, bir NFT minter oluşturacak ve akıllı sözleşmenizi MetaMask ve Web3 araçlarını kullanarak bir React ön ucuna bağlayarak tam yığınlı bir merkeziyetsiz uygulama oluşturmayı öğreneceksiniz. +title: "NFT Minter Öğreticisi" +description: "Bu eğitimde, bir NFT minter oluşturacak ve akıllı sözleşmenizi MetaMask ve Web3 araçlarını kullanarak bir React ön ucuna bağlayarak tam yığınlı bir merkeziyetsiz uygulama oluşturmayı öğreneceksiniz." author: "smudgil" tags: - - "solidity" - - "NFT" - - "alchemy" - - "akıllı sözleşmeler" - - "ön uç" - - "Pinata" + [ + "solidity", + "NFT", + "alchemy", + "akıllı kontratlar", + "ön uç", + "Pinata" + ] skill: intermediate lang: tr published: 2021-10-06 @@ -19,51 +21,51 @@ Web2 arka planından gelen geliştiriciler için en büyük zorluklardan biri, a Dijital varlığınıza bir bağlantı, bir başlık ve bir açıklama girebileceğiniz basit bir kullanıcı arayüzü olan bir NFT minter oluşturarak şunları nasıl yapacağınızı öğreneceksiniz: - Ön uç projeniz aracılığıyla MetaMask'a bağlanma -- Ön ucunuzdan akıllı sözleşme yöntemlerini çağırma +- Ön ucunuzdan akıllı sözleşme yöntemlerini arama - MetaMask kullanarak işlemleri imzalama -Bu öğreticide, ön uç çerçevemiz olarak [React](https://reactjs.org/) kullanacağız. Bu eğitim öncelikle Web3 geliştirmeye odaklandığından, React temellerini açıklamak için fazla zaman harcamayacağız. Bunun yerine, projemize işlevsellik getirmeye odaklanacağız. +Bu öğreticide, ön uç çerçevemiz olarak [React](https://react.dev/) kullanacağız. Bu eğitim öncelikle Web3 geliştirmeye odaklandığından, React temellerini açıklamak için fazla zaman harcamayacağız. Bunun yerine, projemize işlevsellik getirmeye odaklanacağız. -Bir ön koşul olarak, başlangıç ​​düzeyinde bir React anlayışına sahip olmalısınız; bileşenlerin, donanımların, useState/useEffect ve temel fonksiyon çağırmanın nasıl çalıştığını bilmeniz gerekir. Bu terimlerden herhangi birini daha önce hiç duymadıysanız, bu [React'e Giriş eğitimine](https://reactjs.org/tutorial/tutorial.html) göz atmak isteyebilirsiniz. Daha görsel öğrenenler için Net Ninja'nın bu mükemmel [Tam Modern React Eğitimi](https://www.youtube.com/playlist?list=PL4cUxeGkcC9gZD-Tvwfod2gaISzfRiP9d) video dizisini şiddetle tavsiye ediyoruz. +Bir ön koşul olarak, başlangıç ​​düzeyinde bir React anlayışına sahip olmalısınız; bileşenlerin, donanımların, useState/useEffect ve temel fonksiyon çağırmanın nasıl çalıştığını bilmeniz gerekir. Bu terimlerden herhangi birini daha önce hiç duymadıysanız, bu [React'e Giriş öğreticisine](https://react.dev/learn/tutorial-tic-tac-toe) göz atmak isteyebilirsiniz. Daha çok görsel öğrenenler için Net Ninja'nın bu mükemmel [Tam Modern React Öğreticisi](https://www.youtube.com/playlist?list=PL4cUxeGkcC9gZD-Tvwfod2gaISzfRiP9d) video serisini şiddetle tavsiye ederiz. Ve henüz yapmadıysanız, bu öğreticiyi tamamlamak ve blok zincirinde herhangi bir şey oluşturmak için kesinlikle bir Alchemy hesabına ihtiyacınız olacak. [Buradan](https://alchemy.com/) ücretsiz bir hesap için kaydolun. Lafı fazla uzatmadan başlayalım! -## NFT Yapma 101 {#making-nfts-101} +## NFT Yapımına Giriş {#making-nfts-101} Herhangi bir koda bakmaya başlamadan önce, bir NFT yapmanın nasıl çalıştığını anlamak önemlidir. İki adım içerir: -### Ethereum blok zincirinde bir NFT akıllı sözleşmesi yayınlayın {#publish-nft} +### Ethereum blokzincirinde bir NFT akıllı sözleşmesi yayımlayın {#publish-nft} İki NFT akıllı iletişim standardı arasındaki en büyük fark, ERC-1155'in çok token'lı bir standart olması ve toplu işlevsellik içermesi; ERC-721'in ise tek token'lı bir standart olması ve bu nedenle bir seferde yalnızca bir token'ın aktarılmasını desteklemesidir. -### Basma fonksiyonunu çağırın {#minting-function} +### Basım fonksiyonunu çağırın {#minting-function} -Genellikle, bu mint (basma) fonksiyonu, parametre olarak iki değişken girmenizi gerektirir: İlk olarak, yeni basılmış NFT'nizi alacak adresi belirten `recipient` ve ikinci olarak NFT'nin meta verilerini açıklayan bir JSON belgesine çözümlenen bir dize olan NFT'nin `tokenURI`'ı. +Genellikle bu basım fonksiyonu, parametre olarak iki değişken iletmenizi gerektirir: birincisi, yeni basılmış NFT'nizi alacak adresi belirten `recipient` ve ikincisi, NFT'nin meta verilerini açıklayan bir JSON belgesine çözümlenen bir dize olan NFT'nin `tokenURI`'sidir. Bir NFT'nin meta verileri gerçekten onu hayata geçiren şeydir ve bir isim, açıklama, görüntü (veya farklı dijital varlık) ve diğer nitelikler gibi özelliklere sahip olmasına izin verir. İşte bir NFT'nin meta verilerini içeren [bir tokenURI örneği](https://gateway.pinata.cloud/ipfs/QmSvBcb4tjdFpajGJhbFAWeK3JAxCdNQLQtr6ZdiSi42V2). Bu öğreticide, React UI'ımızı kullanarak mevcut bir NFT'nin akıllı sözleşme basım fonksiyonunu çağırarak 2. bölüme odaklanacağız. -Bu öğreticide çağıracağımız ERC-721 NFT akıllı sözleşmesinin [bağlantısı](https://ropsten.etherscan.io/address/0x4C4a07F737Bf57F6632B6CAB089B78f62385aCaE). Bunu nasıl yaptığımızı öğrenmek istiyorsanız, diğer öğreticimiz ["Bir NFT Nasıl Oluşturulur"](https://docs.alchemyapi.io/alchemy/tutorials/how-to-create-an-nft)a göz atmanızı şiddetle tavsiye ederiz. +Bu öğreticide çağıracağımız ERC-721 NFT akıllı sözleşmesinin [bağlantısı buradadır](https://ropsten.etherscan.io/address/0x4C4a07F737Bf57F6632B6CAB089B78f62385aCaE). Bunu nasıl yaptığımızı öğrenmek isterseniz, diğer öğreticimiz olan ["Bir NFT Nasıl Oluşturulur"](https://www.alchemy.com/docs/how-to-create-an-nft) belgesine göz atmanızı önemle tavsiye ederiz. Harika, şimdi bir NFT yapmanın nasıl çalıştığını anladığımıza göre, başlangıç ​​dosyalarımızı klonlayalım! -## Başlangıç ​​dosyalarını klonlayın {#clone-the-starter-files} +## Başlangıç dosyalarını klonlayın {#clone-the-starter-files} -İlk olarak, bu proje için başlangıç ​​dosyalarını almak için [nft-minter-tutorial GitHub deposuna](https://github.com/alchemyplatform/nft-minter-tutorial) gidin. Bu depoyu yerel ortamınıza klonlayın.= +Öncelikle, bu projenin başlangıç dosyalarını almak için [nft-minter-tutorial GitHub deposuna](https://github.com/alchemyplatform/nft-minter-tutorial) gidin. Bu depoyu yerel ortamınıza klonlayın. Bu klonlanmış `nft-minter-tutorial` deposunu açtığınızda, iki klasör içerdiğini fark edeceksiniz: `minter-starter-files` ve `nft-minter`. -- `minter-starter-files`, bu proje için başlangıç ​​dosyalarını (esas olarak React UI'ını) içerir. Bu öğreticide, **bu dizinde çalışarak** bu kullanıcı arayüzünü Ethereum cüzdanınıza ve bir NFT akıllı sözleşmesine bağlayarak nasıl hayata geçireceğinizi öğreneceğiz. -- `nft-minter`, tamamlanmış öğreticinin tamamını içerir ve **takılırsanız** size **referans** olması için oradadır. +- `minter-starter-files` bu proje için başlangıç dosyalarını (temel olarak React kullanıcı arayüzünü) içerir. Bu öğreticide, bu kullanıcı arayüzünü Ethereum cüzdanınıza ve bir NFT akıllı sözleşmesine bağlayarak nasıl hayata geçireceğinizi öğrenirken **bu dizinde çalışacağız**. +- `nft-minter`, tamamlanmış öğreticinin tamamını içerir ve **takılırsanız referans olması için** oradadır. -Ardından, kod düzenleyicinizde `minter-starter-files` kopyanızı açın ve ardından `src` klasörünüze gidin. +Ardından, `minter-starter-files` kopyanızı kod düzenleyicinizde açın ve `src` klasörünüze gidin. -Yazacağımız tüm kodlar `src` klasörünün altında yer alacaktır. Projemize Web3 işlevselliği kazandırmak için `Minter.js` bileşenini düzenleyeceğiz ve ek javascript dosyaları yazacağız. +Yazacağımız tüm kodlar `src` klasörünün altında yer alacaktır. Projemize Web3 işlevselliği kazandırmak için `Minter.js` bileşenini düzenleyecek ve ek javascript dosyaları yazacağız. -## 2. Adım: Başlangıç ​​dosyalarımıza göz atın {#step-2-check-out-our-starter-files} +## Adım 2: Başlangıç dosyalarımıza göz atın {#step-2-check-out-our-starter-files} Kodlamaya başlamadan önce, başlangıç ​​dosyalarında bizim için nelerin sağlandığını kontrol etmek önemlidir. @@ -86,18 +88,18 @@ npm start Bunu yapmak, tarayıcınızda projemizin ön ucunu göreceğiniz http://localhost:3000/ adresini açmalıdır. 3 alandan oluşmalıdır: NFT'nizin varlığına bir bağlantı yerleştireceğiniz, NFT'nizin adını gireceğiniz ve bir açıklama sağlayabileceğiniz bir yer. -"Connect Wallet" (Cüzdanı Bağla) veya "Mint NFT" (NFT Bas) düğmelerinE tıklamayı denerseniz, çalışmadıklarını fark edeceksiniz. Çünkü hâlâ işlevlerini kodlamamız gerekiyor! :\) +"Connect Wallet" (Cüzdanı Bağla) veya "Mint NFT" (NFT Bas) düğmelerinE tıklamayı denerseniz, çalışmadıklarını fark edeceksiniz. Çünkü hâlâ işlevlerini kodlamamız gerekiyor! :) -### Minter.js bileşeni {#minter-js} +### `Minter.js` bileşeni {#minter-js} **NOT:** `nft-minter` klasöründe değil, `minter-starter-files` klasöründe olduğunuzdan emin olun! -Editörümüzdeki `src` klasörüne geri dönelim ve `Minter.js` dosyasını açalım. Üzerinde çalışacağımız birincil React bileşeni olduğu için bu dosyadaki her şeyi anlamamız çok önemlidir. +Düzenleyicimizde `src` klasörüne geri dönelim ve `Minter.js` dosyasını açalım. Üzerinde çalışacağımız birincil React bileşeni olduğu için bu dosyadaki her şeyi anlamamız çok önemlidir. Bu dosyamızın en üstünde, belirli olaylardan sonra güncelleyeceğimiz durum değişkenlerimiz var. ```javascript -//State variables +//Durum değişkenleri const [walletAddress, setWallet] = useState("") const [status, setStatus] = useState("") const [name, setName] = useState("") @@ -105,135 +107,135 @@ const [description, setDescription] = useState("") const [url, setURL] = useState("") ``` -React durum değişkenlerini veya durum kancalarını hiç duymadınız mı? [Bu](https://reactjs.org/docs/hooks-state.html) belgelere göz atın. +React durum değişkenlerini veya durum kancalarını hiç duymadınız mı? [Bu](https://legacy.reactjs.org/docs/hooks-state.html) belgelere göz atın. Değişkenlerin her birinin temsil ettiği şey: -- `walletAddress` - kullanıcının cüzdan adresini saklayan bir dize -- `status` - kullanıcı arayüzünün altında görüntülenecek bir mesaj içeren bir dize -- `name` - NFT'nin adını saklayan bir dize -- `description` - NFT'nin açıklamasını saklayan bir dize -- `url` - NFT'nin dijital varlığına bağlantı olan bir dize +- `walletAddress` - kullanıcının cüzdan adresini saklayan bir dizedir +- `status` - kullanıcı arayüzünün altında görüntülenecek bir mesaj içeren bir dizedir +- `name` - NFT'nin adını saklayan bir dizedir +- `description` - NFT'nin açıklamasını saklayan bir dizedir +- `url` - NFT'nin dijital varlığına bir bağlantı olan bir dizedir -Durum değişkenlerinden sonra, uygulanmamış üç fonksiyon göreceksiniz: `useEffect`, `connectWalletPressed` ve `onMintPressed`. Tüm bu fonksiyonların `async` olduğunu fark edeceksiniz, çünkü bu fonksiyonlarda eşzamansız API çağrıları yapacağız! Adları, fonksiyonlarıyla aynıdır: +Durum değişkenlerinden sonra, uygulanmamış üç fonksiyon göreceksiniz: `useEffect`, `connectWalletPressed` ve `onMintPressed`. Tüm bu fonksiyonların `async` olduğunu fark edeceksiniz, çünkü içlerinde eşzamansız API çağrıları yapacağız! Adları, fonksiyonlarıyla aynıdır: ```javascript useEffect(async () => { - //TODO: implement + //TODO: uygula }, []) const connectWalletPressed = async () => { - //TODO: implement + //TODO: uygula } const onMintPressed = async () => { - //TODO: implement + //TODO: uygula } ``` -- [`useEffect`](https://reactjs.org/docs/hooks-effect.html) - bu, bileşeniniz oluşturulduktan sonra çağrılan bir React kancasıdır. İçine geçirilen boş bir `[]` dizisine sahip olduğundan (3. satıra bakın), yalnızca bileşenin _ilk_ oluşturmasında çağrılır. Burada, bir cüzdanın zaten bağlı olup olmadığını yansıtacak şekilde kullanıcı arayüzünü güncellemek için cüzdan dinleyicimizi ve başka bir cüzdan fonksiyonunu çağıracağız. -- `connectWalletPressed` - bu fonksiyon, kullanıcının MetaMask cüzdanını merkeziyetsiz uygulamamıza bağlamak için çağrılır. -- `onMintPressed` - bu fonksiyon, kullanıcının NFT'sini basmak için çağrılır. +- [`useEffect`](https://legacy.reactjs.org/docs/hooks-effect.html) - bu, bileşeniniz oluşturulduktan sonra çağrılan bir React kancasıdır. İçine boş bir `[]` dizisi prop'u aktarıldığı için (bkz. 3. satır), yalnızca bileşenin _ilk_ render işleminde çağrılacaktır. Burada, bir cüzdanın zaten bağlı olup olmadığını yansıtacak şekilde kullanıcı arayüzünü güncellemek için cüzdan dinleyicimizi ve başka bir cüzdan fonksiyonunu çağıracağız. +- `connectWalletPressed` - bu fonksiyon, kullanıcının MetaMask cüzdanını merkeziyetsiz uygulamamıza bağlamak için çağrılacaktır. +- `onMintPressed` - bu fonksiyon, kullanıcının NFT'sini basmak için çağrılacaktır. -Bu dosyanın sonuna doğru, bileşenimizin kullanıcı arayüzü bulunuyor. Bu kodu dikkatli bir şekilde tararsanız, `url`, `ad` ve `description` durum değişkenlerimizi, bunlara denk gelen metin alanları değiştiğinde güncellediğimizi fark edeceksiniz. +Bu dosyanın sonuna doğru, bileşenimizin kullanıcı arayüzü bulunuyor. Bu kodu dikkatlice incelerseniz, ilgili metin alanlarındaki girdi değiştiğinde `url`, `name` ve `description` durum değişkenlerimizi güncellediğimizi fark edeceksiniz. -Ayrıca, sırasıyla `mintButton` ve `walletButton` kimliklerine sahip düğmelere tıklandığında `connectWalletPressed` ve `onMintPressed`'in çağrıldığını göreceksiniz. +Ayrıca, sırasıyla `mintButton` ve `walletButton` kimlikli düğmelere tıklandığında `connectWalletPressed` ve `onMintPressed` fonksiyonlarının çağrıldığını göreceksiniz. ```javascript -//the UI of our component +//bileşenimizin kullanıcı arayüzü return (


-

🧙‍♂️ Alchemy NFT Minter

+

🧙‍♂️ Alchemy NFT Basıcısı

- Simply add your asset's link, name, and description, then press "Mint." + Varlığınızın bağlantısını, adını ve açıklamasını ekleyin, ardından "Bas" düğmesine basın.

-

🖼 Link to asset:

+

🖼 Varlık bağlantısı:

setURL(event.target.value)} /> -

🤔 Name:

+

🤔 Ad:

setName(event.target.value)} /> -

✍️ Description:

+

✍️ Açıklama:

setDescription(event.target.value)} />

{status}

-
+ ) ``` Son olarak bu Minter bileşeninin nereye eklendiğine değinelim. -React'teki diğer tüm bileşenler için bir kapsayıcı görevi gören ana bileşen olan `App.js` dosyasına giderseniz, Minter bileşenimizin 7. satıra enjekte edildiğini göreceksiniz. +`App.js` dosyasına giderseniz, ki bu dosya React'te diğer tüm bileşenler için bir kapsayıcı görevi gören ana bileşendir, Minter bileşenimizin 7. satıra eklendiğini görürsünüz. -**Bu öğreticide, yalnızca `Minter.js file`'ı düzenleyeceğiz ve `src` klasörümüze dosyalar ekleyeceğiz.** +**Bu öğreticide, yalnızca `Minter.js` dosyasını düzenleyecek ve `src` klasörümüze dosyalar ekleyeceğiz.** Artık ne üzerinde çalıştığımızı anladığımıza göre, Ethereum cüzdanımızı oluşturalım! -## : Ethereum cüzdanınızı kurun {#set-up-your-ethereum-wallet} +## Ethereum cüzdanınızı kurun {#set-up-your-ethereum-wallet} Kullanıcıların akıllı sözleşmenizle etkileşime girebilmeleri için Ethereum cüzdanlarını merkeziyetsiz uygulamanıza bağlamaları gerekir. -### MetaMask'i indirin {#download-metamask} +### MetaMask'ı indirin {#download-metamask} -Bu öğretici için, Ethereum hesap adresinizi yönetmek için kullanılan tarayıcıda sanal bir cüzdan olan MetaMask'ı kullanacağız. Ethereum'daki işlemlerin nasıl çalıştığı hakkında daha fazla bilgi edinmek istiyorsanız, [bu sayfaya](/developers/docs/transactions/) bakın. +Bu öğretici için, Ethereum hesap adresinizi yönetmek için kullanılan tarayıcıda sanal bir cüzdan olan MetaMask'ı kullanacağız. Ethereum'daki işlemlerin nasıl çalıştığı hakkında daha fazla bilgi edinmek isterseniz, [bu sayfaya](/developers/docs/transactions/) göz atın. -[Buradan](https://metamask.io/download) ücretsiz olarak bir MetaMask hesabı indirebilir ve oluşturabilirsiniz. Bir hesap oluşturuyorsanız veya zaten bir hesabınız varsa, sağ üstteki "Ropsten Test Ağı"na geçtiğinizden emin olun \(böylece gerçek parayla uğraşmayız\). +MetaMask'ı [buradan](https://metamask.io/download) ücretsiz indirip bir hesap oluşturabilirsiniz. Bir hesap oluşturuyorsanız veya zaten bir hesabınız varsa, sağ üstteki "Ropsten Test Ağı"na geçtiğinizden emin olun \(böylece gerçek parayla uğraşmayız\). -### Bir Musluktan ether ekleyin {#add-ether-from-faucet} +### Musluktan ether ekleyin {#add-ether-from-faucet} -NFT'lerimizi basmak (veya Ethereum blok zincirindeki herhangi bir işlemi imzalamak) için biraz sahte Eth'e ihtiyacımız olacak. Eth almak için [Ropsten musluğuna](https://faucet.ropsten.be/) gidebilir ve Ropsten hesap adresinizi girip "Send Ropsten Eth"e (Ropsten Eth Gönder) tıklayabilirsiniz Kısa bir süre sonra MetaMask hesabınızda Eth'i görmelisiniz! +NFT'lerimizi basmak (veya Ethereum blok zincirindeki herhangi bir işlemi imzalamak) için biraz sahte Eth'e ihtiyacımız olacak. Eth almak için [Ropsten musluğuna](https://faucet.ropsten.be/) gidip Ropsten hesap adresinizi girebilir, ardından “Send Ropsten Eth” (Ropsten Eth Gönder) düğmesine tıklayabilirsiniz. Kısa bir süre sonra MetaMask hesabınızda Eth'i görmelisiniz! ### Bakiyenizi kontrol edin {#check-your-balance} -Bakiyemizin yerinde olduğundan emin olmak için [Alchemy'nin düzenleyici aracını](https://composer.alchemyapi.io/?composer_state=%7B%22network%22%3A0%2C%22methodName%22%3A%22eth_getBalance%22%2C%22paramValues%22%3A%5B%22%22%2C%22latest%22%5D%7D) kullanarak bir [eth_getBalance](https://docs.alchemyapi.io/alchemy/documentation/alchemy-api-reference/json-rpc#eth_getbalance) isteği oluşturalım. Bu, cüzdanımızdaki Eth miktarını döndürür. MetaMask hesap adresinizi girdikten ve "Send Request"e tıkladıktan sonra aşağıdaki gibi bir yanıt görmelisiniz: +Bakiyemizin orada olup olmadığını iki kez kontrol etmek için [Alchemy’nin composer aracını](https://composer.alchemyapi.io/?composer_state=%7B%22network%22%3A0%2C%22methodName%22%3A%22eth_getBalance%22%2C%22paramValues%22%3A%5B%22%22%2C%22latest%22%5D%7D) kullanarak bir [eth_getBalance](https://docs.alchemyapi.io/alchemy/documentation/alchemy-api-reference/json-rpc#eth_getbalance) isteği yapalım. Bu, cüzdanımızdaki Eth miktarını döndürür. MetaMask hesap adresinizi girdikten ve "Send Request"e tıkladıktan sonra aşağıdaki gibi bir yanıt görmelisiniz: ```text {"jsonrpc": "2.0", "id": 0, "result": "0xde0b6b3a7640000"} ``` -**NOT:** Bu sonuç eth değil wei hâlindedir. Wei, ether'ın en küçük birimi olarak kullanılır. Wei'den eth'e dönüşüm: 1 eth = 10¹⁸ wei. Yani 0xde0b6b3a7640000'ı ondalık sayıya dönüştürürsek 1\*10¹⁸ elde ederiz, bu da 1 eth'e eşittir. +**NOT:** Bu sonuç eth cinsinden değil wei cinsindendir. Wei, ether'ın en küçük birimi olarak kullanılır. Wei'den eth'e dönüşüm: 1 eth = 10¹⁸ wei. Yani 0xde0b6b3a7640000'ı ondalık sayıya dönüştürürsek 1\*10¹⁸ elde ederiz, bu da 1 eth'e eşittir. -Vay be! Tüm sahte paramız yerli yerinde! +Vay be! Tüm sahte paramız yerinde! -## MetaMask'i kullanıcı arayüzünüze bağlayın {#connect-metamask-to-your-UI} +## MetaMask'ı kullanıcı arayüzünüze bağlayın {#connect-metamask-to-your-UI} Artık MetaMask cüzdanımız kurulduğuna göre, merkeziyetsiz uygulamamızı ona bağlayalım! -[MVC](https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller) paradigmasını kurala bağlamak istediğimiz için merkeziyetsiz uygulamamızın mantığını, verilerini ve kurallarını yönetmek amacıyla fonksiyonlarımızı içeren ayrı bir dosya oluşturacağız ve ardından bu fonksiyonları ön ucumuza (Minter.js bileşenimiz) aktaracağız. +[MVC](https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller) paradigmasına uymak istediğimiz için, merkeziyetsiz uygulamamızın mantığını, verilerini ve kurallarını yöneten fonksiyonlarımızı içeren ayrı bir dosya oluşturacak ve ardından bu fonksiyonları ön uca (Minter.js bileşenimiz) aktaracağız. ### `connectWallet` fonksiyonu {#connect-wallet-function} -Bunu yapmak için `src` dizininizde `utils` adında yeni bir klasör oluşturalım ve içine tüm cüzdan ve akıllı sözleşme etkileşim fonksiyonlarımızı içerecek `interact.js` adlı bir dosya ekleyelim. +Bunu yapmak için `src` dizininizde `utils` adında yeni bir klasör oluşturalım ve içine tüm cüzdan ve akıllı sözleşme etkileşim fonksiyonlarımızı içerecek olan `interact.js` adlı bir dosya ekleyelim. -`interact.js` dosyamızda, bir `connectWallet` fonksiyonu yazacağız ve bunu daha sonra içe aktarıp `Minter.js` bileşenimizde çağıracağız. +`interact.js` dosyamızda bir `connectWallet` fonksiyonu yazacağız, bunu daha sonra `Minter.js` bileşenimize aktarıp çağıracağız. -`interact.js` dosyanıza aşağıdakini ekleyin +`interact.js` dosyanıza aşağıdakileri ekleyin ```javascript export const connectWallet = async () => { @@ -243,7 +245,7 @@ export const connectWallet = async () => { method: "eth_requestAccounts", }) const obj = { - status: "👆🏽 Write a message in the text-field above.", + status: "👆🏽 Yukarıdaki metin alanına bir mesaj yazın.", address: addressArray[0], } return obj @@ -261,8 +263,7 @@ export const connectWallet = async () => {

{" "} 🦊 - You must install MetaMask, a virtual Ethereum wallet, in your - browser. + Tarayıcınıza sanal bir Ethereum cüzdanı olan MetaMask'i yüklemeniz gerekir.

@@ -276,24 +277,24 @@ export const connectWallet = async () => { İlk olarak, fonksiyonumuz tarayıcınızda `window.ethereum`'un etkin olup olmadığını kontrol eder. -`window.ethereum`, MetaMask ve diğer cüzdan sağlayıcıları tarafından enjekte edilen ve web sitelerinin kullanıcıların Ethereum hesaplarını talep etmesine izin veren küresel bir API'dir. Onaylanırsa, kullanıcının bağlı olduğu blok zincirlerinden verileri okuyabilir ve kullanıcının mesajları ve işlemleri imzalamasını önerebilir. Daha fazla bilgi için [MetaMask belgelerine](https://docs.metamask.io/guide/ethereum-provider.html#table-of-contents) göz atın! +`window.ethereum`, MetaMask ve diğer cüzdan sağlayıcıları tarafından eklenen ve web sitelerinin kullanıcıların Ethereum hesaplarını talep etmesine olanak tanıyan küresel bir API'dir. Onaylanırsa, kullanıcının bağlı olduğu blok zincirlerinden verileri okuyabilir ve kullanıcının mesajları ve işlemleri imzalamasını önerebilir. Daha fazla bilgi için [MetaMask belgelerine](https://docs.metamask.io/guide/ethereum-provider.html#table-of-contents) göz atın! -`window.ethereum` _yoksa_, MetaMask kurulu değil demektir. Bu, bir JSON nesnesinin döndürülmesiyle sonuçlanır; burada döndürülen `address` boş bir dizedir ve `status` JSX nesnesi, kullanıcının MetaMask'i yüklemesi gerektiğini bildirir. +Eğer `window.ethereum` mevcut _değilse_, bu MetaMask'in kurulu olmadığı anlamına gelir. Bu, döndürülen `address`'in boş bir dize olduğu ve `status` JSX nesnesinin kullanıcının MetaMask'i yüklemesi gerektiğini ilettiği bir JSON nesnesinin döndürülmesiyle sonuçlanır. -**Yazdığımız fonksiyonların çoğu, durum değişkenlerimizi ve kullanıcı arayüzünü güncellemek için kullanabileceğimiz JSON nesnelerini döndürecek.** +**Yazdığımız fonksiyonların çoğu, durum değişkenlerimizi ve kullanıcı arayüzümüzü güncellemek için kullanabileceğimiz JSON nesneleri döndürecektir.** -Şimdi, eğer `window.ethereum` _varsa_, işte o zaman işler ilginçleşiyor. +Eğer `window.ethereum` mevcut _ise_, o zaman işler ilginçleşir. -Bir deneme/yakalama döngüsü kullanarak, `[window.ethereum.request({ method: "eth_requestAccounts" });](https://docs.metamask.io/guide/rpc-api.html#eth-requestaccounts)` öğesini çağırarak MetaMask'e bağlanmaya çalışacağız. Bu fonksiyonun çağrılması, tarayıcıda MetaMask'i açar ve bu sayede kullanıcıdan cüzdanını merkeziyetsiz uygulamanıza bağlaması istenir. +Bir try/catch döngüsü kullanarak, [`window.ethereum.request({ method: \"eth_requestAccounts\" });`](https://docs.metamask.io/guide/rpc-api.html#eth-requestaccounts) çağrısı yaparak MetaMask'e bağlanmaya çalışacağız. Bu fonksiyonun çağrılması, tarayıcıda MetaMask'i açar ve bu sayede kullanıcıdan cüzdanını merkeziyetsiz uygulamanıza bağlaması istenir. -- Kullanıcı bağlanmayı seçerse, `method: "eth_requestAccounts"`, kullanıcının merkeziyetsiz uygulamaya bağlı tüm hesap adreslerini içeren bir dizi döndürür. Toplamda, `connectWallet` fonksiyonumuz bu dizideki _ilk_ `address`'i içeren bir JSON nesnesi \(9. satıra bakın\) ve kullanıcıdan akıllı sözleşmeye bir mesaj yazmasını isteyen bir `status` mesajı döndürür. -- Kullanıcı bağlantıyı reddederse, JSON nesnesi, döndürülen `address` için boş bir dize ve kullanıcının bağlantıyı reddettiğini yansıtan bir `status` mesajı içerir. +- Kullanıcı bağlanmayı seçerse `method: \"eth_requestAccounts\"`, kullanıcının merkeziyetsiz uygulamaya bağlı tüm hesap adreslerini içeren bir dizi döndürür. Sonuç olarak, `connectWallet` fonksiyonumuz bu dizideki _ilk_ `address`'i (bkz. satır 9) ve kullanıcıyı akıllı sözleşmeye bir mesaj yazmaya yönlendiren bir `status` mesajını içeren bir JSON nesnesi döndürecektir. +- Kullanıcı bağlantıyı reddederse JSON nesnesi, döndürülen `address` için boş bir dize ve kullanıcının bağlantıyı reddettiğini yansıtan bir `status` mesajı içerir. -### Minter.js UI Bileşeninize connectWallet fonksiyonu ekleyin {#add-connect-wallet} +### `connectWallet` fonksiyonunu `Minter.js` kullanıcı arayüzü bileşeninize ekleyin {#add-connect-wallet} -Şimdi bu `connectWallet` fonksiyonunu yazdığımıza göre, onu `Minter.js.` bileşenimize bağlayalım. +Bu `connectWallet` fonksiyonunu yazdığımıza göre, şimdi onu `Minter.js.` bileşenimize bağlayalım. -İlk olarak, `Minter.js` dosyasının en üstüne `import { connectWallet } from "./utils/interact.js";` öğesini ekleyerek fonksiyonumuzu `Minter.js` dosyamıza aktarmamız gerekecek. `Minter.js` dosyasının ilk 11 satırı şimdi şöyle görünmelidir: +İlk olarak, `Minter.js` dosyasının en üstüne `import { connectWallet } from \"./utils/interact.js\";` satırını ekleyerek fonksiyonumuzu `Minter.js` dosyamıza aktarmamız gerekecek. `Minter.js` dosyanızın ilk 11 satırı şimdi şöyle görünmelidir: ```javascript import { useEffect, useState } from "react"; @@ -301,7 +302,7 @@ import { connectWallet } from "./utils/interact.js"; const Minter = (props) => { - //State variables + //Durum değişkenleri const [walletAddress, setWallet] = useState(""); const [status, setStatus] = useState(""); const [name, setName] = useState(""); @@ -309,7 +310,7 @@ const Minter = (props) => { const [url, setURL] = useState(""); ``` -Ardından, `connectWalletPressed` fonksiyonumuzun içinde, içe aktarılan `connectWallet` fonksiyonumuzu şöyle çağıracağız: +Ardından, `connectWalletPressed` fonksiyonumuzun içinde, içe aktardığımız `connectWallet` fonksiyonunu şu şekilde çağıracağız: ```javascript const connectWalletPressed = async () => { @@ -319,11 +320,11 @@ const connectWalletPressed = async () => { } ``` -Fonksiyonlarımızın çoğunun `interact.js` dosyasındaki `Minter.js` bileşenimizden nasıl soyutlandığını gördünüz mü? Bu, M-V-C paradigmasına uymamız içindir! +İşlevselliğimizin çoğunun `interact.js` dosyasından `Minter.js` bileşenimizden nasıl soyutlandığına dikkat edin. Bu, M-V-C paradigmasına uymamız içindir! -`connectWalletPressed`'de, içe aktarılan `connectWallet` fonksiyonumuza bir bekleme çağrısı yaparız ve yanıtını kullanarak durum kancaları aracılığıyla `status` ve `walletAddress` değişkenlerimizi güncelleriz. +`connectWalletPressed` içinde, içe aktarılan `connectWallet` fonksiyonumuza bir `await` çağrısı yaparız ve yanıtını kullanarak `status` ve `walletAddress` değişkenlerimizi durum kancaları aracılığıyla güncelleriz. -Şimdi, `Minter.js` ve `interact.js` dosyalarını kaydedelim ve şu ana kadarki kullanıcı arayüzümüzü test edelim. +Şimdi, `Minter.js` ve `interact.js` dosyalarını kaydedelim ve şimdiye kadarki kullanıcı arayüzümüzü test edelim. Tarayıcınızı localhost:3000 üzerinde açın ve sayfanın sağ üst köşesindeki "Connect Wallet" düğmesine basın. @@ -331,11 +332,11 @@ MetaMask yüklüyse, cüzdanınızı merkeziyetsiz uygulamanıza bağlamanız is Cüzdan düğmesinin artık adresinizin bağlı olduğunu yansıttığını görmelisiniz. -Ardından, sayfayı yenilemeyi deneyin... Garip. Cüzdan düğmemiz zaten bağlı olmasına rağmen MetaMask'i bağlamamızı istiyor... +Şimdi, sayfayı yenilemeyi deneyin... bu garip. Cüzdan düğmemiz zaten bağlı olmasına rağmen MetaMask'i bağlamamızı istiyor... -Ama merak etmeyin! `getCurrentWalletConnected` adlı bir fonksiyonu uygulayarak bunu kolayca düzeltebiliriz; bu, bir adresin merkeziyetsiz uygulamamıza zaten bağlı olup olmadığını kontrol edecek ve kullanıcı arayüzünü buna göre güncelleyecektir! +Ama merak etmeyin! Bunu, bir adresin merkeziyetsiz uygulamamıza zaten bağlı olup olmadığını kontrol edecek ve kullanıcı arayüzümüzü buna göre güncelleyecek olan `getCurrentWalletConnected` adlı bir fonksiyonu uygulayarak kolayca düzeltebiliriz! -### GetCurrentWalletConnected fonksiyonu {#get-current-wallet} +### `getCurrentWalletConnected` fonksiyonu {#get-current-wallet} `interact.js` dosyanıza aşağıdaki `getCurrentWalletConnected` fonksiyonunu ekleyin: @@ -349,12 +350,12 @@ export const getCurrentWalletConnected = async () => { if (addressArray.length > 0) { return { address: addressArray[0], - status: "👆🏽 Write a message in the text-field above.", + status: "👆🏽 Yukarıdaki metin alanına bir mesaj yazın.", } } else { return { address: "", - status: "🦊 Connect to MetaMask using the top right button.", + status: "🦊 Sağ üstteki düğmeyi kullanarak MetaMask'e bağlanın.", } } } catch (err) { @@ -371,8 +372,7 @@ export const getCurrentWalletConnected = async () => {

{" "} 🦊 - You must install MetaMask, a virtual Ethereum wallet, in your - browser. + Tarayıcınıza sanal bir Ethereum cüzdanı olan MetaMask'i yüklemeniz gerekir.

@@ -384,9 +384,9 @@ export const getCurrentWalletConnected = async () => { Bu kod, az önce yazdığımız `connectWallet` fonksiyonuna _çok_ benzer. -Temel fark, kullanıcının cüzdanını bağlaması için MetaMask'i açan `eth_requestAccounts` yöntemini çağırmak yerine, burada yalnızca şu anda merkeziyetsiz uygulamamıza bağlı olan MetaMask adreslerini içeren bir dizi döndüren `eth_accounts` yöntemini çağırmamızdır. +Temel fark, kullanıcının cüzdanını bağlaması için MetaMask'i açan `eth_requestAccounts` yöntemini çağırmak yerine, burada yalnızca merkeziyetsiz uygulamamıza bağlı olan MetaMask adreslerini içeren bir dizi döndüren `eth_accounts` yöntemini çağırıyoruz. -Bu fonksiyonu çalışırken görmek için, onu `Minter.js` bileşenimizin `useEffect` fonksiyonunda çağıralım. +Bu fonksiyonu çalışırken görmek için `Minter.js` bileşenimizin `useEffect` fonksiyonunda çağıralım. `connectWallet` için yaptığımız gibi, bu fonksiyonu `interact.js` dosyamızdan `Minter.js` dosyamıza şu şekilde aktarmalıyız: @@ -394,11 +394,11 @@ Bu fonksiyonu çalışırken görmek için, onu `Minter.js` bileşenimizin `useE import { useEffect, useState } from "react" import { connectWallet, - getCurrentWalletConnected, //import here + getCurrentWalletConnected, //buraya aktar } from "./utils/interact.js" ``` -Şimdi onu `useEffect` fonksiyonumuzda çağırıyoruz: +Şimdi, onu sadece `useEffect` fonksiyonumuzda çağırıyoruz: ```javascript useEffect(async () => { @@ -408,15 +408,15 @@ useEffect(async () => { }, []) ``` -Dikkat edin, `walletAddress` ve `status` durum değişkenlerimizi güncellemek için `getCurrentWalletConnected` çağrımızın yanıtını kullanıyoruz. +Dikkat edin, `getCurrentWalletConnected` çağrımızın yanıtını `walletAddress` ve `status` durum değişkenlerimizi güncellemek için kullanıyoruz. Bu kodu ekledikten sonra tarayıcı penceremizi yenilemeyi deneyin. Düğme, bağlı olduğunuzu söylemeli ve yeniledikten sonra bile bağlı cüzdanınızın adresinin bir önizlemesini göstermelidir! -### AddWalletListener'ı uygulayın {#implement-add-wallet-listener} +### `addWalletListener` fonksiyonunu uygulayın {#implement-add-wallet-listener} Merkeziyetsiz uygulama cüzdanı kurulumumuzun son adımı, örneğin kullanıcı bağlantısını keserek veya hesap değiştirerek cüzdanımızın durumunu değiştirdiğinde kullanıcı arayüzümüzün güncellenmesi için cüzdan dinleyicisini uygulamaktır. -`Minter.js` dosyanıza aşağıdakine benzeyen bir `addWalletListener` fonksiyonu ekleyin: +`Minter.js` dosyanıza, aşağıdakine benzeyen bir `addWalletListener` fonksiyonu ekleyin: ```javascript function addWalletListener() { @@ -424,10 +424,10 @@ function addWalletListener() { window.ethereum.on("accountsChanged", (accounts) => { if (accounts.length > 0) { setWallet(accounts[0]) - setStatus("👆🏽 Write a message in the text-field above.") + setStatus("👆🏽 Yukarıdaki metin alanına bir mesaj yazın.") } else { setWallet("") - setStatus("🦊 Connect to MetaMask using the top right button.") + setStatus("🦊 Sağ üstteki düğmeyi kullanarak MetaMask'e bağlanın.") } }) } else { @@ -435,7 +435,7 @@ function addWalletListener() {

{" "} 🦊 - You must install MetaMask, a virtual Ethereum wallet, in your browser. + Tarayıcınıza sanal bir Ethereum cüzdanı olan MetaMask'i yüklemeniz gerekir.

) @@ -445,9 +445,9 @@ function addWalletListener() { Burada neler olduğunu hızlıca çözelim: -- İlk olarak, fonksiyonumuz `window.ethereum`'un etkin olup olmadığını kontrol eder \(yani MetaMask kurulu olup olmadığını\). - - Değilse, `status` durum değişkenimizi, kullanıcının MetaMask'i yüklemesini isteyen bir JSX dizesine ayarlamamız yeterlidir. - - Etkinleştirilirse, 3. satırda `window.ethereum.on("accountsChanged")` dinleyicisini kurarız ve bu dinleyici MetaMask cüzdanındaki, kullanıcının merkeziyetsiz uygulamaya ek bir hesap bağladığı, hesapları değiştirdiği veya bir hesabın bağlantısını kestiği anları da içeren durum değişikliklerini dinler. Bağlı en az bir hesap varsa, `walletAddress` durum değişkeni, dinleyici tarafından döndürülen `accounts` dizisindeki ilk hesap olarak güncellenir. Aksi takdirde, `walletAddress` boş bir dize olarak ayarlanır. +- İlk olarak fonksiyonumuz `window.ethereum`'un etkin olup olmadığını kontrol eder (yani MetaMask'in kurulu olup olmadığını). + - Etkin değilse, `status` durum değişkenimizi, kullanıcıyı MetaMask'i yüklemeye yönlendiren bir JSX dizesine ayarlarız. + - Etkinleştirilmişse, kullanıcının merkeziyetsiz uygulamaya ek bir hesap bağlaması, hesapları değiştirmesi veya bir hesabın bağlantısını kesmesi gibi MetaMask cüzdanındaki durum değişikliklerini dinleyen `window.ethereum.on(\"accountsChanged\")` dinleyicisini 3. satırda kurarız. Bağlı en az bir hesap varsa, `walletAddress` durum değişkeni, dinleyici tarafından döndürülen `accounts` dizisindeki ilk hesap olarak güncellenir. Aksi takdirde, `walletAddress` boş bir dize olarak ayarlanır. Son olarak, onu `useEffect` fonksiyonumuzda çağırmalıyız: @@ -463,11 +463,11 @@ useEffect(async () => { İşte oldu! Cüzdan fonksiyonlarımızın tümünü programlamayı tamamladık! Cüzdanımız kurulduğuna göre, şimdi NFT'mizi nasıl basacağımızı bulalım! -## NFT Meta Verileri 101 {#nft-metadata-101} +## NFT Meta Verilerine Giriş {#nft-metadata-101} Bu öğreticinin 0. Adımında bahsettiğimiz NFT meta verilerini hatırlayın; dijital varlık, ad, açıklama ve diğer nitelikler gibi özelliklere sahip olmasını sağlayarak bir NFT'ye hayat verirler. -Bu meta verileri bir JSON nesnesi olarak yapılandırmamız ve saklamamız gerekecek, böylece akıllı sözleşmemizin `mintNFT` fonksiyonunu çağırırken `tokenURI` parametresi olarak iletebiliriz. +Bu meta verileri bir JSON nesnesi olarak yapılandırıp saklamamız gerekecek, böylece akıllı sözleşmemizin `mintNFT` fonksiyonunu çağırırken bunu `tokenURI` parametresi olarak geçirebiliriz. "Link to Asset" (Varlığa Bağlantı), "Name" (Ad) ve "Description" (Açıklama) alanlarındaki metin, NFT'mizin meta verisinin farklı özelliklerini oluşturacaktır. Bu meta verileri bir JSON nesnesi olarak biçimlendireceğiz, ancak bu JSON nesnesini nerede depolayabileceğimiz konusunda birkaç seçenek var: @@ -475,15 +475,15 @@ Bu meta verileri bir JSON nesnesi olarak yapılandırmamız ve saklamamız gerek - AWS veya Firebase gibi merkezi bir sunucuda depolayabiliriz. Ancak bu, merkeziyetsizlik anlayışımızı bozar. - Dağıtılmış bir dosya sisteminde veri depolamak ve paylaşmak için merkeziyetsiz bir protokol ve eşler arası ağ olan IPFS'yi kullanabiliriz. Bu protokol merkeziyetsiz ve ücretsiz olduğu için en iyi seçeneğimizdir! -Meta verilerimizi IPFS'de depolamak için, uygun bir IPFS API'si ve araç takımı olan [Pinata](https://pinata.cloud/)'yı kullanacağız. Bir sonraki adımda, bunun tam olarak nasıl yapılacağını açıklayacağız! +Meta verilerimizi IPFS'de depolamak için, kullanışlı bir IPFS API'si ve araç takımı olan [Pinata](https://pinata.cloud/)'yı kullanacağız. Bir sonraki adımda, bunun tam olarak nasıl yapılacağını açıklayacağız! -## Meta verilerinizi IPFS'ye sabitlemek için Pinata'yı kullanın {#use-pinata-to-pin-your-metadata-to-IPFS} +## Meta verilerinizi IPFS'e sabitlemek için Pinata'yı kullanın {#use-pinata-to-pin-your-metadata-to-IPFS} -[Pinata](https://pinata.cloud/) hesabınız yoksa, [buradan](https://app.pinata.cloud/auth/signup) ücretsiz bir hesap için kaydolun ve e-postanızla hesabınızı doğrulamak için adımları tamamlayın. +Bir [Pinata](https://pinata.cloud/) hesabınız yoksa, [buradan](https://app.pinata.cloud/auth/signup) ücretsiz bir hesap için kaydolun ve e-postanızı ve hesabınızı doğrulamak için adımları tamamlayın. ### Pinata API anahtarınızı oluşturun {#create-pinata-api-key} -[https://pinata.cloud/keys](https://pinata.cloud/keys) sayfasına gidin, ardından üst kısımdaki "New Key" (Yeni Anahtar) düğmesini seçin, Yönetici widget'ını ayarlayın etkinleştirin ve anahtarınızı adlandırın. +[https://pinata.cloud/keys](https://pinata.cloud/keys) sayfasına gidin, ardından üstteki "New Key" (Yeni Anahtar) düğmesini seçin, Yönetici aracını etkinleştirin ve anahtarınızı adlandırın. Ardından, API bilgilerinizi içeren bir açılır pencere gösterilecektir. Bunu güvenli bir yere koyduğunuzdan emin olun. @@ -493,19 +493,19 @@ Artık anahtarımız ayarlandığına göre onu kullanabilmek için projemize ek Pinata anahtarımızı ve sırrımızı bir ortam dosyasında güvenle saklayabiliriz. Proje dizininize [dotenv paketini](https://www.npmjs.com/package/dotenv) yükleyelim. -Terminalinizde \(yerel ana bilgisayarı çalıştırandan ayrı\) yeni bir sekme açın ve `minter-starter-files` klasöründe olduğunuzdan emin olun, ardından terminalinizde aşağıdaki komutu çalıştırın: +Terminalinizde yeni bir sekme açın (yerel ana bilgisayarı çalıştırandan ayrı) ve `minter-starter-files` klasöründe olduğunuzdan emin olun, ardından terminalinizde aşağıdaki komutu çalıştırın: ```text npm install dotenv --save ``` -Ardından, komut satırınıza aşağıdakileri girerek `minter-starter-files` kök dizininde bir `.env` dosyası oluşturun: +Ardından, komut satırınıza aşağıdakileri girerek `minter-starter-files` kök dizininizde bir `.env` dosyası oluşturun: ```javascript vim.env ``` -Bu, `.env` dosyanızı vim \(bir metin editörü\) içinde açacaktır. Kaydetmek için klavyenizdeki "esc" + ":" + "q" tuşlarına bu sırayla basın. +Bu, `.env` dosyanızı vim (bir metin düzenleyici) içinde açacaktır. Kaydetmek için klavyenizdeki "esc" + ":" + "q" tuşlarına bu sırayla basın. Ardından, VSCode'da `.env` dosyanıza gidin ve Pinata API anahtarınızı ve API sırrınızı şu şekilde ekleyin: @@ -516,11 +516,11 @@ REACT_APP_PINATA_SECRET = Dosyayı kaydettikten sonra JSON meta verilerinizi IPFS'ye yüklemek için fonksiyonu yazmaya başlamaya hazırsınız! -### PinJSONToIPFS'yi uygulayın {#pin-json-to-ipfs} +### `pinJSONToIPFS` fonksiyonunu uygulayın {#pin-json-to-ipfs} -Neyse ki, Pinata'nın [özellikle JSON verilerini IPFS'ye yüklemek için bir API'si](https://docs.pinata.cloud/api-reference/endpoint/ipfs/pin-json-to-ipfs#pin-json) ve axios örneğiyle bazı ufak değişiklikler yaparak birlikte kullanabileceğimiz uygun bir JavaScript'i var. +Neyse ki Pinata'nın, JSON verilerini IPFS'ye yüklemek için özel bir [API'si](https://docs.pinata.cloud/api-reference/endpoint/ipfs/pin-json-to-ipfs#pin-json) ve bazı küçük değişikliklerle kullanabileceğimiz, axios içeren kullanışlı bir JavaScript örneği var. -`utils` klasörünüzde `pinata.js` adında başka bir dosya oluşturalım ve ardından .env dosyasından Pinata sırrımızı ve anahtarımızı şu şekilde içe aktaralım: +`utils` klasörünüzde `pinata.js` adında başka bir dosya oluşturalım ve ardından Pinata sırrımızı ve anahtarımızı .env dosyasından şu şekilde içe aktaralım: ```javascript require("dotenv").config() @@ -539,7 +539,7 @@ const axios = require("axios") export const pinJSONToIPFS = async (JSONBody) => { const url = `https://api.pinata.cloud/pinning/pinJSONToIPFS` - //making axios POST request to Pinata ⬇️ + //Pinata'ya axios POST isteği yapılıyor ⬇️ return axios .post(url, JSONBody, { headers: { @@ -566,24 +566,24 @@ export const pinJSONToIPFS = async (JSONBody) => { Peki bu kod tam olarak ne yapıyor? -İlk olarak, Pinata'ya bir istekte bulunmak için kullanacağımız tarayıcı ve node.js için söz tabanlı bir HTTP istemcisi olan [axios](https://www.npmjs.com/package/axios)'u içe aktarır. +İlk olarak, Pinata'ya bir istekte bulunmak için kullanacağımız, tarayıcı ve node.js için promise tabanlı bir HTTP istemcisi olan [axios](https://www.npmjs.com/package/axios) içe aktarılır. -Ardından, `pinJSONToIPFS` API'lerine bir POST isteği yapmak için girişi olarak bir `JSONBody` ve başlığında Pinata api anahtarını ve sırrını alan eş zamansız fonksiyonumuz `pinJSONToIPFS`'ye sahibiz. +Ardından, `pinJSONToIPFS` API'lerine bir POST isteği yapmak için girişi olarak bir `JSONBody` ve başlığında Pinata api anahtarını ve sırrını alan eş zamansız `pinJSONToIPFS` fonksiyonumuz var. -- Bu POST isteği başarılı olursa, işlevimiz `success` boolean'ı true olarak ve meta verilerimizin sabitlendiği `pinataUrl` ile bir JSON nesnesi döndürür. Akıllı sözleşmemizin mint fonksiyonuna `tokenURI` girişi olarak döndürülen bu `pinataUrl` öğesini kullanacağız. -- Bu post isteği başarısız olursa, fonksiyonumuz `success` boolean'ı false olan bir JSON nesnesi ve hatamızı ileten bir `message` dizesi döndürür. +- Bu POST isteği başarılı olursa, fonksiyonumuz `success` boole değeri `true` olan ve meta verilerimizin sabitlendiği `pinataUrl`'yi içeren bir JSON nesnesi döndürür. Akıllı sözleşmemizin mint fonksiyonuna `tokenURI` girdisi olarak döndürülen bu `pinataUrl` öğesini kullanacağız. +- Bu post isteği başarısız olursa, fonksiyonumuz `success` boole değeri `false` olan bir JSON nesnesi ve hatamızı ileten bir `message` dizesi döndürür. -`connectWallet` fonksiyon dönüş türlerimizde olduğu gibi, durum değişkenlerimizi ve kullanıcı arayüzünü güncellemek amacıyla parametrelerini kullanabilmemiz için JSON nesneleri döndürüyoruz. +`connectWallet`fonksiyon dönüş türlerimizde olduğu gibi, durum değişkenlerimizi ve kullanıcı arayüzünü güncellemek amacıyla parametrelerini kullanabilmemiz için JSON nesneleri döndürüyoruz. ## Akıllı sözleşmenizi yükleyin {#load-your-smart-contract} Artık `pinJSONToIPFS` fonksiyonumuz aracılığıyla NFT meta verilerimizi IPFS'ye yüklemenin bir yolu olduğuna göre, `mintNFT` fonksiyonunu çağırabilmemiz için akıllı sözleşmemizin bir örneğini yüklemenin bir yoluna ihtiyacımız olacak. -Daha önce bahsettiğimiz gibi, bu öğreticide [bu mevcut NFT akıllı sözleşmesini](https://ropsten.etherscan.io/address/0x4C4a07F737Bf57F6632B6CAB089B78f62385aCaE) kullanacağız; ancak, bunu nasıl yaptığımızı öğrenmek veya kendiniz yapmak istiyorsanız, diğer ["Bir NFT Nasıl Oluşturulur?"](https://docs.alchemyapi.io/alchemy/tutorials/how-to-create-an-nft) öğreticimize göz atmanızı şiddetle tavsiye ederiz. +Daha önce de belirttiğimiz gibi, bu öğreticide [bu mevcut NFT akıllı sözleşmesini](https://ropsten.etherscan.io/address/0x4C4a07F737Bf57F6632B6CAB089B78f62385aCaE) kullanıyor olacağız; ancak, bunu nasıl yaptığımızı öğrenmek veya kendiniz yapmak isterseniz, diğer öğreticimiz olan ["Bir NFT Nasıl Oluşturulur."](https://www.alchemy.com/docs/how-to-create-an-nft) başlıklı yazımıza göz atmanızı şiddetle tavsiye ederiz. -### Sözleşme ABI'ı {#contract-abi} +### Sözleşme ABI'si {#contract-abi} -Dosyalarımızı yakından incelediyseniz, `src` dizinimizde bir `contract-abi.json` dosyası olduğunu fark etmişsinizdir. Bir sözleşmenin hangi fonksiyonu çağıracağını belirlemek ve fonksiyonun beklediğiniz biçimde veri döndürmesini sağlamak için bir ABI gereklidir. +Dosyalarımızı yakından incelediyseniz `src` dizinimizde bir `contract-abi.json` dosyası olduğunu fark etmişsinizdir. Bir sözleşmenin hangi fonksiyonu çağıracağını belirlemek ve fonksiyonun beklediğiniz biçimde veri döndürmesini sağlamak için bir ABI gereklidir. Ayrıca Ethereum blok zincirine bağlanmak ve akıllı sözleşmemizi yüklemek için bir Alchemy API anahtarına ve Alchemy Web3 API'sine ihtiyacımız olacak. @@ -591,7 +591,7 @@ Ayrıca Ethereum blok zincirine bağlanmak ve akıllı sözleşmemizi yüklemek Henüz bir Alchemy hesabınız yoksa, [buradan ücretsiz kaydolun.](https://alchemy.com/?a=eth-org-nft-minter) -Bir Alchemy hesabı oluşturduktan sonra, bir uygulama oluşturarak bir API anahtarı oluşturabilirsiniz. Bu, Ropsten test ağına istekte bulunmamıza izin verecektir. +Bir Alchemy hesabı oluşturduktan sonra, bir uygulama yaratarak bir API anahtarı oluşturabilirsiniz. Bu, Ropsten test ağına istekte bulunmamıza izin verecektir. İmlecinizi gezinme çubuğundaki "Apps"in (Uygulamalar) üzerine gelip "Create App"e (Uygulama Oluştur) tıklayarak Alchemy Gösterge Panelinizdeki "Create App" sayfasına gidin. @@ -601,7 +601,7 @@ Uygulamanıza bir ad verin (biz, "İlk NFT'm!"i seçtik), kısa bir açıklama y Harika, şimdi HTTP Alchemy API URL'mizi oluşturduğumuza göre, onu panonuza kopyalayın... -…ve sonra onu `.env` dosyamıza ekleyelim. Toplamda, .env dosyanız şöyle görünmelidir: +…ve sonra onu .env dosyamıza ekleyelim. Toplamda, .env dosyanız şöyle görünmelidir: ```text REACT_APP_PINATA_KEY = @@ -609,11 +609,11 @@ REACT_APP_PINATA_SECRET = REACT_APP_ALCHEMY_KEY = https://eth-ropsten.alchemyapi.io/v2/ ``` -Artık sözleşme ABI'ımız ve Alchemy API anahtarımız olduğuna göre, [Alchemy Web3](https://github.com/alchemyplatform/alchemy-web3) kullanarak akıllı sözleşmemizi yüklemeye hazırız. +Artık sözleşme ABI'mız ve Alchemy API anahtarımız olduğuna göre [Alchemy Web3](https://github.com/alchemyplatform/alchemy-web3) kullanarak akıllı sözleşmemizi yüklemeye hazırız. ### Alchemy Web3 uç noktanızı ve sözleşmenizi ayarlayın {#setup-alchemy-endpoint} -Öncelikle, henüz sahip değilseniz ana dizine giderek [Alchemy Web3](https://github.com/alchemyplatform/alchemy-web3)'ü yüklemeniz gerekir: terminalde `nft-minter-tutorial`: +Öncelikle, henüz sahip değilseniz terminalde ana dizine giderek [Alchemy Web3](https://github.com/alchemyplatform/alchemy-web3)'ü yüklemeniz gerekir: `nft-minter-tutorial`: ```text cd .. @@ -629,7 +629,7 @@ const { createAlchemyWeb3 } = require("@alch/alchemy-web3") const web3 = createAlchemyWeb3(alchemyKey) ``` -[Alchemy Web3](https://github.com/alchemyplatform/alchemy-web3), [Web3.js](https://docs.web3js.org/) paketleyicisidir. Bir web3 geliştiricisi olarak hayatınızı kolaylaştıracak gelişmiş API yöntemleri ve diğer önemli avantajlar sağlar. Uygulamanızda hemen kullanmaya başlayabilmeniz için minimum yapılandırma gerektirecek şekilde tasarlanmıştır! +[Alchemy Web3](https://github.com/alchemyplatform/alchemy-web3), [Web3.js](https://docs.web3js.org/) için bir sarmalayıcıdır ve bir web3 geliştiricisi olarak hayatınızı kolaylaştırmak için gelişmiş API yöntemleri ve diğer önemli avantajları sağlar. Uygulamanızda hemen kullanmaya başlayabilmeniz için minimum yapılandırma gerektirecek şekilde tasarlanmıştır! Ardından sözleşme ABI'ımızı ve sözleşme adresimizi dosyamıza ekleyelim. @@ -645,72 +645,72 @@ const contractAddress = "0x4C4a07F737Bf57F6632B6CAB089B78f62385aCaE" Her ikisine de sahip olduğumuzda, mint fonksiyonumuzu kodlamaya başlamaya hazırız! -## mintNFT fonksiyonunu uygulayın {#implement-the-mintnft-function} +## `mintNFT` fonksiyonunu uygulayın {#implement-the-mintnft-function} `interact.js` dosyanızın içinde, NFT'mizi aynı adla basacak olan `mintNFT` fonksiyonumuzu tanımlayalım. Çok sayıda eş zamansız çağrı yapacağımız için \(meta verilerimizi IPFS'ye sabitlemek için Pinata'ya, akıllı sözleşmemizi yüklemek için Alchemy Web3'e ve işlemlerimizi imzalamak için MetaMask'e\), fonksiyonumuz da eş zamansız olacaktır. -Fonksiyonumuzun üç girdisi, dijital varlığımızın `url`'si, `name`'i ve `description`'ı olacaktır. `connectWallet` fonksiyonunun altına aşağıdaki fonksiyon imzasını ekleyin: +Fonksiyonumuza üç girdi, dijital varlığımızın `url`'si, `name` ve `description` olacaktır. `connectWallet` fonksiyonunun altına aşağıdaki fonksiyon imzasını ekleyin: ```javascript export const mintNFT = async (url, name, description) => {} ``` -### Girdi hatası işleme {#input-error-handling} +### Giriş hata yönetimi {#input-error-handling} Doğal olarak, girdi parametrelerimiz doğru değilse bu fonksiyondan çıkmak için fonksiyonun başlangıcında bir tür girdi hatası işlemeye sahip olmak mantıklıdır. Fonksiyonumuzun içine aşağıdaki kodu ekleyelim: ```javascript export const mintNFT = async (url, name, description) => { - //error handling + //hata yönetimi if (url.trim() == "" || name.trim() == "" || description.trim() == "") { return { success: false, - status: "❗Please make sure all fields are completed before minting.", + status: "❗Lütfen basım yapmadan önce tüm alanların doldurulduğundan emin olun.", } } } ``` -Girdi parametrelerinden herhangi biri boş bir dizeyse, o zaman `success` boolean'ın false olduğu bir JSON nesnesi döndürürüz ve `status` dizesi, Kullanıcı Arayüzündeki tüm alanların eksiksiz olması gerektiğini aktarır. +Esasen, girdi parametrelerinden herhangi biri boş bir dizeyse, `success` boole değerinin `false` olduğu bir JSON nesnesi döndürürüz ve `status` dizesi, kullanıcı arayüzümüzdeki tüm alanların doldurulması gerektiğini belirtir. -### Meta verileri IPFS'ye yükleyin {#upload-metadata-to-ipfs} +### Meta verileri IPFS'e yükleyin {#upload-metadata-to-ipfs} Meta verilerimizin doğru şekilde biçimlendirildiğini öğrendikten sonraki adım, onu bir JSON nesnesi olarak paketlemek ve yazdığımız `pinJSONToIPFS` aracılığıyla IPFS'ye yüklemektir! -Bunu yapmak için önce `pinJSONToIPFS` fonksiyonunu `interact.js` dosyamıza aktarmamız gerekiyor. `interact.js` dosyasının en üstüne şunu ekleyelim: +Bunu yapmak için önce `pinJSONToIPFS` fonksiyonunu `interact.js` dosyamıza aktarmamız gerekiyor. `interact.js`'nin en üstüne şunu ekleyelim: ```javascript import { pinJSONToIPFS } from "./pinata.js" ``` -`pinJSONToIPFS` öğesinin bir JSON gövdesi aldığını hatırlayın. Bu nedenle onu çağırmadan önce `url`, `name` ve `description` parametrelerimizi bir JSON nesnesi olarak biçimlendirmemiz gerekecek. +`pinJSONToIPFS`'in bir JSON gövdesi aldığını hatırlayın. Bu nedenle onu çağırmadan önce `url`, `name` ve `description` parametrelerimizi bir JSON nesnesi olarak biçimlendirmemiz gerekecek. -`metadata` adında bir JSON nesnesi oluşturmak için kodumuzu güncelleyelim ve ardından bu `metadata` parametresiyle `pinJSONToIPFS`'a bir çağrı yapalım: +Şimdi `metadata` adında bir JSON nesnesi oluşturmak için kodumuzu güncelleyelim ve ardından bu `metadata` parametresiyle `pinJSONToIPFS`'a bir çağrı yapalım: ```javascript export const mintNFT = async (url, name, description) => { - //error handling + //hata yönetimi if (url.trim() == "" || name.trim() == "" || description.trim() == "") { return { success: false, - status: "❗Please make sure all fields are completed before minting.", + status: "❗Lütfen basım yapmadan önce tüm alanların doldurulduğundan emin olun.", } } - //make metadata + //meta veri oluştur const metadata = new Object() metadata.name = name metadata.image = url metadata.description = description - //make pinata call + //pinata çağrısı yap const pinataResponse = await pinJSONToIPFS(metadata) if (!pinataResponse.success) { return { success: false, - status: "😢 Something went wrong while uploading your tokenURI.", + status: "😢 tokenURI'niz yüklenirken bir şeyler ters gitti.", } } const tokenURI = pinataResponse.pinataUrl @@ -719,7 +719,7 @@ export const mintNFT = async (url, name, description) => { Dikkat edin, `pinJSONToIPFS(metadata)` çağrımızın yanıtını `pinataResponse` nesnesinde saklıyoruz. Ardından, bu nesneyi herhangi bir hata için ayrıştırırız. -Bir hata varsa, `success` boolean'ın false olduğu bir JSON nesnesi döndürürüz ve `status` dizemiz çağrımızın başarısız olduğunu aktarır. Aksi takdirde, `pinataURL`'u `pinataResponse`'tan çıkarırız ve onu `tokenURI` değişkenimiz olarak saklarız. +Bir hata varsa, `success` boole değerinin `false` olduğu bir JSON nesnesi döndürürüz ve `status` dizemiz çağrımızın başarısız olduğunu belirtir. Aksi takdirde, `pinataURL`'u `pinataResponse`'tan çıkarır ve onu `tokenURI` değişkenimiz olarak saklarız. Şimdi dosyamızın başında başlattığımız Alchemy Web3 API'sini kullanarak akıllı sözleşmemizi yükleme zamanı. Sözleşmeyi `window.contract` global değişkeninde ayarlamak için `mintNFT` fonksiyonunun altına aşağıdaki kod satırını ekleyin: @@ -730,16 +730,16 @@ window.contract = await new web3.eth.Contract(contractABI, contractAddress) `mintNFT` fonksiyonumuza eklenecek son şey Ethereum işlemimizdir: ```javascript -//set up your Ethereum transaction +//Ethereum işleminizi ayarlayın const transactionParameters = { - to: contractAddress, // Required except during contract publications. - from: window.ethereum.selectedAddress, // must match user's active address. + to: contractAddress, // Sözleşme yayınları dışında gereklidir. + from: window.ethereum.selectedAddress, // kullanıcının aktif adresiyle eşleşmelidir. data: window.contract.methods .mintNFT(window.ethereum.selectedAddress, tokenURI) - .encodeABI(), //make call to NFT smart contract + .encodeABI(), //NFT akıllı sözleşmesine çağrı yapın } -//sign the transaction via MetaMask +//işlemi MetaMask aracılığıyla imzalayın try { const txHash = await window.ethereum.request({ method: "eth_sendTransaction", @@ -748,13 +748,13 @@ try { return { success: true, status: - "✅ Check out your transaction on Etherscan: https://ropsten.etherscan.io/tx/" + + "✅ İşleminizi Etherscan'de kontrol edin: https://ropsten.etherscan.io/tx/" + txHash, } } catch (error) { return { success: false, - status: "😥 Something went wrong: " + error.message, + status: "😥 Bir şeyler ters gitti: " + error.message, } } ``` @@ -762,54 +762,54 @@ try { Ethereum işlemlerine zaten aşinaysanız, yapının gördüklerinize oldukça benzer olduğunu fark edeceksiniz. - İlk olarak işlem parametrelerimizi oluşturuyoruz. - - `to` alıcı adresini belirtir \(akıllı sözleşmemiz\) - - `from`, işlemi imzalayanı belirtir \(kullanıcının MetaMask'a bağlı adresi: `window.ethereum.selectedAddress`\) - - `data`, `tokenURI`'ımızı ve kullanıcının cüzdan adresi olan `window.ethereum.selectedAddress`'i girdi olarak alan akıllı sözleşme `mintNFT` yöntemimize yapılan çağrıyı içerir -- Ardından, MetaMask'ten işlemi imzalamasını istediğimiz `window.ethereum.request` adlı bir bekleme çağrısı yaparız. Dikkat edin, bu istekte eth yöntemimizi \(eth_SentTransaction\) belirtiyoruz ve `transactionParameters`'ımızı aktarıyoruz. Bu noktada, MetaMask tarayıcıda açılır ve kullanıcıdan işlemi imzalamasını veya reddetmesini ister. - - İşlem başarılı olursa fonksiyon, `success` boolean'ının true olarak ayarlandığı bir JSON nesnesi döndürür ve `status` dizesi kullanıcıdan işlemleri hakkında daha fazla bilgi için Etherscan'i kontrol etmesini ister. - - İşlem başarısız olursa fonksiyon, `success` boolean'ının false olarak ayarlandığı bir JSON nesnesi döndürür ve `status` dizesi hata mesajını aktarır. + - `to` alıcı adresini belirtir (akıllı sözleşmemiz) + - `from`, işlemi imzalayanı belirtir (kullanıcının MetaMask'a bağlı adresi: `window.ethereum.selectedAddress`) + - `data`, girdi olarak `tokenURI`'ımızı ve kullanıcının cüzdan adresi olan `window.ethereum.selectedAddress`'ı alan akıllı sözleşme `mintNFT` yöntemimize yapılan çağrıyı içerir +- Ardından, MetaMask'ten işlemi imzalamasını istediğimiz bir `window.ethereum.request` bekleme çağrısı yaparız. Dikkat edin, bu istekte eth yöntemimizi (`eth_SentTransaction`) belirtiyor ve `transactionParameters`'ımızı aktarıyoruz. Bu noktada, MetaMask tarayıcıda açılır ve kullanıcıdan işlemi imzalamasını veya reddetmesini ister. + - İşlem başarılı olursa fonksiyon, `success` boole değerinin `true` olarak ayarlandığı bir JSON nesnesi döndürür ve `status` dizesi kullanıcıdan işlemleri hakkında daha fazla bilgi için Etherscan'i kontrol etmesini ister. + - İşlem başarısız olursa fonksiyon, `success` boole değerinin `false` olarak ayarlandığı bir JSON nesnesi döndürür ve `status` dizesi hata mesajını aktarır. -Toplamda, `mintNFT` fonksiyonumuz şöyle görünmelidir: +Sonuç olarak, `mintNFT` fonksiyonumuz şöyle görünmelidir: ```javascript export const mintNFT = async (url, name, description) => { - //error handling + //hata yönetimi if (url.trim() == "" || name.trim() == "" || description.trim() == "") { return { success: false, - status: "❗Please make sure all fields are completed before minting.", + status: "❗Lütfen basım yapmadan önce tüm alanların doldurulduğundan emin olun.", } } - //make metadata + //meta veri oluştur const metadata = new Object() metadata.name = name metadata.image = url metadata.description = description - //pinata pin request + //pinata pin isteği const pinataResponse = await pinJSONToIPFS(metadata) if (!pinataResponse.success) { return { success: false, - status: "😢 Something went wrong while uploading your tokenURI.", + status: "😢 tokenURI'niz yüklenirken bir şeyler ters gitti.", } } const tokenURI = pinataResponse.pinataUrl - //load smart contract + //akıllı sözleşmeyi yükle window.contract = await new web3.eth.Contract(contractABI, contractAddress) //loadContract(); - //set up your Ethereum transaction + //Ethereum işleminizi ayarlayın const transactionParameters = { - to: contractAddress, // Required except during contract publications. - from: window.ethereum.selectedAddress, // must match user's active address. + to: contractAddress, // Sözleşme yayınları dışında gereklidir. + from: window.ethereum.selectedAddress, // kullanıcının aktif adresiyle eşleşmelidir. data: window.contract.methods .mintNFT(window.ethereum.selectedAddress, tokenURI) - .encodeABI(), //make call to NFT smart contract + .encodeABI(), //NFT akıllı sözleşmesine çağrı yapın } - //sign transaction via MetaMask + //işlemi MetaMask aracılığıyla imzala try { const txHash = await window.ethereum.request({ method: "eth_sendTransaction", @@ -818,21 +818,21 @@ export const mintNFT = async (url, name, description) => { return { success: true, status: - "✅ Check out your transaction on Etherscan: https://ropsten.etherscan.io/tx/" + + "✅ İşleminizi Etherscan'de kontrol edin: https://ropsten.etherscan.io/tx/" + txHash, } } catch (error) { return { success: false, - status: "😥 Something went wrong: " + error.message, + status: "😥 Bir şeyler ters gitti: " + error.message, } } } ``` -Bu dev bir fonksiyon! Şimdi, `mintNFT` fonksiyonumuzu `Minter.js` bileşenimize bağlamamız gerekiyor... +Bu dev bir fonksiyon! Şimdi, sadece `mintNFT` fonksiyonumuzu `Minter.js` bileşenimize bağlamamız gerekiyor... -## MintNFT'yi Minter.js ön ucumuza bağlayın {#connect-our-frontend} +## `mintNFT`'yi `Minter.js` ön ucumuza bağlayın {#connect-our-frontend} `Minter.js` dosyanızı açın ve en üstteki `import { connectWallet, getCurrentWalletConnected } from "./utils/interact.js";` satırını şu şekilde güncelleyin: @@ -844,7 +844,7 @@ import { } from "./utils/interact.js" ``` -Son olarak, içe aktarılan `mintNFT` fonksiyonunuza bekleme çağrısı yapmak için `onMintPressed` fonksiyonunu uygulayın ve işlemimizin başarılı mı yoksa başarısız mı olduğunu yansıtmak için `status` durum değişkenini güncelleyin: +Son olarak, içe aktarılan `mintNFT`fonksiyonunuza bekleme çağrısı yapmak için `onMintPressed` fonksiyonunu uygulayın ve işlemimizin başarılı mı yoksa başarısız mı olduğunu yansıtmak için `status` durum değişkenini güncelleyin: ```javascript const onMintPressed = async () => { @@ -855,11 +855,11 @@ const onMintPressed = async () => { ## NFT'nizi yayındaki bir web sitesinde yayınlayın {#deploy-your-NFT} -Kullanıcıların etkileşim kurması için projenizi yayınlamaya hazır mısınız? Minter'ınızı canlı bir web sitesine dağıtmak için [bu öğreticiye](https://docs.alchemy.com/alchemy/tutorials/nft-minter/how-do-i-deploy-nfts-online) göz atın. +Kullanıcıların etkileşim kurması için projenizi yayınlamaya hazır mısınız? Minter'ınızı canlı bir web sitesinde dağıtmak için [bu öğreticiye](https://docs.alchemy.com/alchemy/tutorials/nft-minter/how-do-i-deploy-nfts-online) göz atın. Son bir adım... -## Blok zinciri dünyasını kasıp kavurun {#take-the-blockchain-world-by-storm} +## Blokzincir dünyasını kasıp kavurun {#take-the-blockchain-world-by-storm} Şaka yapıyorum, öğreticiyi tamamladınız! @@ -869,6 +869,6 @@ Son bir adım... - Ön ucunuzdan akıllı sözleşme yöntemlerini arama - MetaMask kullanarak işlemleri imzalama -Muhtemelen, cüzdanınızda merkeziyetsiz uygulamanız aracılığıyla basılan NFT'leri gösterebilmek istersiniz. Bu nedenle [NFT'nizi Cüzdanınızda Görüntüleme](https://docs.alchemyapi.io/alchemy/tutorials/how-to-write-and-deploy-a-nft-smart-contract/how-to-view-your-nft-in-your-wallet) adlı hızlı öğreticimize göz atmayı unutmayın! +Muhtemelen, merkeziyetsiz uygulamanız aracılığıyla basılan NFT'leri cüzdanınızda sergilemek istersiniz — bu yüzden hızlı öğreticimiz olan [NFT'nizi Cüzdanınızda Nasıl Görüntülersiniz](https://www.alchemy.com/docs/how-to-view-your-nft-in-your-mobile-wallet) başlıklı yazımıza göz atmayı unutmayın! Ve her zaman olduğu gibi, herhangi bir sorunuz olursa [Alchemy Discord](https://discord.gg/gWuC7zB)'da size yardım etmeye hazırız. Bu öğreticideki kavramları gelecekteki projelerinize nasıl uygulayacağınızı görmek için sabırsızlanıyoruz! diff --git a/public/content/translations/tr/developers/tutorials/optimism-std-bridge-annotated-code/index.md b/public/content/translations/tr/developers/tutorials/optimism-std-bridge-annotated-code/index.md index 9fb38aa2b01..3eaa5bb1406 100644 --- a/public/content/translations/tr/developers/tutorials/optimism-std-bridge-annotated-code/index.md +++ b/public/content/translations/tr/developers/tutorials/optimism-std-bridge-annotated-code/index.md @@ -1,21 +1,24 @@ --- title: "Optimism standart köprü sözleşmesine genel bakış" -description: Optimism için standart köprü nasıl çalışır? Neden bu şekilde çalışıyor? +description: "Optimism için standart köprü nasıl çalışır? Neden bu şekilde çalışıyor?" author: Ori Pomerantz -tags: - - "solidity" - - "köprü" - - "katman 2" -skill: advanced +tags: [ "solidity", "köprü", "katman 2" ] +skill: intermediate published: 2022-03-30 lang: tr --- -[Optimism](https://www.optimism.io/), bir [İyimser Toplamadır](/developers/docs/scaling/optimistic-rollups/). İyimser toplamalar, işlemleri Ethereum Mainnet'ten (katman 1 veya K1 olarak da bilinir) çok daha düşük bir fiyata işleyebilir çünkü işlemler ağdaki her düğüm yerine yalnızca birkaç düğüm tarafından işlenir. Aynı zamanda, verilerin tümü K1'e yazılır, böylece her şey kanıtlanabilir ve Mainnet'in tüm bütünlük ve kullanılabilirlik garantileriyle yeniden yapılandırılabilir. +[Optimism](https://www.optimism.io/) bir [İyimser Toplama](/developers/docs/scaling/optimistic-rollups/) türüdür. +İyimser toplamalar, işlemler ağdaki her düğüm yerine yalnızca birkaç düğüm tarafından işlendiği için Ethereum Ana Ağı'ndan (katman 1 veya K1 olarak da bilinir) çok daha düşük bir fiyata işlem yapabilir. +Aynı zamanda, verilerin tümü K1'e yazılır, böylece her şey Ana Ağ'ın tüm bütünlük ve kullanılabilirlik garantileriyle kanıtlanabilir ve yeniden yapılandırılabilir. -Optimism'de (veya başka herhangi bir K2'de) K1 varlıklarını kullanmak için varlıkların [köprülenmesi](/bridges/#prerequisites) gerekir. Kullanıcıların varlıkları (ETH ve [ERC-20 token'ları](/developers/docs/standards/tokens/erc-20/) en yaygın olanlardır) L1'de kilitlemesi ve L2'de eş değer varlıklar alması bunu başarmanın yollarından biridir. Nihayetinde bu varlıkları alan kişiler bunları tekrar K1'e köprülemek isteyebilir. Bunu yaparken, varlıklar K2'de yakılır ve ardından K1'de kullanıcıya geri verilir. +Optimism'de (veya başka herhangi bir K2'de) K1 varlıklarını kullanmak için varlıkların [köprülenmesi](/bridges/#prerequisites) gerekir. +Bunu başarmanın yollarından biri, kullanıcıların K1'de varlıkları (en yaygın olanları ETH ve [ERC-20 token'larıdır](/developers/docs/standards/tokens/erc-20/)) kilitlemesi ve K2'de kullanmak üzere eşdeğer varlıklar almasıdır. +Nihayetinde, bu varlıkları elinde bulunduranlar onları K1'e geri köprülemek isteyebilir. +Bunu yaparken, varlıklar K2'de yakılır ve ardından K1'de kullanıcıya geri verilir. -[Optimism standart köprüsü](https://docs.optimism.io/app-developers/bridging/standard-bridge) bu şekilde çalışır. Bu makalede, nasıl çalıştığını görmek için bu köprünün kaynak kodunu gözden geçireceğiz ve onu iyi yazılmış bir Solidity kodu örneği olarak inceleyeceğiz. +[Optimism standart köprüsü](https://docs.optimism.io/app-developers/bridging/standard-bridge) bu şekilde çalışır. +Bu makalede, nasıl çalıştığını görmek için söz konusu köprünün kaynak kodunu gözden geçirecek ve onu, iyi yazılmış bir Solidity kodu örneği olarak inceleyeceğiz. ## Kontrol akışları {#control-flows} @@ -28,57 +31,59 @@ Köprünün iki ana akışı vardır: #### Katman 1 {#deposit-flow-layer-1} -1. Bir ERC-20 yatırılıyorsa, yatırımcı köprüye yatırılan tutarı harcaması için bir ödenek verir -2. Yatıran, K1 köprüsünü (`depositERC20`, `depositERC20To`, `depositETH` veya `depositETHTo`) çağırır -3. K1 köprüsü, köprülenen varlığın sahibi olur - - ETH: Varlık, çağrının bir parçası olarak yatıran tarafından aktarılır - - ERC-20: Varlık, yatıran tarafından sağlanan ödenek kullanılarak köprü tarafından kendisine devredilir -4. K1 köprüsü, K2 köprüsünde `finalizeDeposit`'i çağırmak için etki alanları arası mesaj mekanizmasını kullanır +1. Bir ERC-20 yatırılırken, yatıran kişi köprüye yatırılan tutarı harcaması için bir izin verir. +2. Yatıran kişi K1 köprüsünü çağırır (`depositERC20`, `depositERC20To`, `depositETH` veya `depositETHTo`) +3. K1 köprüsü köprülenen varlığın mülkiyetini alır. + - ETH: Varlık, çağrının bir parçası olarak yatıran kişi tarafından aktarılır. + - ERC-20: Varlık, yatıran kişi tarafından sağlanan izni kullanarak köprü tarafından kendisine aktarılır. +4. K1 köprüsü, K2 köprüsünde `finalizeDeposit` fonksiyonunu çağırmak için alanlar arası mesaj mekanizmasını kullanır. #### Katman 2 {#deposit-flow-layer-2} -5. Katman 2 köprüsü, `finalizeDeposit` çağrısının meşru olduğunu doğrular: - - Etki alanları arası mesaj sözleşmesinden geldi - - Aslen K1'deki köprüdendi +5. K2 köprüsü, `finalizeDeposit` çağrısının meşru olduğunu doğrular: + - Alanlar arası mesaj sözleşmesinden gelmiştir + - Aslen K1'deki köprüden gelmiştir 6. K2 köprüsü, K2 üzerindeki ERC-20 token sözleşmesinin doğru olup olmadığını kontrol eder: - - K2 sözleşmesi, K1 karşılığının, token'ların K1'den geldiği ile aynı olduğunu bildiriyor - - K2 sözleşmesi, doğru arayüzü ([ERC-165 kullanarak](https://eips.ethereum.org/EIPS/eip-165)) desteklediğini bildirir. -7. K2 sözleşmesi doğruysa, uygun adrese uygun sayıda token basması için onu çağırın. Değilse, kullanıcının K1'deki token'ları talep etmesine izin vermek için bir para çekme işlemi başlatın. + - K2 sözleşmesi, K1'deki karşılığının, token'ların K1'den geldiği sözleşmeyle aynı olduğunu bildirir. + - K2 sözleşmesi, doğru arayüzü desteklediğini bildirir ([ERC-165](https://eips.ethereum.org/EIPS/eip-165) kullanarak). +7. K2 sözleşmesi doğruysa, uygun adrese uygun sayıda token basması için bu sözleşme çağrılır. Değilse, kullanıcının K1'deki token'ları talep etmesine olanak tanıyan bir çekme işlemi başlatılır. ### Çekme akışı {#withdrawal-flow} #### Katman 2 {#withdrawal-flow-layer-2} -1. Çeken kişi K2 köprüsünü çağırır (`draw` veya `withdrawTo`) -2. K2 köprüsü, `msg.sender`'a ait uygun sayıda token'ı yakar -3. K2 köprüsü, K1 köprüsünde `finalizeETHWithdrawal` veya `finalizeERC20Withdrawal`'ı çağırmak için etki alanları arası mesaj mekanizmasını kullanır +1. Çekme işlemini yapan kişi K2 köprüsünü çağırır (`withdraw` veya `withdrawTo`) +2. K2 köprüsü, `msg.sender`'a ait uygun sayıda token'ı yakar. +3. K2 köprüsü, K1 köprüsünde `finalizeETHWithdrawal` veya `finalizeERC20Withdrawal` fonksiyonlarını çağırmak için alanlar arası mesaj mekanizmasını kullanır. #### Katman 1 {#withdrawal-flow-layer-1} 4. K1 köprüsü, `finalizeETHWithdrawal` veya `finalizeERC20Withdrawal` çağrısının meşru olduğunu doğrular: - - Etki alanları arası mesaj mekanizmasından geldi - - Aslen K2'deki köprüdendi -5. K1 köprüsü, uygun varlığı (ETH veya ERC-20) uygun adrese aktarır + - Alanlar arası mesaj mekanizmasından gelmiştir + - Aslen K2'deki köprüden gelmiştir +5. K1 köprüsü, uygun varlığı (ETH veya ERC-20) uygun adrese aktarır. ## Katman 1 kodu {#layer-1-code} -Bu, Ethereum Mainnet K1 üzerinde çalışan koddur. +Bu, K1'de, yani Ethereum Ana Ağı'nda çalışan koddur. ### IL1ERC20Bridge {#IL1ERC20Bridge} -[Bu arayüz burada tanımlanmıştır](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/L1/messaging/IL1ERC20Bridge.sol). ERC-20 token'larını köprülemek için gereken fonksiyonları ve tanımları içerir. +[Bu arayüz burada tanımlanmıştır](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/L1/messaging/IL1ERC20Bridge.sol). +ERC-20 token'larını köprülemek için gereken fonksiyonları ve tanımları içerir. ```solidity // SPDX-License-Identifier: MIT ``` -[Optimism'in kodunun çoğu MIT lisansı altında yayınlandı](https://help.optimism.io/hc/en-us/articles/4411908707995-What-software-license-does-Optimism-use-). +[Optimism'in kodlarının çoğu MIT lisansı altında yayınlanmıştır](https://help.optimism.io/hc/en-us/articles/4411908707995-What-software-license-does-Optimism-use-). ```solidity pragma solidity >0.5.0 <0.9.0; ``` -Yazım sırasında Solidity'nin en son sürümü 0.8.12'dir. Sürüm 0.9.0 yayınlanana kadar, bu kodun onunla uyumlu olup olmadığını bilemeyiz. +Bu yazı yazıldığı sırada Solidity'nin en son sürümü 0.8.12'dir. +Sürüm 0.9.0 yayınlanana kadar bu kodun onunla uyumlu olup olmadığını bilemeyiz. ```solidity /** @@ -86,20 +91,23 @@ Yazım sırasında Solidity'nin en son sürümü 0.8.12'dir. Sürüm 0.9.0 yayı */ interface IL1ERC20Bridge { /********** - * Events * + * Olaylar * **********/ event ERC20DepositInitiated( ``` -Optimism köprü terminolojisinde _yatırmak_, K1'den K2'ye transfer anlamına, _çekmek_ K2'den K1'e transfer anlamına gelir. +Optimism köprü terminolojisinde _yatırma_ işlemi K1'den K2'ye transfer, _çekme_ işlemi ise K2'den K1'e transfer anlamına gelir. ```solidity address indexed _l1Token, address indexed _l2Token, ``` -Çoğu durumda K1 üzerindeki bir ERC-20 adresi aynı ERC-20'nin K2'deki adresinin aynısı değildir. [Burada token adreslerinin bir listesini görebilirsiniz](https://static.optimism.io/optimism.tokenlist.json). `chainId`'si 1 olan adres K1'de (Mainnet) ve `chainId`'si 10 olan ise K2'de (Optimism). Diğer iki `chainId` değerleri ise Kovan test ağı (42) ve Optimistic Kovan test ağı içindir (69). +Çoğu durumda bir ERC-20'nin K1'deki adresi, K2'deki eşdeğer ERC-20'nin adresiyle aynı değildir. +[Token adreslerinin listesini buradan görebilirsiniz](https://static.optimism.io/optimism.tokenlist.json). +`chainId`'si 1 olan adres K1'de (Ana Ağ), `chainId`'si 10 olan adres ise K2'dedir (Optimism). +Diğer iki `chainId` değeri Kovan test ağı (42) ve Optimistic Kovan test ağı (69) içindir. ```solidity address indexed _from, @@ -109,7 +117,7 @@ Optimism köprü terminolojisinde _yatırmak_, K1'den K2'ye transfer anlamına, ); ``` -Transferlere notlar eklemek mümkündür, bu durumda notlar onları rapor eden olaylara eklenirler. +Transferlere not eklemek mümkündür, bu durumda bu notlar onları bildiren olaylara eklenir. ```solidity event ERC20WithdrawalFinalized( @@ -122,33 +130,35 @@ Transferlere notlar eklemek mümkündür, bu durumda notlar onları rapor eden o ); ``` -Aynı köprü sözleşmesi her yönde transferleri idare eder. K1 köprüsünün durumunda ise bu, yatırımların başlatımı ve çekimlerin sonlandırılması anlamına gelir. +Aynı köprü sözleşmesi her iki yöndeki transferleri de yönetir. +K1 köprüsü söz konusu olduğunda bu, yatırma işlemlerinin başlatılması ve çekme işlemlerinin sonlandırılması anlamına gelir. ```solidity /******************** - * Public Functions * + * Herkese Açık Fonksiyonlar * ********************/ /** - * @dev get the address of the corresponding L2 bridge contract. - * @return Address of the corresponding L2 bridge contract. + * @dev ilgili K2 köprü sözleşmesinin adresini alır. + * @return İlgili K2 köprü sözleşmesinin adresi. */ function l2TokenBridge() external returns (address); ``` -Bu fonksiyona pek gerek duyulmaz, çünkü K2 üzerinde önden dağıtılmış bir sözleşmedir, yani her zaman `0x4200000000000000000000000000000000000010` adresindedir. Burada K2 köprüsüyle simetri için bulunur, çünkü K1 köprüsünün adresinin bilinmesi _önemlidir_. +Bu fonksiyona aslında gerek yoktur çünkü K2'de bu, önceden dağıtılmış bir sözleşmedir ve bu nedenle her zaman `0x4200000000000000000000000000000000000010` adresindedir. +K1 köprüsünün adresini bilmek kolay olmadığından, bu fonksiyon K2 köprüsüyle simetri sağlamak için buradadır. ```solidity /** - * @dev deposit an amount of the ERC20 to the caller's balance on L2. - * @param _l1Token Address of the L1 ERC20 we are depositing - * @param _l2Token Address of the L1 respective L2 ERC20 - * @param _amount Amount of the ERC20 to deposit - * @param _l2Gas Gas limit required to complete the deposit on L2. - * @param _data Optional data to forward to L2. This data is provided - * solely as a convenience for external contracts. Aside from enforcing a maximum - * length, these contracts provide no guarantees about its content. + * @dev bir miktar ERC20'yi K2'deki arayanın bakiyesine yatırır. + * @param _l1Token Yatırmakta olduğumuz K1 ERC20'sinin adresi + * @param _l2Token İlgili K2 ERC20'sinin adresi + * @param _amount Yatırılacak ERC20 miktarı + * @param _l2Gas K2'de yatırma işlemini tamamlamak için gereken gaz limiti. + * @param _data K2'ye iletilecek isteğe bağlı veri. Bu veri yalnızca + * harici sözleşmeler için bir kolaylık olarak sağlanır. Maksimum + * uzunluğu zorunlu kılmanın yanı sıra, bu sözleşmeler içeriği hakkında hiçbir garanti vermez. */ function depositERC20( address _l1Token, @@ -159,19 +169,21 @@ Bu fonksiyona pek gerek duyulmaz, çünkü K2 üzerinde önden dağıtılmış b ) external; ``` -`_l2Gas` parametresi işlemin harcamasına izin verilen K2 gaz miktarıdır. [Belirli (yüksek) bir limite kadar bu ücretsizdir](https://community.optimism.io/docs/developers/bridge/messaging/#for-l1-%E2%87%92-l2-transactions-2), yani basım esnasında ERC-20 sözleşmesi gerçekten garip bir şey yapmazsa bu bir sorun olmamalı. Bu fonksiyon, yaygın bir senaryo olan kullanıcının farklı bir blok zincirindeki aynı adrese varlık köprülemesinin üstesinden gelir. +`_l2Gas` parametresi, işlemin harcamasına izin verilen K2 gazı miktarıdır. +[Belirli bir (yüksek) sınıra kadar bu ücretsizdir](https://community.optimism.io/docs/developers/bridge/messaging/#for-l1-%E2%87%92-l2-transactions-2), bu nedenle ERC-20 sözleşmesi basım sırasında gerçekten garip bir şey yapmadığı sürece bu bir sorun olmamalıdır. +Bu fonksiyon, bir kullanıcının varlıkları farklı bir blokzincirdeki aynı adrese köprülediği yaygın senaryoyu ele alır. ```solidity /** - * @dev deposit an amount of ERC20 to a recipient's balance on L2. - * @param _l1Token Address of the L1 ERC20 we are depositing - * @param _l2Token Address of the L1 respective L2 ERC20 - * @param _to L2 address to credit the withdrawal to. - * @param _amount Amount of the ERC20 to deposit. - * @param _l2Gas Gas limit required to complete the deposit on L2. - * @param _data Optional data to forward to L2. This data is provided - * solely as a convenience for external contracts. Aside from enforcing a maximum - * length, these contracts provide no guarantees about its content. + * @dev bir miktar ERC20'yi K2'deki bir alıcının bakiyesine yatırır. + * @param _l1Token Yatırmakta olduğumuz K1 ERC20'sinin adresi + * @param _l2Token İlgili K2 ERC20'sinin adresi + * @param _to Çekme işleminin yatırılacağı K2 adresi. + * @param _amount Yatırılacak ERC20 miktarı. + * @param _l2Gas K2'de yatırma işlemini tamamlamak için gereken gaz limiti. + * @param _data K2'ye iletilecek isteğe bağlı veri. Bu veri yalnızca + * harici sözleşmeler için bir kolaylık olarak sağlanır. Maksimum + * uzunluğu zorunlu kılmanın yanı sıra, bu sözleşmeler içeriği hakkında hiçbir garanti vermez. */ function depositERC20To( address _l1Token, @@ -183,26 +195,26 @@ Bu fonksiyona pek gerek duyulmaz, çünkü K2 üzerinde önden dağıtılmış b ) external; ``` -Bu fonksiyon neredeyse `depositERC20` ile özdeştir, ama farklı bir adrese ERC-20 yollamanıza izin verir. +Bu fonksiyon `depositERC20` ile neredeyse aynıdır, ancak ERC-20'yi farklı bir adrese göndermenize olanak tanır. ```solidity /************************* - * Cross-chain Functions * + * Zincirler Arası Fonksiyonlar * *************************/ /** - * @dev Complete a withdrawal from L2 to L1, and credit funds to the recipient's balance of the - * L1 ERC20 token. - * This call will fail if the initialized withdrawal from L2 has not been finalized. + * @dev K2'den K1'e bir çekme işlemini tamamlar ve fonları alıcının + * K1 ERC20 token bakiyesine yatırır. + * K2'den başlatılan çekme işlemi sonlandırılmamışsa bu çağrı başarısız olur. * - * @param _l1Token Address of L1 token to finalizeWithdrawal for. - * @param _l2Token Address of L2 token where withdrawal was initiated. - * @param _from L2 address initiating the transfer. - * @param _to L1 address to credit the withdrawal to. - * @param _amount Amount of the ERC20 to deposit. - * @param _data Data provided by the sender on L2. This data is provided - * solely as a convenience for external contracts. Aside from enforcing a maximum - * length, these contracts provide no guarantees about its content. + * @param _l1Token finalizeWithdrawal işleminin yapılacağı K1 token'ının adresi. + * @param _l2Token Çekme işleminin başlatıldığı K2 token'ının adresi. + * @param _from Transferi başlatan K2 adresi. + * @param _to Çekme işleminin yatırılacağı K1 adresi. + * @param _amount Yatırılacak ERC20 miktarı. + * @param _data K2'deki gönderici tarafından sağlanan veri. Bu veri + * yalnızca harici sözleşmeler için bir kolaylık olarak sağlanır. Maksimum + * uzunluğu zorunlu kılmanın yanı sıra, bu sözleşmeler içeriği hakkında hiçbir garanti vermez. */ function finalizeERC20Withdrawal( address _l1Token, @@ -215,16 +227,20 @@ Bu fonksiyon neredeyse `depositERC20` ile özdeştir, ama farklı bir adrese ERC } ``` -Optimism'de çekme işlemleri (ve K2'den K1'e diğer tüm mesajlar) iki adımlı bir süreçtir: +Optimism'de çekme işlemleri (ve K2'den K1'e diğer mesajlar) iki adımlı bir süreçtir: -1. K2 üzerinde başlatıcı işlem. -2. K1 üzerinde sonlandırıcı veya talep eden bir işlem. Bu işlemin, biten K2 işlemi için olan [hata meydan okuması süresinden](https://community.optimism.io/docs/how-optimism-works/#fault-proofs) sonra gerçekleşmesi gerekir. +1. K2'de bir başlatma işlemi. +2. K1'de bir sonlandırma veya talep etme işlemi. + Bu işlemin, K2 işlemi için [hata itiraz süresi](https://community.optimism.io/docs/how-optimism-works/#fault-proofs) sona erdikten sonra gerçekleşmesi gerekir. ### IL1StandardBridge {#il1standardbridge} -[Bu arayüz burada tanımlanmıştır](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/L1/messaging/IL1StandardBridge.sol). Bu dosya ETH için olay ve fonksiyon tanımlamalarını içerir. Bu tanımlamalar ERC-20 için yukarıdaki `IL1ERC20Bridge`'de belirlenenlere gayet benzerler. +[Bu arayüz burada tanımlanmıştır](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/L1/messaging/IL1StandardBridge.sol). +Bu dosya, ETH için olay ve fonksiyon tanımlarını içerir. +Bu tanımlar, yukarıda ERC-20 için `IL1ERC20Bridge` içinde tanımlananlara çok benzer. -Bazı ERC-20 token'ları özel işlem gerektirdiği ve standart köprü tarafından idare edilemedikleri için köprü arayüzü iki dosyaya bölünmüştür. Bu yolla bu tarz bir token'ı idare eden özel köprü `IL1ERC20Bridge`'i örnek alabilir ve ETH köprülemek zorunda kalmaz. +Köprü arayüzü iki dosyaya bölünmüştür çünkü bazı ERC-20 token'ları özel işlem gerektirir ve standart köprü tarafından işlenemez. +Bu şekilde, böyle bir token'ı işleyen özel köprü, `IL1ERC20Bridge`'i uygulayabilir ve ayrıca ETH köprülemek zorunda kalmaz. ```solidity // SPDX-License-Identifier: MIT @@ -237,7 +253,7 @@ import "./IL1ERC20Bridge.sol"; */ interface IL1StandardBridge is IL1ERC20Bridge { /********** - * Events * + * Olaylar * **********/ event ETHDepositInitiated( address indexed _from, @@ -247,7 +263,8 @@ interface IL1StandardBridge is IL1ERC20Bridge { ); ``` -Bu olay ERC-20 versiyonunun (`ERC20DepositInitiated`) neredeyse aynısıdır, tek fark K1 ve K2 token adreslerinin olmamasıdır. Aynısı diğer olaylar ve fonksiyonlar için de geçerlidir. +Bu olay, K1 ve K2 token adresleri dışında ERC-20 sürümüyle (`ERC20DepositInitiated`) neredeyse aynıdır. +Aynısı diğer olaylar ve fonksiyonlar için de geçerlidir. ```solidity event ETHWithdrawalFinalized( @@ -257,11 +274,11 @@ Bu olay ERC-20 versiyonunun (`ERC20DepositInitiated`) neredeyse aynısıdır, te ); /******************** - * Public Functions * + * Herkese Açık Fonksiyonlar * ********************/ /** - * @dev Deposit an amount of the ETH to the caller's balance on L2. + * @dev Bir miktar ETH'yi K2'deki çağıranın bakiyesine yatırır. . . . @@ -269,7 +286,7 @@ Bu olay ERC-20 versiyonunun (`ERC20DepositInitiated`) neredeyse aynısıdır, te function depositETH(uint32 _l2Gas, bytes calldata _data) external payable; /** - * @dev Deposit an amount of ETH to a recipient's balance on L2. + * @dev Bir miktar ETH'yi K2'deki bir alıcının bakiyesine yatırır. . . . @@ -281,13 +298,13 @@ Bu olay ERC-20 versiyonunun (`ERC20DepositInitiated`) neredeyse aynısıdır, te ) external payable; /************************* - * Cross-chain Functions * + * Zincirler Arası Fonksiyonlar * *************************/ /** - * @dev Complete a withdrawal from L2 to L1, and credit funds to the recipient's balance of the - * L1 ETH token. Since only the xDomainMessenger can call this function, it will never be called - * before the withdrawal is finalized. + * @dev K2'den K1'e bir çekme işlemini tamamlar ve fonları alıcının + * K1 ETH token bakiyesine yatırır. Bu fonksiyonu yalnızca xDomainMessenger çağırabildiğinden, çekme işlemi + * sonlandırılmadan asla çağrılmaz. . . . @@ -303,83 +320,87 @@ Bu olay ERC-20 versiyonunun (`ERC20DepositInitiated`) neredeyse aynısıdır, te ### CrossDomainEnabled {#crossdomainenabled} -[Bu sözleşme](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/libraries/bridge/CrossDomainEnabled.sol) iki köprü tarafından da ([K1](#the-l1-bridge-contract) ve [K2](#the-l2-bridge-contract)) diğer katmana mesajlar göndermek için kalıtım ile alınmıştır. +[Bu sözleşme](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/libraries/bridge/CrossDomainEnabled.sol), diğer katmana mesaj göndermek için her iki köprü ([K1](#the-l1-bridge-contract) ve [K2](#the-l2-bridge-contract)) tarafından miras alınır. ```solidity // SPDX-License-Identifier: MIT pragma solidity >0.5.0 <0.9.0; -/* Interface Imports */ +/* Arayüz İçe Aktarmaları */ import { ICrossDomainMessenger } from "./ICrossDomainMessenger.sol"; ``` -[Bu arayüz](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/libraries/bridge/ICrossDomainMessenger.sol), sözleşmeye alan adları arası mesajcısını kullanarak nasıl diğer katmana mesaj göndereceğini anlatır. Alan adları arası mesajcısı tamamen başka bir sistemdir ve gelecekte yazmayı umduğum kendine özel bir makaleyi hak ediyor. +[Bu arayüz](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/libraries/bridge/ICrossDomainMessenger.sol), alanlar arası mesajcıyı kullanarak sözleşmeye diğer katmana nasıl mesaj gönderileceğini bildirir. +Bu alanlar arası mesajcı tamamen ayrı bir sistemdir ve gelecekte yazmayı umduğum kendi makalesini hak etmektedir. ```solidity /** * @title CrossDomainEnabled - * @dev Helper contract for contracts performing cross-domain communications + * @dev Alanlar arası iletişim gerçekleştiren sözleşmeler için yardımcı sözleşme * - * Compiler used: defined by inheriting contract + * Kullanılan derleyici: miras alan sözleşme tarafından tanımlanır */ contract CrossDomainEnabled { /************* - * Variables * + * Değişkenler * *************/ - // Diğer etki alanından mesaj göndermek ve almak için kullanılan Messenger sözleşmesi. + // Diğer alandan mesaj göndermek ve almak için kullanılan Mesajcı sözleşmesi. address public messenger; /*************** - * Constructor * + * Yapıcı * ***************/ /** - * @param _messenger Address of the CrossDomainMessenger on the current layer. + * @param _messenger Mevcut katmandaki CrossDomainMessenger'ın adresi. */ constructor(address _messenger) { messenger = _messenger; } ``` -Sözleşmenin bilmesi gereken bir parametre, bu katmandaki alan adları arası mesajcısının adresidir. Bu parametre bir defa yapıcıda belirlenir ve asla değişmez. +Sözleşmenin bilmesi gereken tek parametre, bu katmandaki alanlar arası mesajcının adresidir. +Bu parametre yapılandırıcıda bir kez ayarlanır ve asla değişmez. ```solidity /********************** - * Function Modifiers * + * Fonksiyon Değiştiricileri * **********************/ /** - * Enforces that the modified function is only callable by a specific cross-domain account. - * @param _sourceDomainAccount The only account on the originating domain which is - * authenticated to call this function. + * Değiştirilen fonksiyonun yalnızca belirli bir alanlar arası hesap tarafından çağrılabilir olmasını zorunlu kılar. + * @param _sourceDomainAccount Kaynak alandaki, bu fonksiyonu çağırmak için + * doğrulanmış tek hesap. */ modifier onlyFromCrossDomainAccount(address _sourceDomainAccount) { ``` -Alan adları arası mesajlaşması, çalıştığı blok zincirindeki (ya Ethereum ana ağı ya da Optimism) herhangi bir sözleşmeden erişilebilirdir. Ancak belirli mesajlara _sadece_ öbür taraftaki köprüden gelirse güvenmek için iki tarafta da köprüye ihtiyacımız vardır. +Alanlar arası mesajlaşma, çalıştığı blokzincirdeki (Ethereum Ana Ağı veya Optimism) herhangi bir sözleşme tarafından erişilebilirdir. +Ancak her iki taraftaki köprünün de, belirli mesajlara _yalnızca_ diğer taraftaki köprüden geldiklerinde güvenmesi gerekir. ```solidity require( msg.sender == address(getCrossDomainMessenger()), - "OVM_XCHAIN: messenger contract unauthenticated" + "OVM_XCHAIN: mesajcı sözleşmesi doğrulanmadı" ); ``` -Sadece uygun alan adları arası mesajcısından (`messenger`, aşağıda gördüğünüz üzere) gelen mesajlara güvenilebilir. +Yalnızca uygun alanlar arası mesajcıdan (`messenger`, aşağıda gördüğünüz gibi) gelen mesajlara güvenilebilir. ```solidity require( getCrossDomainMessenger().xDomainMessageSender() == _sourceDomainAccount, - "OVM_XCHAIN: wrong sender of cross-domain message" + "OVM_XCHAIN: alanlar arası mesajın yanlış göndericisi" ); ``` -Alan adları arası mesajcısının diğer katman ile mesaj gönderen adresi sağlama yolu, [`.xDomainMessageSender()` fonksiyonudur](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/L1/messaging/L1CrossDomainMessenger.sol#L122-L128). Mesaj tarafından başlatılan işlemde çağrıldığı sürece bu bilgiyi sağlayabilir. +Alanlar arası mesajcının, diğer katmandan bir mesaj gönderen adresi sağlama şekli, [`.xDomainMessageSender()` fonksiyonudur](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/L1/messaging/L1CrossDomainMessenger.sol#L122-L128). +Mesaj tarafından başlatılan işlemde çağrıldığı sürece bu bilgiyi sağlayabilir. -Aldığımız mesajın öbür köprüden geldiğinden emin olmalıyız. +Aldığımız mesajın diğer köprüden geldiğinden emin olmalıyız. ```solidity @@ -387,29 +408,30 @@ Aldığımız mesajın öbür köprüden geldiğinden emin olmalıyız. } /********************** - * Internal Functions * + * Dahili Fonksiyonlar * **********************/ /** - * Gets the messenger, usually from storage. This function is exposed in case a child contract - * needs to override. - * @return The address of the cross-domain messenger contract which should be used. + * Genellikle depolamadan mesajcıyı alır. Bu fonksiyon, bir alt sözleşmenin + * geçersiz kılması gerekmesi durumunda kullanıma sunulur. + * @return Kullanılması gereken alanlar arası mesajcı sözleşmesinin adresi. */ function getCrossDomainMessenger() internal virtual returns (ICrossDomainMessenger) { return ICrossDomainMessenger(messenger); } ``` -Bu fonksiyon alan adları arası mesajcısını döndürür. Bundan kalıtım ile alan sözleşmelerin, hangi alan adı arası mesajcının kullanılacağını belirtmeleri için bir algoritma kullanmasına izin vermek için `messenger` değişkeni yerine bir fonksiyon kullanıyoruz. +Bu fonksiyon, alanlar arası mesajcıyı döndürür. +Bundan miras alan sözleşmelerin hangi alanlar arası mesajcıyı kullanacağını belirtmek için bir algoritma kullanmasına izin vermek amacıyla `messenger` değişkeni yerine bir fonksiyon kullanırız. ```solidity /** - * Sends a message to an account on another domain - * @param _crossDomainTarget The intended recipient on the destination domain - * @param _message The data to send to the target (usually calldata to a function with - * `onlyFromCrossDomainAccount()`) - * @param _gasLimit The gasLimit for the receipt of the message on the target domain. + * Başka bir alandaki bir hesaba mesaj gönderir + * @param _crossDomainTarget Hedef alandaki amaçlanan alıcı + * @param _message Hedefe gönderilecek veri (genellikle `onlyFromCrossDomainAccount()` içeren bir fonksiyona + * çağrı verisi) + * @param _gasLimit Hedef alandaki mesajın alınması için gaz limiti. */ function sendCrossDomainMessage( address _crossDomainTarget, @@ -417,17 +439,18 @@ Bu fonksiyon alan adları arası mesajcısını döndürür. Bundan kalıtım il bytes memory _message ``` -Son olarak, fonksiyon diğer katmana bir mesaj gönderir. +Son olarak, diğer katmana mesaj gönderen fonksiyon. ```solidity ) internal { // slither-disable-next-line reentrancy-events, reentrancy-benign ``` -[Slither](https://github.com/crytic/slither) Optimism'in güvenlik açığı ve diğer potansiyel problemleri bulmak için her sözleşmede çalıştırdığı bir statik analizcidir. Bu durumda, sıradaki satır iki açığı tetikler: +[Slither](https://github.com/crytic/slither), Optimism'in güvenlik açıklarını ve diğer potansiyel sorunları aramak için her sözleşmede çalıştırdığı bir statik analizördür. +Bu durumda, aşağıdaki satır iki güvenlik açığını tetikler: 1. [Yeniden giriş olayları](https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities-3) -2. [İyi huylu yeniden giriş](https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities-2) +2. [Zararsız yeniden giriş](https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities-2) ```solidity getCrossDomainMessenger().sendMessage(_crossDomainTarget, _message, _gasLimit); @@ -435,7 +458,7 @@ Son olarak, fonksiyon diğer katmana bir mesaj gönderir. } ``` -Bu durumda yeniden giriş hakkında kaygılı değiliz, Slither'ın bunu bilmesi mümkün olmasa bile `getCrossDomainMessenger()` öğesinin güvenilir bir adres döndürdüğünü biliyoruz. +Bu durumda yeniden giriş konusunda endişelenmiyoruz çünkü Slither'ın bunu bilmesinin bir yolu olmasa bile `getCrossDomainMessenger()`'ın güvenilir bir adres döndürdüğünü biliyoruz. ### K1 köprü sözleşmesi {#the-l1-bridge-contract} @@ -446,10 +469,11 @@ Bu durumda yeniden giriş hakkında kaygılı değiliz, Slither'ın bunu bilmesi pragma solidity ^0.8.9; ``` -Arayüzler diğer sözleşmelerin bir parçası olabilirler, yani geniş aralıkta Solidity sürümlerini desteklemeleri gerekir. Ancak köprü bizim sözleşmemizdir, ve hangi Solidity sürümünü kullandığı hakkında katı davranabiliriz. +Arayüzler diğer sözleşmelerin bir parçası olabilir, bu nedenle çok çeşitli Solidity sürümlerini desteklemeleri gerekir. +Ancak köprünün kendisi bizim sözleşmemizdir ve hangi Solidity sürümünü kullandığı konusunda katı olabiliriz. ```solidity -/* Interface Imports */ +/* Arayüz İçe Aktarmaları */ import { IL1StandardBridge } from "./IL1StandardBridge.sol"; import { IL1ERC20Bridge } from "./IL1ERC20Bridge.sol"; ``` @@ -460,16 +484,17 @@ import { IL1ERC20Bridge } from "./IL1ERC20Bridge.sol"; import { IL2ERC20Bridge } from "../../L2/messaging/IL2ERC20Bridge.sol"; ``` -[Bu arayüz](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/L2/messaging/IL2ERC20Bridge.sol) K2 üzerindeki standart köprüyü kontrol etmek için mesajlar oluşturmamızı sağlar. +[Bu arayüz](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/L2/messaging/IL2ERC20Bridge.sol) K2'deki standart köprüyü kontrol etmek için mesajlar oluşturmamızı sağlar. ```solidity import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; ``` -[Bu arayüz](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/IERC20.sol) ERC-20 sözleşmelerini kontrol etmemizi sağlar. [Onun hakkında dahasını burada okuyabilirsiniz](/developers/tutorials/erc20-annotated-code/#the-interface). +[Bu arayüz](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/IERC20.sol) ERC-20 sözleşmelerini kontrol etmemizi sağlar. +[Buradan daha fazlasını okuyabilirsiniz](/developers/tutorials/erc20-annotated-code/#the-interface). ```solidity -/* Library Imports */ +/* Kütüphane İçe Aktarmaları */ import { CrossDomainEnabled } from "../../libraries/bridge/CrossDomainEnabled.sol"; ``` @@ -479,13 +504,13 @@ import { CrossDomainEnabled } from "../../libraries/bridge/CrossDomainEnabled.so import { Lib_PredeployAddresses } from "../../libraries/constants/Lib_PredeployAddresses.sol"; ``` -[`Lib_PredeployAddresses`](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/libraries/constants/Lib_PredeployAddresses.sol) her zaman aynı adrese sahip olan K2 sözleşmelerinin adreslerine sahiptir. Buna K2 üzerindeki standart köprü de dahildir. +[`Lib_PredeployAddresses`](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/libraries/constants/Lib_PredeployAddresses.sol) her zaman aynı adrese sahip olan K2 sözleşmelerinin adreslerini içerir. Buna K2'deki standart köprü de dahildir. ```solidity import { Address } from "@openzeppelin/contracts/utils/Address.sol"; ``` -[OpenZeppelin'in Address yardımcı araçları](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Address.sol). Sözleşme adresleri ve harici olarak sahiplenilmiş hesapların (EOA) ayrımını yapmak için kullanılır. +[OpenZeppelin'in Adres yardımcı programları](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Address.sol). Sözleşme adresleri ile harici olarak sahip olunan hesaplara (EOA) ait olanlar arasında ayrım yapmak için kullanılır. Bunun mükemmel bir çözüm olmadığını unutmayın. Bir sözleşmenin yapıcısı tarafından yapılan çağrılar ve doğrudan çağrıların ayrımını yapmanın bir yolu yoktur ama bu en azından bazı yaygın kullanıcı hatalarını tespit etmemizi ve önlememizi sağlar. @@ -493,31 +518,31 @@ Bunun mükemmel bir çözüm olmadığını unutmayın. Bir sözleşmenin yapıc import { SafeERC20 } from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; ``` -[ERC-20 standardı](https://eips.ethereum.org/EIPS/eip-20) biz sözleşmenin hata bildirmesi için iki yolu destekler: +[ERC-20 standardı](https://eips.ethereum.org/EIPS/eip-20) bir sözleşmenin hata bildirmesi için iki yolu destekler: -1. Geri döndür -2. `false` döndürme +1. Geri Al +2. `false` döndür -Her iki durumu da ele almak kodumuzu daha karmaşık hâle getirecektir, bu nedenle [OpenZeppelin'in `SafeERC20`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/utils/SafeERC20.sol)'sini kullanıyoruz, bu da [tüm hataların bir geri dönüşle sonuçlanmasını](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/utils/SafeERC20.sol#L96) sağlar. +Her iki durumu da ele almak kodumuzu daha karmaşık hale getirirdi, bu yüzden bunun yerine [tüm hataların bir geri almaya neden olmasını sağlayan](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/utils/SafeERC20.sol#L96) [OpenZeppelin'in `SafeERC20`'sini](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/utils/SafeERC20.sol) kullanıyoruz. ```solidity /** * @title L1StandardBridge - * @dev The L1 ETH and ERC20 Bridge is a contract which stores deposited L1 funds and standard - * tokens that are in use on L2. It synchronizes a corresponding L2 Bridge, informing it of deposits - * and listening to it for newly finalized withdrawals. + * @dev L1 ETH ve ERC20 Köprüsü, yatırılan L1 fonlarını ve K2'de kullanımda olan standart + * token'ları saklayan bir sözleşmedir. İlgili bir K2 Köprüsü ile senkronize olur, ona yatırma işlemleri hakkında bilgi verir + * ve yeni sonuçlandırılan çekme işlemleri için onu dinler. * */ contract L1StandardBridge is IL1StandardBridge, CrossDomainEnabled { using SafeERC20 for IERC20; ``` -Bu satır `IERC20` arayüzünü her kullandığımızda `SafeERC20` paketleyicisini kullanmasını belirtme yöntemimizdir. +Bu satır, `IERC20` arayüzünü her kullandığımızda `SafeERC20` sarmalayıcısını kullanmayı nasıl belirlediğimizdir. ```solidity /******************************** - * External Contract References * + * Harici Sözleşme Referansları * ********************************/ address public l2TokenBridge; @@ -527,48 +552,63 @@ Bu satır `IERC20` arayüzünü her kullandığımızda `SafeERC20` paketleyicis ```solidity - // Maps L1 token to L2 token to balance of the L1 token deposited + // K1 token'ını K2 token'ına, yatırılan K1 token bakiyesine eşler mapping(address => mapping(address => uint256)) public deposits; ``` -Bunun gibi bir çift [eşleştirme](https://www.tutorialspoint.com/solidity/solidity_mappings.htm), [iki boyutlu bir seyrek diziyi](https://en.wikipedia.org/wiki/Sparse_matrix) tanımlama şeklinizdir. Bu veri yapısındaki değerler `deposit[L1 token addr][L2 token addr]` olarak tanımlanır. Varsayılan değer sıfırdır. Yalnızca farklı bir değere ayarlanmış hücreler depolamaya yazılır. +Bunun gibi çift [eşleme](https://www.tutorialspoint.com/solidity/solidity_mappings.htm), [iki boyutlu seyrek bir dizi](https://en.wikipedia.org/wiki/Sparse_matrix) tanımlama yöntemidir. +Bu veri yapısındaki değerler `deposit[K1 token adresi][K2 token adresi]` olarak tanımlanır. +Varsayılan değer sıfırdır. +Yalnızca farklı bir değere ayarlanmış hücreler depolamaya yazılır. ```solidity /*************** - * Constructor * + * Yapıcı * ***************/ - // This contract lives behind a proxy, so the constructor parameters will go unused. + // Bu sözleşme bir proxy arkasında bulunur, bu nedenle yapıcı parametreleri kullanılmayacaktır. constructor() CrossDomainEnabled(address(0)) {} ``` -Depodaki tüm değişkenleri kopyalamak zorunda kalmadan bu sözleşmeyi yükseltebilmek istiyoruz. Bunu yapmak için bir [`Proxy`](https://docs.openzeppelin.com/contracts/3.x/api/proxy) kullanıyoruz. Bu, çağrıları adresi proxy sözleşmesi tarafından saklanan ayrı bir kişiye aktarmak için [`delegatecall`](https://solidity-by-example.org/delegatecall/) kullanan bir sözleşmedir (yükselttiğinizde proxy'ye bu adresi değiştirmesini söylersiniz). `delegatecall` kullandığınızda, depolama alanı _çağırma_ sözleşmesinin deposu olarak kalır, bu nedenle tüm sözleşme durumu değişkenlerinin değerleri etkilenmez. +Depolamadaki tüm değişkenleri kopyalamak zorunda kalmadan bu sözleşmeyi yükseltebilmek istiyoruz. +Bunu yapmak için bir [`Proxy`](https://docs.openzeppelin.com/contracts/3.x/api/proxy) kullanıyoruz. Bu, çağrıları adresi proxy sözleşmesi tarafından saklanan ayrı bir sözleşmeye aktarmak için [`delegatecall`](https://solidity-by-example.org/delegatecall/) kullanan bir sözleşmedir (yükselttiğinizde proxy'ye bu adresi değiştirmesini söylersiniz). +`delegatecall` kullandığınızda, depolama alanı çağırma sözleşmesinin deposu olarak kalır, bu nedenle tüm sözleşme durumu değişkenlerinin değerleri etkilenmez. -`delegecall`'un _callee_'si olan sözleşmenin depolamasının kullanılmaması ve bu nedenle ona iletilen oluşturucu değerlerinin önemli olmaması, bu modelin etkilerinden birisidir. `CrossDomainEnabled` yapıcısına anlamsız bir değer sağlayabilmemizin nedeni budur. Aşağıdaki başlatmanın yapıcıdan ayrı olmasının nedeni de budur. +`delegatecall`'un çağrılanı olan sözleşmenin depolamasının kullanılmaması ve bu nedenle ona iletilen yapıcı değerlerinin önemli olmaması, bu modelin etkilerinden biridir. +`CrossDomainEnabled` yapıcısına anlamsız bir değer sağlayabilmemizin nedeni budur. +Aşağıdaki başlatmanın yapıcıdan ayrı olmasının nedeni de budur. ```solidity /****************** - * Initialization * + * Başlatma * ******************/ /** - * @param _l1messenger L1 Messenger address being used for cross-chain communications. - * @param _l2TokenBridge L2 standard bridge address. + * @param _l1messenger Zincirler arası iletişim için kullanılan K1 Mesajcı adresi. + * @param _l2TokenBridge K2 standart köprü adresi. */ // slither-disable-next-line external-function ``` -Bu [Slither testi](https://github.com/crytic/slither/wiki/Detector-Documentation#public-function-that-could-be-declared-external), sözleşme kodundan çağrılır ve bu nedenle `public` yerine `external` olarak bildirilebilir. `external` fonksiyonların kullanım maliyeti, çağrı verilerinde parametrelerle sağlanabildikleri için daha düşük olabilir. `public` olarak tanımlanan fonksiyonlara sözleşme içinden erişilebilir olmalıdır. Sözleşmeler kendi çağrı verilerini değiştiremez, bu nedenle parametrelerin bellekte olması gerekir. Böyle bir fonksiyon harici olarak çağrıldığında, çağrı verilerini belleğe kopyalamak gerekir ve bu da gaz maliyetine neden olur. Bu durumda fonksiyon sadece bir kez çağrılır, bu nedenle verimsizlik bizim için önemli değildir. +Bu [Slither testi](https://github.com/crytic/slither/wiki/Detector-Documentation#public-function-that-could-be-declared-external), sözleşme kodundan çağrılmayan ve bu nedenle `public` yerine `external` olarak bildirilebilecek fonksiyonları tanımlar. +`external` fonksiyonların gaz maliyeti, çağrı verilerinde parametrelerle sağlanabildikleri için daha düşük olabilir. +`public` olarak tanımlanan fonksiyonlara sözleşme içinden erişilebilir olmalıdır. +Sözleşmeler kendi çağrı verilerini değiştiremez, bu nedenle parametrelerin bellekte olması gerekir. +Böyle bir fonksiyon harici olarak çağrıldığında, çağrı verilerini belleğe kopyalamak gerekir ve bu da gaz maliyetine neden olur. +Bu durumda fonksiyon sadece bir kez çağrılır, bu nedenle verimsizlik bizim için önemli değildir. ```solidity function initialize(address _l1messenger, address _l2TokenBridge) public { - require(messenger == address(0), "Contract has already been initialized."); + require(messenger == address(0), "Sözleşme zaten başlatıldı."); ``` -`initialize` fonksiyonu yalnızca bir kez çağrılmalıdır. K1 alan adları arası mesajcısının veya K2 token köprüsünün adresi değişirse, yeni bir proxy ve onu çağıran yeni bir köprü oluştururuz. Bunun, çok nadir gerçekleşen tüm sistemin yükseltilmesi dışında gerçekleşmesi pek olası değildir. +`initialize` fonksiyonu yalnızca bir kez çağrılmalıdır. +K1 alanlar arası mesajcısının veya K2 token köprüsünün adresi değişirse, yeni bir proxy ve onu çağıran yeni bir köprü oluştururuz. +Bunun, çok nadir gerçekleşen tüm sistemin yükseltilmesi dışında gerçekleşmesi pek olası değildir. -Bu fonksiyonun, onu _kimin_ arayabileceğini kısıtlayan herhangi bir mekanizmaya sahip olmadığını unutmayın. Bu, teorik olarak bir saldırganın biz proxy'yi ve köprünün ilk sürümünü dağıtana kadar bekleyebileceği ve ardından meşru kullanıcıdan önce `initialize` fonksiyonuna ulaşmak için [front-run](https://solidity-by-example.org/hacks/front-running/) yapabileceği anlamına gelir. Ancak bunu önlemenin iki yöntemi vardır: +Bu fonksiyonun, onu kimin arayabileceğini kısıtlayan herhangi bir mekanizmaya sahip olmadığını unutmayın. +Bu, teorik olarak bir saldırganın biz proxy'yi ve köprünün ilk sürümünü dağıtana kadar bekleyebileceği ve ardından meşru kullanıcıdan önce `initialize` fonksiyonuna ulaşmak için [front-run](https://solidity-by-example.org/hacks/front-running/) yapabileceği anlamına gelir. Ancak bunu önlemenin iki yöntemi vardır: 1. Sözleşmeler doğrudan bir EOA tarafından değil de [onları oluşturan başka bir sözleşmeye sahip olan bir işlemde](https://medium.com/upstate-interactive/creating-a-contract-with-a-smart-contract-bdb67c5c8595) dağıtılırsa tüm süreç atomik olabilir ve başka herhangi bir işlem yürütülmeden önce tamamlanabilir. 2. Geçerli `initialize` çağrısı başarısız olursa, yeni oluşturulan proxy ve köprüyü yok saymak ve yenilerini oluşturmak her zaman mümkündür. @@ -584,34 +624,35 @@ Bunlar, köprünün bilmesi gereken iki parametredir. ```solidity /************** - * Depositing * + * Yatırma * **************/ - /** @dev Modifier requiring sender to be EOA. This check could be bypassed by a malicious - * contract via initcode, but it takes care of the user error we want to avoid. + /** @dev Göndericinin EOA olmasını gerektiren değiştirici. Bu kontrol, kötü niyetli bir + * sözleşme tarafından initcode aracılığıyla atlatılabilir, ancak kaçınmak istediğimiz kullanıcı hatasını önler. */ modifier onlyEOA() { - // Used to stop deposits from contracts (avoid accidentally lost tokens) - require(!Address.isContract(msg.sender), "Account not EOA"); + // Sözleşmelerden yatırma işlemlerini durdurmak için kullanılır (yanlışlıkla kaybedilen token'ları önlemek için) + require(!Address.isContract(msg.sender), "Hesap EOA değil"); _; } ``` -Bu, OpenZeppelin'in `Address` yardımcı araçlarına ihtiyaç duymamızın nedenidir. +OpenZeppelin'in `Address` yardımcı programlarına ihtiyaç duymamızın nedeni budur. ```solidity /** - * @dev This function can be called with no data - * to deposit an amount of ETH to the caller's balance on L2. - * Since the receive function doesn't take data, a conservative - * default amount is forwarded to L2. + * @dev Bu fonksiyon, bir miktar ETH'yi çağıranın K2'deki bakiyesine + * yatırmak için veri olmadan çağrılabilir. + * Alım fonksiyonu veri almadığından, + * K2'ye muhafazakar bir varsayılan miktar iletilir. */ receive() external payable onlyEOA { _initiateETHDeposit(msg.sender, msg.sender, 200_000, bytes("")); } ``` -Bu fonksiyon test amaçlı mevcuttur. Arayüz tanımlarında görünmediğine dikkat edin: Normal kullanım için değildir. +Bu fonksiyon test amaçlı mevcuttur. +Arayüz tanımlarında görünmediğine dikkat edin: Normal kullanım için değildir. ```solidity /** @@ -633,18 +674,18 @@ Bu fonksiyon test amaçlı mevcuttur. Arayüz tanımlarında görünmediğine di } ``` -Bu iki fonksiyon, gerçek ETH yatırma işlemini yöneten fonksiyon olan `_initiateETHDeposit` etrafındaki paketleyicilerdir. +Bu iki fonksiyon, gerçek ETH yatırma işlemini yöneten fonksiyon olan `_initiateETHDeposit` etrafındaki sarmalayıcılardır. ```solidity /** - * @dev Performs the logic for deposits by storing the ETH and informing the L2 ETH Gateway of - * the deposit. - * @param _from Account to pull the deposit from on L1. - * @param _to Account to give the deposit to on L2. - * @param _l2Gas Gas limit required to complete the deposit on L2. - * @param _data Optional data to forward to L2. This data is provided - * solely as a convenience for external contracts. Aside from enforcing a maximum - * length, these contracts provide no guarantees about its content. + * @dev ETH'yi saklayarak ve K2 ETH Ağ Geçidi'ne yatırma hakkında bilgi vererek + * para yatırma mantığını gerçekleştirir. + * @param _from K1'de para yatırma işleminin çekileceği hesap. + * @param _to K2'de para yatırma işleminin verileceği hesap. + * @param _l2Gas K2'de para yatırma işlemini tamamlamak için gereken gaz limiti. + * @param _data K2'ye iletilecek isteğe bağlı veri. Bu veri yalnızca + * harici sözleşmeler için bir kolaylık olarak sağlanır. Maksimum + * uzunluğu zorunlu kılmanın yanı sıra, bu sözleşmeler içeriği hakkında hiçbir garanti vermez. */ function _initiateETHDeposit( address _from, @@ -652,11 +693,14 @@ Bu iki fonksiyon, gerçek ETH yatırma işlemini yöneten fonksiyon olan `_initi uint32 _l2Gas, bytes memory _data ) internal { - // Construct calldata for finalizeDeposit call + // finalizeDeposit çağrısı için çağrı verisi oluştur bytes memory message = abi.encodeWithSelector( ``` -Etki alanları arası mesajların çalışma şekli, hedef sözleşmenin çağrı verileri olarak mesajla birlikte çağrılmasıdır. Solidity sözleşmeleri, çağrı verilerini her zaman aşağıdaki [ABI özelliklerine](https://docs.soliditylang.org/en/v0.8.12/abi-spec.html) uygun olarak yorumlar. [`abi.encodeWithSelector`](https://docs.soliditylang.org/en/v0.8.12/units-and-global-variables.html#abi-encoding-and-decoding-functions) Solidity fonksiyonu, bu çağrı verilerini oluşturur. +Alanlar arası mesajların çalışma şekli, hedef sözleşmenin çağrı verileri olarak mesajla birlikte çağrılmasıdır. +Solidity sözleşmeleri, çağrı verilerini her zaman +[ABI özelliklerine](https://docs.soliditylang.org/en/v0.8.12/abi-spec.html) uygun olarak yorumlar. +Solidity'nin [`abi.encodeWithSelector`](https://docs.soliditylang.org/en/v0.8.12/units-and-global-variables.html#abi-encoding-and-decoding-functions) fonksiyonu bu çağrı verisini oluşturur. ```solidity IL2ERC20Bridge.finalizeDeposit.selector, @@ -669,24 +713,24 @@ Etki alanları arası mesajların çalışma şekli, hedef sözleşmenin çağr ); ``` -Buradaki mesaj, şu parametrelerle [`finalizeDeposit` fonksiyonunu](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/L2/messaging/L2StandardBridge.sol#L141-L148) çağırmaktır: +Buradaki mesaj, bu parametrelerle [ `finalizeDeposit` fonksiyonunu](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/L2/messaging/L2StandardBridge.sol#L141-L148) çağırmaktır: -| Parametre | Değer | Anlam | -| ----------- | -------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | -| \_l1Token | address(0) | K1'de ETH'yi (ERC-20 token'ı değildir) temsil eden özel değer | +| Parametre | Değer | Anlamı | +| ------------------------------- | ---------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| \_l1Token | address(0) | K1'de ETH'yi (bir ERC-20 token'ı değildir) temsil eden özel değer | | \_l2Token | Lib_PredeployAddresses.OVM_ETH | Optimism'de ETH'yi yöneten K2 sözleşmesi, `0xDeadDeAddeAddEAddeadDEaDDEAdDeaDDeAD0000` (bu sözleşme yalnızca dahili Optimism kullanımı içindir) | -| \_from | \_from | ETH'yi gönderen K1 üzerindeki adres | -| \_to | \_to | ETH'yi alan K2'deki adres | -| amount | msg.value | Gönderilen wei miktarı (zaten köprüye gönderildi) | -| \_data | \_data | Yatırmaya eklenecek ek tarih | +| \_from | \_from | ETH'yi gönderen K1'deki adres | +| \_to | \_to | ETH'yi alan K2'deki adres | +| miktar | msg.value | Gönderilen wei miktarı (zaten köprüye gönderildi) | +| \_data | \_data | Yatırmaya eklenecek ek veri | ```solidity - // Send calldata into L2 + // Çağrı verisini K2'ye gönder // slither-disable-next-line reentrancy-events sendCrossDomainMessage(l2TokenBridge, _l2Gas, message); ``` -Mesajı, alan adları arası mesajcısı ile gönderin. +Mesajı, alanlar arası mesajcısı ile gönderin. ```solidity // slither-disable-next-line reentrancy-events @@ -701,9 +745,9 @@ Bu transferi dinleyen herhangi bir merkeziyetsiz uygulamayı bilgilendirmek içi * @inheritdoc IL1ERC20Bridge */ function depositERC20( - . - . - . + . + . + . ) external virtual onlyEOA { _initiateERC20Deposit(_l1Token, _l2Token, msg.sender, msg.sender, _amount, _l2Gas, _data); } @@ -712,30 +756,30 @@ Bu transferi dinleyen herhangi bir merkeziyetsiz uygulamayı bilgilendirmek içi * @inheritdoc IL1ERC20Bridge */ function depositERC20To( - . - . - . + . + . + . ) external virtual { _initiateERC20Deposit(_l1Token, _l2Token, msg.sender, _to, _amount, _l2Gas, _data); } ``` -Bu iki fonksiyon, gerçek ERC-20 yatırma işlemini yöneten fonksiyon olan `_initiateERC20Deposit` etrafındaki paketleyicilerdir. +Bu iki fonksiyon, gerçek ERC-20 yatırma işlemini yöneten fonksiyon olan `_initiateERC20Deposit` etrafındaki sarmalayıcılardır. ```solidity /** - * @dev Performs the logic for deposits by informing the L2 Deposited Token - * contract of the deposit and calling a handler to lock the L1 funds. (e.g., transferFrom) + * @dev K2 Yatırılan Token'ı bilgilendirerek yatırma mantığını gerçekleştirir + * sözleşmesi ve K1 fonlarını kilitlemek için bir işleyici çağırır. (örneğin, transferFrom) * - * @param _l1Token Address of the L1 ERC20 we are depositing - * @param _l2Token Address of the L1 respective L2 ERC20 - * @param _from Account to pull the deposit from on L1 - * @param _to Account to give the deposit to on L2 - * @param _amount Amount of the ERC20 to deposit. - * @param _l2Gas Gas limit required to complete the deposit on L2. - * @param _data Optional data to forward to L2. This data is provided - * solely as a convenience for external contracts. Aside from enforcing a maximum - * length, these contracts provide no guarantees about its content. + * @param _l1Token Yatırmakta olduğumuz K1 ERC20'sinin adresi + * @param _l2Token İlgili K2 ERC20'sinin adresi + * @param _from K1'de para yatırma işleminin çekileceği hesap. + * @param _to K2'de para yatırma işleminin verileceği hesap. + * @param _amount Yatırılacak ERC20 miktarı. + * @param _l2Gas K2'de yatırma işlemini tamamlamak için gereken gaz limiti. + * @param _data K2'ye iletilecek isteğe bağlı veri. Bu veri yalnızca + * harici sözleşmeler için bir kolaylık olarak sağlanır. Maksimum + * uzunluğu zorunlu kılmanın yanı sıra, bu sözleşmeler içeriği hakkında hiçbir garanti vermez. */ function _initiateERC20Deposit( address _l1Token, @@ -748,12 +792,14 @@ Bu iki fonksiyon, gerçek ERC-20 yatırma işlemini yöneten fonksiyon olan `_in ) internal { ``` -Bu fonksiyon, birkaç önemli farklılık dışında yukarıdaki `_initiateETHDeposit` fonksiyonuna benzer. İlk fark, bu fonksiyonun token adreslerini ve aktarılacak miktarı parametre olarak almasıdır. ETH söz konusu olduğunda köprüye yapılan çağrı, varlığın köprü hesabına (`msg.value`) transferini zaten içerir. +Bu fonksiyon, birkaç önemli farklılık dışında yukarıdaki `_initiateETHDeposit` fonksiyonuna benzer. +İlk fark, bu fonksiyonun token adreslerini ve aktarılacak miktarı parametre olarak almasıdır. +ETH söz konusu olduğunda köprüye yapılan çağrı, varlığın köprü hesabına (`msg.value`) transferini zaten içerir. ```solidity - // When a deposit is initiated on L1, the L1 Bridge transfers the funds to itself for future - // withdrawals. safeTransferFrom also checks if the contract has code, so this will fail if - // _from is an EOA or address(0). + // K1'de bir yatırma başlatıldığında, K1 Köprüsü gelecekteki + // para çekme işlemleri için fonları kendisine aktarır. safeTransferFrom ayrıca sözleşmede kod olup olmadığını + // kontrol eder, bu nedenle _from bir EOA veya address(0) ise bu işlem başarısız olur. // slither-disable-next-line reentrancy-events, reentrancy-benign IERC20(_l1Token).safeTransferFrom(_from, address(this), _amount); ``` @@ -764,10 +810,11 @@ ERC-20 token transferleri, ETH'den farklı bir süreci takip eder: 2. Kullanıcı, token sözleşmesinin adresi, miktarı vb. ile birlikte köprüyü çağırır. 3. Köprü, token'ları yatırma işleminin bir parçası olarak (kendisine) aktarır. -İlk adım, son ikisinden ayrı bir işlemde gerçekleşebilir. Ancak `_initiateERC20Deposit` çağıran iki fonksiyon, (`depositERC20` ve `DepositERC20To`), bu fonksiyonu `_from` parametresi olarak yalnızca `msg.sender` ile çağırdığından, front-running bir sorun olmaz. +İlk adım, son ikisinden ayrı bir işlemde gerçekleşebilir. +Ancak `_initiateERC20Deposit` çağıran iki fonksiyon (`depositERC20` ve `depositERC20To`), bu fonksiyonu `_from` parametresi olarak yalnızca `msg.sender` ile çağırdığından, front-running bir sorun olmaz. ```solidity - // Construct calldata for _l2Token.finalizeDeposit(_to, _amount) + // _l2Token.finalizeDeposit(_to, _amount) için çağrı verisi oluştur bytes memory message = abi.encodeWithSelector( IL2ERC20Bridge.finalizeDeposit.selector, _l1Token, @@ -778,7 +825,7 @@ ERC-20 token transferleri, ETH'den farklı bir süreci takip eder: _data ); - // Send calldata into L2 + // Çağrı verisini K2'ye gönder // slither-disable-next-line reentrancy-events, reentrancy-benign sendCrossDomainMessage(l2TokenBridge, _l2Gas, message); @@ -786,7 +833,8 @@ ERC-20 token transferleri, ETH'den farklı bir süreci takip eder: deposits[_l1Token][_l2Token] = deposits[_l1Token][_l2Token] + _amount; ``` -Yatırılan token miktarını `deposits` veri yapısına ekleyin. K2'de aynı K1 ERC-20 token'ına karşılık gelen birden fazla adres olabilir, bu nedenle yatırma işlemlerini takip etmek için köprünün K1 ERC-20 token bakiyesini kullanmak yeterli değildir. +Yatırılan token miktarını `deposits` veri yapısına ekleyin. +K2'de aynı K1 ERC-20 token'ına karşılık gelen birden fazla adres olabilir, bu nedenle yatırma işlemlerini takip etmek için köprünün K1 ERC-20 token bakiyesini kullanmak yeterli değildir. ```solidity @@ -795,7 +843,7 @@ Yatırılan token miktarını `deposits` veri yapısına ekleyin. K2'de aynı K1 } /************************* - * Cross-chain Functions * + * Zincirler Arası Fonksiyonlar * *************************/ /** @@ -808,13 +856,14 @@ Yatırılan token miktarını `deposits` veri yapısına ekleyin. K2'de aynı K1 bytes calldata _data ``` -K2 köprüsü, K2 alan adları arası mesajcısına, K1 alan adları arası mesajcısının bu fonksiyonu çağırmasına neden olan bir mesaj gönderir (bir kez [mesajı sonlandıran işlem](https://community.optimism.io/docs/developers/bridge/messaging/#fees-for-l2-%E2%87%92-l1-transactions) elbette K1'de gönderilir). +K2 köprüsü, K2 alanlar arası mesajcısına, K1 alanlar arası mesajcısının bu fonksiyonu çağırmasına neden olan bir mesaj gönderir (tabii ki, [mesajı sonlandıran işlem](https://community.optimism.io/docs/developers/bridge/messaging/#fees-for-l2-%E2%87%92-l1-transactions) K1'de gönderildikten sonra). ```solidity ) external onlyFromCrossDomainAccount(l2TokenBridge) { ``` -Bunun _meşru_ bir mesaj olduğundan, alan adları arası mesajcısından gelen ve K2 token köprüsünden kaynaklanan bir mesaj olduğundan emin olun. Bu fonksiyon, ETH'yi köprüden çekmek için kullanılır, bu nedenle yalnızca yetkili arayan tarafından çağrıldığından emin olmalıyız. +Bunun meşru bir mesaj olduğundan, alanlar arası mesajcısından gelen ve K2 token köprüsünden kaynaklanan bir mesaj olduğundan emin olun. +Bu fonksiyon, ETH'yi köprüden çekmek için kullanılır, bu nedenle yalnızca yetkili arayan tarafından çağrıldığından emin olmalıyız. ```solidity // slither-disable-next-line reentrancy-events @@ -824,7 +873,7 @@ Bunun _meşru_ bir mesaj olduğundan, alan adları arası mesajcısından gelen ETH aktarmanın yolu, alıcıyı `msg.value` içindeki wei miktarıyla aramaktır. ```solidity - require(success, "TransferHelper::safeTransferETH: ETH transfer failed"); + require(success, "TransferHelper::safeTransferETH: ETH transferi başarısız"); // slither-disable-next-line reentrancy-events emit ETHWithdrawalFinalized(_from, _to, _amount, _data); @@ -857,8 +906,7 @@ Bu fonksiyon, ERC-20 token'ları için gerekli değişikliklerle birlikte yukar `deposits` veri yapısını güncelleyin. ```solidity - - // When a withdrawal is finalized on L1, the L1 Bridge transfers the funds to the withdrawer + // K1'de bir çekme sonlandırıldığında, K1 Köprüsü fonları çekene aktarır // slither-disable-next-line reentrancy-events IERC20(_l1Token).safeTransfer(_to, _amount); @@ -868,28 +916,35 @@ Bu fonksiyon, ERC-20 token'ları için gerekli değişikliklerle birlikte yukar /***************************** - * Temporary - Migrating ETH * + * Geçici - ETH Taşıma * *****************************/ /** - * @dev Adds ETH balance to the account. This is meant to allow for ETH - * to be migrated from an old gateway to a new gateway. - * NOTE: This is left for one upgrade only so we are able to receive the migrated ETH from the - * old contract + * @dev ETH bakiyesini hesaba ekler. Bu, ETH'nin + * eski bir ağ geçidinden yeni bir ağ geçidine taşınmasına izin vermek içindir. + * NOT: Bu, yalnızca bir yükseltme için bırakılmıştır, böylece taşınan ETH'yi + * eski sözleşmeden alabiliriz */ function donateETH() external payable {} } ``` -Köprünün daha önce bir uygulaması vardı. Uygulamadan buna geçtiğimizde, tüm varlıkları taşımak zorunda kaldık. ERC-20 token'ları sadece taşınabilir. Ancak, ETH'yi bir sözleşmeye aktarmak için o sözleşmenin onayına ihtiyacınız var ve bu da `donateETH`'in bize sağladığı şeydir. +Köprünün daha önce bir uygulaması vardı. +Uygulamadan buna geçtiğimizde, tüm varlıkları taşımak zorunda kaldık. +ERC-20 token'ları sadece taşınabilir. +Ancak, ETH'yi bir sözleşmeye aktarmak için o sözleşmenin onayına ihtiyacınız var ve bu da `donateETH`'in bize sağladığı şeydir. -## K2 üzerinde ERC-20 Token'ları {#erc-20-tokens-on-l2} +## K2'deki ERC-20 Token'ları {#erc-20-tokens-on-l2} -Bir ERC-20 token'ının standart köprüye sığması için standart köprünün, _sadece ama sadece_ standart köprünün token basmasına izin vermesi gerekir. Bu, köprülerin Optimism üzerinde dolaşan token sayısının K1 köprü sözleşmesi içinde kilitli token sayısına eşit olduğundan emin olması gerektiği için gereklidir. K2'de çok fazla token varsa, bazı kullanıcılar varlıklarını K1'e geri köprüleyemez. Güvenilir bir köprü yerine, esasen [kısmi rezerv bankacılığını](https://www.investopedia.com/terms/f/fractionalreservebanking.asp) yeniden yaratmış olurduk. K1'de çok fazla token varsa, bu token'lardan bazıları köprü sözleşmesinin içinde sonsuza kadar kilitli kalır çünkü K2 token'larını yakmadan onları serbest bırakmanın bir yolu yoktur. +Bir ERC-20 token'ının standart köprüye sığması için standart köprünün ve _sadece_ standart köprünün token basmasına izin vermesi gerekir. +Bu, köprülerin Optimism üzerinde dolaşan token sayısının K1 köprü sözleşmesi içinde kilitli token sayısına eşit olduğundan emin olması gerektiği için gereklidir. +K2'de çok fazla token varsa, bazı kullanıcılar varlıklarını K1'e geri köprüleyemez. +Güvenilir bir köprü yerine, esasen [kısmi rezerv bankacılığını](https://www.investopedia.com/terms/f/fractionalreservebanking.asp) yeniden yaratmış olurduk. +K1'de çok fazla token varsa, bu token'lardan bazıları köprü sözleşmesinin içinde sonsuza kadar kilitli kalır çünkü K2 token'larını yakmadan onları serbest bırakmanın bir yolu yoktur. ### IL2StandardERC20 {#il2standarderc20} -Standart köprüyü kullanan K2 üzerindeki her ERC-20 token'ının, standart köprünün ihtiyaç duyduğu fonksiyonlara ve olaylara sahip olan [bu arayüzü](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/standards/IL2StandardERC20.sol) sağlaması gerekir. +Standart köprüyü kullanan K2'deki her ERC-20 token'ı, standart köprünün ihtiyaç duyduğu fonksiyonları ve olayları içeren [bu arayüzü](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/standards/IL2StandardERC20.sol) sağlamalıdır. ```solidity // SPDX-License-Identifier: MIT @@ -898,20 +953,24 @@ pragma solidity ^0.8.9; import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; ``` -[Standart ERC-20 arayüzü](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/IERC20.sol), `mint` ve `burn` fonksiyonlarını içermez. Bu yöntemler, token'ları oluşturma ve yok etme mekanizmalarını belirsiz bırakan [ERC-20 standardı](https://eips.ethereum.org/EIPS/eip-20) için gerekli değildir. +[Standart ERC-20 arayüzü](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/IERC20.sol), `mint` ve `burn` fonksiyonlarını içermez. +Bu yöntemler, token'ları oluşturma ve yok etme mekanizmalarını belirsiz bırakan [ERC-20 standardı](https://eips.ethereum.org/EIPS/eip-20) için gerekli değildir. ```solidity import { IERC165 } from "@openzeppelin/contracts/utils/introspection/IERC165.sol"; ``` -[ERC-165 arayüzü](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/IERC165.sol), bir sözleşmenin hangi fonksiyonları sağladığını belirtmek için kullanılır. [Standardı buradan okuyabilirsiniz](https://eips.ethereum.org/EIPS/eip-165). +[ERC-165 arayüzü](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/IERC165.sol) bir sözleşmenin hangi fonksiyonları sağladığını belirtmek için kullanılır. +[Standardı buradan okuyabilirsiniz](https://eips.ethereum.org/EIPS/eip-165). ```solidity interface IL2StandardERC20 is IERC20, IERC165 { function l1Token() external returns (address); ``` -Bu fonksiyon, bu sözleşmeye köprülenen K1 token'ının adresini sağlar. Ters yönde benzer bir fonksiyonumuz olmadığını unutmayın. Uygulandığında K2 desteğinin planlanıp planlanmadığına bakılmaksızın herhangi bir K1 token'ını köprüleyebilmemiz gerekir. +Bu fonksiyon, bu sözleşmeye köprülenen K1 token'ının adresini sağlar. +Ters yönde benzer bir fonksiyonumuz olmadığını unutmayın. +Uygulandığında K2 desteğinin planlanıp planlanmadığına bakılmaksızın herhangi bir K1 token'ını köprüleyebilmemiz gerekir. ```solidity @@ -924,11 +983,13 @@ Bu fonksiyon, bu sözleşmeye köprülenen K1 token'ının adresini sağlar. Ter } ``` -Token'ları basmak (oluşturmak) ve yakmak (yok etmek) için fonksiyonlar ve olaylar. Köprü, token sayısının doğru (K1'de kilitli token sayısına eşit) olduğundan emin olmak için bu fonksiyonları çalıştırabilen tek varlık olmalıdır. +Token'ları basmak (oluşturmak) ve yakmak (yok etmek) için fonksiyonlar ve olaylar. +Köprü, token sayısının doğru (K1'de kilitli token sayısına eşit) olduğundan emin olmak için bu fonksiyonları çalıştırabilen tek varlık olmalıdır. ### L2StandardERC20 {#L2StandardERC20} -[Bu, `IL2StandardERC20` arayüzü uygulamamızdır](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/standards/L2StandardERC20.sol). Bir tür özel mantığa ihtiyacınız yoksa, bunu kullanmalısınız. +[Bu, `IL2StandardERC20` arayüzünün bizim uygulamamızdır](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/standards/L2StandardERC20.sol). +Bir tür özel mantığa ihtiyacınız yoksa, bunu kullanmalısınız. ```solidity // SPDX-License-Identifier: MIT @@ -937,7 +998,8 @@ pragma solidity ^0.8.9; import { ERC20 } from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; ``` -[OpenZeppelin ERC-20 sözleşmesi](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol). Optimism, mevcut özellikler iyi denetlendiğinde ve varlıkları elinde tutacak kadar güvenilir olması gerektiğinde yeni özellikler icat edilmemesi gerektiğine inanır. +[OpenZeppelin ERC-20 sözleşmesi](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol). +Optimism, mevcut özellikler iyi denetlendiğinde ve varlıkları elinde tutacak kadar güvenilir olması gerektiğinde yeni özellikler icat edilmemesi gerektiğine inanır. ```solidity import "./IL2StandardERC20.sol"; @@ -952,10 +1014,10 @@ Bunlar, bizim ihtiyaç duyduğumuz ve normalde ERC-20'nin gerektirmediği iki ek ```solidity /** - * @param _l2Bridge Address of the L2 standard bridge. - * @param _l1Token Address of the corresponding L1 token. - * @param _name ERC20 name. - * @param _symbol ERC20 symbol. + * @param _l2Bridge K2 standart köprüsünün adresi. + * @param _l1Token İlgili K1 token'ının adresi. + * @param _name ERC20 adı. + * @param _symbol ERC20 sembolü. */ constructor( address _l2Bridge, @@ -973,7 +1035,7 @@ Bunlar, bizim ihtiyaç duyduğumuz ve normalde ERC-20'nin gerektirmediği iki ek ```solidity modifier onlyL2Bridge() { - require(msg.sender == l2Bridge, "Only L2 Bridge can mint and burn"); + require(msg.sender == l2Bridge, "Yalnızca K2 Köprüsü basım ve yakım yapabilir"); _; } @@ -988,11 +1050,12 @@ Bunlar, bizim ihtiyaç duyduğumuz ve normalde ERC-20'nin gerektirmediği iki ek } ``` -[ERC-165](https://eips.ethereum.org/EIPS/eip-165) bu şekilde çalışır. Her arayüz, desteklenen bir dizi fonksiyondur ve [özel](https://en.wikipedia.org/wiki/Exclusive_or) veya bu fonksiyonların [ABI fonksiyon seçicilerine](https://docs.soliditylang.org/en/v0.8.12/abi-spec.html#function-selector) ait olarak tanımlanır. +[ERC-165](https://eips.ethereum.org/EIPS/eip-165) bu şekilde çalışır. +Her arayüz bir dizi desteklenen fonksiyondur ve bu fonksiyonların [ABI fonksiyon seçicilerinin](https://docs.soliditylang.org/en/v0.8.12/abi-spec.html#function-selector) [özel veya](https://en.wikipedia.org/wiki/Exclusive_or) işlemi olarak tanımlanır. K2 köprüsü, varlıkları gönderdiği ERC-20 sözleşmesinin bir `IL2StandardERC20` olduğundan emin olmak için doğruluk kontrolü olarak ERC-165'i kullanır. -**Not:** Hileli sözleşmenin `supportsInterface` için yanlış yanıtlar vermesini önleyecek hiçbir şey yoktur, bu nedenle bu bir güvenlik mekanizması _değil_, doğruluk kontrol mekanizmasıdır. +**Not:** Hileli sözleşmenin `supportsInterface` için yanlış yanıtlar vermesini önleyecek hiçbir şey yoktur, bu nedenle bu bir güvenlik mekanizması değil, doğruluk kontrol mekanizmasıdır. ```solidity // slither-disable-next-line external-function @@ -1013,64 +1076,71 @@ K2 köprüsü, varlıkları gönderdiği ERC-20 sözleşmesinin bir `IL2Standard Yalnızca K2 köprüsünün varlıkları basmasına ve yakmasına izin verilir. -`_mint` ve `_burn` aslında [OpenZeppelin ERC-20 sözleşmesinde](/developers/tutorials/erc20-annotated-code/#the-_mint-and-_burn-functions-_mint-and-_burn) tanımlanmıştır. Bu sözleşme onları harici olarak ifşa etmez, çünkü token'ları basma ve yakma koşulları, ERC-20'yi kullanma yollarının sayısı kadar çeşitlidir. +`_mint` ve `_burn` aslında [OpenZeppelin ERC-20 sözleşmesinde](/developers/tutorials/erc20-annotated-code/#the-_mint-and-_burn-functions-_mint-and-_burn) tanımlanmıştır. +Bu sözleşme onları harici olarak ifşa etmez, çünkü token'ları basma ve yakma koşulları, ERC-20'yi kullanma yollarının sayısı kadar çeşitlidir. ## K2 Köprü Kodu {#l2-bridge-code} -Bu, Optimism üzerindeki köprüyü çalıştıran koddur. [Bu sözleşmenin kaynağı buradadır](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/L2/messaging/L2StandardBridge.sol). +Bu, Optimism üzerindeki köprüyü çalıştıran koddur. +[Bu sözleşmenin kaynağı buradadır](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/L2/messaging/L2StandardBridge.sol). ```solidity // SPDX-License-Identifier: MIT pragma solidity ^0.8.9; -/* Interface Imports */ +/* Arayüz İçe Aktarmaları */ import { IL1StandardBridge } from "../../L1/messaging/IL1StandardBridge.sol"; import { IL1ERC20Bridge } from "../../L1/messaging/IL1ERC20Bridge.sol"; import { IL2ERC20Bridge } from "./IL2ERC20Bridge.sol"; ``` -[IL2ERC20Bridge](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/L2/messaging/IL2ERC20Bridge.sol) arayüzü, yukarıda gördüğümüz [K1 eş değerine](#IL1ERC20Bridge) çok benzer. İki önemli fark vardır: +[IL2ERC20Bridge](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/L2/messaging/IL2ERC20Bridge.sol) arayüzü, yukarıda gördüğümüz [K1 eşdeğerine](#IL1ERC20Bridge) çok benzer. +İki önemli fark vardır: -1. K1'de yatırma işlemini başlatır ve çekme işlemlerini sonlandırırsınız. Burada ise çekme işlemlerini başlatır ve yatırma işlemlerini sonlandırırsınız. -2. K1'de ETH ve ERC-20 token'ları arasında ayrım yapmak gerekir. K2'de aynı fonksiyonları her ikisi için de kullanabiliriz çünkü Optimism üzerindeki dahili ETH bakiyeleri, [0xDeadDeAddeAddEAddeadDEaDDEAdDeaDDeAD0000](https://optimistic.etherscan.io/address/0xDeadDeAddeAddEAddeadDEaDDEAdDeaDDeAD0000) adresiyle bir ERC-20 token'ı olarak işlenir. +1. K1'de yatırma işlemini başlatır ve çekme işlemlerini sonlandırırsınız. + Burada ise çekme işlemlerini başlatır ve yatırma işlemlerini sonlandırırsınız. +2. K1'de ETH ve ERC-20 token'ları arasında ayrım yapmak gerekir. + K2'de aynı fonksiyonları her ikisi için de kullanabiliriz çünkü Optimism üzerindeki dahili ETH bakiyeleri, [0xDeadDeAddeAddEAddeadDEaDDEAdDeaDDeAD0000](https://explorer.optimism.io/address/0xDeadDeAddeAddEAddeadDEaDDEAdDeaDDeAD0000) adresiyle bir ERC-20 token'ı olarak işlenir. ```solidity -/* Library Imports */ +/* Kütüphane İçe Aktarmaları */ import { ERC165Checker } from "@openzeppelin/contracts/utils/introspection/ERC165Checker.sol"; import { CrossDomainEnabled } from "../../libraries/bridge/CrossDomainEnabled.sol"; import { Lib_PredeployAddresses } from "../../libraries/constants/Lib_PredeployAddresses.sol"; -/* Contract Imports */ +/* Sözleşme İçe Aktarmaları */ import { IL2StandardERC20 } from "../../standards/IL2StandardERC20.sol"; /** * @title L2StandardBridge - * @dev The L2 Standard bridge is a contract which works together with the L1 Standard bridge to - * enable ETH and ERC20 transitions between L1 and L2. - * This contract acts as a minter for new tokens when it hears about deposits into the L1 Standard - * bridge. - * This contract also acts as a burner of the tokens intended for withdrawal, informing the L1 - * bridge to release L1 funds. + * @dev L2 Standart köprüsü, K1 ve K2 arasında ETH ve ERC20 geçişlerini sağlamak için + * K1 Standart köprüsü ile birlikte çalışan bir sözleşmedir. + * Bu sözleşme, K1 Standart köprüsüne yapılan yatırmaları duyduğunda yeni token'lar için bir basıcı olarak görev yapar. + * + * Bu sözleşme aynı zamanda çekme amaçlı token'ların yakıcısı olarak da görev yapar ve K1 + * köprüsüne K1 fonlarını serbest bırakması için bilgi verir. */ contract L2StandardBridge is IL2ERC20Bridge, CrossDomainEnabled { /******************************** - * External Contract References * + * Harici Sözleşme Referansları * ********************************/ address public l1TokenBridge; ``` -K1 köprüsünün adresini takip edin. K1 eş değerinin aksine, burada bu değişkene _ihtiyacımız var_. K1 köprüsünün adresi önceden bilinmiyor. +K1 köprüsünün adresini takip edin. +K1 eş değerinin aksine, burada bu değişkene ihtiyacımız _var_. +K1 köprüsünün adresi önceden bilinmiyor. ```solidity /*************** - * Constructor * + * Yapıcı * ***************/ /** - * @param _l2CrossDomainMessenger Cross-domain messenger used by this contract. - * @param _l1TokenBridge Address of the L1 bridge deployed to the main chain. + * @param _l2CrossDomainMessenger Bu sözleşme tarafından kullanılan alanlar arası mesajcı. + * @param _l1TokenBridge Ana zincire dağıtılan K1 köprüsünün adresi. */ constructor(address _l2CrossDomainMessenger, address _l1TokenBridge) CrossDomainEnabled(_l2CrossDomainMessenger) @@ -1079,7 +1149,7 @@ K1 köprüsünün adresini takip edin. K1 eş değerinin aksine, burada bu deği } /*************** - * Withdrawing * + * Çekme * ***************/ /** @@ -1108,21 +1178,23 @@ K1 köprüsünün adresini takip edin. K1 eş değerinin aksine, burada bu deği } ``` -Bu iki fonksiyon çekme işlemlerini başlatır. K1 token adresini belirtmeye gerek olmadığını unutmayın. K2 token'larının bize K1 eş değerinin adresini söylemesi bekleniyor. +Bu iki fonksiyon çekme işlemlerini başlatır. +K1 token adresini belirtmeye gerek olmadığını unutmayın. +K2 token'larının bize K1 eş değerinin adresini söylemesi bekleniyor. ```solidity /** - * @dev Performs the logic for withdrawals by burning the token and informing - * the L1 token Gateway of the withdrawal. - * @param _l2Token Address of L2 token where withdrawal is initiated. - * @param _from Account to pull the withdrawal from on L2. - * @param _to Account to give the withdrawal to on L1. - * @param _amount Amount of the token to withdraw. - * @param _l1Gas Unused, but included for potential forward compatibility considerations. - * @param _data Optional data to forward to L1. This data is provided - * solely as a convenience for external contracts. Aside from enforcing a maximum - * length, these contracts provide no guarantees about its content. + * @dev Token'ı yakarak ve K1 token Ağ Geçidi'ne + * çekme hakkında bilgi vererek çekme mantığını gerçekleştirir. + * @param _l2Token Çekme işleminin başlatıldığı K2 token adresi. + * @param _from K2'de para çekme işleminin çekileceği hesap. + * @param _to K1'de para çekme işleminin verileceği hesap. + * @param _amount Çekilecek token miktarı. + * @param _l1Gas Kullanılmıyor, ancak potansiyel ileriye dönük uyumluluk considerations için dahil edilmiştir. + * @param _data K1'e iletilecek isteğe bağlı veri. Bu veri yalnızca + * harici sözleşmeler için bir kolaylık olarak sağlanır. Maksimum + * uzunluğu zorunlu kılmanın yanı sıra, bu sözleşmeler içeriği hakkında hiçbir garanti vermez. */ function _initiateWithdrawal( address _l2Token, @@ -1132,17 +1204,17 @@ Bu iki fonksiyon çekme işlemlerini başlatır. K1 token adresini belirtmeye ge uint32 _l1Gas, bytes calldata _data ) internal { - // When a withdrawal is initiated, we burn the withdrawer's funds to prevent subsequent L2 - // usage + // Bir çekme başlatıldığında, sonraki K2 kullanımını önlemek için + // çekenin fonlarını yakarız // slither-disable-next-line reentrancy-events IL2StandardERC20(_l2Token).burn(msg.sender, _amount); ``` -`_from` parametresine _değil_, sahte olması çok daha zor olan (bildiğim kadarıyla imkansız) `msg.sender` parametresine güvendiğimize dikkat edin. +`_from` parametresine değil, sahte olması çok daha zor olan (bildiğim kadarıyla imkansız) `msg.sender`'a güvendiğimize dikkat edin. ```solidity - // Construct calldata for l1TokenBridge.finalizeERC20Withdrawal(_to, _amount) + // l1TokenBridge.finalizeERC20Withdrawal(_to, _amount) için çağrı verisi oluştur // slither-disable-next-line reentrancy-events address l1Token = IL2StandardERC20(_l2Token).l1Token(); bytes memory message; @@ -1172,7 +1244,7 @@ K1'de ETH ve ERC-20 arasında ayrım yapmak gerekir. ); } - // Send message up to L1 bridge + // Mesajı K1 köprüsüne gönder // slither-disable-next-line reentrancy-events sendCrossDomainMessage(l1TokenBridge, _l1Gas, message); @@ -1181,7 +1253,7 @@ K1'de ETH ve ERC-20 arasında ayrım yapmak gerekir. } /************************************ - * Cross-chain Function: Depositing * + * Çapraz zincir Fonksiyonu: Yatırma * ************************************/ /** @@ -1202,11 +1274,12 @@ Bu fonksiyon, `L1StandardBridge` tarafından çağrılır. ) external virtual onlyFromCrossDomainAccount(l1TokenBridge) { ``` -Mesajın kaynağının meşru olduğundan emin olun. Bu, fonksiyon `_mint`'i çağırdığı ve köprünün Katman 1'de sahip olduğu token'lar tarafından kapsanmayan token'ları vermek için kullanılabileceği için önemlidir. +Mesajın kaynağının meşru olduğundan emin olun. +Bu, fonksiyon `_mint`'i çağırdığı ve köprünün K1'de sahip olduğu token'lar tarafından kapsanmayan token'ları vermek için kullanılabileceği için önemlidir. ```solidity - // Check the target token is compliant and - // verify the deposited token on L1 matches the L2 deposited token representation here + // Hedef token'ın uyumlu olup olmadığını kontrol edin ve + // K1'de yatırılan token'ın buradaki K2 yatırılan token gösterimiyle eşleştiğini doğrulayın if ( // slither-disable-next-line reentrancy-events ERC165Checker.supportsInterface(_l2Token, 0x1d1d8b63) && @@ -1216,12 +1289,12 @@ Mesajın kaynağının meşru olduğundan emin olun. Bu, fonksiyon `_mint`'i ça Doğruluk testleri: 1. Doğru arayüz destekleniyor -2. L2 ERC-20 sözleşmesinin Katman 1 adresi, token'ların Katman 1 kaynağıyla eşleşiyor +2. K2 ERC-20 sözleşmesinin K1 adresi, token'ların K1 kaynağıyla eşleşiyor ```solidity ) { - // When a deposit is finalized, we credit the account on L2 with the same amount of - // tokens. + // Bir yatırma sonlandırıldığında, K2'deki hesaba aynı miktarda + // token yatırırız. // slither-disable-next-line reentrancy-events IL2StandardERC20(_l2Token).mint(_to, _amount); // slither-disable-next-line reentrancy-events @@ -1235,30 +1308,31 @@ Doğruluk testlerini geçerse yatırmayı tamamlayın: ```solidity } else { - // Either the L2 token which is being deposited-into disagrees about the correct address - // of its L1 token, or does not support the correct interface. - // This should only happen if there is a malicious L2 token, or if a user somehow - // specified the wrong L2 token address to deposit into. - // In either case, we stop the process here and construct a withdrawal - // message so that users can get their funds out in some cases. - // There is no way to prevent malicious token contracts altogether, but this does limit - // user error and mitigate some forms of malicious contract behavior. + // Yatırılan K2 token'ı, K1 token'ının doğru adresi + // konusunda aynı fikirde değil veya doğru arayüzü desteklemiyor. + // Bu yalnızca kötü niyetli bir K2 token'ı olduğunda veya bir kullanıcı bir şekilde + // yatırmak için yanlış K2 token adresi belirttiğinde gerçekleşmelidir. + // Her iki durumda da süreci burada durdurur ve bir çekme + // mesajı oluştururuz, böylece kullanıcılar bazı durumlarda fonlarını geri alabilir. + // Kötü niyetli token sözleşmelerini tamamen önlemenin bir yolu yoktur, ancak bu + // kullanıcı hatasını sınırlar ve bazı kötü niyetli sözleşme davranışlarını azaltır. ``` -Bir kullanıcı yanlış Katman 2 token adresini kullanarak tespit edilebilir bir hata yaptıysa, yatırmayı iptal etmek ve tokenları Katman 1'e iade etmek istiyoruz. Bunu Katman 2'den yapabilmemizin tek yolu, hata meydan okuma süresini beklemek zorunda kalacak bir mesaj göndermektir ancak bu, kullanıcı için token'ları kalıcı olarak kaybetmekten çok daha iyidir. +Bir kullanıcı yanlış K2 token adresini kullanarak tespit edilebilir bir hata yaptıysa, yatırmayı iptal etmek ve token'ları K1'e iade etmek istiyoruz. +Bunu K2'den yapabilmemizin tek yolu, hata meydan okuma süresini beklemek zorunda kalacak bir mesaj göndermektir ancak bu, kullanıcı için token'ları kalıcı olarak kaybetmekten çok daha iyidir. ```solidity bytes memory message = abi.encodeWithSelector( IL1ERC20Bridge.finalizeERC20Withdrawal.selector, _l1Token, _l2Token, - _to, // switched the _to and _from here to bounce back the deposit to the sender + _to, // yatırmayı gönderene geri göndermek için _to ve _from'u burada değiştirdik _from, _amount, _data ); - // Send message up to L1 bridge + // Mesajı K1 köprüsüne gönder // slither-disable-next-line reentrancy-events sendCrossDomainMessage(l1TokenBridge, 0, message); // slither-disable-next-line reentrancy-events @@ -1270,8 +1344,13 @@ Bir kullanıcı yanlış Katman 2 token adresini kullanarak tespit edilebilir bi ## Sonuç {#conclusion} -Standart köprü, varlık aktarımları için en esnek mekanizmadır. Ancak çok genel olduğu için her zaman kullanması en kolay olan mekanizma değildir. Özellikle çekimler için, çoğu kullanıcı meydan okuma süresini beklemeyen ve çekimi sonlandırmak için bir Merkle ispatı gerektirmeyen [üçüncü parti köprüleri](https://optimism.io/apps#bridge) kullanmayı tercih eder. +Standart köprü, varlık aktarımları için en esnek mekanizmadır. +Ancak çok genel olduğu için her zaman kullanması en kolay olan mekanizma değildir. +Özellikle çekimler için, çoğu kullanıcı meydan okuma süresini beklemeyen ve çekimi sonlandırmak için bir Merkle ispatı gerektirmeyen [üçüncü parti köprüleri](https://optimism.io/apps#bridge) kullanmayı tercih eder. -Bu köprüler genellikle Katman 1 üzerinde küçük bir ücret (genelde bir standart köprü çekiminin gaz ücretinden daha azına) için anında sağladıkları varlıklara sahip olarak çalışırlar. Köprü (ya da onu çalıştıran insanlar) Katman 1 varlıklarının azaldığını sezdiğinde Katman 2'den yeteri kadar varlığı aktarır. Bunlar çok büyük çekimler olduğu için, çekim ücreti büyük bir miktar üzerinden amorti edilmiştir ve daha küçük bir yüzdeliktir. +Bu köprüler genellikle K1 üzerinde küçük bir ücret (genelde bir standart köprü çekiminin gaz ücretinden daha azına) için anında sağladıkları varlıklara sahip olarak çalışırlar. +Köprü (ya da onu çalıştıran insanlar) K1 varlıklarının azaldığını sezdiğinde K2'den yeteri kadar varlığı aktarır. Bunlar çok büyük çekimler olduğu için, çekim ücreti büyük bir miktar üzerinden amorti edilmiştir ve daha küçük bir yüzdeliktir. Umarım bu makale katman 2'nin nasıl çalıştığı hakkında dahasını anlamanıza; temiz ve güvenli Solidity kodu yazmanıza yardımcı olmuştur. + +[Çalışmalarımdan daha fazlası için buraya bakın](https://cryptodocguy.pro/). diff --git a/public/content/translations/tr/developers/tutorials/reverse-engineering-a-contract/index.md b/public/content/translations/tr/developers/tutorials/reverse-engineering-a-contract/index.md index 727c73dffea..52fbdd15047 100644 --- a/public/content/translations/tr/developers/tutorials/reverse-engineering-a-contract/index.md +++ b/public/content/translations/tr/developers/tutorials/reverse-engineering-a-contract/index.md @@ -1,102 +1,100 @@ --- -title: "Sözleşmeye Tersine Mühendislik Uygulama" -description: Kaynak koduna sahip olmadığınız bir sözleşmeyi anlama +title: "Reverse Engineering a Contract" +description: How to understand a contract when you don't have the source code author: Ori Pomerantz lang: tr -tags: - - "EVM" - - "işlem kodları" +tags: [ "evm", "opcodes" ] skill: advanced published: 2021-12-30 --- ## Giriş {#introduction} -_Blokzincirde sır yoktur_; her şey tutarlı, doğrulanabilir ve herkes tarafından erişilebilirdir. İdeal olarak [sözleşmelerin kaynak kodları Etherscan'de yayımlanmalı ve doğrulanmalıdır](https://etherscan.io/address/0xb8901acb165ed027e32754e0ffe830802919727f#code). Fakat, [durum her zaman böyle değildir](https://etherscan.io/address/0x2510c039cc3b061d79e564b38836da87e31b342f#code). Bu makalede, kaynak kodu olmayan bir sözleşmeye bakarak sözleşmelerde tersine mühendislik yapmayı öğreneceksiniz, [`0x2510c039cc3b061d79e564b38836da87e31b342f`](https://etherscan.io/address/0x2510c039cc3b061d79e564b38836da87e31b342f). +_There are no secrets on the blockchain_, everything that happens is consistent, verifiable, and publicly available. Ideally, [contracts should have their source code published and verified on Etherscan](https://etherscan.io/address/0xb8901acb165ed027e32754e0ffe830802919727f#code). However, [that is not always the case](https://etherscan.io/address/0x2510c039cc3b061d79e564b38836da87e31b342f#code). In this article you learn how to reverse engineer contracts by looking at a contract without source code, [`0x2510c039cc3b061d79e564b38836da87e31b342f`](https://etherscan.io/address/0x2510c039cc3b061d79e564b38836da87e31b342f). -Ters derleyiciler vardır, fakat her zaman [ kullanılabilir sonuçlar](https://etherscan.io/bytecode-decompiler?a=0x2510c039cc3b061d79e564b38836da87e31b342f) üretmezler. Bu makalede manuel olarak bir sözleşmeye [işlem kodlarından](https://github.com/wolflo/evm-opcodes) nasıl ters mühendislik yapabileceğinizi, sözleşmeyi nasıl anlayacağınızı ve bununla birlikte bir ters derleyicinin sonuçlarını nasıl yorumlayacağınızı öğreneceksiniz. +There are reverse compilers, but they don't always produce [usable results](https://etherscan.io/bytecode-decompiler?a=0x2510c039cc3b061d79e564b38836da87e31b342f). In this article you learn how to manually reverse engineer and understand a contract from [the opcodes](https://github.com/wolflo/evm-opcodes), as well as how to interpret the results of a decompiler. -Bu makaleyi anlayabilmek için Ethereum Sanal Makinesi'nin temellerini çoktan biliyor olmalı ve en azından Ethereum Sanal Makinesi'nin derleyicisine aşina olmalısınız. [Bu konuları buradan okuyabilirsiniz](https://medium.com/mycrypto/the-ethereum-virtual-machine-how-does-it-work-9abac2b7c9e). +To be able to understand this article you should already know the basics of the EVM, and be at least somewhat familiar with EVM assembler. [You can read about these topics here](https://medium.com/mycrypto/the-ethereum-virtual-machine-how-does-it-work-9abac2b7c9e). -## Yürütülebilir Kodu Hazırlama {#prepare-the-executable-code} +## Prepare the Executable Code {#prepare-the-executable-code} -İşlem kodlarını sözleşme için Etherscan'e gidip **Sözleşme** seçeneğine ve sonrasında **İşlem Kodu Görünümüne Geç**'e tıklayarak alabilirsiniz. Bir satıra bir işlem kodunun düştüğü bir görünüm elde edeceksiniz. +You can get the opcodes by going to Etherscan for the contract, clicking the **Contract** tab and then **Switch to Opcodes View**. You get a view that is one opcode per line. -![Etherscan'den İşlem Kodu Görünümü](opcode-view.png) +![Opcode View from Etherscan](opcode-view.png) -Bununla birlikte, sıçramaları anlayabilmek için her kodda işlem kodunun nerede olduğunu bilmeniz gerekir. Bunu yapmanın bir yolu, bir Google Elektronik Tablosu açıp işlem kodlarını C sütununa yapıştırmaktır. [Önceden hazırlanmış bu elektronik tablonun bir kopyasını oluşturarak sonraki adımları atlayabilirsiniz](https://docs.google.com/spreadsheets/d/1tKmTJiNjUwHbW64wCKOSJxHjmh0bAUapt6btUYE7kDA/edit?usp=sharing). +To be able to understand jumps, however, you need to know where in the code each opcode is located. To do that, one way is to open a Google Spreadsheet and paste the opcodes in column C. [You can skip the following steps by making a copy of this already prepared spreadsheet](https://docs.google.com/spreadsheets/d/1tKmTJiNjUwHbW64wCKOSJxHjmh0bAUapt6btUYE7kDA/edit?usp=sharing). -Sonraki adım, sıçramaları anlayabilmemiz için doğru kod konumlarını almaktır. B sütununa işlem kodu boyutunu, A sütünuna da (onaltılık olarak) konumu koyacağız. `B1` hücresine bu fonksiyonu yazın ve kodun sonuna kadar B sütunun geri kalanı için kopyalayıp yapıştırın. Bunu yaptıktan sonra B sütununu gizleyebilirsiniz. +The next step is to get the correct code locations so we'll be able to understand jumps. We'll put the opcode size in column B, and the location (in hexadecimal) in column A. Type this function in cell `B1` and then copy and paste it for the rest of column B, until the end of the code. After you do this you can hide column B. ``` =1+IF(REGEXMATCH(C1,"PUSH"),REGEXEXTRACT(C1,"PUSH(\d+)"),0) ``` -İlk olarak bu fonksiyon işlem kodunun kendisi için bir bayt ekler, sonra da `PUSH` araması yapar. İtme işlem kodları özeldir, çünkü itilen değer için ekstra baytlara sahip olmak zorundadırlar. Eğer işlem kodu bir `PUSH` ise, bayt sayısını çıkarır ve ekleriz. +First this function adds one byte for the opcode itself, and then looks for `PUSH`. Push opcodes are special because they need to have additional bytes for the value being pushed. If the opcode is a `PUSH`, we extract the number of bytes and add that. -`A1`'e ilk kayma olan 0'ı koyun. Ardından `A2`'ye bu fonksiyonu koyun ve yine A sütununun geri kalanı için kopyalayıp yapıştırın: +In `A1` put the first offset, zero. Then, in `A2`, put this function and again copy and paste it for the rest of column A: ``` =dec2hex(hex2dec(A1)+B1) ``` -Bu fonksiyonun bize onaltılık bir değer vermesine ihtiyacımız var çünkü sıçramalardan (`JUMP` and `JUMPI`) önceki itilen değerler de bize onaltılık şekilde verilir. +We need this function to give us the hexadecimal value because the values that are pushed prior to jumps (`JUMP` and `JUMPI`) are given to us in hexadecimal. -## Giriş Noktası (0x00) {#the-entry-point-0x00} +## The Entry Point (0x00) {#the-entry-point-0x00} -Sözleşmeler her zaman ilk bayttan yürütülür. Bu kodun ilk kısmıdır: +Contracts are always executed from the first byte. This is the initial part of the code: -| Offset | İşlem kodları | Yığın (işlem kodundan sonra) | -| -----: | ------------- | ---------------------------- | -| 0 | PUSH1 0x80 | 0x80 | -| 2 | PUSH1 0x40 | 0x40, 0x80 | -| 4 | MSTORE | Boş | -| 5 | PUSH1 0x04 | 0x04 | -| 7 | CALLDATASIZE | CALLDATASIZE 0x04 | -| 8 | LT | CALLDATASIZE\<4 | -| 9 | PUSH2 0x005e | 0x5E CALLDATASIZE\<4 | -| C | JUMPI | Boş | +| Offset | Opcode | Stack (after the opcode) | +| -----: | ------------ | ---------------------------------------------- | +| 0 | PUSH1 0x80 | 0x80 | +| 2 | PUSH1 0x40 | 0x40, 0x80 | +| 4 | MSTORE | Empty | +| 5 | PUSH1 0x04 | 0x04 | +| 7 | CALLDATASIZE | CALLDATASIZE 0x04 | +| 8 | LT | CALLDATASIZE\<4 | +| 9 | PUSH2 0x005e | 0x5E CALLDATASIZE\<4 | +| C | JUMPI | Boş | -Bu kod iki şey yapar: +This code does two things: -1. 0x80'i 0x40-0x5F bellek konumlarına 32 baytlık bir değer olarak (0x80, 0x5F'de depolanır ve 0x40-0x5E tamamen sıfırlardan oluşur) yazın. -2. Çağrı verisini boyutunu okuyun. Ethereum sözleşmesi için olan bir çağrı verisi normalde, fonksiyon seçici için minimum 4 bayta ihtiyaç duyan [ABI'yi (uygulama ikili arayüzü)](https://docs.soliditylang.org/en/v0.8.10/abi-spec.html) takip eder. Eğer çağrı verisi boyutu dörtten azsa, 0x5E'ye sıçrayın. +1. Write 0x80 as a 32 byte value to memory locations 0x40-0x5F (0x80 is stored in 0x5F, and 0x40-0x5E are all zeroes). +2. Read the calldata size. Normally the call data for an Ethereum contract follows [the ABI (application binary interface)](https://docs.soliditylang.org/en/v0.8.10/abi-spec.html), which at a minimum requires four bytes for the function selector. If the call data size is less than four, jump to 0x5E. -![Bu kısım için akış şeması](flowchart-entry.png) +![Flowchart for this portion](flowchart-entry.png) -### 0X5E'deki (ABI olmayan çağrı verisi) İşleyici {#the-handler-at-0x5e-for-non-abi-call-data} +### The Handler at 0x5E (for non-ABI call data) {#the-handler-at-0x5e-for-non-abi-call-data} -| Offset | Opcode | +| Offset | İşlem kodu | | -----: | ------------ | | 5E | JUMPDEST | | 5F | CALLDATASIZE | | 60 | PUSH2 0x007c | | 63 | JUMPI | -Bu kod parçası bir `JUMPDEST` ile başlar. Eğer `JUMPDEST` olmayan bir işlem koduna sıçrama yaparsanız EVM (Ethereum Sanal Makinesi) bir istisna verir. Ardından CALLDATASIZE'a bakar ve eğer "doğru" ise (sıfır değilse) 0x7C'ye sıçrar. Buna aşağıda değineceğiz. +This snippet starts with a `JUMPDEST`. EVM (Ethereum virtual machine) programs throw an exception if you jump to an opcode that isn't `JUMPDEST`. Then it looks at the CALLDATASIZE, and if it is "true" (that is, not zero) jumps to 0x7C. We'll get to that below. -| Offset | Opcode | Stack (opcode'dan sonra) | -| -----: | ---------- | ------------------------------------------------------------------------------ | -| 64 | CALLVALUE | Çağrı tarafından sağlanan [wei](/glossary/#wei). Solidity'de `msg.value` denir | -| 65 | PUSH1 0x06 | 6 CALLVALUE | -| 67 | PUSH1 0x00 | 0 6 CALLVALUE | -| 69 | DUP3 | CALLVALUE 0 6 CALLVALUE | -| 6A | DUP3 | 6 CALLVALUE 0 6 CALLVALUE | -| 6B | SLOAD | Storage[6] CALLVALUE 0 6 CALLVALUE | +| Offset | İşlem kodu | Stack (after opcode) | +| -----: | ---------- | ------------------------------------------------------------------------------------------ | +| 64 | CALLVALUE | [Wei](/glossary/#wei) provided by the call. Called `msg.value` in Solidity | +| 65 | PUSH1 0x06 | 6 CALLVALUE | +| 67 | PUSH1 0x00 | 0 6 CALLVALUE | +| 69 | DUP3 | CALLVALUE 0 6 CALLVALUE | +| 6A | DUP3 | 6 CALLVALUE 0 6 CALLVALUE | +| 6B | SLOAD | Storage[6] CALLVALUE 0 6 CALLVALUE | -Yani hiç çağrı verisi olmadığında Depo[6] değerini okuruz. Bu değerin ne olduğunu henüz bilmiyoruz, fakat sözleşmenin hiç çağrı verisi almadığı işlemleri arayabiliriz. Çağrı verisi olmadan (bu sebeple yöntem da olmadan) ETH transfer eden işlemler için Etherscan'de `Transfer` adında bir yöntem vardır. Aslında, [sözleşmenin aldığı ilk işlem](https://etherscan.io/tx/0xeec75287a583c36bcc7ca87685ab41603494516a0f5986d18de96c8e630762e7) bir transferdir. +So when there is no call data we read the value of Storage[6]. We don't know what this value is yet, but we can look for transactions that the contract received with no call data. Transactions which just transfer ETH without any call data (and therefore no method) have in Etherscan the method `Transfer`. In fact, [the very first transaction the contract received](https://etherscan.io/tx/0xeec75287a583c36bcc7ca87685ab41603494516a0f5986d18de96c8e630762e7) is a transfer. -Eğer işleme bakıp **Daha fazlası için tıklayın** öğesine tıklarsak, girdi verileri de denen çağrı verilerinin aslında boş olduğunu (`0x`) görürüz. Değerin 1,559 ETH olduğuna da dikkat edin, daha sonra işimize yarayacak. +If we look in that transaction and click **Click to see More**, we see that the call data, called input data, is indeed empty (`0x`). Notice also that the value is 1.559 ETH, that will be relevant later. -![Çağrı verisi boş](calldata-empty.png) +![The call data is empty](calldata-empty.png) -Şimdi, **Durum** sekmesine tıklayın ve tersine mühendislik yaptığımız sözleşmeyi (0x2510...) genişletin. İşlem sırasında `Storage[6]`'ın değiştiğini görebilirsiniz, eğer Onaltılığı **Sayı** olarak değiştirirseniz değerin, bir sonraki sözleşme değerine karşılık gelen 1.559.000.000.000.000.000'a dönüştüğünü görebilirsiniz, bu değer wei cinsindendir (noktaları kolay anlaşılması için ekledim). +Next, click the **State** tab and expand the contract we're reverse engineering (0x2510...). You can see that `Storage[6]` did change during the transaction, and if you change Hex to **Number**, you see it became 1,559,000,000,000,000,000, the value transferred in wei (I added the commas for clarity), corresponding to the next contract value. -![Storage[6]'daki değişiklik](storage6.png) +![The change in Storage[6]](storage6.png) -Aynı zaman aralığında [diğer `Transfer` işlemlerinden kaynaklanan durum değişikliklerine baktığımızda](https://etherscan.io/tx/0xf708d306de39c422472f43cb975d97b66fd5d6a6863db627067167cbf93d84d1#statechange) `Storage[6]`'ın, sözleşmenin değerini bir süre takip ettiğiniz görürüz. Şimdilik buna `Value*` adını vereceğiz. Buradaki yıldız işareti (`*`), henüz bu değişkenin ne yaptığını _bilmediğimizi_ hatırlatır, fakat bu sadece sözleşme değerini takip etmeye yönelik olamaz çünkü hesap bakiyenizi `ADDRESS BALANCE`'ı kullanarak görebilirken depolamayı kullanmaya gerek yoktur ve zaten çok pahalıdır. İlk işlem kodu sözleşmenin kendi adresini iter. İkincisi de yığının en üstündeki adresi okur ve bunu hesabın bakiyesiyle değiştirir. +If we look in the state changes caused by [other `Transfer` transactions from the same period](https://etherscan.io/tx/0xf708d306de39c422472f43cb975d97b66fd5d6a6863db627067167cbf93d84d1#statechange) we see that `Storage[6]` tracked the value of the contract for a while. For now we'll call it `Value*`. The asterisk (`*`) reminds us that we don't _know_ what this variable does yet, but it can't be just to track the contract value because there's no need to use storage, which is very expensive, when you can get your accounts balance using `ADDRESS BALANCE`. The first opcode pushes the contract's own address. The second one reads the address at the top of the stack and replaces it with the balance of that address. -| Offset | Opcode | Yığın | +| Offset | İşlem kodu | Yığın | | -----: | ------------ | ------------------------------------------- | | 6C | PUSH2 0x0075 | 0x75 Value\* CALLVALUE 0 6 CALLVALUE | | 6F | SWAP2 | CALLVALUE Value\* 0x75 0 6 CALLVALUE | @@ -104,205 +102,205 @@ Aynı zaman aralığında [diğer `Transfer` işlemlerinden kaynaklanan durum de | 71 | PUSH2 0x01a7 | 0x01A7 Value\* CALLVALUE 0x75 0 6 CALLVALUE | | 74 | JUMP | | -Bu kodu sıçrama hedefinde takip etmeye devam edeceğiz. +We'll continue to trace this code at the jump destination. -| Offset | Opcode | Yığın | +| Offset | İşlem kodu | Yığın | | -----: | ---------- | ----------------------------------------------------------- | | 1A7 | JUMPDEST | Value\* CALLVALUE 0x75 0 6 CALLVALUE | | 1A8 | PUSH1 0x00 | 0x00 Value\* CALLVALUE 0x75 0 6 CALLVALUE | | 1AA | DUP3 | CALLVALUE 0x00 Value\* CALLVALUE 0x75 0 6 CALLVALUE | | 1AB | NOT | 2^256-CALLVALUE-1 0x00 Value\* CALLVALUE 0x75 0 6 CALLVALUE | -`NOT` bitseldir, bu yüzden çağrı değerindeki her bitin değerini tersine çevirir. +The `NOT` is bitwise, so it reverses the value of every bit in the call value. -| Offset | Opcode | Yığın | -| -----: | ------------ | --------------------------------------------------------------------------- | -| 1AC | DUP3 | Value\* 2^256-CALLVALUE-1 0x00 Value\* CALLVALUE 0x75 0 6 CALLVALUE | -| 1AD | GT | Value\*>2^256-CALLVALUE-1 0x00 Value\* CALLVALUE 0x75 0 6 CALLVALUE | +| Offset | İşlem kodu | Yığın | +| -----: | ------------ | ------------------------------------------------------------------------------------------------------ | +| 1AC | DUP3 | Value\* 2^256-CALLVALUE-1 0x00 Value\* CALLVALUE 0x75 0 6 CALLVALUE | +| 1AD | GT | Value\*>2^256-CALLVALUE-1 0x00 Value\* CALLVALUE 0x75 0 6 CALLVALUE | | 1AE | ISZERO | Value\*\<=2^256-CALLVALUE-1 0x00 Value\* CALLVALUE 0x75 0 6 CALLVALUE | | 1AF | PUSH2 0x01df | 0x01DF Value\*\<=2^256-CALLVALUE-1 0x00 Value\* CALLVALUE 0x75 0 6 CALLVALUE | -| 1B2 | JUMPI | | +| 1B2 | JUMPI | | -Eğer `Value*`, 2^256-CALLVALUE-1'den küçük ya da ona eşitse sıçrarız. Bu, taşmayı engelleme mantığına benzer. Ve gerçekten de, 0x01DE ofsetinde birkaç anlamsız işlemden sonra (örneğin belleğe yazma silinmek üzere) normal davranış olan taşma algılanırsa sözleşmenin geri döndüğünü görüyoruz. +We jump if `Value*` is smaller than 2^256-CALLVALUE-1 or equal to it. This looks like logic to prevent overflow. And indeed, we see that after a few nonsense operations (writing to memory is about to get deleted, for example) at offset 0x01DE the contract reverts if the overflow is detected, which is normal behavior. -Bunun gibi bir taşmanın oldukça uzak bir ihtimal olduğunu da gözden kaçırmayın. Çünkü böyle bir taşma, çağrı değeri ile `Value*` toplamının 2^256 wei ya da 10^59 ETH gibi bir değer civarında olmasını gerektirir. [Toplam ETH arzı, yazıyla iki yüz milyondan azdır](https://etherscan.io/stat/supply). +Note that such an overflow is extremely unlikely, because it would require the call value plus `Value*` to be comparable to 2^256 wei, about 10^59 ETH. [The total ETH supply, at writing, is less than two hundred million](https://etherscan.io/stat/supply). -| Offset | Opcode | Yığın | -| -----: | -------- | ----------------------------------------- | -| 1DF | JUMPDEST | 0x00 Value\* CALLVALUE 0x75 0 6 CALLVALUE | -| 1E0 | POP | Value\* CALLVALUE 0x75 0 6 CALLVALUE | -| 1E1 | EKLE | Value\*+CALLVALUE 0x75 0 6 CALLVALUE | -| 1E2 | SWAP1 | 0x75 Value\*+CALLVALUE 0 6 CALLVALUE | -| 1E3 | JUMP | | +| Offset | İşlem kodu | Yığın | +| -----: | ---------- | ----------------------------------------- | +| 1DF | JUMPDEST | 0x00 Value\* CALLVALUE 0x75 0 6 CALLVALUE | +| 1E0 | POP | Value\* CALLVALUE 0x75 0 6 CALLVALUE | +| 1E1 | EKLE | Value\*+CALLVALUE 0x75 0 6 CALLVALUE | +| 1E2 | SWAP1 | 0x75 Value\*+CALLVALUE 0 6 CALLVALUE | +| 1E3 | JUMP | | -Eğer buraya geldiysek `Value* + CALLVALUE` değerini alalım ve kayma 0x75 değerine sıçrayalım. +If we got here, get `Value* + CALLVALUE` and jump to offset 0x75. -| Offset | Opcode | Yığın | -| -----: | -------- | ------------------------------- | -| 75 | JUMPDEST | Value\*+CALLVALUE 0 6 CALLVALUE | -| 76 | SWAP1 | 0 Value\*+CALLVALUE 6 CALLVALUE | -| 77 | SWAP2 | 6 Value\*+CALLVALUE 0 CALLVALUE | -| 78 | SSTORE | 0 CALLVALUE | +| Offset | İşlem kodu | Yığın | +| -----: | ---------- | ------------------------------- | +| 75 | JUMPDEST | Value\*+CALLVALUE 0 6 CALLVALUE | +| 76 | SWAP1 | 0 Value\*+CALLVALUE 6 CALLVALUE | +| 77 | SWAP2 | 6 Value\*+CALLVALUE 0 CALLVALUE | +| 78 | SSTORE | 0 CALLVALUE | -Buraya gelince de (bu, çağrı verisinin boş olmasını gerektirir), `Value*`'yu çağrı değerine ekleyelim. Bu `Transfer` işlemlerinin yaptıkları ile tutarlıdır. +If we get here (which requires the call data to be empty) we add to `Value*` the call value. This is consistent with what we say `Transfer` transactions do. -| Offset | Opcode | -| -----: | ------ | -| 79 | POP | -| 7A | POP | -| 7B | STOP | +| Offset | İşlem kodu | +| -----: | ---------- | +| 79 | POP | +| 7A | POP | +| 7B | STOP | -Son olarak, yığını temizleyin (aslında pek de gerekli değildir) ve işlemin başarıyla tamamlandığına dair sinyali verin. +Finally, clear the stack (which isn't necessary) and signal the successful end of the transaction. -Hepsini özetlemek için işte başlangıçtaki kod için bir akış şeması. +To sum it all up, here's a flowchart for the initial code. -![Giriş noktası akış şeması](flowchart-entry.png) +![Entry point flowchart](flowchart-entry.png) -## 0x7C'deki İşleyici {#the-handler-at-0x7c} +## The Handler at 0x7C {#the-handler-at-0x7c} -Bu işleyicinin ne yaptığını bilerek başlığa koymadım. Buradaki amaç, size bu spesifik sözleşmenin nasıl çalıştığını değil, sözleşmelere nasıl tersine mühendislik yapacağınızı öğretmek. Ne yaptığını benimle aynı şekilde öğreneceksiniz, yani kodu takip ederek. +I purposely did not put in the heading what this handler does. The point isn't to teach you how this specific contract works, but how to reverse engineer contracts. You will learn what it does the same way I did, by following the code. -Buraya birkaç farklı yerden geliriz: +We get here from several places: -- Eğer çağrı verisi 1, 2 ya da 3 baytsa (0x63 kaymasından) -- Eğer yöntem imzası bilinmiyorsa (0x42 ve 0x5D kaymalarından) +- If there is call data of 1, 2, or 3 bytes (from offset 0x63) +- If the method signature is unknown (from offsets 0x42 and 0x5D) -| Offset | Opcode | Yığın | -| -----: | ------------ | -------------------- | -| 7C | JUMPDEST | | -| 7D | PUSH1 0x00 | 0x00 | -| 7F | PUSH2 0x009d | 0x9D 0x00 | -| 82 | PUSH1 0x03 | 0x03 0x9D 0x00 | +| Offset | İşlem kodu | Yığın | +| -----: | ------------ | ------------------------------------------------------------------------ | +| 7C | JUMPDEST | | +| 7D | PUSH1 0x00 | 0x00 | +| 7F | PUSH2 0x009d | 0x9D 0x00 | +| 82 | PUSH1 0x03 | 0x03 0x9D 0x00 | | 84 | SLOAD | Storage[3] 0x9D 0x00 | -Bu başka bir depolama hücresidir, herhangi bir işlemde bulamadığım bir hücre. Bu yüzden bunun ne anlama geldiğini bilmek biraz daha zor. Aşağıdaki kod bunu daha açık hale getirecektir. +This is another storage cell, one that I couldn't find in any transactions so it's harder to know what it means. The code below will make it clearer. -| Offset | Opcode | Yığın | -| -----: | ------------------------------------------------- | ------------------------------- | +| Offset | İşlem kodu | Yığın | +| -----: | ------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | | 85 | PUSH20 0xffffffffffffffffffffffffffffffffffffffff | 0xff....ff Storage[3] 0x9D 0x00 | -| 9A | AND | Storage[3]-as-address 0x9D 0x00 | - -Bu işlem kodları Storage[3]'den okuduğumuz değeri 160 bite kırpar, bu da bir Ethereum adresinin uzunluğudur. - -| Offset | Opcode | Yığın | -| -----: | ------ | ------------------------------- | -| 9B | SWAP1 | 0x9D Storage[3]-as-address 0x00 | -| 9C | JUMP | Storage[3]-as-address 0x00 | - -Bu sıçrama sadece bir sonraki işlem koduna gideceğimiz için gereksizdir. Bu kod, ulaşabileceği gaz verimliliğine yakın bile değildir. - -| Offset | İşlem kodları | Yığın | -| -----: | ------------- | ------------------------------- | -| 9D | JUMPDEST | Storage[3]-as-address 0x00 | -| 9E | SWAP1 | 0x00 Storage[3]-as-address | -| 9F | POP | Storage[3]-as-address | -| A0 | PUSH1 0x40 | 0x40 Storage[3]-as-address | -| A2 | MLOAD | Mem[0x40] Storage[3]-as-address | - -Bu kodun en başında Mem[0x40]'i 0x80 olarak ayarlıyoruz. 0x40'ı aradığımızda, değiştirmediğimizi görüyoruz; yani 0x80 olduğunu varsayabiliriz. - -| Offset | İşlem kodları | Yığın | -| -----: | ------------- | ------------------------------------------------- | -| A3 | CALLDATASIZE | CALLDATASIZE 0x80 Storage[3]-as-address | -| A4 | PUSH1 0x00 | 0x00 CALLDATASIZE 0x80 Storage[3]-as-address | -| A6 | DUP3 | 0x80 0x00 CALLDATASIZE 0x80 Storage[3]-as-address | -| A7 | CALLDATACOPY | 0x80 Storage[3]-as-address | - -0x80'den başlayarak tüm veriyi belleğe kopyalayın. - -| Offset | İşlem kodu | Yığın | -| -----: | ------------- | -------------------------------------------------------------------------------- | -| A8 | PUSH1 0x00 | 0x00 0x80 Storage[3]-as-address | -| AA | DUP1 | 0x00 0x00 0x80 Storage[3]-as-address | -| AB | CALLDATASIZE | CALLDATASIZE 0x00 0x00 0x80 Storage[3]-as-address | -| AC | DUP4 | 0x80 CALLDATASIZE 0x00 0x00 0x80 Storage[3]-as-address | -| AD | DUP6 | Storage[3]-as-address 0x80 CALLDATASIZE 0x00 0x00 0x80 Storage[3]-as-address | -| AE | GAS | GAS Storage[3]-as-address 0x80 CALLDATASIZE 0x00 0x00 0x80 Storage[3]-as-address | -| AF | DELEGATE_CALL | | - -Şimdi her şey daha açık. Bu sözleşme asıl işi yapması için Storage[3]'teki adresi arayan bir [vekil](https://blog.openzeppelin.com/proxy-patterns/) olarak hareket edebilir. `DELEGATE_CALL` ayrı bir sözleşmeye çağrı yapar, fakat aynı depoda kalır. Bu, vekili olduğumuz yetkili sözleşmenin aynı depolama alanına eriştiği anlamına gelir. Bu çağrı için parametreler şu şekildedir: - -- _Gaz_: Kalan tüm gaz -- _Aranan adres_: Adres-olarak-Storage[3] -- _Çağrı verisi_ Orijinal çağrı verisini koyduğumuz 0x80'den başlayan CALLDATASIZE baytları -- _Dönen veri_: Yok (0x00 - 0x00) Dönen veriyi başka şekillerde alacağız (aşağıya bakın) - -| Offset | İşlem kodları | Yığın | -| -----: | -------------- | --------------------------------------------------------------------------------------------- | +| 9A | AND | Storage[3]-as-address 0x9D 0x00 | + +These opcodes truncate the value we read from Storage[3] to 160 bits, the length of an Ethereum address. + +| Offset | İşlem kodu | Yığın | +| -----: | ---------- | ----------------------------------------------------------------------------------- | +| 9B | SWAP1 | 0x9D Storage[3]-as-address 0x00 | +| 9C | JUMP | Storage[3]-as-address 0x00 | + +This jump is superfluous, since we're going to the next opcode. This code isn't nearly as gas-efficient as it could be. + +| Offset | İşlem kodu | Yığın | +| -----: | ---------- | --------------------------------------------------------------------------------------------------------------------------------------- | +| 9D | JUMPDEST | Depolama[3]-as-address 0x00 | +| 9E | SWAP1 | 0x00 Storage[3]-as-address | +| 9F | POP | Storage[3]-as-address | +| A0 | PUSH1 0x40 | 0x40 Storage[3]-as-address | +| A2 | MLOAD | Mem[0x40] Storage[3]-as-address | + +In the very beginning of the code we set Mem[0x40] to 0x80. If we look for 0x40 later, we see that we don't change it - so we can assume it is 0x80. + +| Offset | İşlem kodu | Yığın | +| -----: | ------------ | ----------------------------------------------------------------------------------------------------- | +| A3 | CALLDATASIZE | CALLDATASIZE 0x80 Storage[3]-as-address | +| A4 | PUSH1 0x00 | 0x00 CALLDATASIZE 0x80 Storage[3]-as-address | +| A6 | DUP3 | 0x80 0x00 CALLDATASIZE 0x80 Storage[3]-as-address | +| A7 | CALLDATACOPY | 0x80 Storage[3]-as-address | + +Copy all the call data to memory, starting at 0x80. + +| Offset | İşlem kodu | Yığın | +| -----: | ---------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| A8 | PUSH1 0x00 | 0x00 0x80 Storage[3]-as-address | +| AA | DUP1 | 0x00 0x00 0x80 Storage[3]-as-address | +| AB | CALLDATASIZE | CALLDATASIZE 0x00 0x00 0x80 Storage[3]-as-address | +| AC | DUP4 | 0x80 CALLDATASIZE 0x00 0x00 0x80 Storage[3]-as-address | +| AD | DUP6 | Storage[3]-as-address 0x80 CALLDATASIZE 0x00 0x00 0x80 Storage[3]-as-address | +| AE | GAS | GAS Storage[3]-as-address 0x80 CALLDATASIZE 0x00 0x00 0x80 Storage[3]-as-address | +| AF | DELEGATE_CALL | | + +Now things are a lot clearer. This contract can act as a [proxy](https://blog.openzeppelin.com/proxy-patterns/), calling the address in Storage[3] to do the real work. `DELEGATE_CALL` calls a separate contract, but stays in the same storage. This means that the delegated contract, the one we are a proxy for, accesses the same storage space. The parameters for the call are: + +- _Gas_: All the remaining gas +- _Called address_: Storage[3]-as-address +- _Call data_: The CALLDATASIZE bytes starting at 0x80, which is where we put the original call data +- _Return data_: None (0x00 - 0x00) We'll get the return data by other means (see below) + +| Offset | İşlem kodu | Yığın | +| -----: | -------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | B0 | RETURNDATASIZE | RETURNDATASIZE (((call success/failure))) 0x80 Storage[3]-as-address | | B1 | DUP1 | RETURNDATASIZE RETURNDATASIZE (((call success/failure))) 0x80 Storage[3]-as-address | | B2 | PUSH1 0x00 | 0x00 RETURNDATASIZE RETURNDATASIZE (((call success/failure))) 0x80 Storage[3]-as-address | | B4 | DUP5 | 0x80 0x00 RETURNDATASIZE RETURNDATASIZE (((call success/failure))) 0x80 Storage[3]-as-address | -| B5 | RETURNDATACOPY | RETURNDATASIZE (((call success/failure))) 0x80 Storage[3]-as-address | +| B5 | RETURNDATACOPY | RETURNDATASIZE (((çağrı başarısı/başarısızlığı))) 0x80 Depolama[3]-as-address | -Burada dönen veriyi 0x80'den başlayan arabellek hafızasına kopyalıyoruz. +Here we copy all the return data to the memory buffer starting at 0x80. -| Offset | İşlem kodları | Yığın | -| -----: | ------------- | ---------------------------------------------------------------------------------------------------------------------------- | -| B6 | DUP2 | (((call success/failure))) RETURNDATASIZE (((call success/failure))) 0x80 Storage[3]-as-address | -| B7 | DUP1 | (((call success/failure))) (((call success/failure))) RETURNDATASIZE (((call success/failure))) 0x80 Storage[3]-as-address | -| B8 | ISZERO | (((did the call fail))) (((call success/failure))) RETURNDATASIZE (((call success/failure))) 0x80 Storage[3]-as-address | -| B9 | PUSH2 0x00c0 | 0xC0 (((did the call fail))) (((call success/failure))) RETURNDATASIZE (((call success/failure))) 0x80 Storage[3]-as-address | -| BC | JUMPI | (((call success/failure))) RETURNDATASIZE (((call success/failure))) 0x80 Storage[3]-as-address | -| BD | DUP2 | RETURNDATASIZE (((call success/failure))) RETURNDATASIZE (((call success/failure))) 0x80 Storage[3]-as-address | -| BE | DUP5 | 0x80 RETURNDATASIZE (((call success/failure))) RETURNDATASIZE (((call success/failure))) 0x80 Storage[3]-as-address | -| BF | RETURN | | +| Offset | İşlem kodu | Yığın | +| -----: | ------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| B6 | DUP2 | (((call success/failure))) RETURNDATASIZE (((call success/failure))) 0x80 Storage[3]-as-address | +| B7 | DUP1 | (((call success/failure))) (((call success/failure))) RETURNDATASIZE (((call success/failure))) 0x80 Storage[3]-as-address | +| B8 | ISZERO | (((did the call fail))) (((call success/failure))) RETURNDATASIZE (((call success/failure))) 0x80 Storage[3]-as-address | +| B9 | PUSH2 0x00c0 | 0xC0 (((did the call fail))) (((call success/failure))) RETURNDATASIZE (((call success/failure))) 0x80 Storage[3]-as-address | +| BC | JUMPI | (((çağrı başarısı/başarısızlığı))) RETURNDATASIZE (((çağrı başarısı/başarısızlığı))) 0x80 Depolama[3]-as-address | +| BD | DUP2 | RETURNDATASIZE (((call success/failure))) RETURNDATASIZE (((call success/failure))) 0x80 Storage[3]-as-address | +| BE | DUP5 | 0x80 RETURNDATASIZE (((call success/failure))) RETURNDATASIZE (((call success/failure))) 0x80 Storage[3]-as-address | +| BF | RETURN | | -Yani çağrının ardından dönen veriyi 0x80 - 0x80+RETURNDATASIZE arabelleğine kopyaladıktan sonra, çağrı başarılı olduysa sonrasında tam olarak o arabellekle `RETURN` yapıyoruz. +So after the call we copy the return data to the buffer 0x80 - 0x80+RETURNDATASIZE, and if the call is successful we then `RETURN` with exactly that buffer. -### DELEGATECALL Başarısız oldu {#delegatecall-failed} +### DELEGATECALL Failed {#delegatecall-failed} -Buraya, yani 0xC0'a geldiysek, çağrı yaptığımız sözleşme geri dönmüştür. Bu sözleşme açısından sadece bir vekil olduğumuz için aynı veriyi döndürmek ve ayrıca geri dönmek istiyoruz. +If we get here, to 0xC0, it means that the contract we called reverted. As we are just a proxy for that contract, we want to return the same data and also revert. -| Offset | Işlem kodları | Yığın | -| -----: | ------------- | ------------------------------------------------------------------------------------------------------------------- | -| C0 | JUMPDEST | (((call success/failure))) RETURNDATASIZE (((call success/failure))) 0x80 Storage[3]-as-address | -| C1 | DUP2 | RETURNDATASIZE (((call success/failure))) RETURNDATASIZE (((call success/failure))) 0x80 Storage[3]-as-address | -| C2 | DUP5 | 0x80 RETURNDATASIZE (((call success/failure))) RETURNDATASIZE (((call success/failure))) 0x80 Storage[3]-as-address | -| C3 | REVERT | | +| Offset | İşlem kodu | Yığın | +| -----: | ---------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| C0 | JUMPDEST | (((çağrı başarısı/başarısızlığı))) RETURNDATASIZE (((çağrı başarısı/başarısızlığı))) 0x80 Depolama[3]-as-address | +| C1 | DUP2 | RETURNDATASIZE (((çağrı başarısı/başarısızlığı))) RETURNDATASIZE (((çağrı başarısı/başarısızlığı))) 0x80 Depolama[3]-as-address | +| C2 | DUP5 | 0x80 RETURNDATASIZE (((çağrı başarısı/başarısızlığı))) RETURNDATASIZE (((çağrı başarısı/başarısızlığı))) 0x80 Depolama[3]-as-address | +| C3 | REVERT | | -Yani daha önce `RETURN`: 0x80 - 0x80+RETURNDATASIZE için kullandığımız arabellekle `REVERT` yapıyoruz +So we `REVERT` with the same buffer we used for `RETURN` earlier: 0x80 - 0x80+RETURNDATASIZE -![Vekil akış şeması çağrısı](flowchart-proxy.png) +![Call to proxy flowchart](flowchart-proxy.png) -## ABI çağrıları {#abi-calls} +## ABI calls {#abi-calls} -Eğer veri boyutu 4 bayt ya da daha fazlaysa bu, geçerli bir ABI çağrısı olabilir. +If the call data size is four bytes or more this might be a valid ABI call. -| Offset | Opcode | Yığın | -| -----: | ------------ | ------------------------------------------------- | -| D | PUSH1 0x00 | 0x00 | +| Offset | İşlem kodu | Yığın | +| -----: | ------------ | ----------------------------------------------------------------------------------------------------------------------------- | +| D | PUSH1 0x00 | 0x00 | | F | CALLDATALOAD | (((First word (256 bits) of the call data))) | | 10 | PUSH1 0xe0 | 0xE0 (((First word (256 bits) of the call data))) | | 12 | SHR | (((first 32 bits (4 bytes) of the call data))) | -Etherscan bize `1C`'nin bilinmeyen bir işlem kodu olduğunu söylüyor, çünkü [bu, Etherscan bu özelliği yazdıktan sonra eklendi](https://eips.ethereum.org/EIPS/eip-145) ve onu henüz güncellemediler. [Güncel bir işlem kodu tablosu](https://github.com/wolflo/evm-opcodes) bize bunun sağa kaydırma olduğunu gösteriyor +Etherscan tells us that `1C` is an unknown opcode, because [it was added after Etherscan wrote this feature](https://eips.ethereum.org/EIPS/eip-145) and they haven't updated it. An [up to date opcode table](https://github.com/wolflo/evm-opcodes) shows us that this is shift right -| Offset | Opcode | Yığın | -| -----: | ---------------- | -------------------------------------------------------------------------------------------------------- | +| Offset | İşlem kodu | Yığın | +| -----: | ---------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 13 | DUP1 | (((first 32 bits (4 bytes) of the call data))) (((first 32 bits (4 bytes) of the call data))) | | 14 | PUSH4 0x3cd8045e | 0x3CD8045E (((first 32 bits (4 bytes) of the call data))) (((first 32 bits (4 bytes) of the call data))) | -| 19 | GT | 0x3CD8045E>first-32-bits-of-the-call-data (((first 32 bits (4 bytes) of the call data))) | -| 1A | PUSH2 0x0043 | 0x43 0x3CD8045E>first-32-bits-of-the-call-data (((first 32 bits (4 bytes) of the call data))) | -| 1D | JUMPI | (((first 32 bits (4 bytes) of the call data))) | +| 19 | GT | 0x3CD8045E>first-32-bits-of-the-call-data (((first 32 bits (4 bytes) of the call data))) | +| 1A | PUSH2 0x0043 | 0x43 0x3CD8045E>first-32-bits-of-the-call-data (((first 32 bits (4 bytes) of the call data))) | +| 1D | JUMPI | (((çağrı verisinin ilk 32 biti (4 baytı))) | -Testleri eşleştiren yöntem imzasını buradaki gibi ikiye bölmek, ortalama olarak testlerin yarısından tasarruf etmemizi sağlar. Bu cümlenin hemen ardından gelen kod ve 0x43'teki kod aynı deseni izler: İlk 32 bitlik çağrı verileri için `DUP1`, ardından `PUSH4 (((method signature>` uygulayın, eşitliği kontrol etmek için `EQ` çalıştırın ve ardından yöntem imzası eşleşirse `JUMPI` komutunu kullanın. Yöntem imzaları, adresleri ve biliniyorsa [karşılık gelen yöntem tanımı](https://www.4byte.directory/) aşağıda verilmiştir: +By dividing the method signature matching tests in two like this saves half the tests on average. The code that immediately follows this and the code in 0x43 follow the same pattern: `DUP1` the first 32 bits of the call data, `PUSH4 (((method signature>`, run `EQ` to check for equality, and then `JUMPI` if the method signature matches. Here are the method signatures, their addresses, and if known [the corresponding method definition](https://www.4byte.directory/): -| Metod | Yöntem imzası | Sıçranacak kayma | -| -------------------------------------------------------------------------------------- | ------------- | ---------------- | -| [splitter()](https://www.4byte.directory/signatures/?bytes4_signature=0x3cd8045e) | 0x3cd8045e | 0x0103 | -| ??? | 0x81e580d3 | 0x0138 | -| [currentWindow()](https://www.4byte.directory/signatures/?bytes4_signature=0xba0bafb4) | 0xba0bafb4 | 0x0158 | -| ??? | 0x1f135823 | 0x00C4 | -| [merkleRoot()](https://www.4byte.directory/signatures/?bytes4_signature=0x2eb4a7ab) | 0x2eb4a7ab | 0x00ED | +| Method | Method signature | Offset to jump into | +| --------------------------------------------------------------------------------------------------------- | ---------------- | ------------------- | +| [splitter()](https://www.4byte.directory/signatures/?bytes4_signature=0x3cd8045e) | 0x3cd8045e | 0x0103 | +| ??? | 0x81e580d3 | 0x0138 | +| [currentWindow()](https://www.4byte.directory/signatures/?bytes4_signature=0xba0bafb4) | 0xba0bafb4 | 0x0158 | +| ??? | 0x1f135823 | 0x00C4 | +| [merkleRoot()](https://www.4byte.directory/signatures/?bytes4_signature=0x2eb4a7ab) | 0x2eb4a7ab | 0x00ED | -Eşleşme bulunamazsa kod, bizim vekili olduğumuz sözleşmenin bir eşleşmesi olmasını umarak [0x7C'deki vekil işlayicisine](#the-handler-at-0x7c) sıçrar. +If no match is found, the code jumps to [the proxy handler at 0x7C](#the-handler-at-0x7c), in the hope that the contract to which we are a proxy has a match. -![ABI çağrıları akış şeması](flowchart-abi.png) +![ABI calls flowchart](flowchart-abi.png) ## splitter() {#splitter} -| Offset | Opcode | Yığın | +| Offset | İşlem kodu | Yığın | | -----: | ------------ | ----------------------------- | | 103 | JUMPDEST | | | 104 | CALLVALUE | CALLVALUE | @@ -314,24 +312,24 @@ Eşleşme bulunamazsa kod, bizim vekili olduğumuz sözleşmenin bir eşleşmesi | 10D | DUP1 | 0x00 0x00 CALLVALUE | | 10E | REVERT | | -Bu fonksiyonun yaptığı ilk şey, çağrının ETH göndermediğini doğrulamaktır. Bu fonksiyon [`payable`](https://solidity-by-example.org/payable/) değildir. Eğer biri bize ETH gönderdiyse bu bir hata olarak gerçekleşmiştir ve o kişiyi ETH'lerini geri alamayacağı bir duruma sokmaktan kaçınmak için `REVERT` yapmamız gerekir. +The first thing this function does is check that the call did not send any ETH. This function is not [`payable`](https://solidity-by-example.org/payable/). If somebody sent us ETH that must be a mistake and we want to `REVERT` to avoid having that ETH where they can't get it back. -| Offset | Opcode | Yığın | -| -----: | ------------------------------------------------- | --------------------------------------------------------------------------- | -| 10F | JUMPDEST | | -| 110 | POP | | -| 111 | PUSH1 0x03 | 0x03 | -| 113 | SLOAD | (((Storage[3] a.k.a the contract for which we are a proxy))) | -| 114 | PUSH1 0x40 | 0x40 (((Storage[3] a.k.a the contract for which we are a proxy))) | -| 116 | MLOAD | 0x80 (((Storage[3] a.k.a the contract for which we are a proxy))) | +| Offset | İşlem kodu | Yığın | +| -----: | ------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| 10F | JUMPDEST | | +| 110 | POP | | +| 111 | PUSH1 0x03 | 0x03 | +| 113 | SLOAD | (((Storage[3] a.k.a the contract for which we are a proxy))) | +| 114 | PUSH1 0x40 | 0x40 (((Storage[3] a.k.a the contract for which we are a proxy))) | +| 116 | MLOAD | 0x80 (((Storage[3] a.k.a the contract for which we are a proxy))) | | 117 | PUSH20 0xffffffffffffffffffffffffffffffffffffffff | 0xFF...FF 0x80 (((Storage[3] a.k.a the contract for which we are a proxy))) | | 12C | SWAP1 | 0x80 0xFF...FF (((Storage[3] a.k.a the contract for which we are a proxy))) | | 12D | SWAP2 | (((Storage[3] a.k.a the contract for which we are a proxy))) 0xFF...FF 0x80 | -| 12E | VE | ProxyAddr 0x80 | -| 12F | DUP2 | 0x80 ProxyAddr 0x80 | -| 130 | MSTORE | 0x80 | +| 12E | AND | ProxyAddr 0x80 | +| 12F | DUP2 | 0x80 ProxyAddr 0x80 | +| 130 | MSTORE | 0x80 | -Ve 0x80 artık vekil adresini içeriyor +And 0x80 now contains the proxy address | Offset | Opcode | Yığın | | -----: | ------------ | --------- | @@ -340,9 +338,9 @@ Ve 0x80 artık vekil adresini içeriyor | 134 | PUSH2 0x00e4 | 0xE4 0xA0 | | 137 | JUMP | 0xA0 | -### E4 Kodu {#the-e4-code} +### The E4 Code {#the-e4-code} -Bu bu satırları ilk görüşümüz, fakat bunlar diğer yöntemlerle paylaşıldı (aşağı bakın). X yığınındaki değeri arayacağız; `splitter()`'da bu Xin değerinin 0xA0 olduğunu unutmayın. +This is the first time we see these lines, but they are shared with other methods (see below). So we'll call the value in the stack X, and just remember that in `splitter()` the value of this X is 0xA0. | Offset | Opcode | Yığın | | -----: | ---------- | ----------- | @@ -351,31 +349,31 @@ Bu bu satırları ilk görüşümüz, fakat bunlar diğer yöntemlerle paylaşı | E7 | MLOAD | 0x80 X | | E8 | DUP1 | 0x80 0x80 X | | E9 | SWAP2 | X 0x80 0x80 | -| EA | ALT | X-0x80 0x80 | +| EA | SUB | X-0x80 0x80 | | EB | SWAP1 | 0x80 X-0x80 | | EC | RETURN | | -Yani bu kod, yığında (X) bir bellek işaretçisi alır ve sözleşmenin, arabelleği 0x80 - X olan bir `RETURN` durumuna uğramasına sebep olur. +So this code receives a memory pointer in the stack (X), and causes the contract to `RETURN` with a buffer that is 0x80 - X. -`splitter()` durumunda bu, vekili olduğumuz adresi döndürür. `RETURN`, veriyi yazdığımız yerin adresi olan 0x80-0x9F'deki arabelleği verir (0x130un yukarısındaki kayma). +In the case of `splitter()`, this returns the address for which we are a proxy. `RETURN` returns the buffer in 0x80-0x9F, which is where we wrote this data (offset 0x130 above). ## currentWindow() {#currentwindow} -0x158-0x163 kaymalarındaki kod, `splitter()` içindeki 0x103-0x10E'de gördüğümüzle aynıdır (`JUMPI` hedefi dışında), bu nedenle `currentWindow()`'un da `payable` olmadığını biliyoruz. +The code in offsets 0x158-0x163 is identical to what we saw in 0x103-0x10E in `splitter()` (other than the `JUMPI` destination), so we know `currentWindow()` is also not `payable`. -| Offset | Opcode | Yığın | -| -----: | ------------ | -------------------- | -| 164 | JUMPDEST | | -| 165 | POP | | -| 166 | PUSH2 0x00da | 0xDA | -| 169 | PUSH1 0x01 | 0x01 0xDA | +| Offset | Opcode | Yığın | +| -----: | ------------ | ------------------------------------------------------------------------ | +| 164 | JUMPDEST | | +| 165 | POP | | +| 166 | PUSH2 0x00da | 0xDA | +| 169 | PUSH1 0x01 | 0x01 0xDA | | 16B | SLOAD | Storage[1] 0xDA | | 16C | DUP2 | 0xDA Storage[1] 0xDA | | 16D | JUMP | Storage[1] 0xDA | -### DA kodu {#the-da-code} +### The DA code {#the-da-code} -Bu kod da diğer yöntemlerle paylaşılmıştır. Yani Y yığınındaki değeri çağıracağız; `currentWindow()`'da bu Y'nin değerinin Storage[1] olduğunu unutmayın. +This code is also shared with other methods. So we'll call the value in the stack Y, and just remember that in `currentWindow()` the value of this Y is Storage[1]. | Offset | Opcode | Yığın | | -----: | ---------- | ---------------- | @@ -386,57 +384,57 @@ Bu kod da diğer yöntemlerle paylaşılmıştır. Yani Y yığınındaki değer | DF | DUP2 | 0x80 Y 0x80 0xDA | | E0 | MSTORE | 0x80 0xDA | -0x80-0x9F'e Y'yi yazalım. +Write Y to 0x80-0x9F. | Offset | Opcode | Yığın | | -----: | ---------- | -------------- | | E1 | PUSH1 0x20 | 0x20 0x80 0xDA | | E3 | EKLE | 0xA0 0xDA | -Ve geri kalanı da [yukarıda](#the-e4-code) anlatılmıştır. Yani 0xDA'ya yapılan sıçramalar yığının başını (Y), 0x80-0x9F'ye yazar ve bu değeri döndürür. Bir `currentWindow()` durumunda, Storage[1]'ı verir. +And the rest is already explained [above](#the-e4-code). So jumps to 0xDA write the stack top (Y) to 0x80-0x9F, and return that value. In the case of `currentWindow()`, it returns Storage[1]. ## merkleRoot() {#merkleroot} -0x158-0x163 kaymalarındaki kod, `splitter()` içindeki 0x103-0x10E'de gördüğümüzle aynıdır (`JUMPI` hedefi dışında), bu nedenle `merkleRoot()`'un da `payable` olmadığını biliyoruz. +The code in offsets 0xED-0xF8 is identical to what we saw in 0x103-0x10E in `splitter()` (other than the `JUMPI` destination), so we know `merkleRoot()` is also not `payable`. -| Offset | Opcode | Yığın | -| -----: | ------------ | -------------------- | -| F9 | JUMPDEST | | -| FA | POP | | -| FB | PUSH2 0x00da | 0xDA | -| FE | PUSH1 0x00 | 0x00 0xDA | +| Offset | Opcode | Yığın | +| -----: | ------------ | ------------------------------------------------------------------------ | +| F9 | JUMPDEST | | +| FA | POP | | +| FB | PUSH2 0x00da | 0xDA | +| FE | PUSH1 0x00 | 0x00 0xDA | | 100 | SLOAD | Storage[0] 0xDA | | 101 | DUP2 | 0xDA Storage[0] 0xDA | | 102 | JUMP | Storage[0] 0xDA | -Sıçramadan sonra ne olduğunu [çoktan anladık](#the-da-code). Yani `merkleRoot()` Storage[0]'ı döndürür. +What happens after the jump [we already figured out](#the-da-code). So `merkleRoot()` returns Storage[0]. ## 0x81e580d3 {#0x81e580d3} -0xC4-0xCF kaymalarındaki kod, `splitter()` içindeki 0x103-0x10E'de gördüğümüzle aynıdır (`JUMPI` hedefi dışında), dolayısıyla bu fonksiyonun da `payable` olmadığını biliyoruz. - -| Offset | Opcode | Yığın | -| -----: | ------------ | ------------------------------------------------------------ | -| 144 | JUMPDEST | | -| 145 | POP | | -| 146 | PUSH2 0x00da | 0xDA | -| 149 | PUSH2 0x0153 | 0x0153 0xDA | -| 14C | CALLDATASIZE | CALLDATASIZE 0x0153 0xDA | -| 14D | PUSH1 0x04 | 0x04 CALLDATASIZE 0x0153 0xDA | -| 14F | PUSH2 0x018f | 0x018F 0x04 CALLDATASIZE 0x0153 0xDA | -| 152 | JUMP | 0x04 CALLDATASIZE 0x0153 0xDA | -| 18F | JUMPDEST | 0x04 CALLDATASIZE 0x0153 0xDA | -| 190 | PUSH1 0x00 | 0x00 0x04 CALLDATASIZE 0x0153 0xDA | -| 192 | PUSH1 0x20 | 0x20 0x00 0x04 CALLDATASIZE 0x0153 0xDA | -| 194 | DUP3 | 0x04 0x20 0x00 0x04 CALLDATASIZE 0x0153 0xDA | -| 195 | DUP5 | CALLDATASIZE 0x04 0x20 0x00 0x04 CALLDATASIZE 0x0153 0xDA | -| 196 | SUB | CALLDATASIZE-4 0x20 0x00 0x04 CALLDATASIZE 0x0153 0xDA | -| 197 | SLT | CALLDATASIZE-4\<32 0x00 0x04 CALLDATASIZE 0x0153 0xDA | -| 198 | ISZERO | CALLDATASIZE-4>=32 0x00 0x04 CALLDATASIZE 0x0153 0xDA | -| 199 | PUSH2 0x01a0 | 0x01A0 CALLDATASIZE-4>=32 0x00 0x04 CALLDATASIZE 0x0153 0xDA | -| 19C | JUMPI | 0x00 0x04 CALLDATASIZE 0x0153 0xDA | - -Bu fonksiyon en az 32 bayt (1 kelime) çağrı verisi alıyor gibi görünüyor. +The code in offsets 0x138-0x143 is identical to what we saw in 0x103-0x10E in `splitter()` (other than the `JUMPI` destination), so we know this function is also not `payable`. + +| Offset | Opcode | Yığın | +| -----: | ------------ | ------------------------------------------------------------------------------- | +| 144 | JUMPDEST | | +| 145 | POP | | +| 146 | PUSH2 0x00da | 0xDA | +| 149 | PUSH2 0x0153 | 0x0153 0xDA | +| 14C | CALLDATASIZE | CALLDATASIZE 0x0153 0xDA | +| 14D | PUSH1 0x04 | 0x04 CALLDATASIZE 0x0153 0xDA | +| 14F | PUSH2 0x018f | 0x018F 0x04 CALLDATASIZE 0x0153 0xDA | +| 152 | JUMP | 0x04 CALLDATASIZE 0x0153 0xDA | +| 18F | JUMPDEST | 0x04 CALLDATASIZE 0x0153 0xDA | +| 190 | PUSH1 0x00 | 0x00 0x04 CALLDATASIZE 0x0153 0xDA | +| 192 | PUSH1 0x20 | 0x20 0x00 0x04 CALLDATASIZE 0x0153 0xDA | +| 194 | DUP3 | 0x04 0x20 0x00 0x04 CALLDATASIZE 0x0153 0xDA | +| 195 | DUP5 | CALLDATASIZE 0x04 0x20 0x00 0x04 CALLDATASIZE 0x0153 0xDA | +| 196 | SUB | CALLDATASIZE-4 0x20 0x00 0x04 CALLDATASIZE 0x0153 0xDA | +| 197 | SLT | CALLDATASIZE-4\<32 0x00 0x04 CALLDATASIZE 0x0153 0xDA | +| 198 | ISZERO | CALLDATASIZE-4>=32 0x00 0x04 CALLDATASIZE 0x0153 0xDA | +| 199 | PUSH2 0x01a0 | 0x01A0 CALLDATASIZE-4>=32 0x00 0x04 CALLDATASIZE 0x0153 0xDA | +| 19C | JUMPI | 0x00 0x04 CALLDATASIZE 0x0153 0xDA | + +It looks like this function takes at least 32 bytes (one word) of call data. | Offset | Opcode | Yığın | | -----: | ------ | -------------------------------------------- | @@ -444,80 +442,80 @@ Bu fonksiyon en az 32 bayt (1 kelime) çağrı verisi alıyor gibi görünüyor. | 19E | DUP2 | 0x00 0x00 0x00 0x04 CALLDATASIZE 0x0153 0xDA | | 19F | REVERT | | -Eğer hiçbir çağrı verisi almazsa bu işlem gelen hiçbir veri olmadan geri döndürülür. +If it doesn't get the call data the transaction is reverted without any return data. -Şimdi de _does_ fonksiyonu ihtiyacı olan çağrı verisini aldığında neler olduğunu görelim. +Let's see what happens if the function _does_ get the call data it needs. -| Offset | Opcode | Yığın | -| -----: | ------------ | ---------------------------------------- | -| 1A0 | JUMPDEST | 0x00 0x04 CALLDATASIZE 0x0153 0xDA | -| 1A1 | POP | 0x04 CALLDATASIZE 0x0153 0xDA | +| Offset | Opcode | Yığın | +| -----: | ------------ | ----------------------------------------------------------- | +| 1A0 | JUMPDEST | 0x00 0x04 CALLDATASIZE 0x0153 0xDA | +| 1A1 | POP | 0x04 CALLDATASIZE 0x0153 0xDA | | 1A2 | CALLDATALOAD | calldataload(4) CALLDATASIZE 0x0153 0xDA | -`calldataload(4)`, çağrı verisinin yöntem imzasından _sonraki_ ilk kelimesidir - -| Offset | Opcode | Yığın | -| -----: | ------------ | ---------------------------------------------------------------------------- | -| 1A3 | SWAP2 | 0x0153 CALLDATASIZE calldataload(4) 0xDA | -| 1A4 | SWAP1 | CALLDATASIZE 0x0153 calldataload(4) 0xDA | -| 1A5 | POP | 0x0153 calldataload(4) 0xDA | -| 1A6 | JUMP | calldataload(4) 0xDA | -| 153 | JUMPDEST | calldataload(4) 0xDA | -| 154 | PUSH2 0x016e | 0x016E calldataload(4) 0xDA | -| 157 | JUMP | calldataload(4) 0xDA | -| 16E | JUMPDEST | calldataload(4) 0xDA | -| 16F | PUSH1 0x04 | 0x04 calldataload(4) 0xDA | -| 171 | DUP2 | calldataload(4) 0x04 calldataload(4) 0xDA | -| 172 | DUP2 | 0x04 calldataload(4) 0x04 calldataload(4) 0xDA | -| 173 | SLOAD | Storage[4] calldataload(4) 0x04 calldataload(4) 0xDA | -| 174 | DUP2 | calldataload(4) Storage[4] calldataload(4) 0x04 calldataload(4) 0xDA | +`calldataload(4)` is the first word of the call data _after_ the method signature + +| Offset | Opcode | Yığın | +| -----: | ------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 1A3 | SWAP2 | 0x0153 CALLDATASIZE calldataload(4) 0xDA | +| 1A4 | SWAP1 | CALLDATASIZE 0x0153 calldataload(4) 0xDA | +| 1A5 | POP | 0x0153 calldataload(4) 0xDA | +| 1A6 | JUMP | calldataload(4) 0xDA | +| 153 | JUMPDEST | calldataload(4) 0xDA | +| 154 | PUSH2 0x016e | 0x016E calldataload(4) 0xDA | +| 157 | JUMP | calldataload(4) 0xDA | +| 16E | JUMPDEST | calldataload(4) 0xDA | +| 16F | PUSH1 0x04 | 0x04 calldataload(4) 0xDA | +| 171 | DUP2 | calldataload(4) 0x04 calldataload(4) 0xDA | +| 172 | DUP2 | 0x04 calldataload(4) 0x04 calldataload(4) 0xDA | +| 173 | SLOAD | Storage[4] calldataload(4) 0x04 calldataload(4) 0xDA | +| 174 | DUP2 | calldataload(4) Storage[4] calldataload(4) 0x04 calldataload(4) 0xDA | | 175 | LT | calldataload(4)\)`, diğeri de `isClaimed()` şeklindedir, dolayısıyla bir airdrop sözleşmesini andırır. İşlem kodundan işlem koduna geri kalanların üzerinden geçmek yerine, bu sözleşmeden üç fonksiyon için kullanılabilir sonuçlar oluşturan [geri derleyiciyi deneyebiliriz](https://etherscan.io/bytecode-decompiler?a=0x2f81e57ff4f4d83b40a9f719fd892d8e806e0761). Diğerlerine tersine mühendislik yapmak ise alıştırma olarak okuyucuya bırakılmıştır. +One of the remaining methods is `claim()`, and another is `isClaimed()`, so it looks like an airdrop contract. Instead of going through the rest opcode by opcode, we can [try the decompiler](https://etherscan.io/bytecode-decompiler?a=0x2f81e57ff4f4d83b40a9f719fd892d8e806e0761), which produces usable results for three functions from this contract. Reverse engineering the other ones is left as an exercise to the reader. ### scaleAmountByPercentage {#scaleamountbypercentage} -Bu fonksiyon için geri derleyicinin bize verdiği şey şudur: +This is what the decompiler gives us for this function: ```python def unknown8ffb5c97(uint256 _param1, uint256 _param2) payable: @@ -592,15 +590,15 @@ def unknown8ffb5c97(uint256 _param1, uint256 _param2) payable: return (_param1 * _param2 / 100 * 10^6) ``` -İlk `require` çağrı verilerinin, fonksiyon imzasının dört baytına ek olarak iki parametre için yeterli olan en az 64 bayta sahip olup olmadığını test eder. Eğer durum bu değilse, kesinlikle yanlış bir şeyler vardır. +The first `require` tests that the call data has, in addition to the four bytes of the function signature, at least 64 bytes, enough for the two parameters. If not then there is obviously something wrong. -`if` ifadesi, `_param1` değerinin sıfır olmadığını ve `_param1 * _param2` değerinin negatif olmadığını doğrulamaya çalışıyor gibi görünüyor. Muhtemelen paketleme durumlarını önlemek içindir. +The `if` statement seems to check that `_param1` is not zero, and that `_param1 * _param2` is not negative. It is probably to prevent cases of wrap around. -Son olarak, fonksiyon ölçeklendirilmiş bir değer döndürür. +Finally, the function returns a scaled value. -### talep et {#claim} +### claim {#claim} -Geri derleyicinin oluşturduğu kod karmaşık ve bunun haricinde tamamı da bizim açımızdan ilgili değil. Bunların bir kısmını atlayıp bize işe yarar bilgi sağlayacağına inandığım satırlara odaklanacağım +The code the decompiler creates is complex, and not all of it is relevant for us. I am going to skip some of it to focus on the lines that I believe provide useful information ```python def unknown2e7ba6ef(uint256 _param1, uint256 _param2, uint256 _param3, array _param4) payable: @@ -611,10 +609,10 @@ def unknown2e7ba6ef(uint256 _param1, uint256 _param2, uint256 _param3, array _pa revert with 0, 'cannot claim for a future window' ``` -Burada iki önemli şey görüyoruz: +We see here two important things: -- `_param2`, bir `uint256` olarak tanıtılmasına rağmen aslında bir adrestir -- `_param1`, şimdi ya da öncesinde `currentWindow` olması gereken, üstlenilen penceredir. +- `_param2`, while it is declared as a `uint256`, is actually an address +- `_param1` is the window being claimed, which has to be `currentWindow` or earlier. ```python ... @@ -622,7 +620,7 @@ Burada iki önemli şey görüyoruz: revert with 0, 'Account already claimed the given window' ``` -Yani artık Storage[5]'ın pencere ve adreslerden oluşan bir dizi olduğunu ve adresin o pencere için ödülü alıp almadığını biliyoruz. +So now we know that Storage[5] is an array of windows and addresses, and whether the address claimed the reward for that window. ```python ... @@ -642,7 +640,7 @@ Yani artık Storage[5]'ın pencere ve adreslerden oluşan bir dizi olduğunu ve revert with 0, 'Invalid proof' ``` -`unknown2eb4a7ab` değerinin aslında `merkleRoot()` fonksiyonu olduğunu biliyoruz, dolayısıyla bu kod bir [merkle kanıtını](https://medium.com/crypto-0-nite/merkle-proofs-explained-6dd429623dc5) doğruluyor gibi görünüyor. Bu, `_param4` değerinin bir merkle kanıtı olduğu anlamına geliyor. +We know that `unknown2eb4a7ab` is actually the function `merkleRoot()`, so this code looks like it is verifying a [merkle proof](https://medium.com/crypto-0-nite/merkle-proofs-explained-6dd429623dc5). This means that `_param4` is a merkle proof. ```python call addr(_param2) with: @@ -650,7 +648,7 @@ Yani artık Storage[5]'ın pencere ve adreslerden oluşan bir dizi olduğunu ve gas 30000 wei ``` -Bir sözleşme kendi ETH'sini başka bir adrese (sözleşme ya da harici olarak sahip olunan) işte bu şekilde transfer eder. Transfer edilecek miktar olan bir değerle ona çağrı yapar. Yani bu, ETH'nin bir airdrop'u gibi görünüyor. +This is how a contract transfers its own ETH to another address (contract or externally owned). It calls it with a value that is the amount to be transferred. So it looks like this is an airdrop of ETH. ```python if not return_data.size: @@ -660,22 +658,22 @@ Bir sözleşme kendi ETH'sini başka bir adrese (sözleşme ya da harici olarak value unknown81e580d3[_param1] * _param3 / 100 * 10^6 wei ``` -En alttaki iki satır, bize Storage[2]'ın da çağrı yaptığımız bir sözleşme olduğunu söyler. [Oluşturucu işlemine bakarsak](https://etherscan.io/tx/0xa1ea0549fb349eb7d3aff90e1d6ce7469fdfdcd59a2fd9b8d1f5e420c0d05b58#statechange) bu sözleşmenin [0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2](https://etherscan.io/address/0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2), [kaynak kodu Etherscan'e yüklenmiş bir Paketlenmiş Ether sözleşmesi olduğunu görürüz](https://etherscan.io/address/0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2#code). +The bottom two lines tell us that Storage[2] is also a contract that we call. If we [look at the constructor transaction](https://etherscan.io/tx/0xa1ea0549fb349eb7d3aff90e1d6ce7469fdfdcd59a2fd9b8d1f5e420c0d05b58#statechange) we see that this contract is [0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2](https://etherscan.io/address/0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2), a Wrapped Ether contract [whose source code has been uploaded to Etherscan](https://etherscan.io/address/0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2#code). -Sözleşme, `_param2`'ye ETH göndermeye çalışıyor gibi görünüyor. Eğer yapabilirse, çok iyi. Yapamazsa, [WETH](https://weth.tkn.eth.limo/) göndermeye çalışacak. Eğer `_param2` dışarıdan sahip olunan hesap (EOA) ise, her zaman ETH alabilir, fakat sözleşmeler ETH almayı reddedebilir. Bununla birlikte, WETH bir ERC-20'dir ve sözleşmeler bunu kabul etmeyi reddedemez. +So it looks like the contracts attempts to send ETH to `_param2`. If it can do it, great. If not, it attempts to send [WETH](https://weth.tkn.eth.limo/). If `_param2` is an externally owned account (EOA) then it can always receive ETH, but contracts can refuse to receive ETH. However, WETH is ERC-20 and contracts can't refuse to accept that. ```python ... log 0xdbd5389f: addr(_param2), unknown81e580d3[_param1] * _param3 / 100 * 10^6, bool(ext_call.success) ``` -Fonksiyonun sonunda bir günlük girdisinin oluşturulduğunu görüyoruz. [Oluşturulmuş günlük girdilerine bakın](https://etherscan.io/address/0x2510c039cc3b061d79e564b38836da87e31b342f#events) ve `0xdbd5...` ile başlayan konuyu filtreleyin. Böyle bir girdi oluşturmuş işlemlerden birine [tıklarsak](https://etherscan.io/tx/0xe7d3b7e00f645af17dfbbd010478ef4af235896c65b6548def1fe95b3b7d2274) gerçekten de üstlenme gibi göründüğünü görebiliriz; hesap, tersine mühendislik yaptığımız sözleşmeye bir mesaj göndermiş ve karşılığında ETH almıştır. +At the end of the function we see a log entry being generated. [Look at the generated log entries](https://etherscan.io/address/0x2510c039cc3b061d79e564b38836da87e31b342f#events) and filter on the topic that starts with `0xdbd5...`. If we [click one of the transactions that generated such an entry](https://etherscan.io/tx/0xe7d3b7e00f645af17dfbbd010478ef4af235896c65b6548def1fe95b3b7d2274) we see that indeed it looks like a claim - the account sent a message to the contract we're reverse engineering, and in return got ETH. -![Üstlenme işlemi](claim-tx.png) +![A claim transaction](claim-tx.png) ### 1e7df9d3 {#1e7df9d3} -Bu fonksiyon, yukarıdaki [`claim`](#claim) fonksiyonuna çok benziyor. Ayrıca bir merkle kanıtını kontrol eder, ilkine ETH transfer etmeyi dener ve aynı türde bir günlük girdisi oluşturur. +This function is very similar to [`claim`](#claim) above. It also checks a merkle proof, attempts to transfer ETH to the first, and produces the same type of log entry. ```python def unknown1e7df9d3(uint256 _param1, uint256 _param2, array _param3) payable: @@ -708,7 +706,7 @@ def unknown1e7df9d3(uint256 _param1, uint256 _param2, array _param3) payable: log 0xdbd5389f: addr(_param1), s, bool(ext_call.success) ``` -Asıl fark geri çekilecek olan pencere olan ilk parametrenin orada olmamasıdır. Bunun yerine, her pencerenin üstünde alınabilecek bir döngü vardır. +The main difference is that the first parameter, the window to withdraw, isn't there. Instead, there is a loop over all the windows that could be claimed. ```python idx = 0 @@ -737,8 +735,10 @@ Asıl fark geri çekilecek olan pencere olan ilk parametrenin orada olmamasıdı continue ``` -Yani tüm pencereleri üstlenen bir `claim` varyantı gibi görünüyor. +So it looks like a `claim` variant that claims all the windows. ## Sonuç {#conclusion} -Şu ana kadar kaynak kodu ulaşılabilir olmayan sözleşmeleri, işlem kodlarını ya da geri derleyiciyi kullanarak (eğer çalışırsa) nasıl anlayacağınızı öğrenmiş olmalısınız. Bu makalenin uzunluğundan da anlaşılacağı gibi, bir sözleşmeye tersine mühendislik uygulamak önemsiz değildir, ancak güvenliğin önemli olduğu bir sistemde sözleşmelerin vaat edildiği gibi çalıştığını doğrulayabilmek önemli bir beceridir. +By now you should know how to understand contracts whose source code is not available, using either the opcodes or (when it works) the decompiler. As is evident from the length of this article, reverse engineering a contract is not trivial, but in a system where security is essential it is an important skill to be able to verify contracts work as promised. + +[Çalışmalarımdan daha fazlası için buraya bakın](https://cryptodocguy.pro/). diff --git a/public/content/translations/tr/developers/tutorials/run-node-raspberry-pi/index.md b/public/content/translations/tr/developers/tutorials/run-node-raspberry-pi/index.md index b74b81f3e5a..ab7d8dfdf05 100644 --- a/public/content/translations/tr/developers/tutorials/run-node-raspberry-pi/index.md +++ b/public/content/translations/tr/developers/tutorials/run-node-raspberry-pi/index.md @@ -1,12 +1,14 @@ --- -title: Raspberry Pi 4'ünüzü sadece MicroSD kartı flaşlayarak bir düğüme nasıl dönüştürebilirsiniz -description: Raspberry Pi 4'ünüzü flaşlama, ethernet kablosu takma, SSD diskini bağlama ve Raspberry Pi 4'ünüzü çalıştırarak tam bir Ethereum düğümüne ve doğrulayıcısına dönüştürme +title: "Raspeberry Pi 4 üzerinde bir Ethereum düğümü çalıştırın" +description: "Raspberry Pi 4'ünüzü flash'layın, bir ethernet kablosu takın, SSD diski bağlayın ve cihazı çalıştırarak Raspberry Pi 4'ü tam bir Ethereum düğümü + doğrulayıcısına dönüştürün" author: "EthereumOnArm" tags: - - "istemciler" - - "yürütüm katmanı" - - "mutabakat katmanı" - - "düğümler" + [ + "istemciler", + "yürütme katmanı", + "mutabakat katmanı", + "düğümler" + ] lang: tr skill: intermediate published: 2022-06-10 @@ -14,101 +16,101 @@ source: Ethereum on ARM sourceUrl: https://ethereum-on-arm-documentation.readthedocs.io/en/latest/ --- -**Ethereum on Arm, Raspberry Pi'ı bir Ethereum düğümüne çevirebilecek olan kişiselleştirilmiş bir Linux görüntüsüdür.** +**Ethereum on Arm, bir Raspberry Pi'ı Ethereum düğümüne dönüştürebilen özel bir Linux görüntüsüdür.** -Ethereum on Arm'ı kullanarak Raspberry Pi'ı Ethereum düğümüne çevirmek için aşağıdaki donanım önerilir: +Ethereum on Arm'ı kullanarak bir Raspberry Pi'ı Ethereum düğümüne dönüştürmek için aşağıdaki donanımlar önerilir: -- Raspberry 4 (model B 8GB), Odroid M1 ya da Rock 5B (8GB/16GB RAM) kart -- MicroSD Kartı (minimum 16 GB Sınıf 10) -- Minimum 2 TB SSD'li bir USB 3.0 disk veya USB - SATA kasalı bir SSD. +- Raspberry 4 (model B 8GB), Odroid M1 veya Rock 5B (8GB/16GB RAM) kartı +- MicroSD Kart (minimum 16 GB Sınıf 10) +- Minimum 2 TB SSD USB 3.0 disk veya USB - SATA kasalı bir SSD. - Güç kaynağı - Ethernet kablosu - Bağlantı noktası yönlendirme (daha fazla bilgi için istemcilere bakın) -- Soğutucusu ve fanı olan bir kasa +- Soğutuculu ve fanlı bir kasa - USB klavye, Monitör ve HDMI kablosu (mikro-HDMI) (İsteğe bağlı) -## Neden Ethereum on ARM'ı çalıştıralım? {#why-run-ethereum-on-arm} +## Neden ARM üzerinde Ethereum çalıştırmalısınız? {#why-run-ethereum-on-arm} -ARM kartları çok uygun fiyatlı, esnek ve küçük bilgisayarlardır. Ethereum düğümlerini çalıştırmak için iyi seçimlerdir çünkü ucuza satın alınabilirler, tüm kaynakları yalnızca düğüme odaklanacak şekilde yapılandırılabilirler, bu onları verimli kılar, düşük miktarda güç tüketir ve fiziksel olarak küçüktür, böylece herhangi bir eve dikkat çekmeden sığabilirler. Ayrıca, Raspberry Pi'ın MicroSD'si bir yüklemeye ya da yazılım oluşturmaya gerek olmadan basitçe önceden yüklenmiş bir görüntüyle doldurabildiği için düğümlerin kodlarını yazmak aşırı kolaydır. +ARM kartları çok uygun fiyatlı, esnek, küçük bilgisayarlardır. Ucuz bir şekilde satın alınabildikleri, tüm kaynakları yalnızca düğüme odaklanacak şekilde yapılandırılabildikleri için Ethereum düğümlerini çalıştırmak için iyi seçeneklerdir. Bu onları verimli kılar, düşük miktarda güç tüketirler ve fiziksel olarak küçük olduklarından her eve göze batmayacak şekilde sığabilirler. Ayrıca, Raspberry Pi'nin MicroSD kartına önceden oluşturulmuş bir imaj kolayca yüklenebildiği için düğümleri kurmak da çok kolaydır, yazılım indirme veya derleme gerekmez. ## Nasıl çalışır? {#how-does-it-work} -Raspberry Pi'ın bellek kartı önceden oluşturulmuş bir görüntüyle depolanmıştır. Bu görüntü, bir Ethereum düğümünü çalıştırabilmek için gereken her şeyi içerir. Yüklenmiş bir kartla, kullanıcının yapması gereken tek şey Raspberry Pi'ı açmaktır. Düğümü çalıştırmak için gereken her işlem otomatik olarak başlatılır. Bu, bellek kartı Linux tabanlı bir işletim sistemi (OS) içerdiğinden ve bu sistemde birimi bir Ethereum düğümüne dönüştüren sistem seviyesindeki işlemler otomatik olarak çalıştığından işe yarar. +Raspberry Pi'nin hafıza kartına önceden oluşturulmuş bir imaj yüklenir. Bu imaj, bir Ethereum düğümünü çalıştırmak için gereken her şeyi içerir. İmaj yüklenmiş bir kartla, kullanıcının yapması gereken tek şey Raspberry Pi'ı açmaktır. Düğümü çalıştırmak için gereken tüm işlemler otomatik olarak başlatılır. Bu, bellek kartının Linux tabanlı bir işletim sistemi (OS) içermesi ve bu sistem üzerinde birimi bir Ethereum düğümüne dönüştüren sistem düzeyindeki işlemlerin otomatik olarak çalışması sayesinde mümkündür. -Ethereum, popüler Raspberry Pi Linux OS "Raspbian" kullanılarak çalıştırılamaz, çünkü Raspbian hala 32-bit bir mimari kullanır, bu da Ethereum kullanıcılarının bellek sorunları yaşamasına neden olur ve konsensus istemcileri 32-bit ikili dosyaları desteklemez. Ethereum on Arm ekibi, bunun üstesinden gelmek için yerel bir 64-bit OS olan "Armbian"a geçiş yaptı. +Ethereum, popüler Raspberry Pi Linux işletim sistemi "Raspbian" kullanılarak çalıştırılamaz çünkü Raspbian hâlâ 32-bit bir mimari kullanır, bu da Ethereum kullanıcılarının bellek sorunları yaşamasına neden olur ve mutabakat istemcileri 32-bit ikili dosyaları desteklemez. Bunun üstesinden gelmek için Ethereum on Arm ekibi, "Armbian" adlı yerel bir 64-bit işletim sistemine geçiş yaptı. -**Sürücüler**, ortamın kurulmasından ve SSD diskinin biçimlendirilmesinden, Ethereum yazılımını kurup çalıştırmaya ve ayrıca blokzincir senkronizasyonunu başlatmaya kadar gerekli tüm adımların üstesinden gelir. +**İmajlar, ortamı kurmaktan ve SSD diski biçimlendirmekten, Ethereum yazılımını kurup çalıştırmaya ve blok zinciri senkronizasyonunu başlatmaya kadar gerekli tüm adımları halleder.** -## Yürütüm ve fikir birliği istemcileriyle ilgili not {#note-on-execution-and-consensus-clients} +## Yürütme ve mutabakat istemcileri hakkında not {#note-on-execution-and-consensus-clients} -Ethereum on Arm görüntüsü, hizmet olarak önceden oluşturulmuş yürütüm ve fikir birliği istemcileri içerir. Bir ethereum düğümü senkronize olmak ve çalışmak için iki istemciye de ihtiyaç duyar. Görüntüyü yükleyip depolamanız ve ardından hizmetleri başlatmanız yeterlidir. Bu görüntüye, aşağıdaki yürütüm istemcileri: +Ethereum on Arm imajı, hizmet olarak önceden oluşturulmuş yürütme ve mutabakat istemcileri içerir. Bir Ethereum düğümü, her iki istemcinin de senkronize edilmiş ve çalışır durumda olmasını gerektirir. Yalnızca imajı indirip yüklemeniz ve ardından hizmetleri başlatmanız gerekir. İmaj, aşağıdaki yürütme istemcileriyle önceden yüklenmiştir: - Geth - Nethermind - Besu -ve aşağıdaki fikir birliği istemcileri önceden yüklenmiştir: +ve aşağıdaki mutabakat istemcileri: - Lighthouse - Nimbus - Prysm - Teku -Çalıştırmak için her birinden bir tanesini seçmelisiniz; tüm yürütüm istemcileri tüm fikir birliği istemcileriyle uyumludur. Açık bir şekilde bir istemci seçmezseniz düğüm, varsayılanlarına geri dönecek (Geth ve Lighthouse) ve bunları kart açıldığında otomatik olarak çalıştıracaktır. Geth'in eşleri bulup bağlanabilmesi için yönlendiricinizin 30303 bağlantı noktasını açmalısınız. +Çalıştırmak için her birinden bir tane seçmelisiniz - tüm yürütme istemcileri, tüm mutabakat istemcileriyle uyumludur. Açıkça bir istemci seçmezseniz düğüm varsayılan ayarlarına (Geth ve Lighthouse) geri döner ve kart açıldığında bunları otomatik olarak çalıştırır. Geth'in eşleri bulup onlara bağlanabilmesi için yönlendiricinizde 30303 numaralı bağlantı noktasını açmalısınız. -## Görüntüyü İndirme {#downloading-the-image} +## İmajı İndirme {#downloading-the-image} -Raspberry Pi Ethereum görüntüsü, yürütüm ve fikir birliği istemcilerini otomatik olarak yükleyip ayarlayan ve onları birbiriyle konuşmaları ve Ethereum ağına bağlanmaları için yapılandıran "tak ve çalıştır" tipi bir görüntüdür. Kullanıcının tek yapması gereken basit bir komut kullanarak işlemlerini başlatmaktır. +Raspberry Pi 4 Ethereum imajı, hem yürütme hem de mutabakat istemcilerini otomatik olarak kuran ve ayarlayan, birbirleriyle iletişim kurmaları ve Ethereum ağına bağlanmaları için yapılandıran bir "tak ve çalıştır" imajıdır. Kullanıcının tek yapması gereken, basit bir komut kullanarak işlemlerini başlatmaktır. -[Ethereum on Arm](https://ethereumonarm-my.sharepoint.com/:u:/p/dlosada/Ec_VmUvr80VFjf3RYSU-NzkBmj2JOteDECj8Bibde929Gw?download=1)'dan Raspberry Pi görüntüsünü indirin ve SHA256 karmasını doğrulayın: +Raspberry Pi imajını [Ethereum on Arm](https://ethereumonarm-my.sharepoint.com/:u:/p/dlosada/Ec_VmUvr80VFjf3RYSU-NzkBmj2JOteDECj8Bibde929Gw?download=1) adresinden indirin ve SHA256 karmasını doğrulayın: ```sh -# From directory containing the downloaded image +# İndirilen imajı içeren dizinden shasum -a 256 ethonarm_22.04.00.img.zip -# Hash should output: fb497e8f8a7388b62d6e1efbc406b9558bee7ef46ec7e53083630029c117444f +# Karma çıktısı şu şekilde olmalıdır: fb497e8f8a7388b62d6e1efbc406b9558bee7ef46ec7e53083630029c117444f ``` -Rock 5B ve Odroid M1 kartlarının görüntülerinin Ethereum-on-Arm'ın [indirmeler sayfasında](https://ethereum-on-arm-documentation.readthedocs.io/en/latest/quick-guide/download-and-install.html) mevcut olduğunu unutmayın. +Rock 5B ve Odroid M1 kartları için imajların Ethereum-on-Arm [indirmeler sayfasında](https://ethereum-on-arm-documentation.readthedocs.io/en/latest/quick-guide/download-and-install.html) mevcut olduğunu unutmayın. -## MicroSD'yi yükleme {#flashing-the-microsd} +## MicroSD'ye İmaj Yükleme {#flashing-the-microsd} -Raspberry Pi için kullanılacak MicroSD kartın yüklenebilmesi için öncelikle bir masaüstü veya dizüstü bilgisayara takılması gerekir. Ardından aşağıdaki terminal komutları, indirilen görüntüyü SD karta aktaracaktır: +Raspberry Pi için kullanılacak MicroSD kart, imajın yüklenebilmesi için önce bir masaüstü veya dizüstü bilgisayara takılmalıdır. Ardından, aşağıdaki terminal komutları indirilen imajı SD karta yükleyecektir: ```shell -# check the MicroSD card name +# MicroSD kart adını kontrol edin sudo fdisk -l >> sdxxx ``` -İsmin doğru olması gerçekten önemlidir, çünkü bir sonraki komut, resmi üzerine göndermeden önce kartın mevcut içeriğini tamamen silen `dd`'yi içerir. Devam etmek için sıkıştırılmış resmi içeren dizine gidin: +İsmi doğru yazmanız gerçekten önemlidir, çünkü bir sonraki komut, imajı karta yazmadan önce kartın mevcut içeriğini tamamen silen `dd` komutunu içerir. Devam etmek için sıkıştırılmış imajı içeren dizine gidin: ```shell -# unzip and flash image +# imajı ayıklayın ve yükleyin unzip ethonarm_22.04.00.img.zip sudo dd bs=1M if=ethonarm_22.04.00.img of=/dev/ conv=fdatasync status=progress ``` -Kart şimdi yanıp sönüyor, böylece Raspberry Pi'a takılabilir. +Kartın imajı şimdi yüklendi, artık Raspberry Pi'a takılabilir. ## Düğümü başlatma {#start-the-node} -Raspberry Pi'a takılı SD kart ile ethernet kablosunu ve SSD'yi bağlayın ve ardından gücü açın. İşletim sistemi açılır ve Raspberry Pi'ı bir Ethereum düğümüne dönüştüren, istemci yazılımının yüklenmesi ve oluşturulması da dahil olmak üzere önceden yapılandırılmış görevler otomatik olarak gerçekleştirilir. Bu, muhtemelen 10-15 dakika sürecektir. +SD kart Raspberry Pi'a takılıyken, ethernet kablosunu ve SSD'yi bağlayın, ardından gücü açın. İşletim sistemi açılacak ve istemci yazılımını kurma ve derleme de dahil olmak üzere Raspberry Pi'ı bir Ethereum düğümüne dönüştüren önceden yapılandırılmış görevleri otomatik olarak gerçekleştirmeye başlayacaktır. Bu muhtemelen 10-15 dakika sürecektir. -Her şey kurulduktan ve yapılandırıldıktan sonra, bir ssh bağlantısı aracılığıyla veya panoya bir monitör ve klavye takılıysa doğrudan terminali kullanarak cihazda oturum açın. Düğümü başlatmak için gerekli izinlere sahip olduğundan, oturum açmak için `ethereum` hesabını kullanın. +Her şey kurulup yapılandırıldıktan sonra, bir ssh bağlantısı aracılığıyla veya karta bir monitör ve klavye bağlıysa doğrudan terminali kullanarak cihazda oturum açın. Düğümü başlatmak için gerekli izinlere sahip olduğundan, oturum açmak için `ethereum` hesabını kullanın. ```shell -User: ethereum -Password: ethereum +Kullanıcı: ethereum +Parola: ethereum ``` -Varsayılan yürütüm istemcisi Geth, otomatik olarak başlayacaktır. Bunu, aşağıdaki terminal komutları ile günlükleri kontrol ederek onaylayabilirsiniz: +Varsayılan yürütme istemcisi olan Geth otomatik olarak başlayacaktır. Aşağıdaki terminal komutunu kullanarak günlükleri kontrol ederek bunu doğrulayabilirsiniz: ```sh sudo journalctl -u geth -f ``` -Fikir birliği istemcisi ayrı olarak başlatılmalıdır. Bunu yapmak için yönlendiricinizin 9000 bağlantı noktasını açın ve Ligthouse'un bulup eşlere bağlayabilmesini sağlayın. Sonra da lighthouse hizmetini etkinleştirip başlatın: +Mutabakat istemcisinin açıkça başlatılması gerekir. Bunu yapmak için, Lighthouse'un eşleri bulup onlara bağlanabilmesi için önce yönlendiricinizde 9000 numaralı bağlantı noktasını açın. Ardından lighthouse hizmetini etkinleştirin ve başlatın: ```sh sudo systemctl enable lighthouse-beacon @@ -121,15 +123,15 @@ Günlükleri kullanarak istemciyi kontrol edin: sudo journalctl -u lighthouse-beacon ``` -Kontrol noktası senkronizasyonunu kullandığı için fikir birliği istemcisinin de birkaç dakika içinde senkronize olacağını unutmayın. Yürütüm istemcisi biraz daha fazla, muhtemelen birkaç saat zaman alacak ve fikir birliği istemcisi senkronizasyonunu bitirmediği sürece başlamayacaktır (bunun nedeni, yürütüm istemcisinin senkronize olacağı bir hedefe ihtiyaç duyması ve bunu da fikir birliği istemcisinin sağlıyor olmasıdır). +Mutabakat istemcisinin kontrol noktası senkronizasyonunu kullandığı için birkaç dakika içinde senkronize olacağını unutmayın. Yürütme istemcisi daha uzun sürer (potansiyel olarak birkaç saat) ve mutabakat istemcisi senkronizasyonu bitirene kadar başlamaz (bunun nedeni, yürütme istemcisinin senkronize olmak için bir hedefe ihtiyaç duymasıdır ve bunu da senkronize olmuş mutabakat istemcisi sağlar). -Geth ve Lighthouse hizmetleri senkronize ve çalışır durumdaysa, Raspberry Pi'ınız artık bir Ethereum düğümüdür! En yaygın yöntem, 8545 bağlantı noktasında Geth istemcisine iliştirilebilen Geth Javascript konsolunu kullanarak Ethereum ile etkileşime girmektir. JSON nesneleri şeklinde biçimlendirilmiş komutları Curl gibi bir istek aracı kullanarak göndermek de mümkündür. [Geth dokümanlarında](https://geth.ethereum.org) daha fazla bilgiye ulaşın. +Geth ve Lighthouse hizmetleri çalışır ve senkronize durumdayken, Raspberry Pi'ınız artık bir Ethereum düğümü! Ethereum ağı ile etkileşim kurmanın en yaygın yolu, 8545 numaralı bağlantı noktasındaki Geth istemcisine eklenebilen Geth'in Javascript konsolunu kullanmaktır. Curl gibi bir istek aracı kullanarak JSON nesneleri olarak biçimlendirilmiş komutları göndermek de mümkündür. [Geth dokümantasyonunda](https://geth.ethereum.org/) daha fazlasını görebilirsiniz. -Geth, metrikleri tarayıcıda görüntülenebilen Grafana paneline rapor etmek üzere önceden yapılandırılmıştır. Daha ileri seviye kullanıcılar bu özelliği, `ipaddress:3000` adresine gidip `user: admin` ve `passwd: ethereum` öğelerini geçirmek yoluyla düğümlerinin sağlığını izlemek için kullanmak isteyebilirler. +Geth, metrikleri tarayıcıda görüntülenebilen bir Grafana panosuna bildirecek şekilde önceden yapılandırılmıştır. Daha ileri düzey kullanıcılar, `ipaddress:3000` adresine gidip `user: admin` ve `passwd: ethereum` parametrelerini girerek düğümlerinin sağlığını izlemek için bu özelliği kullanmak isteyebilirler. ## Doğrulayıcılar {#validators} -Fikir birliği istemcisine isteğe bağlı olarak bir doğrulayıcı da eklenebilir. Doğrulayıcı yazılımı, düğümünüzün mutabakata aktif olarak katılmasına olanak tanır ve ağa kriptoekonomik güvenlik sağlar. Bu iş için ETH bazında ödüllendirilirsiniz. Bir doğrulayıcıyı çalıştırmak için öncelikle yatırma sözleşmesine yatırmak üzere 32 ETH'ye sahip olmanız gerekir. **Bu, uzun süreli bir bağlılık gerektirir; bu ETH'yi çekmek henüz mümkün değildir!**. Yatırma işlemi, [Başlama noktası](https://launchpad.ethereum.org/)'ndaki adım-adım rehberi takip edilerek yapılabilir. Bunu bir masaüstü/dizüstü bilgisayarda yapın ancak anahtar oluşturmayın; bu, doğrudan Raspberry Pi üzerinde yapılabilir. +Mutabakat istemcisine isteğe bağlı olarak bir doğrulayıcı da eklenebilir. Doğrulayıcı yazılımı, düğümünüzün mutabakata aktif olarak katılmasına olanak tanır ve ağa kriptoekonomik güvenlik sağlar. Bu çalışma karşılığında ETH olarak ödüllendirilirsiniz. Bir doğrulayıcı çalıştırmak için, önce para yatırma sözleşmesine yatırılması gereken 32 ETH'ye sahip olmanız gerekir. [Launchpad](https://launchpad.ethereum.org/) üzerindeki adım adım kılavuzu izleyerek para yatırma işlemi yapılabilir. Bunu bir masaüstü/dizüstü bilgisayarda yapın, ancak anahtar oluşturmayın — bu işlem doğrudan Raspberry Pi üzerinde yapılabilir. Raspberry Pi'da bir terminal açın ve para yatırma anahtarlarını oluşturmak için aşağıdaki komutu çalıştırın: @@ -139,20 +141,22 @@ sudo apt-get install staking-deposit-cli cd && deposit new-mnemonic --num_validators 1 ``` -Anımsatıcı ifadeyi güvende tutun! Yukarıdaki komut, düğümün anahtar deposunda iki dosya oluşturmuştur: doğrulayıcı anahtarlar ve bir yatırma veri dosyası. Yatırma verilerinin başlatma paneline yüklenmesi gerekir, bu nedenle Raspberry Pi'dan masaüstü/dizüstü bilgisayara kopyalanmalıdır. Bu, bir ssh bağlantısı veya başka bir kopyala/yapıştır yöntemi kullanılarak yapılabilir. +(Veya [staking-deposit-cli](https://github.com/ethereum/staking-deposit-cli) uygulamasını indirip internet bağlantısı olmayan bir makinede çalıştırın ve `deposit new-mnemnonic` komutunu yürütün) -Yatırılan veri dosyası, başlatma panelini çalıştıran bilgisayarda mevcut olduğunda, başlatma paneli ekranındaki `+` üzerine sürüklenip bırakılabilir. Yatırma sözleşmesine işlem göndermek için ekrandaki talimatları izleyin. +Anımsatıcı ifadenizi güvende tutun! Yukarıdaki komut, düğümün anahtar deposunda iki dosya oluşturdu: doğrulayıcı anahtarları ve bir para yatırma veri dosyası. Para yatırma verilerinin Launchpad'e yüklenmesi gerekir, bu nedenle Raspberry Pi'dan masaüstü/dizüstü bilgisayara kopyalanmalıdır. Bu, bir ssh bağlantısı veya başka bir kopyala/yapıştır yöntemi kullanılarak yapılabilir. -Raspberry Pi'a geri dönecek olursak, bir doğrulayıcı başlatılabilir. Bu, doğrulayıcı anahtarlarının içe aktarılmasını, ödülleri toplamak için adresin ayarlanmasını ve ardından önceden yapılandırılmış doğrulama sürecinin başlatılmasını gerektirir. Aşağıdaki örnek Lighthouse içindir; diğer fikir birliği istemcileri için talimatlar [Ethereum on Arm dokümanları](https://ethereum-on-arm-documentation.readthedocs.io/en/latest/)'nda bulunabilir: +Para yatırma veri dosyası, Launchpad'i çalıştıran bilgisayarda mevcut olduğunda, Launchpad ekranındaki `+` üzerine sürüklenip bırakılabilir. Para yatırma sözleşmesine bir işlem göndermek için ekrandaki talimatları izleyin. + +Raspberry Pi'a geri dönersek, bir doğrulayıcı başlatılabilir. Bu, doğrulayıcı anahtarlarını içe aktarmayı, ödülleri toplamak için adresi ayarlamayı ve ardından önceden yapılandırılmış doğrulayıcı sürecini başlatmayı gerektirir. Aşağıdaki örnek Lighthouse içindir—diğer mutabakat istemcileri için talimatlar [Ethereum on Arm belgelerinde](https://ethereum-on-arm-documentation.readthedocs.io/en/latest/) mevcuttur: ```shell -# import the validator keys +# doğrulayıcı anahtarlarını içe aktar lighthouse account validator import --directory=/home/ethereum/validator_keys -# set the reward address +# ödül adresini ayarla sudo sed -i 's/' /etc/ethereum/lighthouse-validator.conf -# start the validator +# doğrulayıcıyı başlat sudo systemctl start lighthouse-validator ``` @@ -160,13 +164,14 @@ Tebrikler, artık Raspberry Pi üzerinde çalışan tam bir Ethereum düğümün ## Daha fazla ayrıntı {#more-details} -Bu sayfa, Raspberry Pi kullanarak Geth-Lighthouse düğümünü ve doğrulayıcısını nasıl kuracağınız hakkında genel bir görünüm sunmuştur. Daha detaylı açıklama [Ethereum-on-Arm web sitesinde](https://ethereum-on-arm-documentation.readthedocs.io/en/latest/index.html) mevcuttur. +Bu sayfa, Raspberry Pi kullanarak bir Geth-Lighthouse düğümü ve doğrulayıcısının nasıl kurulacağına dair genel bir bakış sunmuştur. Daha ayrıntılı talimatlar [Ethereum-on-Arm web sitesinde](https://ethereum-on-arm-documentation.readthedocs.io/en/latest/index.html) mevcuttur. -## Geribildirimleriniz bizi memnun eder {#feedback-appreciated} +## Geri bildirimleriniz bizim için değerli {#feedback-appreciated} -Raspberry Pi'ın, Ethereum ağının sağlığı üzerinde çok olumlu bir etkisi olabilecek büyük bir kullanıcı tabanına sahip olduğunu biliyoruz. Lütfen bu öğreticideki ayrıntıları inceleyin, test ağlarında çalıştırmayı deneyin, Github'da Ethereum on Arm'a göz atın, geribildirimde bulunun, sorunları ve çekme isteklerini dile getirin, teknolojiyi ve dokümanları geliştirmeye yardımcı olun! +Raspberry Pi'ın, Ethereum ağının sağlığı üzerinde çok olumlu bir etkiye sahip olabilecek devasa bir kullanıcı tabanına sahip olduğunu biliyoruz. +Lütfen bu eğiticinin ayrıntılarını inceleyin, test ağlarında çalıştırmayı deneyin, Ethereum on Arm GitHub'ına göz atın, geri bildirimde bulunun, sorunları bildirin, çekme istekleri oluşturun ve teknolojinin ve dokümantasyonun geliştirilmesine yardımcı olun! -## Referanslar {#references} +## Kaynaklar {#references} 1. https://ubuntu.com/download/raspberry-pi 2. https://wikipedia.org/wiki/Port_forwarding diff --git a/public/content/translations/tr/developers/tutorials/scam-token-tricks/index.md b/public/content/translations/tr/developers/tutorials/scam-token-tricks/index.md new file mode 100644 index 00000000000..84ab6dc21bd --- /dev/null +++ b/public/content/translations/tr/developers/tutorials/scam-token-tricks/index.md @@ -0,0 +1,470 @@ +--- +title: "Dolandırıcı jetonlar tarafından kullanılan bazı hileler ve bunların nasıl tespit edileceği" +description: "Bu öğreticide, dolandırıcıların oynadığı bazı hileleri, bunları nasıl uyguladıklarını ve nasıl tespit edebileceğimizi görmek için bir dolandırıcılık jetonunu inceliyoruz." +author: Ori Pomerantz +tags: + [ + "dolandırıcılık", + "solidity", + "erc-20", + "javascript", + "typescript" + ] +skill: intermediate +published: 2023-09-15 +lang: tr +--- + +Bu öğreticide, dolandırıcıların oynadığı bazı hileleri ve bunları nasıl uyguladıklarını görmek için [bir dolandırıcılık jetonunu](https://etherscan.io/token/0xb047c8032b99841713b8e3872f06cf32beb27b82#code) inceliyoruz. Öğreticinin sonunda, ERC-20 jeton sözleşmeleri, yetenekleri ve şüpheciliğin neden gerekli olduğu hakkında daha kapsamlı bir bakış açısına sahip olacaksınız. Ardından, o dolandırıcı jeton tarafından yayılan olaylara bakıyoruz ve yasal olmadığını otomatik olarak nasıl belirleyebileceğimizi görüyoruz. + +## Dolandırıcı jetonlar - nedirler, insanlar neden onları yapar ve onlardan nasıl kaçınılır {#scam-tokens} + +Ethereum'un en yaygın kullanımlarından biri, bir grubun bir anlamda kendi para birimi olan ticareti yapılabilen bir token oluşturmasıdır. Ancak, değer getiren meşru kullanım şekilleri bulunan her yerde, söz konusu değeri kendisi için çalmaya çalışan suçlular bulunur. + +Bu konu hakkında bir kullanıcı perspektifinden [ethereum.org'un başka bir yerinde](/guides/how-to-id-scam-tokens/) daha fazla bilgi edinebilirsiniz. Bu öğretici, nasıl yapıldığını ve nasıl tespit edilebileceğini görmek için bir dolandırıcılık jetonunu incelemeye odaklanmaktadır. + +### wARB'nin bir dolandırıcılık olduğunu nasıl anlarım? {#warb-scam} + +İncelediğimiz jeton, yasal [ARB jetonuna](https://etherscan.io/token/0xb50721bcf8d664c30412cfbc6cf7a15145234ad1) eşdeğermiş gibi davranan [wARB](https://etherscan.io/token/0xb047c8032b99841713b8e3872f06cf32beb27b82#code)'dir. + +Hangisinin yasal jeton olduğunu bilmenin en kolay yolu, kurucu kuruluş olan [Arbitrum](https://arbitrum.foundation/)'a bakmaktır. Yasal adresler [dokümanlarında](https://docs.arbitrum.foundation/deployment-addresses#token) belirtilmiştir. + +### Kaynak kodu neden mevcut? {#why-source} + +Normalde başkalarını dolandırmaya çalışan insanların gizli olmasını bekleriz ve gerçekten de birçok dolandırıcı jetonun kodu mevcut değildir (örneğin, [bu](https://optimistic.etherscan.io/token/0x15992f382d8c46d667b10dc8456dc36651af1452#code) ve [bu](https://optimistic.etherscan.io/token/0x026b623eb4aada7de37ef25256854f9235207178#code)). + +Ancak, yasal jetonlar genellikle kaynak kodlarını yayınlarlar, bu nedenle yasal görünmek için dolandırıcı jetonların yazarları da bazen aynısını yapar. [wARB](https://etherscan.io/token/0xb047c8032b99841713b8e3872f06cf32beb27b82#code), kaynak kodu mevcut olan ve bu sayede anlaşılması daha kolay olan jetonlardan biridir. + +Sözleşme dağıtıcıları kaynak kodunu yayınlayıp yayınlamamayı seçebilse de, yanlış kaynak kodunu yayınlayamazlar. Blok gezgini, sağlanan kaynak kodunu bağımsız olarak derler ve tam olarak aynı bit kodunu elde etmezse, o kaynak kodunu reddeder. [Bu konu hakkında Etherscan sitesinde daha fazla bilgi edinebilirsiniz](https://etherscan.io/verifyContract). + +## Yasal ERC-20 jetonlarıyla karşılaştırma {#compare-legit-erc20} + +Bu jetonu yasal ERC-20 jetonlarıyla karşılaştıracağız. Yasal ERC-20 jetonlarının tipik olarak nasıl yazıldığına aşina değilseniz, [bu öğreticiye bakın](/developers/tutorials/erc20-annotated-code/). + +### Ayrıcalıklı adresler için sabitler {#constants-for-privileged-addresses} + +Sözleşmeler bazen ayrıcalıklı adreslere ihtiyaç duyar. Uzun süreli kullanım için tasarlanan sözleşmeler, örneğin yeni bir çoklu imza sözleşmesinin kullanımını sağlamak için bazı ayrıcalıklı adreslerin bu adresleri değiştirmesine izin verir. Bunu yapmanın birkaç yolu vardır. + +[`HOP` jeton sözleşmesi](https://etherscan.io/address/0xc5102fe9359fd9a28f877a67e36b0f050d81a3cc#code), [`Ownable`](https://docs.openzeppelin.com/contracts/2.x/access-control#ownership-and-ownable) modelini kullanır. Ayrıcalıklı adres, `_owner` adlı bir alanda depolamada tutulur (üçüncü dosyaya bakın, `Ownable.sol`). + +```solidity +abstract contract Ownable is Context { + address private _owner; + . + . + . +} +``` + +[`ARB` jeton sözleşmesi](https://etherscan.io/address/0xad0c361ef902a7d9851ca7dcc85535da2d3c6fc7#code) doğrudan ayrıcalıklı bir adrese sahip değildir. Ancak, bir tanesine ihtiyacı yoktur. [`0xb50721bcf8d664c30412cfbc6cf7a15145234ad1` adresindeki](https://etherscan.io/address/0xb50721bcf8d664c30412cfbc6cf7a15145234ad1#code) bir [`proxy`](https://docs.openzeppelin.com/contracts/5.x/api/proxy)'nin arkasında yer alır. Bu sözleşmenin yükseltmeler için kullanılabilecek ayrıcalıklı bir adresi vardır (dördüncü dosyaya bakın, `ERC1967Upgrade.sol`). + +```solidity + /** + * @dev EIP1967 yönetici yuvasında yeni bir adres saklar. + */ + function _setAdmin(address newAdmin) private { + require(newAdmin != address(0), "ERC1967: yeni yönetici sıfır adresidir"); + StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin; + } +``` + +Buna karşılık, `wARB` sözleşmesi sabit kodlanmış bir `contract_owner`'a sahiptir. + +```solidity +contract WrappedArbitrum is Context, IERC20 { + . + . + . + address deployer = 0xB50721BCf8d664c30412Cfbc6cf7a15145234ad1; + address public contract_owner = 0xb40dE7b1beE84Ff2dc22B70a049A07A13a411A33; + . + . + . +} +``` + +[Bu sözleşme sahibi](https://etherscan.io/address/0xb40dE7b1beE84Ff2dc22B70a049A07A13a411A33), farklı zamanlarda farklı hesaplar tarafından kontrol edilebilecek bir sözleşme değil, [harici olarak sahip olunan bir hesaptır](/developers/docs/accounts/#externally-owned-accounts-and-key-pairs). Bu, muhtemelen değerli kalacak bir ERC-20'yi kontrol etmek için uzun vadeli bir çözümden ziyade, bir birey tarafından kısa süreli kullanım için tasarlandığı anlamına gelir. + +Ve gerçekten de, Etherscan'e baktığımızda, dolandırıcının bu sözleşmeyi 19 Mayıs 2023'te yalnızca 12 saat boyunca kullandığını görüyoruz ([ilk işlem](https://etherscan.io/tx/0xf49136198c3f925fcb401870a669d43cecb537bde36eb8b41df77f06d5f6fbc2)'den [son işleme](https://etherscan.io/tx/0xdfd6e717157354e64bbd5d6adf16761e5a5b3f914b1948d3545d39633244d47b)). + +### Sahte `_transfer` fonksiyonu {#the-fake-transfer-function} + +Gerçek transferlerin [dahili bir `_transfer` fonksiyonu](/developers/tutorials/erc20-annotated-code/#the-_transfer-function-_transfer) kullanılarak yapılması standarttır. + +`wARB`'de bu fonksiyon neredeyse yasal görünüyor: + +```solidity + function _transfer(address sender, address recipient, uint256 amount) internal virtual{ + require(sender != address(0), "ERC20: sıfır adresten transfer"); + require(recipient != address(0), "ERC20: sıfır adrese transfer"); + + _beforeTokenTransfer(sender, recipient, amount); + + _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer tutarı bakiyeyi aşıyor"); + _balances[recipient] = _balances[recipient].add(amount); + if (sender == contract_owner){ + sender = deployer; + } + emit Transfer(sender, recipient, amount); + } +``` + +Şüpheli kısım şudur: + +```solidity + if (sender == contract_owner){ + sender = deployer; + } + emit Transfer(sender, recipient, amount); +``` + +Sözleşme sahibi jeton gönderirse, `Transfer` olayı neden `deployer`'dan geldiklerini gösteriyor? + +Ancak, daha önemli bir sorun var. Bu `_transfer` fonksiyonunu kim çağırıyor? Dışarıdan çağrılamaz, `internal` olarak işaretlenmiştir. Ve elimizdeki kod, `_transfer`'a herhangi bir çağrı içermiyor. Açıkçası, bu bir yem olarak burada. + +```solidity + function transfer(address recipient, uint256 amount) public virtual override returns (bool) { + _f_(_msgSender(), recipient, amount); + return true; + } + + function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { + _f_(sender, recipient, amount); + _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer tutarı yetkiyi aşıyor")); + return true; + } +``` + +Jetonları transfer etmek için çağrılan fonksiyonlara, `transfer` ve `transferFrom`'a baktığımızda, tamamen farklı bir fonksiyon olan `_f_`'yi çağırdıklarını görüyoruz. + +### Gerçek `_f_` fonksiyonu {#the-real-f-function} + +```solidity + function _f_(address sender, address recipient, uint256 amount) internal _mod_(sender,recipient,amount) virtual { + require(sender != address(0), "ERC20: sıfır adresten transfer"); + require(recipient != address(0), "ERC20: sıfır adrese transfer"); + + _beforeTokenTransfer(sender, recipient, amount); + + _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer tutarı bakiyeyi aşıyor"); + _balances[recipient] = _balances[recipient].add(amount); + if (sender == contract_owner){ + + sender = deployer; + } + emit Transfer(sender, recipient, amount); + } +``` + +Bu fonksiyonda iki potansiyel tehlike işareti var. + +- [Fonksiyon değiştirici](https://www.tutorialspoint.com/solidity/solidity_function_modifiers.htm) `_mod_` kullanımı. Ancak, kaynak koduna baktığımızda `_mod_`'un aslında zararsız olduğunu görüyoruz. + + ```solidity + modifier _mod_(address sender, address recipient, uint256 amount){ + _; + } + ``` + +- `_transfer`'de gördüğümüz aynı sorun, yani `contract_owner` jeton gönderdiğinde, jetonların `deployer`'dan geliyormuş gibi görünmesi. + +### Sahte olaylar fonksiyonu `dropNewTokens` {#the-fake-events-function-dropNewTokens} + +Şimdi gerçek bir dolandırıcılığa benzeyen bir şeye geldik. Okunabilirlik için fonksiyonu biraz düzenledim, ancak işlevsel olarak eşdeğerdir. + +```solidity +function dropNewTokens(address uPool, + address[] memory eReceiver, + uint256[] memory eAmounts) public auth() +``` + +Bu fonksiyon, yalnızca sözleşme sahibi tarafından çağrılabileceği anlamına gelen `auth()` değiştiricisine sahiptir. + +```solidity +modifier auth() { + require(msg.sender == contract_owner, "Etkileşime izin verilmiyor"); + _; +} +``` + +Bu kısıtlama son derece mantıklıdır, çünkü rastgele hesapların jeton dağıtmasını istemeyiz. Ancak, fonksiyonun geri kalanı şüphelidir. + +```solidity +{ + for (uint256 i = 0; i < eReceiver.length; i++) { + emit Transfer(uPool, eReceiver[i], eAmounts[i]); + } +} +``` + +Bir havuz hesabından bir alıcı dizisine bir miktar dizisi transfer etmek için bir fonksiyon son derece mantıklıdır. Maaş bordrosu, airdrop'lar vb. gibi tek bir kaynaktan birden çok hedefe jeton dağıtmak isteyeceğiniz birçok kullanım durumu vardır. Birden çok işlem yayınlamak veya hatta aynı işlemin bir parçası olarak farklı bir sözleşmeden ERC-20'yi birden çok kez çağırmak yerine bunu tek bir işlemde yapmak (gaz açısından) daha ucuzdur. + +Ancak, `dropNewTokens` bunu yapmaz. [`Transfer` olayları](https://eips.ethereum.org/EIPS/eip-20#transfer-1) yayar, ancak aslında herhangi bir jeton transfer etmez. Zincir dışı uygulamaların kafasını gerçekten gerçekleşmemiş bir transferden bahsederek karıştırmak için meşru bir neden yoktur. + +### Yakan `Approve` fonksiyonu {#the-burning-approve-function} + +ERC-20 sözleşmelerinin yetkiler için [bir `approve` fonksiyonuna](/developers/tutorials/erc20-annotated-code/#approve) sahip olması gerekir ve gerçekten de dolandırıcı jetonumuzun böyle bir fonksiyonu vardır ve hatta doğrudur. Ancak, Solidity C'den türediği için büyük/küçük harfe duyarlıdır. `Approve` ve `approve` farklı dizelerdir. + +Ayrıca, işlevsellik `approve` ile ilgili değildir. + +```solidity + function Approve( + address[] memory holders) +``` + +Bu fonksiyon, jeton sahiplerinin adreslerinden oluşan bir dizi ile çağrılır. + +```solidity + public approver() { +``` + +`approver()` değiştiricisi, bu fonksiyonu yalnızca `contract_owner`'ın çağırmasına izin verildiğinden emin olur (aşağıya bakın). + +```solidity + for (uint256 i = 0; i < holders.length; i++) { + uint256 amount = _balances[holders[i]]; + _beforeTokenTransfer(holders[i], 0x0000000000000000000000000000000000000001, amount); + _balances[holders[i]] = _balances[holders[i]].sub(amount, + "ERC20: yakma miktarı bakiyeyi aşıyor"); + _balances[0x0000000000000000000000000000000000000001] = + _balances[0x0000000000000000000000000000000000000001].add(amount); + } + } + +``` + +Her sahip adresi için fonksiyon, sahibin tüm bakiyesini `0x00...01` adresine taşır ve etkin bir şekilde yakar (standarttaki gerçek `burn` aynı zamanda toplam arzı da değiştirir ve jetonları `0x00...00`'a transfer eder). Bu, `contract_owner`'ın herhangi bir kullanıcının varlıklarını kaldırabileceği anlamına gelir. Bu, bir yönetişim jetonunda isteyeceğiniz bir özellik gibi görünmüyor. + +### Kod kalitesi sorunları {#code-quality-issues} + +Bu kod kalitesi sorunları, bu kodun bir dolandırıcılık olduğunu _kanıtlamaz_, ancak şüpheli görünmesini sağlar. Arbitrum gibi organize şirketler genellikle bu kadar kötü kod yayınlamazlar. + +#### `mount` fonksiyonu {#the-mount-function} + +[Standartta](https://eips.ethereum.org/EIPS/eip-20) belirtilmemiş olsa da, genel olarak yeni jetonlar oluşturan fonksiyon [`mint`](https://ethereum.org/el/developers/tutorials/erc20-annotated-code/#the-_mint-and-_burn-functions-_mint-and-_burn) olarak adlandırılır. + +`wARB` yapıcısına bakarsak, mint (basma) fonksiyonunun bir nedenle `mount` olarak yeniden adlandırıldığını ve verimlilik için tüm miktar için bir kez yerine, ilk arzın beşte biri ile beş kez çağrıldığını görüyoruz. + +```solidity + constructor () public { + + _name = "Wrapped Arbitrum"; + _symbol = "wARB"; + _decimals = 18; + uint256 initialSupply = 1000000000000; + + mount(deployer, initialSupply*(10**18)/5); + mount(deployer, initialSupply*(10**18)/5); + mount(deployer, initialSupply*(10**18)/5); + mount(deployer, initialSupply*(10**18)/5); + mount(deployer, initialSupply*(10**18)/5); + } +``` + +`mount` fonksiyonunun kendisi de şüphelidir. + +```solidity + function mount(address account, uint256 amount) public { + require(msg.sender == contract_owner, "ERC20: sıfır adrese basım"); +``` + +`require`'a baktığımızda, yalnızca sözleşme sahibinin basım yapmasına izin verildiğini görüyoruz. Bu yasal. Ancak hata mesajı _yalnızca sahip basım yapabilir_ veya buna benzer bir şey olmalıdır. Bunun yerine, alakasız _ERC20: sıfır adrese basım_ şeklindedir. Sıfır adrese basım için doğru test, `require(account != address(0), "")` şeklindedir ki sözleşme bunu kontrol etme zahmetine girmez. + +```solidity + _totalSupply = _totalSupply.add(amount); + _balances[contract_owner] = _balances[contract_owner].add(amount); + emit Transfer(address(0), account, amount); + } +``` + +Basımla doğrudan ilgili iki şüpheli gerçek daha var: + +- Bir `account` parametresi var, ki bu muhtemelen basılan miktarı alması gereken hesaptır. Ancak artan bakiye aslında `contract_owner`'ın. + +- Artan bakiye `contract_owner`'a aitken, yayılan olay `account`'a bir transfer gösterir. + +### Neden hem `auth` hem de `approver`? Neden hiçbir şey yapmayan `mod`? {#why-both-autho-and-approver-why-the-mod-that-does-nothing} + +Bu sözleşme üç değiştirici içerir: `_mod_`, `auth` ve `approver`. + +```solidity + modifier _mod_(address sender, address recipient, uint256 amount){ + _; + } +``` + +`_mod_` üç parametre alır ve onlarla hiçbir şey yapmaz. Neden var? + +```solidity + modifier auth() { + require(msg.sender == contract_owner, "Etkileşime izin verilmiyor"); + _; + } + + modifier approver() { + require(msg.sender == contract_owner, "Etkileşime izin verilmiyor"); + _; + } +``` + +`auth` ve `approver` daha mantıklıdır, çünkü sözleşmenin `contract_owner` tarafından çağrıldığını kontrol ederler. Basım gibi belirli ayrıcalıklı eylemlerin o hesapla sınırlı olmasını bekleriz. Ancak, _tam olarak aynı şeyi yapan_ iki ayrı fonksiyona sahip olmanın ne anlamı var? + +## Otomatik olarak ne tespit edebiliriz? {#what-can-we-detect-automatically} + +Etherscan'e bakarak `wARB`'nin bir dolandırıcılık jetonu olduğunu görebiliriz. Ancak, bu merkezi bir çözümdür. Teorik olarak, Etherscan altüst edilebilir veya hacklenebilir. Bir jetonun yasal olup olmadığını bağımsız olarak anlayabilmek daha iyidir. + +Bir ERC-20 jetonunun şüpheli olduğunu (ya bir dolandırıcılık ya da çok kötü yazılmış) yaydıkları olaylara bakarak belirlemek için kullanabileceğimiz bazı hileler vardır. + +## Şüpheli `Approval` olayları {#suspicious-approval-events} + +[`Approval` olayları](https://eips.ethereum.org/EIPS/eip-20#approval) yalnızca doğrudan bir istekle gerçekleşmelidir ([`Transfer` olaylarının](https://eips.ethereum.org/EIPS/eip-20#transfer-1) aksine, bir yetkinin sonucu olarak gerçekleşebilir). Bu sorunun ayrıntılı bir açıklaması ve isteklerin neden bir sözleşme aracılığıyla değil de doğrudan olması gerektiği için [Solidity belgelerine bakın](https://docs.soliditylang.org/en/v0.8.20/security-considerations.html#tx-origin). + +Bu, [harici olarak sahip olunan bir hesaptan](/developers/docs/accounts/#types-of-account) harcamayı onaylayan `Approval` olaylarının, o hesapta başlayan ve hedefi ERC-20 sözleşmesi olan işlemlerden gelmesi gerektiği anlamına gelir. Harici olarak sahip olunan bir hesaptan gelen diğer her türlü onay şüphelidir. + +İşte tür güvenliğine sahip bir JavaScript çeşidi olan [viem](https://viem.sh/) ve [TypeScript](https://www.typescriptlang.org/docs/) kullanarak [bu tür bir olayı tanımlayan bir program](https://github.com/qbzzt/20230915-scam-token-detection). Çalıştırmak için: + +1. `.env.example` dosyasını `.env` olarak kopyalayın. +2. Bir Ethereum ana ağ düğümünün URL'sini sağlamak için `.env` dosyasını düzenleyin. +3. Gerekli paketleri kurmak için `pnpm install` komutunu çalıştırın. +4. Şüpheli onayları aramak için `pnpm susApproval` komutunu çalıştırın. + +İşte satır satır bir açıklama: + +```typescript +import { + Address, + TransactionReceipt, + createPublicClient, + http, + parseAbiItem, +} from "viem" +import { mainnet } from "viem/chains" +``` + +`viem`'den tür tanımlarını, fonksiyonları ve zincir tanımını içe aktarın. + +```typescript +import { config } from "dotenv" +config() +``` + +URL'yi almak için `.env` dosyasını okuyun. + +```typescript +const client = createPublicClient({ + chain: mainnet, + transport: http(process.env.URL), +}) +``` + +Bir Viem istemcisi oluşturun. Yalnızca blokzincirden okuma yapmamız gerekiyor, bu nedenle bu istemcinin bir özel anahtara ihtiyacı yok. + +```typescript +const testedAddress = "0xb047c8032b99841713b8e3872f06cf32beb27b82" +const fromBlock = 16859812n +const toBlock = 16873372n +``` + +Şüpheli ERC-20 sözleşmesinin adresi ve olayları arayacağımız bloklar. Düğüm sağlayıcıları, bant genişliği pahalı olabileceğinden olayları okuma yeteneğimizi genellikle sınırlar. Neyse ki `wARB` on sekiz saatlik bir süre boyunca kullanılmadı, bu yüzden tüm olaylara bakabiliriz (toplamda sadece 13 tane vardı). + +```typescript +const approvalEvents = await client.getLogs({ + address: testedAddress, + fromBlock, + toBlock, + event: parseAbiItem( + "event Approval(address indexed _owner, address indexed _spender, uint256 _value)" + ), +}) +``` + +Bu, Viem'den olay bilgisi istemenin yoludur. Alan adları da dahil olmak üzere tam olay imzasını sağladığımızda, olayı bizim için ayrıştırır. + +```typescript +const isContract = async (addr: Address): boolean => + await client.getBytecode({ address: addr }) +``` + +Algoritmamız yalnızca harici olarak sahip olunan hesaplar için geçerlidir. `client.getBytecode` tarafından döndürülen herhangi bir bit kodu varsa, bu bir sözleşme olduğu anlamına gelir ve onu atlamalıyız. + +Daha önce TypeScript kullanmadıysanız, fonksiyon tanımı biraz garip görünebilir. Sadece ilk (ve tek) parametrenin `addr` olarak adlandırıldığını değil, aynı zamanda `Address` türünde olduğunu da söylüyoruz. Benzer şekilde, `: boolean` kısmı TypeScript'e fonksiyonun dönüş değerinin bir boole değeri olduğunu söyler. + +```typescript +const getEventTxn = async (ev: Event): TransactionReceipt => + await client.getTransactionReceipt({ hash: ev.transactionHash }) +``` + +Bu fonksiyon, bir olaydan işlem makbuzunu alır. İşlem hedefinin ne olduğunu bildiğimizden emin olmak için makbuza ihtiyacımız var. + +```typescript +const suspiciousApprovalEvent = async (ev : Event) : (Event | null) => { +``` + +Bu, bir olayın şüpheli olup olmadığına gerçekten karar veren en önemli fonksiyondur. Dönüş türü, `(Event | null)`, TypeScript'e bu fonksiyonun bir `Event` veya `null` döndürebileceğini söyler. Olay şüpheli değilse `null` döndürürüz. + +```typescript +const owner = ev.args._owner +``` + +Viem'de alan adları var, bu yüzden olayı bizim için ayrıştırdı. `_owner`, harcanacak jetonların sahibidir. + +```typescript +// Sözleşmeler tarafından yapılan onaylar şüpheli değildir +if (await isContract(owner)) return null +``` + +Sahip bir sözleşme ise, bu onayın şüpheli olmadığını varsayın. Bir sözleşmenin onayının şüpheli olup olmadığını kontrol etmek için, işlemin tam yürütmesini takip ederek sahip sözleşmesine ulaşıp ulaşmadığını ve bu sözleşmenin doğrudan ERC-20 sözleşmesini çağırıp çağırmadığını görmemiz gerekecek. Bu, yapmak istediğimizden çok daha fazla kaynak gerektirir. + +```typescript +const txn = await getEventTxn(ev) +``` + +Onay harici olarak sahip olunan bir hesaptan geliyorsa, buna neden olan işlemi alın. + +```typescript +// Onay, işlemin `from`'u olmayan bir EOA sahibinden geliyorsa şüphelidir +if (owner.toLowerCase() != txn.from.toLowerCase()) return ev +``` + +Sadece dize eşitliğini kontrol edemeyiz çünkü adresler onaltılıktır, bu yüzden harf içerirler. Bazen, örneğin `txn.from`'da, bu harflerin hepsi küçük harftir. Diğer durumlarda, örneğin `ev.args._owner`'da, adres [hata tespiti için karışık büyük/küçük harf](https://eips.ethereum.org/EIPS/eip-55) şeklindedir. + +Ancak işlem sahibinden değilse ve bu sahip harici olarak sahip olunuyorsa, şüpheli bir işlemimiz var demektir. + +```typescript +// İşlem hedefi, araştırdığımız ERC-20 sözleşmesi değilse de şüphelidir +// +if (txn.to.toLowerCase() != testedAddress) return ev +``` + +Benzer şekilde, işlemin `to` adresi, yani çağrılan ilk sözleşme, araştırılan ERC-20 sözleşmesi değilse, şüphelidir. + +```typescript + // Şüphelenmek için bir neden yoksa null döndürün. + return null +} +``` + +Her iki koşul da doğru değilse `Approval` olayı şüpheli değildir. + +```typescript +const testPromises = approvalEvents.map((ev) => suspiciousApprovalEvent(ev)) +const testResults = (await Promise.all(testPromises)).filter((x) => x != null) + +console.log(testResults) +``` + +[Bir `async` fonksiyonu](https://www.w3schools.com/js/js_async.asp) bir `Promise` nesnesi döndürür. Yaygın sözdizimi olan `await x()` ile, işlemeye devam etmeden önce o `Promise`'in yerine getirilmesini bekleriz. Bunu programlamak ve takip etmek basittir, ancak aynı zamanda verimsizdir. Belirli bir olay için `Promise`'in yerine getirilmesini beklerken, bir sonraki olay üzerinde çalışmaya başlayabiliriz. + +Burada bir `Promise` nesneleri dizisi oluşturmak için [`map`](https://www.w3schools.com/jsref/jsref_map.asp) kullanıyoruz. Ardından, tüm bu sözlerin çözülmesini beklemek için [`Promise.all`](https://www.javascripttutorial.net/es6/javascript-promise-all/) kullanırız. Daha sonra şüpheli olmayan olayları kaldırmak için bu sonuçları [`filter`](https://www.w3schools.com/jsref/jsref_filter.asp) ederiz. + +### Şüpheli `Transfer` olayları {#suspicious-transfer-events} + +Dolandırıcı jetonları belirlemenin bir başka olası yolu da şüpheli transferleri olup olmadığına bakmaktır. Örneğin, o kadar çok jetonu olmayan hesaplardan yapılan transferler. [Bu testin nasıl uygulanacağını](https://github.com/qbzzt/20230915-scam-token-detection/blob/main/susTransfer.ts) görebilirsiniz, ancak `wARB`'de bu sorun yoktur. + +## Sonuç {#conclusion} + +ERC-20 dolandırıcılıklarının otomatik olarak tespiti [yanlış negatiflerden](https://en.wikipedia.org/wiki/False_positives_and_false_negatives#False_negative_error) muzdariptir, çünkü bir dolandırıcılık, sadece gerçek bir şeyi temsil etmeyen tamamen normal bir ERC-20 jeton sözleşmesi kullanabilir. Bu yüzden her zaman _jeton adresini güvenilir bir kaynaktan almayı_ denemelisiniz. + +Otomatik algılama, çok sayıda jetonun bulunduğu ve otomatik olarak işlenmesi gereken DeFi parçaları gibi belirli durumlarda yardımcı olabilir. Ancak her zaman olduğu gibi [caveat emptor](https://www.investopedia.com/terms/c/caveatemptor.asp), kendi araştırmanızı yapın ve kullanıcılarınızı da aynısını yapmaya teşvik edin. + +[Çalışmalarımdan daha fazlası için buraya bakın](https://cryptodocguy.pro/). diff --git a/public/content/translations/tr/developers/tutorials/secret-state/index.md b/public/content/translations/tr/developers/tutorials/secret-state/index.md new file mode 100644 index 00000000000..9da538e3fed --- /dev/null +++ b/public/content/translations/tr/developers/tutorials/secret-state/index.md @@ -0,0 +1,597 @@ +--- +title: "Gizli bir durum için sıfır bilgi kullanma" +description: "Zincir üstü oyunlar, herhangi bir gizli bilgi tutamadıkları için sınırlıdır. Bu öğreticiyi okuduktan sonra, bir okuyucu, gizli bir duruma sahip doğrulanabilir oyunlar oluşturmak için sıfır bilgi ispatlarını ve sunucu bileşenlerini bir zincir dışı bileşenle birleştirebilecektir. Bunu yapma tekniği, bir mayın tarlası oyunu oluşturularak gösterilecektir." +author: Ori Pomerantz +tags: + [ + "sunucu", + "zincir dışında", + "merkezi", + "sıfır bilgi", + "zokrates", + "mud" + ] +skill: advanced +lang: tr +published: 2025-03-15 +--- + +_Blokzincirde sır yoktur_. Blokzincire gönderilen her şey herkesin okumasına açıktır. Bu gereklidir çünkü blokzincir, herkesin onu doğrulayabilmesi esasına dayanır. Ancak, oyunlar genellikle gizli duruma dayanır. Örneğin, bir blokzincir gezginine gidip haritayı görebiliyorsanız [mayın tarlası](https://en.wikipedia.org/wiki/Minesweeper_\(video_game\)) oyununun hiçbir anlamı kalmaz. + +En basit çözüm, gizli durumu tutmak için bir [sunucu bileşeni](/developers/tutorials/server-components/) kullanmaktır. Ancak, blokzinciri kullanmamızın nedeni, oyun geliştiricisinin hile yapmasını önlemektir. Sunucu bileşeninin dürüstlüğünden emin olmalıyız. Sunucu, durumun bir karmasını sağlayabilir ve bir hamlenin sonucunu hesaplamak için kullanılan durumun doğru olduğunu kanıtlamak için [sıfır bilgi ispatlarını](/zero-knowledge-proofs/#why-zero-knowledge-proofs-are-important) kullanabilir. + +Bu makaleyi okuduktan sonra, bu türde gizli durum tutan bir sunucuyu, durumu gösteren bir istemciyi ve ikisi arasındaki iletişim için bir zincir üstü bileşeni nasıl oluşturacağınızı bileceksiniz. Kullanacağımız ana araçlar şunlar olacaktır: + +| Araç | Amaç | Doğrulanan sürüm | +| --------------------------------------------- | ----------------------------------------------- | --------------------------------------: | +| [Zokrates](https://zokrates.github.io/) | Sıfır bilgi ispatları ve bunların doğrulanması | 1.1.9 | +| [Typescript](https://www.typescriptlang.org/) | Hem sunucu hem de istemci için programlama dili | 5.4.2 | +| [Node](https://nodejs.org/en) | Sunucuyu çalıştırma | 20.18.2 | +| [Viem](https://viem.sh/) | Blokzincir ile İletişim | 2.9.20 | +| [MUD](https://mud.dev/) | Zincir üstü veri yönetimi | 2.0.12 | +| [React](https://react.dev/) | İstemci kullanıcı arayüzü | 18.2.0 | +| [Vite](https://vitejs.dev/) | İstemci kodunu sunma | 4.2.1 | + +## Mayın Tarlası örneği {#minesweeper} + +[Mayın Tarlası](https://en.wikipedia.org/wiki/Minesweeper_\(video_game\)), mayınlı bir alana sahip gizli bir harita içeren bir oyundur. Oyuncu belirli bir konumda kazı yapmayı seçer. Eğer o konumda bir mayın varsa oyun biter. Aksi takdirde, oyuncu o konumu çevreleyen sekiz karedeki mayın sayısını alır. + +Bu uygulama, verileri [anahtar-değer veritabanı](https://aws.amazon.com/nosql/key-value/) kullanarak zincir üstünde depolamamıza ve bu verileri zincir dışı bileşenlerle otomatik olarak senkronize etmemize olanak tanıyan bir çerçeve olan [MUD](https://mud.dev/) kullanılarak yazılmıştır. Senkronizasyona ek olarak MUD, erişim kontrolü sağlamayı ve diğer kullanıcıların uygulamamızı izinsiz olarak [genişletmesini](https://mud.dev/guides/extending-a-world) kolaylaştırır. + +### Mayın Tarlası örneğini çalıştırma {#running-minesweeper-example} + +Mayın Tarlası örneğini çalıştırmak için: + +1. [Ön koşulları yüklediğinizden](https://mud.dev/quickstart#prerequisites) emin olun: [Node](https://mud.dev/quickstart#prerequisites), [Foundry](https://book.getfoundry.sh/getting-started/installation), [`git`](https://git-scm.com/downloads), [`pnpm`](https://git-scm.com/downloads) ve [`mprocs`](https://github.com/pvolok/mprocs). + +2. Depoyu klonlayın. + + ```sh copy + git clone https://github.com/qbzzt/20240901-secret-state.git + ``` + +3. Paketleri yükleyin. + + ```sh copy + cd 20240901-secret-state/\npnpm install\nnpm install -g mprocs + ``` + + Foundry `pnpm install` komutunun bir parçası olarak yüklendiyse komut satırı kabuğunu yeniden başlatmanız gerekir. + +4. Sözleşmeleri derleyin + + ```sh copy + cd packages/contracts\nforge build\ncd ../.. + ``` + +5. Programı ([anvil](https://book.getfoundry.sh/anvil/) blokzinciri dahil) başlatın ve bekleyin. + + ```sh copy + mprocs + ``` + + Başlatmanın uzun sürdüğünü unutmayın. İlerlemeyi görmek için önce aşağı ok tuşunu kullanarak _contracts_ sekmesine gidin ve MUD sözleşmelerinin dağıtıldığını görün. _Waiting for file changes…_ mesajını aldığınızda, sözleşmeler dağıtılmış demektir ve ilerlemenin devamı _server_ sekmesinde gerçekleşecektir. Orada, _Verifier address: 0x...._ mesajını alana kadar beklersiniz. + + Bu adım başarılı olursa `mprocs` ekranını görürsünüz; solda farklı işlemler ve sağda o anda seçili olan işlemin konsol çıktısı bulunur. + + ![mprocs ekranı](./mprocs.png) + + `mprocs` ile ilgili bir sorun varsa, dört işlemi manuel olarak, her birini kendi komut satırı penceresinde çalıştırabilirsiniz: + + - **Anvil** + + ```sh + cd packages/contracts\nanvil --base-fee 0 --block-time 2 + ``` + + - **Sözleşmeler** + + ```sh + cd packages/contracts\npnpm mud dev-contracts --rpc http://127.0.0.1:8545 + ``` + + - **Sunucu** + + ```sh + cd packages/server\npnpm start + ``` + + - **İstemci** + + ```sh + cd packages/client\npnpm run dev + ``` + +6. Şimdi [istemciye](http://localhost:3000) göz atabilir, **Yeni Oyun**'a tıklayabilir ve oynamaya başlayabilirsiniz. + +### Tablolar {#tables} + +Zincir üstünde [birkaç tabloya](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/mud.config.ts) ihtiyacımız var. + +- `Configuration`: Bu tablo bir tekildir, anahtarı yoktur ve tek bir kaydı vardır. Oyun yapılandırma bilgilerini tutmak için kullanılır: + - `height`: Bir mayın tarlasının yüksekliği + - `width`: Bir mayın tarlasının genişliği + - `numberOfBombs`: Her mayın tarlasındaki bomba sayısı + +- `VerifierAddress`: Bu tablo da bir tekildir. Yapılandırmanın bir parçasını, doğrulayıcı sözleşmenin adresini (`verifier`) tutmak için kullanılır. Bu bilgiyi `Configuration` tablosuna koyabilirdik, ancak sunucu olan farklı bir bileşen tarafından ayarlandığı için ayrı bir tabloya koymak daha kolaydır. + +- `PlayerGame`: Anahtar, oyuncunun adresidir. Veri şudur: + + - `gameId`: Oyuncunun oynadığı haritanın karması olan 32 baytlık değer (oyun tanımlayıcısı). + - `win`: oyuncunun oyunu kazanıp kazanmadığını belirten bir boole değeri. + - `lose`: oyuncunun oyunu kaybedip kaybetmediğini belirten bir boole değeri. + - `digNumber`: oyundaki başarılı kazıların sayısı. + +- `GamePlayer`: Bu tablo, `gameId`'den oyuncu adresine ters eşlemeyi tutar. + +- `Map`: Anahtar, üç değerden oluşan bir demettir: + + - `gameId`: Oyuncunun oynadığı haritanın karması olan 32 baytlık değer (oyun tanımlayıcısı). + - `x` koordinatı + - `y` koordinatı + + Değer tek bir sayıdır. Bir bomba tespit edilirse 255'tir. Aksi takdirde, o konumun etrafındaki bomba sayısının bir fazlasıdır. Sadece bomba sayısını kullanamayız, çünkü varsayılan olarak Ethereum Sanal Makinesi'ndeki tüm depolama ve MUD'daki tüm satır değerleri sıfırdır. "Oyuncu henüz burada kazı yapmadı" ile "oyuncu burada kazı yaptı ve etrafta sıfır bomba buldu" arasında ayrım yapmamız gerekiyor. + +Ek olarak, istemci ve sunucu arasındaki iletişim, zincir üstü bileşen aracılığıyla gerçekleşir. Bu da tablolar kullanılarak uygulanır. + +- `PendingGame`: Yeni bir oyun başlatmak için karşılanmamış istekler. +- `PendingDig`: Belirli bir oyunda belirli bir yerde kazı yapmak için karşılanmamış istekler. Bu bir [zincir dışı tablodur](https://mud.dev/store/tables#types-of-tables), yani EVM depolamasına yazılmaz, yalnızca zincir dışında olaylar kullanılarak okunabilir. + +### Yürütme ve veri akışları {#execution-data-flows} + +Bu akışlar istemci, zincir üstü bileşen ve sunucu arasındaki yürütmeyi koordine eder. + +#### Başlatma {#initialization-flow} + +`mprocs` komutunu çalıştırdığınızda şu adımlar gerçekleşir: + +1. [`mprocs`](https://github.com/pvolok/mprocs) dört bileşen çalıştırır: + + - [Anvil](https://book.getfoundry.sh/anvil/), yerel bir blokzincir çalıştırır + - [Contracts](https://github.com/qbzzt/20240901-secret-state/tree/main/packages/contracts), MUD için sözleşmeleri derler (gerekirse) ve dağıtır + - [Client](https://github.com/qbzzt/20240901-secret-state/tree/main/packages/client), kullanıcı arayüzünü ve istemci kodunu web tarayıcılarına sunmak için [Vite](https://vitejs.dev/) çalıştırır. + - [Server](https://github.com/qbzzt/20240901-secret-state/tree/main/packages/server), sunucu eylemlerini gerçekleştirir + +2. `contracts` paketi, MUD sözleşmelerini dağıtır ve ardından [`PostDeploy.s.sol` betiğini](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/script/PostDeploy.s.sol) çalıştırır. Bu betik yapılandırmayı ayarlar. GitHub'daki kod, [içinde sekiz mayın bulunan 10x5'lik bir mayın tarlası](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/script/PostDeploy.s.sol#L23) belirtir. + +3. [Sunucu](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts), [MUD'u ayarlayarak](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L6) başlar. Diğer şeylerin yanı sıra bu, veri senkronizasyonunu etkinleştirir, böylece ilgili tabloların bir kopyası sunucunun belleğinde bulunur. + +4. Sunucu, [`Configuration` tablosu değiştiğinde](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L23) yürütülecek bir fonksiyona abone olur. [Bu fonksiyon](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L24-L168), `PostDeploy.s.sol` yürütüldükten ve tabloyu değiştirdikten sonra çağrılır. + +5. Sunucu başlatma fonksiyonu yapılandırmaya sahip olduğunda, sunucunun [sıfır bilgi bölümünü](#using-zokrates-from-typescript) başlatmak için [`zkFunctions`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L34-L35) çağrısı yapar. Sıfır bilgi fonksiyonlarının mayın tarlasının genişliğini ve yüksekliğini sabit olarak alması gerektiğinden, yapılandırmayı alana kadar bu gerçekleşemez. + +6. Sunucunun sıfır bilgi bölümü başlatıldıktan sonra, bir sonraki adım [sıfır bilgi doğrulama sözleşmesini blokzincire dağıtmak](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L42-L53) ve MUD'da doğrulayıcı adresini ayarlamaktır. + +7. Son olarak, bir oyuncu [yeni bir oyun başlatmayı](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L55-L71) veya [mevcut bir oyunda kazı yapmayı](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L73-L108) talep ettiğinde görebilmek için güncellemelere abone oluruz. + +#### Yeni oyun {#new-game-flow} + +Oyuncu yeni bir oyun talep ettiğinde bunlar olur. + +1. Bu oyuncu için devam eden bir oyun yoksa veya varsa ama gameId değeri sıfırsa, istemci bir [yeni oyun düğmesi](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/client/src/App.tsx#L175) görüntüler. Kullanıcı bu düğmeye bastığında, [React `newGame` fonksiyonunu çalıştırır](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/client/src/App.tsx#L96). + +2. [`newGame`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/client/src/mud/createSystemCalls.ts#L43-L46) bir `System` çağrısıdır. MUD'da tüm çağrılar `World` sözleşmesi aracılığıyla yönlendirilir ve çoğu durumda `__` çağrısı yaparsınız. Bu durumda, çağrı `app__newGame`'edir, MUD daha sonra bunu [`GameSystem` içindeki `newGame`'e](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/GameSystem.sol#L16-L22) yönlendirir. + +3. Zincir üstü fonksiyon, oyuncunun devam eden bir oyunu olmadığını kontrol eder ve yoksa [isteği `PendingGame` tablosuna ekler](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/GameSystem.sol#L21). + +4. Sunucu, `PendingGame`'deki değişikliği algılar ve [abone olunan fonksiyonu çalıştırır](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L55-L71). Bu fonksiyon [`newGame`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L110-L114)'i çağırır, bu da [`createGame`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L116-L144)'i çağırır. + +5. `createGame`'in yaptığı ilk şey [uygun sayıda mayınla rastgele bir harita oluşturmaktır](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L120-L135). Ardından, Zokrates için gerekli olan boş kenarlıklı bir harita oluşturmak için [`makeMapBorders`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L147-L166) çağrısı yapar. Son olarak, `createGame`, oyun kimliği olarak kullanılan haritanın karmasını almak için [`calculateMapHash`](#calculateMapHash)'i çağırır. + +6. `newGame` fonksiyonu, yeni oyunu `gamesInProgress`'e ekler. + +7. Sunucunun yaptığı son şey, zincir üstü olan [`app__newGameResponse`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/ServerSystem.sol#L38-L43)'u çağırmaktır. Bu fonksiyon, erişim kontrolünü etkinleştirmek için farklı bir `System`, [`ServerSystem`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/ServerSystem.sol) içindedir. Erişim kontrolü, [MUD yapılandırma dosyasında](https://mud.dev/config), [`mud.config.ts`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/mud.config.ts#L67-L72) tanımlanır. + + Erişim listesi, yalnızca tek bir adresin `System`'i çağırmasına izin verir. Bu, sunucu fonksiyonlarına erişimi tek bir adresle sınırlar, böylece kimse sunucuyu taklit edemez. + +8. Zincir üstü bileşen ilgili tabloları günceller: + + - `PlayerGame` içinde oyunu oluşturun. + - `GamePlayer` içinde ters eşlemeyi ayarlayın. + - `PendingGame`'den isteği kaldırın. + +9. Sunucu `PendingGame`'deki değişikliği tanımlar, ancak [`wantsGame`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L58-L60) false olduğu için hiçbir şey yapmaz. + +10. İstemcide [`gameRecord`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/client/src/App.tsx#L143-L148), oyuncunun adresi için `PlayerGame` girişine ayarlanır. `PlayerGame` değiştiğinde, `gameRecord` da değişir. + +11. `gameRecord`'da bir değer varsa ve oyun kazanılmadıysa veya kaybedilmediyse, istemci [haritayı görüntüler](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/client/src/App.tsx#L175-L190). + +#### Kazı {#dig-flow} + +1. Oyuncu [harita hücresinin düğmesine tıklar](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/client/src/App.tsx#L188), bu da [`dig` fonksiyonunu](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/client/src/mud/createSystemCalls.ts#L33-L36) çağırır. Bu fonksiyon, [zincir üstündeki `dig`'i](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/GameSystem.sol#L24-L32) çağırır. + +2. Zincir üstü bileşen [bir dizi sağlık kontrolü gerçekleştirir](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/GameSystem.sol#L25-L30) ve başarılı olursa kazı isteğini [`PendingDig`'e ekler](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/GameSystem.sol#L31). + +3. Sunucu [`PendingDig`'deki değişikliği algılar](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L73). [Eğer geçerliyse](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L75-L84), hem sonucu hem de geçerli olduğuna dair bir kanıt oluşturmak için [sıfır bilgi kodunu](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L86-L95) (aşağıda açıklanmıştır) çağırır. + +4. [Sunucu](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L97-L107), zincir üstünde [`digResponse`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/ServerSystem.sol#L45-L64) çağrısı yapar. + +5. `digResponse` iki şey yapar. İlk olarak, [sıfır bilgi ispatını](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/ServerSystem.sol#L47-L61) kontrol eder. Ardından, ispat kontrol edilirse sonucu gerçekten işlemek için [`processDigResult`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/ServerSystem.sol#L67-L86) çağrısı yapar. + +6. `processDigResult`, oyunun [kaybedilip](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/ServerSystem.sol#L76-L78) [kazanılmadığını](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/ServerSystem.sol#L83-L86) kontrol eder ve [zincir üstü harita olan `Map`'i günceller](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/ServerSystem.sol#L80). + +7. İstemci güncellemeleri otomatik olarak alır ve [oyuncuya gösterilen haritayı günceller](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/client/src/App.tsx#L175-L190) ve uygunsa oyuncuya kazanıp kaybettiğini söyler. + +## Zokrates Kullanımı {#using-zokrates} + +Yukarıda açıklanan akışlarda, sıfır bilgi kısımlarını bir kara kutu olarak ele alarak atladık. Şimdi onu açalım ve bu kodun nasıl yazıldığını görelim. + +### Haritayı karıştırma {#hashing-map} + +Kullandığımız Zokrates karma fonksiyonu olan [Poseidon](https://www.poseidon-hash.info)'u uygulamak için [bu JavaScript kodunu](https://github.com/ZK-Plus/ICBC24_Tutorial_Compute-Offchain-Verify-onchain/tree/solutions/exercise) kullanabiliriz. Ancak, bu daha hızlı olsa da, bunu yapmak için sadece Zokrates karma fonksiyonunu kullanmaktan daha karmaşık olurdu. Bu bir öğreticidir ve bu nedenle kod performans için değil, basitlik için optimize edilmiştir. Bu nedenle, iki farklı Zokrates programına ihtiyacımız var, biri sadece bir haritanın karmasını hesaplamak için (`hash`) ve diğeri haritadaki bir konumdaki kazının sonucunun sıfır bilgi ispatını oluşturmak için (`dig`). + +### Karma fonksiyonu {#hash-function} + +Bu, bir haritanın karmasını hesaplayan fonksiyondur. Bu kodu satır satır inceleyeceğiz. + +``` +import "hashes/poseidon/poseidon.zok" as poseidon;\nimport "utils/pack/bool/pack128.zok" as pack128; +``` + +Bu iki satır, [Zokrates standart kütüphanesinden](https://zokrates.github.io/toolbox/stdlib.html) iki fonksiyonu içe aktarır. [İlk fonksiyon](https://github.com/Zokrates/ZoKrates/blob/latest/zokrates_stdlib/stdlib/hashes/poseidon/poseidon.zok), bir [Poseidon karmasıdır](https://www.poseidon-hash.info/). Bir [`field` elemanları](https://zokrates.github.io/language/types.html#field) dizisi alır ve bir `field` döndürür. + +Zokrates'teki alan elemanı tipik olarak 256 bitten daha kısadır, ancak çok da değil. Kodu basitleştirmek için, haritayı 512 bite kadar kısıtlıyoruz ve dört alandan oluşan bir diziyi karıştırıyoruz ve her alanda sadece 128 bit kullanıyoruz. [`pack128` fonksiyonu](https://github.com/Zokrates/ZoKrates/blob/latest/zokrates_stdlib/stdlib/utils/pack/bool/pack128.zok), bu amaçla 128 bitlik bir diziyi bir `field`'a dönüştürür. + +``` + def hashMap(bool[${width+2}][${height+2}] map) -> field { +``` + +Bu satır bir fonksiyon tanımı başlatır. `hashMap`, `map` adında tek bir parametre, iki boyutlu bir `bool`(ean) dizisi alır. Haritanın boyutu, [aşağıda açıklanan nedenlerden dolayı](#why-map-border) `width+2`'ye `height+2`'dir. + +Zokrates programları bu uygulamada [şablon dizeleri](https://www.w3schools.com/js/js_string_templates.asp) olarak saklandığı için `${width+2}` ve `${height+2}` kullanabiliriz. `${` ve `}` arasındaki kod JavaScript tarafından değerlendirilir ve bu şekilde program farklı harita boyutları için kullanılabilir. Harita parametresinin etrafında, içinde hiç bomba bulunmayan bir konum genişliğinde bir kenarlık bulunur, bu da genişlik ve yüksekliğe iki eklememizin nedenidir. + +Dönüş değeri, karmayı içeren bir `field`'dır. + +``` + bool[512] mut map1d = [false; 512]; +``` + +Harita iki boyutludur. Ancak, `pack128` fonksiyonu iki boyutlu dizilerle çalışmaz. Bu yüzden önce `map1d` kullanarak haritayı 512 baytlık bir diziye düzleştiririz. Varsayılan olarak Zokrates değişkenleri sabittir, ancak bu diziye bir döngü içinde değerler atamamız gerekir, bu yüzden onu [`mut`](https://zokrates.github.io/language/variables.html#mutability) olarak tanımlarız. + +Zokrates'in `undefined` özelliği olmadığı için diziyi başlatmamız gerekiyor. `[false; 512]` ifadesi [512 `false` değerinden oluşan bir dizi](https://zokrates.github.io/language/types.html#declaration-and-initialization) anlamına gelir. + +``` + u32 mut counter = 0; +``` + +Ayrıca `map1d`'de zaten doldurduğumuz bitlerle doldurmadıklarımızı ayırt etmek için bir sayaca ihtiyacımız var. + +``` + for u32 x in 0..${width+2} { +``` + +Zokrates'te bir [`for` döngüsü](https://zokrates.github.io/language/control_flow.html#for-loops) bu şekilde bildirilir. Bir Zokrates `for` döngüsünün sabit sınırları olmalıdır, çünkü bir döngü gibi görünse de, derleyici aslında onu "açar". `${width+2}` ifadesi, TypeScript kodu derleyiciyi çağırmadan önce `width` ayarlandığı için bir derleme zamanı sabitidir. + +``` + for u32 y in 0..${height+2} {\n map1d[counter] = map[x][y];\n counter = counter+1;\n }\n } +``` + +Haritadaki her konum için bu değeri `map1d` dizisine koyun ve sayacı artırın. + +``` + field[4] hashMe = [\n pack128(map1d[0..128]),\n pack128(map1d[128..256]),\n pack128(map1d[256..384]),\n pack128(map1d[384..512])\n ]; +``` + +`pack128`, `map1d`'den dört `field` değerinden oluşan bir dizi oluşturur. Zokrates'te `array[a..b]` dizinin `a`'da başlayıp `b-1`'de biten dilimi anlamına gelir. + +``` + return poseidon(hashMe);\n} +``` + +Bu diziyi bir karmaya dönüştürmek için `poseidon` kullanın. + +### Karma programı {#hash-program} + +Sunucunun, oyun tanımlayıcıları oluşturmak için doğrudan `hashMap`'i çağırması gerekir. Ancak, Zokrates başlatmak için bir programda yalnızca `main` fonksiyonunu çağırabilir, bu nedenle karma fonksiyonunu çağıran bir `main` içeren bir program oluştururuz. + +``` +${hashFragment}\n\ndef main(bool[${width+2}][${height+2}] map) -> field {\n return hashMap(map);\n} +``` + +### Kazı programı {#dig-program} + +Bu, uygulamanın sıfır bilgi kısmının kalbidir, burada kazı sonuçlarını doğrulamak için kullanılan kanıtları üretiriz. + +``` +${hashFragment}\n\n// (x,y) konumundaki mayın sayısı\ndef map2mineCount(bool[${width+2}][${height+2}] map, u32 x, u32 y) -> u8 {\n return if map[x+1][y+1] { 1 } else { 0 };\n} +``` + +#### Neden harita sınırı {#why-map-border} + +Sıfır bilgi ispatları, bir `if` ifadesinin kolay bir eşdeğerine sahip olmayan [aritmetik devreleri](https://medium.com/web3studio/simple-explanations-of-arithmetic-circuits-and-zero-knowledge-proofs-806e59a79785) kullanır. Bunun yerine, [koşullu operatörün](https://en.wikipedia.org/wiki/Ternary_conditional_operator) eşdeğerini kullanırlar. `a` sıfır veya bir olabiliyorsa, `if a { b } else { c }` ifadesini `ab+(1-a)c` olarak hesaplayabilirsiniz. + +Bu nedenle, bir Zokrates `if` ifadesi her zaman her iki dalı da değerlendirir. Örneğin, bu koda sahipseniz: + +``` +bool[5] arr = [false; 5];\nu32 index=10;\nreturn if index>4 { 0 } else { arr[index] } +``` + +`arr[10]`'u hesaplaması gerektiği için hata verir, bu değer daha sonra sıfırla çarpılacak olsa bile. + +Haritanın etrafında bir konum genişliğinde bir sınıra ihtiyacımız olmasının nedeni budur. Bir konumun etrafındaki toplam mayın sayısını hesaplamamız gerekiyor ve bu, kazı yaptığımız konumun bir satır üstünde ve altında, solunda ve sağındaki konumu görmemiz gerektiği anlamına geliyor. Bu da bu konumların Zokrates'e sağlanan harita dizisinde mevcut olması gerektiği anlamına gelir. + +``` +def main(private bool[${width+2}][${height+2}] map, u32 x, u32 y) -> (field, u8) { +``` + +Varsayılan olarak Zokrates kanıtları girdilerini içerir. Bir noktanın etrafında beş mayın olduğunu bilmek, aslında hangi nokta olduğunu bilmiyorsanız (ve sadece isteğinizle eşleştiremezsiniz, çünkü o zaman kanıtlayıcı farklı değerler kullanabilir ve size bu konuda bilgi vermeyebilir) bir işe yaramaz. Ancak, haritayı Zokrates'e sağlarken gizli tutmamız gerekiyor. Çözüm, kanıt tarafından _açıklanmayan_ bir `private` parametresi kullanmaktır. + +Bu, başka bir kötüye kullanım yolunu açar. Kanıtlayıcı doğru koordinatları kullanabilir, ancak konumun etrafında ve muhtemelen konumun kendisinde herhangi bir sayıda mayın içeren bir harita oluşturabilir. Bu kötüye kullanımı önlemek için, sıfır bilgi ispatının oyun tanımlayıcısı olan haritanın karmasını içermesini sağlıyoruz. + +``` + return (hashMap(map), +``` + +Buradaki dönüş değeri, harita karma dizisini ve kazı sonucunu içeren bir demettir. + +``` + if map2mineCount(map, x, y) > 0 { 0xFF } else { +``` + +Konumun kendisinde bir bomba olması durumunda özel bir değer olarak 255 kullanıyoruz. + +``` + map2mineCount(map, x-1, y-1) + map2mineCount(map, x, y-1) + map2mineCount(map, x+1, y-1) +\n map2mineCount(map, x-1, y) + map2mineCount(map, x+1, y) +\n map2mineCount(map, x-1, y+1) + map2mineCount(map, x, y+1) + map2mineCount(map, x+1, y+1)\n }\n );\n} +``` + +Oyuncu bir mayına çarpmadıysa, konumun etrafındaki alan için mayın sayılarını ekleyin ve bunu döndürün. + +### TypeScript'ten Zokrates Kullanımı {#using-zokrates-from-typescript} + +Zokrates'in bir komut satırı arayüzü vardır, ancak bu programda onu [TypeScript kodunda](https://zokrates.github.io/toolbox/zokrates_js.html) kullanıyoruz. + +Zokrates tanımlarını içeren kütüphaneye [`zero-knowledge.ts`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/zero-knowledge.ts) denir. + +```typescript +import { initialize as zokratesInitialize } from "zokrates-js" +``` + +[Zokrates JavaScript bağlamalarını](https://zokrates.github.io/toolbox/zokrates_js.html) içe aktarın. Tüm Zokrates tanımlarına çözümlenen bir söz döndürdüğü için yalnızca [`initialize`](https://zokrates.github.io/toolbox/zokrates_js.html#initialize) fonksiyonuna ihtiyacımız var. + +```typescript +export const zkFunctions = async (width: number, height: number) : Promise => { +``` + +Zokrates'in kendisine benzer şekilde, biz de yalnızca [asenkron](https://www.w3schools.com/js/js_async.asp) olan tek bir fonksiyonu dışa aktarıyoruz. Sonunda döndüğünde, aşağıda göreceğimiz gibi birkaç fonksiyon sağlar. + +```typescript +const zokrates = await zokratesInitialize() +``` + +Zokrates'i başlatın, kütüphaneden ihtiyacımız olan her şeyi alın. + +```typescript +const hashFragment = `\n import "utils/pack/bool/pack128.zok" as pack128;\n import "hashes/poseidon/poseidon.zok" as poseidon;\n .\n .\n .\n }\n `\n\nconst hashProgram = `\n ${hashFragment}\n .\n .\n .\n `\n\nconst digProgram = `\n ${hashFragment}\n .\n .\n .\n ` +``` + +Ardından, yukarıda gördüğümüz karma fonksiyonu ve iki Zokrates programımız var. + +```typescript +const digCompiled = zokrates.compile(digProgram)\nconst hashCompiled = zokrates.compile(hashProgram) +``` + +Burada bu programları derliyoruz. + +```typescript +// Sıfır bilgi doğrulaması için anahtarları oluşturun.\n// Bir üretim sisteminde bir kurulum töreni kullanmak istersiniz.\n// (https://zokrates.github.io/toolbox/trusted_setup.html#initializing-a-phase-2-ceremony).\nconst keySetupResults = zokrates.setup(digCompiled.program, "")\nconst verifierKey = keySetupResults.vk\nconst proverKey = keySetupResults.pk +``` + +Bir üretim sisteminde daha karmaşık bir [kurulum töreni](https://zokrates.github.io/toolbox/trusted_setup.html#initializing-a-phase-2-ceremony) kullanabiliriz, ancak bu bir gösterim için yeterince iyidir. Kullanıcıların kanıtlayıcı anahtarını bilmeleri bir sorun değildir - doğru olmadıkça yine de bir şeyleri kanıtlamak için kullanamazlar. Entropiyi (ikinci parametre, `""`) belirttiğimiz için, sonuçlar her zaman aynı olacaktır. + +**Not:** Zokrates programlarının derlenmesi ve anahtar oluşturulması yavaş süreçlerdir. Bunları her seferinde tekrarlamaya gerek yoktur, sadece harita boyutu değiştiğinde. Bir üretim sisteminde bunları bir kez yaparsınız ve sonra çıktıyı saklarsınız. Bunu burada yapmamamın tek nedeni basitlik uğrunadır. + +#### `calculateMapHash` {#calculateMapHash} + +```typescript +const calculateMapHash = function (hashMe: boolean[][]): string {\n return (\n "0x" +\n BigInt(zokrates.computeWitness(hashCompiled, [hashMe]).output.slice(1, -1))\n .toString(16)\n .padStart(64, "0")\n )\n} +``` + +[`computeWitness`](https://zokrates.github.io/toolbox/zokrates_js.html#computewitnessartifacts-args-options) fonksiyonu aslında Zokrates programını çalıştırır. İki alanlı bir yapı döndürür: `output`, programın çıktısı olan bir JSON dizesi ve `witness`, sonucun sıfır bilgi kanıtını oluşturmak için gereken bilgidir. Burada sadece çıktıya ihtiyacımız var. + +Çıktı, `"31337"` biçiminde, tırnak işaretleri içinde yer alan bir ondalık sayı olan bir dizedir. Ancak `viem` için ihtiyacımız olan çıktı, `0x60A7` biçiminde bir onaltılık sayıdır. Bu yüzden tırnak işaretlerini kaldırmak için `.slice(1,-1)` ve ardından kalan dizeyi, ondalık bir sayı olan, bir [`BigInt`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt)'e dönüştürmek için `BigInt` kullanırız. `.toString(16)`, bu `BigInt`'i bir onaltılık dizeye dönüştürür ve `"0x"+`, onaltılık sayılar için işaretleyiciyi ekler. + +```typescript +// Kazın ve sonucun sıfır bilgi kanıtını döndürün\n// (sunucu tarafı kodu) +``` + +Sıfır bilgi ispatı, genel girdileri (`x` ve `y`) ve sonuçları (haritanın karması ve bomba sayısı) içerir. + +```typescript + const zkDig = function(map: boolean[][], x: number, y: number) : any {\n if (x<0 || x>=width || y<0 || y>=height)\n throw new Error("Haritanın dışında kazmaya çalışıyorsunuz") +``` + +Zokrates'te bir dizinin sınırları dışında olup olmadığını kontrol etmek bir sorundur, bu yüzden bunu burada yapıyoruz. + +```typescript +const runResults = zokrates.computeWitness(digCompiled, [map, `${x}`, `${y}`]) +``` + +Kazı programını çalıştırın. + +```typescript + const proof = zokrates.generateProof(\n digCompiled.program,\n runResults.witness,\n proverKey)\n\n return proof\n } +``` + +[`generateProof`](https://zokrates.github.io/toolbox/zokrates_js.html#generateproofprogram-witness-provingkey-entropy) kullanın ve ispatı döndürün. + +```typescript +const solidityVerifier = `\n // Harita boyutu: ${width} x ${height}\n \n${zokrates.exportSolidityVerifier(verifierKey)}\n ` +``` + +Bir Solidity doğrulayıcısı, blokzincire dağıtabileceğimiz ve `digCompiled.program` tarafından oluşturulan kanıtları doğrulamak için kullanabileceğimiz bir akıllı sözleşme. + +```typescript + return {\n zkDig,\n calculateMapHash,\n solidityVerifier,\n }\n} +``` + +Son olarak, diğer kodun ihtiyaç duyabileceği her şeyi döndürün. + +## Güvenlik testleri {#security-tests} + +Güvenlik testleri önemlidir çünkü bir işlevsellik hatası eninde sonunda kendini belli edecektir. Ancak uygulama güvensizse, bu durum muhtemelen birinin hile yapıp başkalarına ait kaynaklarla kaçmasıyla ortaya çıkmadan önce uzun süre gizli kalacaktır. + +### İzinler {#permissions} + +Bu oyunda ayrıcalıklı bir varlık var, sunucu. [`ServerSystem`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/ServerSystem.sol) içindeki fonksiyonları çağırmasına izin verilen tek kullanıcı odur. İzinli fonksiyonlara yapılan çağrıların yalnızca sunucu hesabı olarak izin verildiğini doğrulamak için [`cast`](https://book.getfoundry.sh/cast/) kullanabiliriz. + +[Sunucunun özel anahtarı `setupNetwork.ts`'dedir](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/mud/setupNetwork.ts#L52). + +1. `anvil`'i (blokzincir) çalıştıran bilgisayarda bu ortam değişkenlerini ayarlayın. + + ```sh copy + WORLD_ADDRESS=0x8d8b6b8414e1e3dcfd4168561b9be6bd3bf6ec4b\nUNAUTHORIZED_KEY=0x5de4111afa1a4b94908f83103eb1f1706367c2e68ca870fc3fb9a804cdab365a\nAUTHORIZED_KEY=0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d + ``` + +2. `cast` kullanarak doğrulayıcı adresini yetkisiz bir adres olarak ayarlamayı deneyin. + + ```sh copy + cast send $WORLD_ADDRESS 'app__setVerifier(address)' `cast address-zero` --private-key $UNAUTHORIZED_KEY + ``` + + `cast` yalnızca bir başarısızlık bildirmekle kalmaz, aynı zamanda tarayıcıdaki oyunda **MUD Geliştirici Araçları**'nı açabilir, **Tablolar**'a tıklayabilir ve **app\_\_VerifierAddress**'i seçebilirsiniz. Adresin sıfır olmadığını görün. + +3. Doğrulayıcı adresini sunucunun adresi olarak ayarlayın. + + ```sh copy + cast send $WORLD_ADDRESS 'app__setVerifier(address)' `cast address-zero` --private-key $AUTHORIZED_KEY + ``` + + **app\_\_VerifiedAddress**'deki adres artık sıfır olmalıdır. + +Aynı `System`'deki tüm MUD fonksiyonları aynı erişim kontrolünden geçer, bu yüzden bu testi yeterli görüyorum. Eğer öyle düşünmüyorsanız, [`ServerSystem`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/ServerSystem.sol) içindeki diğer fonksiyonları kontrol edebilirsiniz. + +### Sıfır bilgi kötüye kullanımları {#zero-knowledge-abuses} + +Zokrates'i doğrulamak için gereken matematik bu öğreticinin (ve benim yeteneklerimin) kapsamı dışındadır. Ancak, sıfır bilgi kodunun doğru yapılmadığında başarısız olduğunu doğrulamak için çeşitli kontroller yapabiliriz. Tüm bu testler, [`zero-knowledge.ts`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/zero-knowledge.ts) dosyasını değiştirmemizi ve tüm uygulamayı yeniden başlatmamızı gerektirecektir. Uygulamayı imkansız bir duruma soktuğu için (oyuncunun devam eden bir oyunu var, ancak oyun artık sunucu tarafından kullanılamıyor) sunucu işlemini yeniden başlatmak yeterli değildir. + +#### Yanlış cevap {#wrong-answer} + +En basit olasılık, sıfır bilgi ispatında yanlış cevap vermektir. Bunu yapmak için `zkDig` içine girip [91. satırı değiştiriyoruz](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/zero-knowledge.ts#L91): + +```ts +proof.inputs[3] = "0x" + "1".padStart(64, "0") +``` + +Bu, doğru cevaba bakılmaksızın her zaman bir bomba olduğunu iddia edeceğimiz anlamına gelir. Bu sürümle oynamayı deneyin ve `pnpm dev` ekranının **sunucu** sekmesinde şu hatayı göreceksiniz: + +``` + cause: {\n code: 3,\n message: 'yürütme geri alındı: geri al: Sıfır bilgi doğrulaması başarısız',\n data: '0x08c379a00000000000000000000000000000000000000000000000000000000000000002000000000000000\n000000000000000000000000000000000000000000000000205a65726f206b6e6f776c6564676520766572696669636174696f6\ne206661696c'\n }, +``` + +Yani bu tür bir hile başarısız olur. + +#### Yanlış ispat {#wrong-proof} + +Doğru bilgiyi verirsek ama sadece yanlış ispat verimiz varsa ne olur? Şimdi, 91. satırı şununla değiştirin: + +```ts +proof.proof = {\n a: ["0x" + "1".padStart(64, "0"), "0x" + "2".padStart(64, "0")],\n b: [\n ["0x" + "1".padStart(64, "0"), "0x" + "2".padStart(64, "0")],\n ["0x" + "1".padStart(64, "0"), "0x" + "2".padStart(64, "0")],\n ],\n c: ["0x" + "1".padStart(64, "0"), "0x" + "2".padStart(64, "0")],\n} +``` + +Yine de başarısız oluyor, ancak şimdi doğrulayıcı çağrısı sırasında gerçekleştiği için bir neden olmadan başarısız oluyor. + +### Bir kullanıcı sıfır güven kodunu nasıl doğrulayabilir? {#user-verify-zero-trust} + +Akıllı sözleşmeleri doğrulamak nispeten kolaydır. Tipik olarak, geliştirici kaynak kodunu bir blok gezgininde yayınlar ve blok gezgini, kaynak kodunun [sözleşme dağıtım işlemindeki](/developers/docs/smart-contracts/deploying/) koda derlendiğini doğrular. MUD `System`'leri durumunda bu [biraz daha karmaşıktır](https://mud.dev/cli/verify), ancak çok değil. + +Bu, sıfır bilgi ile daha zordur. Doğrulayıcı bazı sabitleri içerir ve onlar üzerinde bazı hesaplamalar yapar. Bu size neyin kanıtlandığını söylemez. + +```solidity + function verifyingKey() pure internal returns (VerifyingKey memory vk) {\n vk.alpha = Pairing.G1Point(uint256(0x0f43f4fe7b5c2326fed4ac6ed2f4003ab9ab4ea6f667c2bdd77afb068617ee16), uint256(0x25a77832283f9726935219b5f4678842cda465631e72dbb24708a97ba5d0ce6f));\n vk.beta = Pairing.G2Point([uint256(0x2cebd0fbd21aca01910581537b21ae4fed46bc0e524c055059aa164ba0a6b62b), uint256(0x18fd4a7bc386cf03a95af7163d5359165acc4e7961cb46519e6d9ee4a1e2b7e9)], [uint256(0x11449dee0199ef6d8eebfe43b548e875c69e7ce37705ee9a00c81fe52f11a009), uint256(0x066d0c83b32800d3f335bb9e8ed5e2924cf00e77e6ec28178592eac9898e1a00)]); +``` + +Çözüm, en azından blok gezginleri kullanıcı arayüzlerine Zokrates doğrulamasını ekleyene kadar, uygulama geliştiricilerinin Zokrates programlarını kullanıma sunması ve en azından bazı kullanıcıların bunları uygun doğrulama anahtarıyla kendilerinin derlemesidir. + +Bunu yapmak için: + +1. [Zokrates'i yükleyin](https://zokrates.github.io/gettingstarted.html). + +2. Zokrates programıyla bir `dig.zok` dosyası oluşturun. Aşağıdaki kod, orijinal harita boyutu olan 10x5'i koruduğunuzu varsayar. + + ```zokrates + import "utils/pack/bool/pack128.zok" as pack128;\n import "hashes/poseidon/poseidon.zok" as poseidon;\n\n def hashMap(bool[12][7] map) -> field {\n bool[512] mut map1d = [false; 512];\n u32 mut counter = 0;\n\n for u32 x in 0..12 {\n for u32 y in 0..7 {\n map1d[counter] = map[x][y];\n counter = counter+1;\n }\n }\n\n field[4] hashMe = [\n pack128(map1d[0..128]),\n pack128(map1d[128..256]),\n pack128(map1d[256..384]),\n pack128(map1d[384..512])\n ];\n\n return poseidon(hashMe);\n }\n\n\n // (x,y) konumundaki mayınların sayısı\n def map2mineCount(bool[12][7] map, u32 x, u32 y) -> u8 {\n return if map[x+1][y+1] { 1 } else { 0 };\n }\n\n def main(private bool[12][7] map, u32 x, u32 y) -> (field, u8) {\n return (hashMap(map) ,\n if map2mineCount(map, x, y) > 0 { 0xFF } else {\n map2mineCount(map, x-1, y-1) + map2mineCount(map, x, y-1) + map2mineCount(map, x+1, y-1) +\n map2mineCount(map, x-1, y) + map2mineCount(map, x+1, y) +\n map2mineCount(map, x-1, y+1) + map2mineCount(map, x, y+1) + map2mineCount(map, x+1, y+1)\n }\n );\n } + ``` + +3. Zokrates kodunu derleyin ve doğrulama anahtarını oluşturun. Doğrulama anahtarı, orijinal sunucuda kullanılan aynı entropi ile oluşturulmalıdır, [bu durumda boş bir dizedir](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/zero-knowledge.ts#L67). + + ```sh copy + zokrates compile --input dig.zok\nzokrates setup -e "" + ``` + +4. Solidity doğrulayıcısını kendi başınıza oluşturun ve blokzincirdekiyle işlevsel olarak aynı olduğunu doğrulayın (sunucu bir yorum ekler, ancak bu önemli değildir). + + ```sh copy + zokrates export-verifier\ndiff verifier.sol ~/20240901-secret-state/packages/contracts/src/verifier.sol + ``` + +## Tasarım kararları {#design} + +Yeterince karmaşık herhangi bir uygulamada, ödünler gerektiren rakip tasarım hedefleri vardır. Bazı ödünlere ve mevcut çözümün neden diğer seçeneklere tercih edilebilir olduğuna bakalım. + +### Neden sıfır bilgi {#why-zero-knowledge} + +Mayın tarlası için gerçekten sıfır bilgiye ihtiyacınız yok. Sunucu her zaman haritayı tutabilir ve ardından oyun bittiğinde hepsini ortaya çıkarabilir. Ardından, oyunun sonunda akıllı sözleşme harita karmasını hesaplayabilir, eşleştiğini doğrulayabilir ve eşleşmezse sunucuyu cezalandırabilir veya oyunu tamamen yok sayabilir. + +Bu daha basit çözümü kullanmadım çünkü yalnızca iyi tanımlanmış bir son durumu olan kısa oyunlar için çalışıyor. Bir oyun potansiyel olarak sonsuz olduğunda ([otonom dünyalar](https://0xparc.org/blog/autonomous-worlds) durumunda olduğu gibi), durumu _açığa çıkarmadan_ kanıtlayan bir çözüme ihtiyacınız vardır. + +Bir öğretici olarak bu makale, anlaşılması kolay kısa bir oyuna ihtiyaç duyuyordu, ancak bu teknik daha uzun oyunlar için en kullanışlıdır. + +### Neden Zokrates? {#why-zokrates} + +[Zokrates](https://zokrates.github.io/) mevcut tek sıfır bilgi kütüphanesi değildir, ancak normal, [zorunlu](https://en.wikipedia.org/wiki/Imperative_programming) bir programlama diline benzer ve boole değişkenlerini destekler. + +Uygulamanız için, farklı gereksinimlerle, [Circum](https://docs.circom.io/getting-started/installation/) veya [Cairo](https://www.cairo-lang.org/tutorials/getting-started-with-cairo/)'yu kullanmayı tercih edebilirsiniz. + +### Zokrates ne zaman derlenmeli {#when-compile-zokrates} + +Bu programda, Zokrates programlarını [sunucu her başladığında](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/zero-knowledge.ts#L60-L61) derliyoruz. Bu açıkça bir kaynak israfıdır, ancak bu bir öğreticidir, basitlik için optimize edilmiştir. + +Eğer bir üretim seviyesinde uygulama yazıyor olsaydım, bu mayın tarlası boyutunda derlenmiş Zokrates programları içeren bir dosyam olup olmadığını kontrol eder ve varsa onu kullanırdım. Aynı şey, zincir üstünde bir doğrulayıcı sözleşmesi dağıtmak için de geçerlidir. + +### Doğrulayıcı ve kanıtlayıcı anahtarları oluşturma {#key-creation} + +[Anahtar oluşturma](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/zero-knowledge.ts#L63-L69), belirli bir mayın tarlası boyutu için bir kereden fazla yapılması gerekmeyen başka bir saf hesaplamadır. Yine, yalnızca basitlik uğruna bir kez yapılır. + +Ek olarak, [bir kurulum töreni](https://zokrates.github.io/toolbox/trusted_setup.html#initializing-a-phase-2-ceremony) kullanabiliriz. Bir kurulum töreninin avantajı, sıfır bilgi ispatında hile yapmak için her katılımcıdan ya entropiye ya da bir ara sonuca ihtiyacınız olmasıdır. En az bir tören katılımcısı dürüstse ve bu bilgiyi silerse, sıfır bilgi ispatları belirli saldırılardan güvende olur. Ancak, bilginin her yerden silindiğini doğrulamak için _hiçbir mekanizma_ yoktur. Sıfır bilgi ispatları kritik derecede önemliyse, kurulum törenine katılmak istersiniz. + +Burada, düzinelerce katılımcısı olan [sürekli tau güçlerine](https://github.com/privacy-scaling-explorations/perpetualpowersoftau) güveniyoruz. Muhtemelen yeterince güvenlidir ve çok daha basittir. Ayrıca, kullanıcıların [sıfır bilgi yapılandırmasını doğrulamalarını](#user-verify-zero-trust) kolaylaştıran anahtar oluşturma sırasında entropi eklemiyoruz. + +### Nerede doğrulanmalı {#where-verification} + +Sıfır bilgi ispatlarını ya zincir üstünde (gaz maliyeti olan) ya da istemcide ([`verify`](https://zokrates.github.io/toolbox/zokrates_js.html#verifyverificationkey-proof) kullanarak) doğrulayabiliriz. İlkini seçtim, çünkü bu, [doğrulayıcıyı bir kez doğrulamanıza](#user-verify-zero-trust) ve sonra sözleşme adresi aynı kaldığı sürece değişmediğine güvenmenize olanak tanır. Doğrulama istemcide yapılsaydı, istemciyi her indirdiğinizde aldığınız kodu doğrulamanız gerekirdi. + +Ayrıca, bu oyun tek oyunculu olsa da, birçok blokzincir oyunu çok oyunculudur. zincir üstü doğrulama, sıfır bilgi ispatını yalnızca bir kez doğrulamanız anlamına gelir. Bunu istemcide yapmak, her istemcinin bağımsız olarak doğrulamasını gerektirirdi. + +### Haritayı TypeScript'te mi yoksa Zokrates'te mi düzleştirmeli? {#where-flatten} + +Genel olarak, işleme TypeScript veya Zokrates'te yapılabildiğinde, çok daha hızlı olan ve sıfır bilgi ispatları gerektirmeyen TypeScript'te yapmak daha iyidir. Örneğin, Zokrates'e karmayı sağlayıp doğru olduğunu doğrulamasını yaptırmamamızın nedeni budur. Karma işlemi Zokrates içinde yapılmalıdır, ancak döndürülen karma ile zincir üstündeki karma arasındaki eşleşme onun dışında gerçekleşebilir. + +Ancak, TypeScript'te yapabilecekken haritayı [Zokrates'te düzleştiriyoruz](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/zero-knowledge.ts#L15-L20). Nedeni, diğer seçeneklerin bence daha kötü olmasıdır. + +- Zokrates koduna tek boyutlu bir boole dizisi sağlayın ve iki boyutlu haritayı elde etmek için `x*(height+2)\n+y` gibi bir ifade kullanın. Bu, [kodu](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/zero-knowledge.ts#L44-L47) biraz daha karmaşık hale getirirdi, bu yüzden performans kazancının bir öğretici için değmeyeceğine karar verdim. + +- Zokrates'e hem tek boyutlu diziyi hem de iki boyutlu diziyi gönderin. Ancak, bu çözüm bize hiçbir şey kazandırmaz. Zokrates kodu, sağlanan tek boyutlu dizinin gerçekten iki boyutlu dizinin doğru temsili olduğunu doğrulamak zorunda kalırdı. Yani herhangi bir performans kazancı olmazdı. + +- Zokrates'te iki boyutlu diziyi düzleştirin. Bu en basit seçenektir, bu yüzden onu seçtim. + +### Haritalar nerede saklanmalı {#where-store-maps} + +Bu uygulamada [`gamesInProgress`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L20) bellekte basit bir değişkendir. Bu, sunucunuz ölürse ve yeniden başlatılması gerekirse, sakladığı tüm bilgilerin kaybolacağı anlamına gelir. Oyuncular sadece oyunlarına devam edememekle kalmaz, zincir üstü bileşen hala devam eden bir oyunları olduğunu düşündüğü için yeni bir oyun bile başlatamazlar. + +Bu, bu bilgiyi bir veritabanında saklayacağınız bir üretim sistemi için açıkça kötü bir tasarımdır. Burada bir değişken kullanmamın tek nedeni, bunun bir öğretici olması ve basitliğin ana husus olmasıdır. + +## Sonuç: Bu tekniğin uygun olduğu koşullar nelerdir? {#conclusion} + +Artık, zincir üstünde olmaması gereken gizli durumu saklayan bir sunucu ile bir oyun yazmayı biliyorsunuz. Ama hangi durumlarda yapmalısınız? İki ana husus vardır. + +- _Uzun süren oyun_: [Yukarıda belirtildiği gibi](#why-zero-knowledge), kısa bir oyunda oyun bittiğinde durumu yayınlayabilir ve her şeyin o zaman doğrulanmasını sağlayabilirsiniz. Ancak oyun uzun veya belirsiz bir süre aldığında ve durumun gizli kalması gerektiğinde bu bir seçenek değildir. + +- _Bazı merkezileştirme kabul edilebilir_: Sıfır bilgi ispatları, bir varlığın sonuçları taklit etmediği bütünlüğü doğrulayabilir. Yapamadıkları şey, varlığın hala kullanılabilir olacağını ve mesajlara cevap vereceğini sağlamaktır. Kullanılabilirliğin de merkeziyetsiz olması gereken durumlarda, sıfır bilgi ispatları yeterli bir çözüm değildir ve [çok taraflı hesaplamaya](https://en.wikipedia.org/wiki/Secure_multi-party_computation) ihtiyacınız vardır. + +[Çalışmalarımdan daha fazlası için buraya bakın](https://cryptodocguy.pro/). + +### Teşekkürler {#acknowledgements} + +- Alvaro Alonso bu makalenin bir taslağını okudu ve Zokrates hakkındaki bazı yanlış anlamalarımı giderdi. + +Kalan hatalar benim sorumluluğumdadır. diff --git a/public/content/translations/tr/developers/tutorials/secure-development-workflow/index.md b/public/content/translations/tr/developers/tutorials/secure-development-workflow/index.md index 4d6b680f0d8..10da987593d 100644 --- a/public/content/translations/tr/developers/tutorials/secure-development-workflow/index.md +++ b/public/content/translations/tr/developers/tutorials/secure-development-workflow/index.md @@ -1,15 +1,12 @@ --- -title: Akıllı sözleşme güvenlik kontrol listesi -description: Güvenli akıllı sözleşmeler yazmak için önerilen bir iş akışı +title: "Akıllı sözleşme güvenlik kontrol listesi" +description: "Güvenli akıllı sözleşmeler yazmak için önerilen bir iş akışı" author: "Trailofbits" -tags: - - "akıllı sözleşmeler" - - "güvenlik" - - "katılık" +tags: [ "akıllı kontratlar", "güvenlik", "solidity" ] skill: intermediate lang: tr published: 2020-09-07 -source: Güvenli sözleşmeler oluşturmak +source: Building secure contracts sourceUrl: https://github.com/crytic/building-secure-contracts/blob/master/development-guidelines/workflow.md --- @@ -19,14 +16,14 @@ sourceUrl: https://github.com/crytic/building-secure-contracts/blob/master/devel Bilinen güvenlik sorunlarını kontrol edin: -- [Slither](https://github.com/crytic/slither) ile sözleşmelerinizi gözden geçirin. Yaygın güvenlik açıkları için 40'tan fazla yerleşik algılayıcıya sahiptir. Her girişte yeni kodla çalıştırın ve temiz bir rapor aldığından emin olun (veya belirli sorunları susturmak için önceliklendirme modunu kullanın). -- [Crytic](https://crytic.io/) ile sözleşmelerinizi gözden geçirin. Slither'ın kontrol etmediği 50 sorunu kontrol eder. Crytic, GitHub'daki Çekme Taleplerinde güvenlik sorunlarını kolayca ortaya çıkararak ekibinizin de kendi içinde güncel kalmasına yardımcı olabilir. +- Sözleşmelerinizi [Slither](https://github.com/crytic/slither) ile gözden geçirin. Yaygın güvenlik açıkları için 40'tan fazla yerleşik algılayıcıya sahiptir. Her girişte yeni kodla çalıştırın ve temiz bir rapor aldığından emin olun (veya belirli sorunları susturmak için önceliklendirme modunu kullanın). +- Sözleşmelerinizi [Crytic](https://crytic.io/) ile gözden geçirin. Slither'ın kontrol etmediği 50 sorunu kontrol eder. Crytic, GitHub'daki Çekme Taleplerinde güvenlik sorunlarını kolayca ortaya çıkararak ekibinizin de kendi içinde güncel kalmasına yardımcı olabilir. Sözleşmenizin özel özelliklerini göz önünde bulundurun: -- Sözleşmeleriniz yükseltilebilir mi? Açıkları bulunan yükseltilebilirlik kodunuzu [`slither-check-upgradeability`](https://github.com/crytic/slither/wiki/Upgradeability-Checks) veya [Crytic](https://blog.trailofbits.com/2020/06/12/upgradeable-contracts-made-safer-with-crytic/) ile gözden geçirin. Yükseltmenin sıkıntı çıkarabileceği 17 yolu belgeledik. +- Sözleşmeleriniz yükseltilebilir mi? Yükseltilebilirlik kodunuzu kusurlara karşı [`slither-check-upgradeability`](https://github.com/crytic/slither/wiki/Upgradeability-Checks) veya [Crytic](https://blog.trailofbits.com/2020/06/12/upgradeable-contracts-made-safer-with-crytic/) ile gözden geçirin. Yükseltmenin sıkıntı çıkarabileceği 17 yolu belgeledik. - Sözleşmeleriniz ERC'lere uygun olduğunu iddia ediyor mu? Onları [`slither-check-erc`](https://github.com/crytic/slither/wiki/ERC-Conformance) ile kontrol edin. Bu araç, altı ortak özellikten sapmaları anında tanımlar. -- 3. taraf token'ları ile entegre oluyor musunuz? Harici sözleşmelere bağlı kalmadan önce [token entegrasyon kontrol listemizi](/developers/tutorials/token-integration-checklist/) gözden geçirin. +- 3. taraf token'ları ile entegre oluyor musunuz? Harici sözleşmelere güvenmeden önce [jeton entegrasyon kontrol listemizi](/developers/tutorials/token-integration-checklist/) gözden geçirin. Kodunuzun kritik güvenlik özelliklerini görsel olarak inceleyin: @@ -36,10 +33,10 @@ Kodunuzun kritik güvenlik özelliklerini görsel olarak inceleyin: Kritik güvenlik özelliklerini belgeleyin ve bunları değerlendirmek için otomatik test oluşturucuları kullanın: -- [Kodunuz için güvenlik özelliklerini belgelemeyi](/developers/tutorials/guide-to-smart-contract-security-tools/) öğrenin. İlki kadar zordur, ancak iyi bir sonuç elde etmek için en önemli aktivitedir. Ayrıca bu öğreticideki gelişmiş tekniklerden herhangi birini kullanmak için bir ön koşuldur. -- [Echidna](https://github.com/crytic/echidna) ve [Manticore](https://manticore.readthedocs.io/en/latest/verifier.html) ile kullanım için Solidity'de güvenlik özelliklerini tanımlayın. Durum makinenize, erişim kontrollerine, aritmetik işlemlere, harici etkileşimlere ve standart uygunluğuna odaklanın. -- [Slither'ın Python API'sı](/developers/tutorials/how-to-use-slither-to-find-smart-contract-bugs/) ile güvenlik özelliklerini belgeleyin. Kalıtım, değişken bağımlılıklar, erişim kontrolleri ve diğer yapısal konulara odaklanın. -- [Crytic](https://crytic.io) ile her taahhüt için özellik testlerinizi çalıştırın. Crytic, güvenlik özelliği testlerini kullanabilir ve değerlendirebilir, böylece ekibinizdeki herkes GitHub'dan geçtiklerini kolayca görebilir. Başarısız olan testler taahhütleri bloke edebilir. +- Kodunuz için [güvenlik özelliklerini belgelemeyi](/developers/tutorials/guide-to-smart-contract-security-tools/) öğrenin. İlki kadar zordur, ancak iyi bir sonuç elde etmek için en önemli aktivitedir. Ayrıca bu öğreticideki gelişmiş tekniklerden herhangi birini kullanmak için bir ön koşuldur. +- [Echidna](https://github.com/crytic/echidna) ve [Manticore](https://manticore.readthedocs.io/en/latest/verifier.html) ile kullanmak üzere Solidity'de güvenlik özelliklerini tanımlayın. Durum makinenize, erişim kontrollerine, aritmetik işlemlere, harici etkileşimlere ve standart uygunluğuna odaklanın. +- [Slither'ın Python API'si](/developers/tutorials/how-to-use-slither-to-find-smart-contract-bugs/) ile güvenlik özelliklerini tanımlayın. Kalıtım, değişken bağımlılıklar, erişim kontrolleri ve diğer yapısal konulara odaklanın. +- [Crytic](https://crytic.io) ile her commit'te özellik testlerinizi çalıştırın. Crytic, güvenlik özelliği testlerini kullanabilir ve değerlendirebilir, böylece ekibinizdeki herkes GitHub'dan geçtiklerini kolayca görebilir. Başarısız olan testler taahhütleri bloke edebilir. Son olarak, otomatik araçların kolayca bulamayacağı sorunlara dikkat edin: @@ -50,6 +47,6 @@ Son olarak, otomatik araçların kolayca bulamayacağı sorunlara dikkat edin: ## Yardım isteyin {#ask-for-help} -[Ethereum office hours](https://calendly.com/dan-trailofbits/office-hours), (çalışma asatleri) her salı öğleden sonra gerçekleştirilir. Bu 1 saatlik 1'e 1 oturumlar, güvenlikle ilgili tüm sorularınızı bize sorma, araçlarımızı kullanarak sorun giderme ve mevcut yaklaşımınız hakkında uzmanlardan geri bildirim alma fırsatıdır. Bu rehberi tamamlamanıza yardımcı olacağız. +[Ethereum çalışma saatleri](https://calendly.com/dan-trailofbits/office-hours) her Salı öğleden sonra gerçekleştirilir. Bu 1 saatlik 1'e 1 oturumlar, güvenlikle ilgili tüm sorularınızı bize sorma, araçlarımızı kullanarak sorun giderme ve mevcut yaklaşımınız hakkında uzmanlardan geri bildirim alma fırsatıdır. Bu rehberi tamamlamanıza yardımcı olacağız. Slack'imize katılın: [Empire Hacking](https://join.slack.com/t/empirehacking/shared_invite/zt-h97bbrj8-1jwuiU33nnzg67JcvIciUw). Herhangi bir sorunuz olursa #crytic ve #ethereum kanallarında her zaman yanınızdayız. diff --git a/public/content/translations/tr/developers/tutorials/send-token-ethersjs/index.md b/public/content/translations/tr/developers/tutorials/send-token-ethersjs/index.md index e9e45126df1..e2cd67a4e13 100644 --- a/public/content/translations/tr/developers/tutorials/send-token-ethersjs/index.md +++ b/public/content/translations/tr/developers/tutorials/send-token-ethersjs/index.md @@ -1,29 +1,27 @@ --- -title: Ethers.js Kullanarak Token Gönderimi -description: Yeni başlayanlar için Ethers.js kullanarak token gönderme rehberi. +title: "ethers.js Kullanarak Jeton Gönderme" +description: "Yeni başlayanlar için ethers.js kullanarak jeton gönderme rehberi." author: Kim YongJun -tags: - - "ETHERS.JS" - - "ERC-20" - - "TOKEN'LAR" +tags: [ "ETHERS.JS", "ERC-20", "JETONLAR" ] skill: beginner lang: tr published: 2021-04-06 --- -## ethers.js(5.0) Kullanarak Token Gönderin {#send-token} +## ethers.js(5.0) Kullanarak Jeton Gönderin {#send-token} -### Bu Eğitimde Şunların Nasıl Yapılacağını Öğreneceksiniz {#you-learn-about} +### Bu Eğitimde Şunları Öğreneceksiniz {#you-learn-about} -- Ethers.js içe aktarımı -- Token transferi +- ethers.js içe aktarımı +- Jeton transferi - Gaz fiyatını ağ trafiği durumuna göre ayarlama -### Başlamak İçin {#to-get-started} +### Başlarken {#to-get-started} -Başlamak için önce ethers.js kitaplığını javascript'imize aktarmalıyız ethers.js(5.0) dahil +Başlamak için önce ethers.js kütüphanesini javascript'imize aktarmalıyız +ethers.js(5.0) dahil -### Kurulum {#install-ethersjs} +### Yükleme {#install-ethersjs} ```shell /home/ricmoo> npm install --save ethers @@ -34,7 +32,7 @@ Tarayıcıda ES6 ```html ``` @@ -49,23 +47,23 @@ Tarayıcıda ES3(UMD) ### Parametreler {#param} -1. **`contract_address`**: Token sözleşme adresi (aktarmak istediğiniz token, ether olmadığında sözleşme adresi gereklidir) -2. **`send_token_amount`**: Alıcıya göndermek istediğiniz token miktarı +1. **`contract_address`**: Jeton sözleşme adresi (aktarmak istediğiniz jeton, ether olmadığında sözleşme adresi gereklidir) +2. **`send_token_amount`**: Alıcıya göndermek istediğiniz jeton miktarı 3. **`to_address`**: Alıcının adresi 4. **`send_account`**: Göndericinin adresi -5. **`private_key`**: İşlemi imzalamak ve token'ları tam olarak aktarmak için göndericinin özel anahtarı +5. **`private_key`**: İşlemi imzalamak ve jetonları fiilen aktarmak için göndericinin özel anahtarı -## Uyarı {#notice} +## Not {#notice} -`sendTransaction()` onu dahili olarak yaptığı için `signTransaction(tx)` kaldırılmıştır. +`sendTransaction()` bunu dahili olarak yaptığı için `signTransaction(tx)` kaldırılmıştır. -## Gönderim Prosedürleri {#procedure} +## Gönderme Prosedürleri {#procedure} -### 1. Ağa bağlan (test ağı) {#connect-to-network} +### 1. Ağa bağlanma (test ağı) {#connect-to-network} -#### Sağlayıcı Ayarla (Infura) {#set-provider} +#### Sağlayıcıyı Ayarla (Infura) {#set-provider} -Ropsten test ağına bağlan +Ropsten test ağına bağlanma ```javascript window.ethersProvider = new ethers.providers.InfuraProvider("ropsten") @@ -77,7 +75,7 @@ window.ethersProvider = new ethers.providers.InfuraProvider("ropsten") let wallet = new ethers.Wallet(private_key) ``` -### 3. Cüzdanı ağa bağla {#connect-wallet-to-net} +### 3. Cüzdanı Ağa Bağla {#connect-wallet-to-net} ```javascript let walletSigner = wallet.connect(window.ethersProvider) @@ -89,16 +87,16 @@ let walletSigner = wallet.connect(window.ethersProvider) window.ethersProvider.getGasPrice() // gasPrice ``` -### 5. İşlemi tanımla {#define-transaction} +### 5. İşlemi Tanımla {#define-transaction} -Aşağıda tanımlanan bu değişkenler, `send_token()` komutuna bağlıdır +Aşağıda tanımlanan bu değişkenler, send_token() komutuna bağlıdır ### İşlem parametreleri {#transaction-params} -1. **`send_account`**: token göndericisinin adresi -2. **`to_address`**: token alıcısının adresi -3. **`send_token_amount`**: gönderilecek token miktarı -4. **`gas_limit`**: gaz sınırı +1. **`send_account`**: jeton göndericisinin adresi +2. **`to_address`**: jeton alıcısının adresi +3. **`send_token_amount`**: gönderilecek jeton miktarı +4. **`gas_limit`**: gaz limiti 5. **`gas_price`**: gaz ücreti [Nasıl kullanılacağını görmek için aşağıya bakınız](#how-to-use) @@ -119,7 +117,7 @@ const tx = { ```javascript walletSigner.sendTransaction(tx).then((transaction) => { console.dir(transaction) - alert("Send finished!") + alert("Gönderim tamamlandı!") }) ``` @@ -148,7 +146,7 @@ send_token( ### Başarılı! {#success} -![başarılı bir şekilde yapılan işlemin görüntüsü](./successful-transaction.png) +![başarıyla tamamlanmış işlemin görüntüsü](./successful-transaction.png) ## send_token() {#send-token-method} @@ -168,23 +166,23 @@ function send_token( console.log(`gas_price: ${gas_price}`) if (contract_address) { - // general token send + // genel jeton gönderimi let contract = new ethers.Contract( contract_address, send_abi, walletSigner ) - // How many tokens? + // Kaç tane jeton? let numberOfTokens = ethers.utils.parseUnits(send_token_amount, 18) console.log(`numberOfTokens: ${numberOfTokens}`) - // Send tokens + // Jetonları gönder contract.transfer(to_address, numberOfTokens).then((transferResult) => { console.dir(transferResult) - alert("sent token") + alert("jeton gönderildi") }) - } // ether send + } // ether gönderimi else { const tx = { from: send_account, @@ -201,10 +199,10 @@ function send_token( try { walletSigner.sendTransaction(tx).then((transaction) => { console.dir(transaction) - alert("Send finished!") + alert("Gönderim tamamlandı!") }) } catch (error) { - alert("failed to send!!") + alert("gönderim başarısız oldu!!") } } }) diff --git a/public/content/translations/tr/developers/tutorials/sending-transactions-using-web3-and-alchemy/index.md b/public/content/translations/tr/developers/tutorials/sending-transactions-using-web3-and-alchemy/index.md index 4604d2b9138..9df46997943 100644 --- a/public/content/translations/tr/developers/tutorials/sending-transactions-using-web3-and-alchemy/index.md +++ b/public/content/translations/tr/developers/tutorials/sending-transactions-using-web3-and-alchemy/index.md @@ -1,85 +1,82 @@ --- -title: Web3 Kullanarak İşlem Gönderme -description: "Bu, Web3 kullanarak Ethereum işlemlerini gönderme hakkında, yeni başlayanlara uygun bir rehberdir. Ethereum blok zincirine bir işlem göndermek için üç ana adım vardır: oluşturma, imzalama ve yayınlama. Üçünden de bahsedeceğiz." +title: "Web3 Kullanarak İşlem Gönderme" +description: "Bu, Web3 kullanarak Ethereum işlemleri göndermek için başlangıç dostu bir rehberdir. Ethereum blokzincirine bir işlem göndermek için üç ana adım vardır: oluşturma, imzalama ve yayımlama. Bu üç adımı da inceleyeceğiz." author: "Elan Halpern" -tags: - - "işlemler" - - "web3.js" - - "alchemy" +tags: [ "işlemler", "web3.js", "alchemy" ] skill: beginner lang: tr published: 2020-11-04 -source: Alchemy belgeleri +source: Alchemy docs sourceUrl: https://www.alchemy.com/docs/how-to-send-transactions-on-ethereum --- -Bu, web3 kullanarak Ethereum işlemlerini göndermek için yeni başlayanlara uygun bir rehberdir. Ethereum blok zincirine bir işlem göndermek için üç ana adım vardır: oluşturma, imzalama ve yayınlama. Üçünü de gözden geçirerek aklınızdaki soruları cevaplamayı umuyoruz! Bu öğreticide, işlemlerimizi Ethereum zincirine göndermek için [Alchemy](https://www.alchemy.com/) kullanacağız. [Buradan ücretsiz bir Alchemy hesabı oluşturabilirsiniz](https://auth.alchemyapi.io/signup). +Bu, Web3 kullanarak Ethereum işlemleri göndermek için başlangıç dostu bir rehberdir. Ethereum blokzincirine bir işlem göndermek için üç ana adım vardır: oluşturma, imzalama ve yayımlama. Üçünü de gözden geçirerek aklınızdaki soruları cevaplamayı umuyoruz! Bu öğreticide, işlemlerimizi Ethereum zincirine göndermek için [Alchemy](https://www.alchemy.com/) kullanacağız. [Buradan ücretsiz bir Alchemy hesabı oluşturabilirsiniz](https://auth.alchemyapi.io/signup). -**NOT:** Bu kılavuz, uygulamanızın _arka yüzündeki_ işlemlerinizi imzalamak içindir. İşlemlerinizi imzalamayı ön yüze entegre etmek istiyorsanız [Web3'ü bir tarayıcı sağlayıcısı](https://docs.alchemy.com/reference/api-overview#with-a-browser-provider) ile entegre etmeye göz atın. +**NOT:** Bu rehber, uygulamanızın _backend_ tarafında işlemlerinizi imzalamak içindir. İşlemlerinizi imzalamayı frontend'e entegre etmek istiyorsanız, [Web3'ü bir tarayıcı sağlayıcısıyla entegre etme](https://docs.alchemy.com/reference/api-overview#with-a-browser-provider) konusuna göz atın. ## Temel Bilgiler {#the-basics} -Çoğu blok zinciri geliştiricisi ilk başladıklarında olduğu gibi, bir işlemin nasıl gönderileceği konusunda (oldukça basit olması gereken bir şey) biraz araştırma yapmış ve her biri farklı şeyler söyleyen ve sizi biraz bunaltıp kafanızı karıştıran çok sayıda kılavuza rastlamış olabilirsiniz. Bu durumdaysanız merak etmeyin, hepimiz o yollardan geçtik! O zaman başlamadan önce birkaç şeyi açıklığa kavuşturalım: +Çoğu blokzincir geliştiricisi gibi, işe ilk başladığınızda, (oldukça basit olması gereken) bir işlemin nasıl gönderileceği üzerine araştırma yapmış ve her biri farklı şeyler söyleyen, sizi biraz bunaltıp kafanızı karıştıran çok sayıda rehberle karşılaşmış olabilirsiniz. Bu durumdaysanız merak etmeyin; hepimiz o yollardan geçtik! O zaman başlamadan önce birkaç şeyi açıklığa kavuşturalım: -### 1\. Alchemy özel anahtarlarınızı saklamaz {#alchemy-does-not-store-your-private-keys} +### 1. Alchemy özel anahtarlarınızı saklamaz {#alchemy-does-not-store-your-private-keys} -- Bu, Alchemy'nin sizin adınıza işlemleri imzalayamayacağı ve gönderemeyeceği anlamına gelir. Bunun nedeni güvenlik amaçlıdır. Simya asla özel anahtarınızı paylaşmanızı istemez ve özel anahtarınızı asla barındırılan bir düğümle (veya bu konuda herhangi biri ile) paylaşmamalısınız. -- Alchemy'nin çekirdek API'sini kullanarak blok zincirinden okuma yapabilirsiniz, ancak blok zincirine yazmak için işlemlerinizi Alchemy aracılığıyla göndermeden önce onları imzalamak için başka bir şey kullanmanız gerekir (bu, diğer tüm [düğüm hizmetleri](/developers/docs/nodes-and-clients/nodes-as-a-service/) için aynıdır). +- Bu, Alchemy'nin sizin adınıza işlemleri imzalayamayacağı ve gönderemeyeceği anlamına gelir. Bunun nedeni güvenlik amaçlıdır. Alchemy asla özel anahtarınızı paylaşmanızı istemez ve özel anahtarınızı barındırılan bir düğümle (veya bu konuda herhangi biriyle) asla paylaşmamalısınız. +- Alchemy'nin çekirdek API'sini kullanarak blokzincirden okuma yapabilirsiniz, ancak blokzincire yazmak için işlemlerinizi Alchemy aracılığıyla göndermeden önce imzalamak için başka bir araç kullanmanız gerekir (bu durum diğer tüm [düğüm hizmetleri](/developers/docs/nodes-and-clients/nodes-as-a-service/) için de geçerlidir). -### 2\. Bir "imzalayıcı" nedir? {#what-is-a-signer} +### 2. “İmzalayıcı” nedir? {#what-is-a-signer} -- İmzalayıcılar, özel anahtarınızı kullanarak işlemleri sizin için imzalar. Bu öğreticide, işlemimizi imzalamak için [Alchemy web3](https://docs.alchemyapi.io/alchemy/documentation/alchemy-web3)'ü kullanacağız, ancak başka herhangi bir web3 kitaplığını da kullanabilirsiniz. -- Ön yüzde, işlemleri sizin adınıza imzalayıp gönderen [MetaMask](https://metamask.io/) imzalayıcının iyi bir örneğidir. +- İmzalayıcılar, özel anahtarınızı kullanarak işlemleri sizin için imzalar. Bu öğreticide, işlemimizi imzalamak için [Alchemy web3](https://docs.alchemyapi.io/alchemy/documentation/alchemy-web3) kullanacağız, ancak başka bir web3 kütüphanesi de kullanabilirsiniz. +- Frontend'de iyi bir imzalayıcı örneği, sizin adınıza işlemleri imzalayıp gönderecek olan [MetaMask](https://metamask.io/)'tır. -### 3\. İşlemlerimi neden imzalamam gerekiyor? {#why-do-i-need-to-sign-my-transactions} +### 3. İşlemlerimi neden imzalamam gerekiyor? {#why-do-i-need-to-sign-my-transactions} - Ethereum ağında bir işlem göndermek isteyen her kullanıcı, işlemin kaynağının iddia ettiği kişi olduğunu doğrulamak için işlemi (özel anahtarını kullanarak) imzalamalıdır. - Bu özel anahtarı korumak çok önemlidir, çünkü erişime sahip olmak Ethereum hesabınız üzerinde tam kontrol sağlayarak sizin (veya erişimi olan herhangi birinin) sizin adınıza işlem gerçekleştirmesine izin verir. -### 4\. Özel anahtarımı nasıl korurum? {#how-do-i-protect-my-private-key} +### 4. Özel anahtarımı nasıl korurum? {#how-do-i-protect-my-private-key} -- Özel anahtarınızı korumanın ve işlemleri göndermek için kullanmanın birçok yolu vardır. Bu öğreticide bir `.env` dosyası kullanacağız. Ancak, özel anahtarları depolayan, bir anahtar deposu dosyası kullanan veya diğer seçenekleri kullanan ayrı bir sağlayıcı da kullanabilirsiniz. +- Özel anahtarınızı korumanın ve işlemleri göndermek için kullanmanın birçok yolu vardır. Bu öğreticide bir `.env` dosyası kullanacağız. Ancak özel anahtarları saklayan ayrı bir sağlayıcı, bir keystore dosyası veya başka seçenekler de kullanabilirsiniz. -### 5\. `eth_sendTransaction` ve `eth_sendRawTransaction` arasındaki fark nedir? {#difference-between-send-and-send-raw} +### 5. `eth_sendTransaction` ve `eth_sendRawTransaction` arasındaki fark nedir? {#difference-between-send-and-send-raw} -`eth_sendTransaction` ve `eth_sendRawTransaction`, gelecekteki bir bloğa eklenmesi için Ethereum ağına bir işlem yayınlayan Ethereum API fonksiyonlarıdır. İşlemlerin imzalanmasını nasıl ele aldıkları konusunda farklılık gösterirler. +`eth_sendTransaction` ve `eth_sendRawTransaction`, gelecekteki bir bloğa eklenmesi için Ethereum ağına bir işlem yayınlayan Ethereum API fonksiyonlarıdır. İşlemlerin imzalanmasını ele alma biçimlerinde farklılık gösterirler. -- [`eth_sendTransaction`](https://docs.web3js.org/api/web3-eth/function/sendTransaction), _imzasız_ işlemleri göndermek için kullanılır, yani işlemi zincire yayınlamadan önce imzalayabilmesi için gönderdiğiniz düğüm sizin özel anahtarınızı yönetmelidir. Alchemy, kullanıcının özel anahtarlarını tutmadığından bu yöntemi desteklemez. -- [`eth_sendRawTransaction`](https://docs.alchemyapi.io/documentation/alchemy-api-reference/json-rpc#eth_sendrawtransaction) hâlihazırda imzalanmış işlemleri yayınlamak için kullanılır. Yani ilk olarak [`signTransaction(tx, private_key)`](https://docs.web3js.org/api/web3-eth-accounts/function/signTransaction) kullanmanız, sonrasında sonucunu `eth_sendRawTransaction` içine aktarmanız gerekir. +- [`eth_sendTransaction`](https://docs.web3js.org/api/web3-eth/function/sendTransaction) _imzasız_ işlemleri göndermek için kullanılır; bu da gönderim yaptığınız düğümün, işlemi zincire yayınlamadan önce imzalayabilmesi için özel anahtarınızı yönetmesi gerektiği anlamına gelir. Alchemy kullanıcıların özel anahtarlarını tutmadığı için bu yöntemi desteklemez. +- [`eth_sendRawTransaction`](https://docs.alchemyapi.io/documentation/alchemy-api-reference/json-rpc#eth_sendrawtransaction), halihazırda imzalanmış olan işlemleri yayımlamak için kullanılır. Bu, önce [`signTransaction(tx, private_key)`](https://docs.web3js.org/api/web3-eth-accounts/function/signTransaction) kullanmanız ve ardından sonucu `eth_sendRawTransaction`'a iletmeniz gerektiği anlamına gelir. -Web3 kullanırken `eth_sendRawTransaction` erişimi, [web3.eth.sendSignedTransaction](https://docs.web3js.org/api/web3-eth/function/sendSignedTransaction) fonksiyonu çağrılarak sağlanır. +web3 kullanırken `eth_sendRawTransaction`'a [web3.eth.sendSignedTransaction](https://docs.web3js.org/api/web3-eth/function/sendSignedTransaction) fonksiyonu çağrılarak erişilir. -Bu öğreticide kullanacağımız şey budur. +Bu öğreticide bunu kullanacağız. -### 6\. Web3 kütüphanesi nedir? {#what-is-the-web3-library} +### 6. Web3 kütüphanesi nedir? {#what-is-the-web3-library} - Web3.js, Ethereum geliştirmede kullanımı oldukça yaygın olan standart JSON-RPC çağrıları etrafında bir paketleyici kütüphanedir. -- Farklı diller için birçok web3 kütüphanesi bulunur vardır. Bu öğreticide JavaScript ile yazılmış olan [Alchemy Web3](https://docs.alchemy.com/reference/api-overview)'ü kullanacağız. [ethers.js](https://docs.ethers.org/v5/) gibi diğer seçeneklere [buradan](https://docs.alchemyapi.io/guides/getting-started#other-web3-libraries) göz atabilirsiniz. +- Farklı diller için birçok web3 kütüphanesi vardır. Bu öğreticide JavaScript ile yazılmış olan [Alchemy Web3](https://docs.alchemy.com/reference/api-overview) kullanacağız. [ethers.js](https://docs.ethers.org/v5/) gibi diğer seçeneklere [buradan](https://docs.alchemyapi.io/guides/getting-started#other-web3-libraries) göz atabilirsiniz. -Pekala, şimdi bu sorulardan birkaçını aradan çıkardığımıza göre, öğreticiye geçelim. Alchemy ile ilgili sorularınızı herhangi bir zaman [discord](https://discord.gg/gWuC7zB)'umuzda sormaktan çekinmeyin! +Pekala, şimdi bu sorulardan birkaçını aradan çıkardığımıza göre, öğreticiye geçelim. Alchemy [discord](https://discord.gg/gWuC7zB) kanalında dilediğiniz zaman soru sormaktan çekinmeyin! -### 7\. Güvenli, gaz açısından optimize edilmiş ve özel işlemler nasıl gönderilir? {#how-to-send-secure-gas-optimized-and-private-transactions} +### 7. Güvenli, gaz optimizasyonlu ve özel işlemler nasıl gönderilir? {#how-to-send-secure-gas-optimized-and-private-transactions} -- [Alchemy, bir Transact API'leri paketi sunar](https://docs.alchemy.com/reference/transact-api-quickstart). Bunları kullanarak takviyeli işlemler gönderebilir, işlemlerin gerçekleşmeden önce simülasyonunu yapabilir, özel işlemler ve gaz tasarruflu işlemler gönderebilirsiniz -- Ayrıca işleminizin bellek havuzundan çekilip zincire eklenmesi durumunda bildirim almak için [Notify API](https://docs.alchemy.com/docs/alchemy-notify)'sini de kullanabilirsiniz +- [Alchemy'nin bir Transact API paketi vardır](https://docs.alchemy.com/reference/transact-api-quickstart). Bunları güçlendirilmiş işlemler göndermek, işlemleri gerçekleşmeden önce simüle etmek, özel işlemler göndermek ve gaz optimizasyonlu işlemler göndermek için kullanabilirsiniz. +- Ayrıca işleminiz mempool'dan çekilip zincire eklendiğinde haberdar olmak için [Notify API](https://docs.alchemy.com/docs/alchemy-notify) kullanabilirsiniz. -**NOT:** Bu kılavuz bir Alchemy hesabı, bir Ethereum adresi veya MetaMask cüzdanı, NodeJ'ler ve npm'nin kurulu olmasını gerektirir. Kurulu değilse şu adımları takip edin: +**NOT:** Bu rehber için bir Alchemy hesabı, bir Ethereum adresi veya MetaMask cüzdanı, Node.js ve npm'in kurulu olması gerekir. Kurulu değilse şu adımları takip edin: -1. [Ücretsiz bir Alchemy hesabı oluşturun](https://auth.alchemyapi.io/signup) -2. [MetaMask hesabı oluşturun](https://metamask.io/) (veya bir Ethereum adresi alın) -3. [NodeJ'leri ve NPM'yi yüklemek için bu adımları izleyin](https://docs.alchemy.com/alchemy/guides/alchemy-for-macs) +1. [Ücretsiz bir Alchemy hesabı oluşturun](https://auth.alchemyapi.io/signup) +2. [MetaMask hesabı oluşturun](https://metamask.io/) (veya bir Ethereum adresi alın) +3. [Node.js ve NPM'i yüklemek için bu adımları izleyin](https://docs.alchemy.com/alchemy/guides/alchemy-for-macs) ## İşleminizi Gönderme Adımları {#steps-to-sending-your-transaction} -### 1\. Sepolia test ağında Alchemy uygulaması oluşturma {#create-an-alchemy-app-on-the-sepolia-testnet} +### 1. Sepolia test ağında bir Alchemy uygulaması oluşturun {#create-an-alchemy-app-on-the-sepolia-testnet} -[Alchemy Dashboard'a](https://dashboard.alchemyapi.io/) gidin ve ağınızı Sepolia seçerek (ya da başka bir test ağı) yeni bir uygulama yaratın. +[Alchemy Pano'nuza](https://dashboard.alchemyapi.io/) gidin ve ağınız için Sepolia'yı (veya başka bir test ağını) seçerek yeni bir uygulama oluşturun. -### 2\. Sepolia musluğundan ETH isteme {#request-eth-from-sepolia-faucet} +### 2. Sepolia musluğundan ETH talep edin {#request-eth-from-sepolia-faucet} -ETH almak için [Alchemy Sepolia musluğundaki](https://www.sepoliafaucet.com/) talimatları izleyin. **Sepolia** Ethereum adresinizi (MetaMask'ten) eklediğinizden ve başka bir ağda olmadığınızdan emin olun. Talimatları uyguladıktan sonra, cüzdanınıza ETH'yi alıp almadığınızı iki kez kontrol edin. +ETH almak için [Alchemy Sepolia musluğundaki](https://www.sepoliafaucet.com/) talimatları izleyin. Başka bir ağınkini değil, **Sepolia** Ethereum adresinizi (MetaMask'ten) girdiğinizden emin olun. Talimatları izledikten sonra cüzdanınıza ETH'nin geldiğini tekrar kontrol edin. -### 3\. Yeni bir proje dizini oluşturun ve içine `cd` ekleyin {#create-a-new-project-direction} +### 3. Yeni bir proje dizini oluşturun ve içine `cd` ile girin {#create-a-new-project-direction} Komut satırından (mac'ler için terminal) yeni bir proje dizini oluşturun ve içine gidin: @@ -88,17 +85,17 @@ mkdir sendtx-example cd sendtx-example ``` -### 4\. Alchemy Web3'ü kurun (veya herhangi bir web3 kütüphanesi) {#install-alchemy-web3} +### 4. Alchemy Web3'ü (veya herhangi bir web3 kütüphanesini) yükleyin {#install-alchemy-web3} -[Alchemy Web3](https://docs.alchemy.com/reference/api-overview) indirmek için proje klasörünüzde şu komutu çalıştırın: +[Alchemy Web3](https://docs.alchemy.com/reference/api-overview) yüklemek için proje dizininizde aşağıdaki komutu çalıştırın: -Ether.js kitaplığını kullanmak istiyorsanız [buradaki talimatları izleyin](https://docs.alchemy.com/docs/how-to-send-transactions-on-ethereum). +Not, ethers.js kütüphanesini kullanmak isterseniz, [buradaki talimatları izleyin](https://docs.alchemy.com/docs/how-to-send-transactions-on-ethereum). ``` npm install @alch/alchemy-web3 ``` -### 5\. Dotenv kurun {#install-dotenv} +### 5. dotenv'i yükleyin {#install-dotenv} API anahtarımızı ve özel anahtarımızı güvenli bir şekilde saklamak için bir `.env` dosyası kullanacağız. @@ -106,11 +103,11 @@ API anahtarımızı ve özel anahtarımızı güvenli bir şekilde saklamak içi npm install dotenv --save ``` -### 6\. `.env` dosyasını oluşturun {#create-the-dotenv-file} +### 6. `.env` dosyasını oluşturun {#create-the-dotenv-file} -Proje dizininizde bir `.env` dosyası oluşturun ve şunu ekleyin ("`api-url`" ve "`your-private-key` yerine" ") +Proje dizininizde bir `.env` dosyası oluşturun ve aşağıdakileri ekleyin ("`your-api-url`" ve "`your-private-key`" kısımlarını değiştirerek) -- Alchemy API URL'nizi bulmak için, kontrol panelinizde az önce oluşturduğunuz uygulamanın uygulama ayrıntıları sayfasına gidin, sağ üst köşedeki "View Key"'e (Anahtarı Görüntüle) tıklayın ve HTTP URL'sini alın. +- Alchemy API URL'nizi bulmak için, panonuzda yeni oluşturduğunuz uygulamanın uygulama ayrıntıları sayfasına gidin, sağ üst köşedeki “View Key”'e tıklayın ve HTTP URL'sini alın. - MetaMask kullanarak özel anahtarınızı bulmak için bu [rehbere](https://metamask.zendesk.com/hc/en-us/articles/360015289632-How-to-Export-an-Account-Private-Key) göz atın. ``` @@ -121,16 +118,16 @@ PRIVATE_KEY = "your-private-key" -.env taahhüt etmeyin! Lütfen .env dosyanızı asla kimseyle paylaşmadığınızdan veya ifşa etmediğinizden emin olun, çünkü bunu yaparken sırlarınızı tehlikeye atıyorsunuz. Sürüm kontrolü kullanıyorsanız, .env dosyanızı bir gitignore dosyasına ekleyin. +.env dosyasını commit'lemeyin! Lütfen .env dosyanızı asla kimseyle paylaşmadığınızdan veya ifşa etmediğinizden emin olun, çünkü bunu yaparken sırlarınızı tehlikeye atıyorsunuz. Sürüm kontrolü kullanıyorsanız, .env dosyanızı bir gitignore dosyasına ekleyin. -### 7\. `sendTx.js` dosyası oluşturun {#create-sendtx-js} +### 7. `sendTx.js` dosyasını oluşturun {#create-sendtx-js} -Harika, artık hassas verilerimizi bir `.env` dosyasında koruduğumuza göre kodlamaya başlayalım. Gönderme işlemi örneğimiz içi ETH'yi Sepolia musluğuna geri göndereceğiz. +Harika, artık hassas verilerimizi bir .env dosyasında koruduğumuza göre kodlamaya başlayalım. İşlem gönderme örneğimiz için ETH'yi Sepolia musluğuna geri göndereceğiz. -Örnek işlemimizi yapılandırıp göndereceğimiz bir `sendTx.js` dosyası oluşturun ve buna aşağıdaki kod satırlarını ekleyin: +Örnek işlemimizi yapılandırıp göndereceğimiz bir sendTx.js dosyası oluşturun ve buna aşağıdaki kod satırlarını ekleyin: ``` async function main() { @@ -138,25 +135,25 @@ async function main() { const { API_URL, PRIVATE_KEY } = process.env; const { createAlchemyWeb3 } = require("@alch/alchemy-web3"); const web3 = createAlchemyWeb3(API_URL); - const myAddress = '0x610Ae88399fc1687FA7530Aac28eC2539c7d6d63' //TODO: replace this address with your own public address + const myAddress = '0x610Ae88399fc1687FA7530Aac28eC2539c7d6d63' //TODO: bu adresi kendi genel adresinizle değiştirin - const nonce = await web3.eth.getTransactionCount(myAddress, 'latest'); // nonce starts counting from 0 + const nonce = await web3.eth.getTransactionCount(myAddress, 'latest'); // nonce 0'dan saymaya başlar const transaction = { - 'to': '0x31B98D14007bDEe637298086988A0bBd31184523', // faucet address to return eth + 'to': '0x31B98D14007bDEe637298086988A0bBd31184523', // eth'yi iade etmek için musluk adresi 'value': 1000000000000000000, // 1 ETH 'gas': 30000, 'nonce': nonce, - // optional data field to send message or execute smart contract + // mesaj göndermek veya akıllı sözleşme yürütmek için isteğe bağlı veri alanı }; const signedTx = await web3.eth.accounts.signTransaction(transaction, PRIVATE_KEY); web3.eth.sendSignedTransaction(signedTx.rawTransaction, function(error, hash) { if (!error) { - console.log("🎉 The hash of your transaction is: ", hash, "\n Check Alchemy's Mempool to view the status of your transaction!"); + console.log("🎉 İşleminizin hash'i: ", hash, "\n İşleminizin durumunu görüntülemek için Alchemy'nin Mempool'unu kontrol edin!"); } else { - console.log("❗Something went wrong while submitting your transaction:", error) + console.log("❗İşleminizi gönderirken bir şeyler ters gitti:", error) } }); } @@ -168,24 +165,25 @@ main(); Şimdi, bu kodu çalıştırmaya geçmeden önce, burada bazı bileşenlerden bahsedelim. -- `nonce`: nonce değeri şartnamesi, adresinizden gönderilen işlemlerin sayısını takip etmek için kullanılır. Güvenlik amaçlı ve [tekrar saldırılarını](https://docs.alchemyapi.io/resources/blockchain-glossary#account-nonce) önlemek için buna ihtiyacımız var. Adresinizden gönderilmiş işlem sayısını almak için [getTransactionCount](https://docs.alchemyapi.io/documentation/alchemy-api-reference/json-rpc#eth_gettransactioncount) kullanırız. -- `transaction`: İşlem nesnesinin belirtmemiz gereken birkaç yönü var - - `to`: Bu, ETH göndermek istediğimiz adrestir. Bu durumda ETH'yi başlangıçta talep ettiğimiz [Sepolia musluğuna](https://sepoliafaucet.com/) geri gönderiyoruz. - - `value`: Bu, 10^18 wei = 1 ETH olmak üzere wei'de belirtilen, göndermek istediğimiz miktardır - - `gas`: İşleminize dahil edilecek doğru gaz miktarını belirlemenin birçok yolu vardır. Alchemy, benzin fiyatı belirli bir eşiğe düştüğünde sizi bilgilendirmek için bir [gaz fiyatı web kancasına](https://docs.alchemyapi.io/guides/alchemy-notify#address-activity-1) bile sahiptir. Ana Ağ işlemlerinde, dahil edilecek doğru gaz miktarını belirlemek için [ETH Gaz İstasyonu](https://ethgasstation.info/) gibi bir gaz tahmincisine göz atmak iyi bir uygulamadır. 21000, Ethereum'da bir işlemin kullanacağı minimum gaz miktarıdır, bu nedenle işlemimizin gerçekleştirilmesini sağlamak için buraya 30000 koyduk. +- `nonce` : Nonce özelliği, adresinizden gönderilen işlem sayısını takip etmek için kullanılır. Buna güvenlik amacıyla ve [tekrar saldırılarını](https://docs.alchemyapi.io/resources/blockchain-glossary#account-nonce) önlemek için ihtiyacımız var. Adresinizden gönderilen işlem sayısını almak için [getTransactionCount](https://docs.alchemyapi.io/documentation/alchemy-api-reference/json-rpc#eth_gettransactioncount) kullanırız. +- `transaction`: İşlem nesnesinin belirtmemiz gereken birkaç özelliği vardır + - `to`: ETH göndermek istediğimiz adrestir. Bu durumda ETH'yi, başlangıçta talep ettiğimiz [Sepolia musluğuna](https://sepoliafaucet.com/) geri gönderiyoruz. + - `value`: Göndermek istediğimiz miktardır. Wei cinsinden belirtilir ve 10^18 Wei = 1 ETH'dir. + - `gas`: İşleminize dahil edilecek doğru gaz miktarını belirlemenin birçok yolu vardır. Hatta Alchemy'nin, gaz fiyatı belirli bir eşiğin altına düştüğünde sizi bilgilendiren bir [gaz fiyatı webhook'u](https://docs.alchemyapi.io/guides/alchemy-notify#address-activity-1) bile vardır. Ana Ağ işlemleri için, eklenecek doğru gaz miktarını belirlemek amacıyla [ETH Gas Station](https://ethgasstation.info/) gibi bir gaz tahmin ediciyi kontrol etmek iyi bir uygulamadır. 21000, Ethereum'da bir işlemin kullanacağı minimum gaz miktarıdır, bu nedenle işlemimizin gerçekleştirilmesini sağlamak için buraya 30000 koyduk. - `nonce`: yukarıdaki nonce tanımına bakın. Nonce değeri, saymaya sıfırdan başlar. - - [OPTIONAL] veri: Transferinizle birlikte ek bilgi göndermek veya akıllı sözleşme aramak için kullanılır, bakiye transferleri için gerekli değildir, aşağıdaki nota bakın. -- `SignedTx`: İşlem nesnemizi imzalamak için `PRIVATE_KEY` ile `signTransaction` yöntemini kullanacağız -- `sendSignedTransaction`: İmzalanmış bir işlemimiz olduğunda, `sendSignedTransaction` kullanarak sonraki bir bloğa dahil edilmesi için gönderebiliriz + - [İSTEĞE BAĞLI] data: Aktarımınızla ek bilgi göndermek veya bir akıllı sözleşme çağırmak için kullanılır. Bakiye aktarımları için gerekli değildir, aşağıdaki nota göz atın. +- `signedTx`: İşlem nesnemizi imzalamak için `PRIVATE_KEY`imiz ile `signTransaction` metodunu kullanacağız. +- `sendSignedTransaction`: İmzalanmış bir işlemimiz olduğunda, `sendSignedTransaction` kullanarak sonraki bir bloğa dahil edilmesi için gönderebiliriz. -**Veriler hakkında bir not** Ethereum'da gönderilebilecek iki ana işlem türü vardır. +**Veri Üzerine Bir Not** +Ethereum'da gönderilebilecek iki ana işlem türü vardır. -- Bakiye transferi: Eth'i bir adresten diğerine gönderin. Herhangi bir veri alanı gerekli değildir, ancak işleminizin yanında ek bilgiler göndermek isterseniz, bu bilgileri bu alana HEX formatında ekleyebilirsiniz. - - Örneğin, değişmez bir zaman damgası vermek için bir IPFS belgesinin hash değerini ethereum zincirine yazmak istediğimizi varsayalım. Veri alanımız daha sonra veri gibi görünmelidir: `web3.utils.toHex(‘IPFS hash‘)`. Artık herkes zinciri sorgulayabilir ve bu belgenin ne zaman eklendiğini görebilir. -- Akıllı sözleşme işlemi: Zincirde bazı akıllı sözleşme kodlarını yürütün. Bu durumda veri alanı, herhangi bir parametrenin yanında yürütmek istediğiniz akıllı fonksiyonu içermelidir. - - Pratik bir örnek için, şu [Merhaba Dünya Öğreticindeki](https://docs.alchemyapi.io/alchemy/tutorials/hello-world-smart-contract#step-8-create-the-transaction) 8. Adıma bakın. +- Bakiye aktarımı: Bir adresten diğerine ETH gönderin. Veri alanı gerekli değildir, ancak işleminizle birlikte ek bilgi göndermek isterseniz, bu bilgiyi bu alana HEX formatında ekleyebilirsiniz. + - Örneğin, değişmez bir zaman damgası vermek için bir IPFS belgesinin hash değerini ethereum zincirine yazmak istediğimizi varsayalım. Veri alanımız bu durumda şöyle görünmelidir: data: `web3.utils.toHex('IPFS hash')`. Artık herkes zinciri sorgulayabilir ve bu belgenin ne zaman eklendiğini görebilir. +- Akıllı sözleşme işlemi: Zincir üzerinde akıllı sözleşme kodu yürütün. Bu durumda, veri alanı, yürütmek istediğiniz akıllı fonksiyonu ve tüm parametreleri içermelidir. + - Pratik bir örnek için bu [Merhaba Dünya Öğreticisi'ndeki](https://docs.alchemyapi.io/alchemy/tutorials/hello-world-smart-contract#step-8-create-the-transaction) Adım 8'e göz atın. -### 8\. `node sendTx.js` kullanarak kodu çalıştırın {#run-the-code-using-node-sendtx-js} +### 8. Kodu `node sendTx.js` kullanarak çalıştırın {#run-the-code-using-node-sendtx-js} Terminalinize veya komut satırınıza geri dönün ve şunu çalıştırın: @@ -193,18 +191,18 @@ Terminalinize veya komut satırınıza geri dönün ve şunu çalıştırın: node sendTx.js ``` -### 9\. İşleminizi Bellek Havuzunda görün {#see-your-transaction-in-the-mempool} +### 9. İşleminizi Mempool'da görün {#see-your-transaction-in-the-mempool} -Alchemy panelinizde [Mempool sayfasını](https://dashboard.alchemyapi.io/mempool) (Bellek Havuzu) açın ve işleminizi bulmak için oluşturduğunuz uygulama ile filtreleyin. Bekleme durumundan kazılmış (başarılıysa) veya başarısız olursa düşmüş duruma geçişimizi buradan izleyebiliriz. "mined" (kazılmış), "beklemede" (pending) ve "düşmüş" işlemleri yakalamak için "All" (Tümü) üzerinde tuttuğunuzdan emin olun. `0x31b98d14007bdee637298086988a0bbd31184523` adresine gönderilen işlemlere bakarak da işleminizi arayabilirsiniz. +Alchemy panonuzdaki [Mempool sayfasını](https://dashboard.alchemyapi.io/mempool) açın ve işleminizi bulmak için oluşturduğunuz uygulamaya göre filtreleyin. İşleminizin bekleme durumundan kazılmış duruma (başarılıysa) veya düşürülmüş duruma (başarısızsa) geçişini buradan izleyebilirsiniz. “kazılmış”, “beklemede” ve “düşürülmüş” işlemleri yakalamak için “Tümü” (All) seçeneğinde kaldığından emin olun. `0x31b98d14007bdee637298086988a0bbd31184523` adresine gönderilen işlemleri arayarak da işleminizi bulabilirsiniz. -İşleminizin ayrıntılarını bulduktan sonra görüntülemek için, sizi şuna benzeyen bir görünüme götürecek tx hash değerini seçin: +İşleminizi bulduktan sonra ayrıntılarını görüntülemek için, sizi aşağıdaki gibi bir görünüme götürecek olan tx hash'ini seçin: -![Bellek Havuzu izleyici ekran görüntüsü](./mempool.png) +![Mempool izleyici ekran görüntüsü](./mempool.png) Buradan, kırmızı daire içine alınmış simgeye tıklayarak işleminizi Etherscan'de görüntüleyebilirsiniz! -**Oley! Alchemy kullanarak ilk Ethereum işleminizi gönderdiniz 🎉** +**Oley!** Alchemy kullanarak ilk Ethereum işleminizi gönderdiniz 🎉\*\* -_Bu rehberle ilgili geri bildirim ve öneriler için lütfen Alchemy'nin [Discord](https://discord.gg/A39JVCM)'u üzerinden Elan'a mesaj gönderin!_ +_Bu rehber hakkındaki geri bildirim ve önerileriniz için lütfen Alchemy'nin [Discord](https://discord.gg/A39JVCM) kanalından Elan'a mesaj gönderin!_ -_Aslen [https://docs.alchemyapi.io/tutorials/sending-transactions-using-web3-and-alchemy](https://docs.alchemyapi.io/tutorials/sending-transactions-using-web3-and-alchemy) adresinde yayınlandı_ +_Orijinal olarak [https://docs.alchemyapi.io/tutorials/sending-transactions-using-web3-and-alchemy](https://docs.alchemyapi.io/tutorials/sending-transactions-using-web3-and-alchemy) adresinde yayımlandı_ diff --git a/public/content/translations/tr/developers/tutorials/server-components/index.md b/public/content/translations/tr/developers/tutorials/server-components/index.md new file mode 100644 index 00000000000..a32af0320c2 --- /dev/null +++ b/public/content/translations/tr/developers/tutorials/server-components/index.md @@ -0,0 +1,295 @@ +--- +title: "Web3 uygulamaları için sunucu bileşenleri ve aracılar" +description: "Bu öğreticiyi okuduktan sonra, bir blokzincir üzerindeki olayları dinleyen ve buna göre kendi işlemleriyle yanıt veren TypeScript sunucuları yazabileceksiniz. Bu, merkezi uygulamalar yazmanızı sağlayacaktır (çünkü sunucu bir hata noktasıdır) ancak web3 varlıklarıyla etkileşime girebilir. Aynı teknikler, döngüde bir insan olmadan zincir üstündeki olaylara yanıt veren bir aracı yazmak için de kullanılabilir." + +author: Ori Pomerantz +lang: tr +tags: [ "aracı", "sunucu", "zincir dışında" ] +skill: beginner +published: 2024-07-15 +--- + +## Giriş {#introduction} + +Çoğu durumda, merkeziyetsiz bir uygulama yazılımı dağıtmak için bir sunucu kullanır, ancak tüm gerçek etkileşim istemci (genellikle web tarayıcısı) ve blokzincir arasında gerçekleşir. + +![Web sunucusu, istemci ve blokzincir arasındaki normal etkileşim](./fig-1.svg) + +Ancak, bir uygulamanın bağımsız olarak çalışan bir sunucu bileşenine sahip olmaktan fayda sağlayacağı bazı durumlar vardır. Böyle bir sunucu, işlemler yayınlayarak olaylara ve API gibi diğer kaynaklardan gelen isteklere yanıt verebilir. + +![Bir sunucunun eklenmesiyle etkileşim](./fig-2.svg) + +Böyle bir sunucunun yerine getirebileceği birkaç olası görev vardır. + +- Gizli durum sahibi. Oyunlarda, oyunun bildiği tüm bilgilerin oyunculara açık olmaması genellikle faydalıdır. Ancak, _blokzincirde sır yoktur_, blokzincirdeki herhangi bir bilgiyi herkesin anlaması kolaydır. Bu nedenle, oyun durumunun bir kısmı gizli tutulacaksa, başka bir yerde saklanması gerekir (ve muhtemelen bu durumun etkilerinin [sıfır bilgi ispatları](/zero-knowledge-proofs) kullanılarak doğrulanması gerekir). + +- Merkezi kâhin. Riskler yeterince düşükse, çevrimiçi olarak bazı bilgileri okuyan ve sonra bunu zincire gönderen harici bir sunucu, [kâhin](/developers/docs/oracles/) olarak kullanılmaya yeterli olabilir. + +- Aracı. Onu etkinleştirecek bir işlem olmadan blokzincirde hiçbir şey olmaz. Bir sunucu, fırsat ortaya çıktığında bir kullanıcı adına [arbitraj](/developers/docs/mev/#mev-examples-dex-arbitrage) gibi eylemleri gerçekleştirmek için hareket edebilir. + +## Örnek program {#sample-program} + +Örnek bir sunucuyu [github'da](https://github.com/qbzzt/20240715-server-component) görebilirsiniz. Bu sunucu, Hardhat'in Greeter'ının değiştirilmiş bir sürümü olan [bu sözleşmeden](https://eth-holesky.blockscout.com/address/0xB8f6460Dc30c44401Be26B0d6eD250873d8a50A6?tab=contract_code) gelen olayları dinler. Selamlama değiştirildiğinde, onu geri değiştirir. + +Çalıştırmak için: + +1. Depoyu klonlayın. + + ```sh copy + git clone https://github.com/qbzzt/20240715-server-component.git + cd 20240715-server-component + ``` + +2. Gerekli paketleri yükleyin. Eğer zaten kurulu değilse, [önce Node'u yükleyin](https://nodejs.org/en/download/package-manager). + + ```sh copy + npm install + ``` + +3. Holesky test ağında ETH'si olan bir hesabın özel anahtarını belirtmek için `.env` dosyasını düzenleyin. Holesky'de ETH'niz yoksa [bu musluğu kullanabilirsiniz](https://holesky-faucet.pk910.de/). + + ```sh filename=".env" copy + PRIVATE_KEY=0x <özel anahtar buraya gelecek> + ``` + +4. Sunucuyu başlatın. + + ```sh copy + npm start + ``` + +5. [Bir blok gezginine](https://eth-holesky.blockscout.com/address/0xB8f6460Dc30c44401Be26B0d6eD250873d8a50A6?tab=write_contract) gidin ve özel anahtara sahip olandan farklı bir adres kullanarak selamlamayı değiştirin. Selamlamanın otomatik olarak geri değiştirildiğini görün. + +### Nasıl çalışır? {#how-it-works} + +Bir sunucu bileşeninin nasıl yazılacağını anlamanın en kolay yolu, örneği satır satır incelemektir. + +#### `src/app.ts` {#src-app-ts} + +Programın büyük çoğunluğu [`src/app.ts`](https://github.com/qbzzt/20240715-server-component/blob/main/src/app.ts) dosyasında yer almaktadır. + +##### Önkoşul nesnelerini oluşturma + +```typescript +import { + createPublicClient, + createWalletClient, + getContract, + http, + Address, +} from "viem" +``` + +Bunlar, ihtiyacımız olan [Viem](https://viem.sh/) varlıkları, işlevler ve [`Address` türüdür](https://viem.sh/docs/glossary/types#address). Bu sunucu, JavaScript'in onu [güçlü tipli](https://en.wikipedia.org/wiki/Strong_and_weak_typing) yapan bir uzantısı olan [TypeScript](https://www.typescriptlang.org/) ile yazılmıştır. + +```typescript +import { privateKeyToAccount } from "viem/accounts" +``` + +[Bu işlev](https://viem.sh/docs/accounts/privateKey), bir özel anahtara karşılık gelen adres de dahil olmak üzere cüzdan bilgilerini oluşturmamızı sağlar. + +```typescript +import { holesky } from "viem/chains" +``` + +Viem'de bir blokzincir kullanmak için tanımını içe aktarmanız gerekir. Bu durumda [Holesky](https://github.com/eth-clients/holesky) test blokzincirine bağlanmak istiyoruz. + +```typescript +// .env içindeki tanımları process.env'ye bu şekilde ekleriz. +import * as dotenv from "dotenv" +dotenv.config() +``` + +`.env` dosyasını ortama bu şekilde okuruz. Özel anahtar için buna ihtiyacımız var (daha sonrasına bakın). + +```typescript +const greeterAddress : Address = "0xB8f6460Dc30c44401Be26B0d6eD250873d8a50A6" +const greeterABI = [ + { + "inputs": [ + { + "internalType": "string", + "name": "_greeting", + "type": "string" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + . + . + . + { + "inputs": [ + { + "internalType": "string", + "name": "_greeting", + "type": "string" + } + ], + "name": "setGreeting", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } +] as const +``` + +Bir sözleşmeyi kullanmak için adresine ve onun [ABI](/glossary/#abi) bilgisine ihtiyacımız var. İkisini de burada sağlıyoruz. + +JavaScript'te (ve dolayısıyla TypeScript'te) bir sabite yeni bir değer atayamazsınız, ancak içinde depolanan nesneyi _değiştirebilirsiniz_. `as const` son ekini kullanarak, TypeScript'e listenin kendisinin sabit olduğunu ve değiştirilemeyeceğini söylüyoruz. + +```typescript +const publicClient = createPublicClient({ + chain: holesky, + transport: http(), +}) +``` + +Bir Viem [genel istemcisi](https://viem.sh/docs/clients/public.html) oluşturun. Genel istemcilerin ekli bir özel anahtarı yoktur ve bu nedenle işlem gönderemezler. [`view` işlevlerini](https://www.tutorialspoint.com/solidity/solidity_view_functions.htm) çağırabilir, hesap bakiyelerini okuyabilirler vb. + +```typescript +const account = privateKeyToAccount(process.env.PRIVATE_KEY as `0x${string}`) +``` + +Ortam değişkenleri [`process.env`](https://www.totaltypescript.com/how-to-strongly-type-process-env) içinde mevcuttur. Ancak, TypeScript güçlü tiplidir. Bir ortam değişkeni herhangi bir dize olabilir veya boş olabilir, bu nedenle bir ortam değişkeninin türü `string | undefined`'dır. Ancak, Viem'de bir anahtar `0x${string}` (`0x` ve ardından gelen bir dize) olarak tanımlanır. Burada TypeScript'e `PRIVATE_KEY` ortam değişkeninin bu türde olacağını söylüyoruz. Eğer değilse, bir çalışma zamanı hatası alırız. + +[`privateKeyToAccount`](https://viem.sh/docs/accounts/privateKey) işlevi daha sonra bu özel anahtarı tam bir hesap nesnesi oluşturmak için kullanır. + +```typescript +const walletClient = createWalletClient({ + account, + chain: holesky, + transport: http(), +}) +``` + +Ardından, bir [cüzdan istemcisi](https://viem.sh/docs/clients/wallet) oluşturmak için hesap nesnesini kullanırız. Bu istemcinin bir özel anahtarı ve adresi vardır, bu yüzden işlem göndermek için kullanılabilir. + +```typescript +const greeter = getContract({ + address: greeterAddress, + abi: greeterABI, + client: { public: publicClient, wallet: walletClient }, +}) +``` + +Artık tüm önkoşullara sahip olduğumuza göre, sonunda bir [sözleşme örneği](https://viem.sh/docs/contract/getContract) oluşturabiliriz. Zincir üstündeki sözleşmeyle iletişim kurmak için bu sözleşme örneğini kullanacağız. + +##### Blokzincirden okuma + +```typescript +console.log(`Current greeting:`, await greeter.read.greet()) +``` + +Salt okunur olan sözleşme işlevleri ([`view`](https://www.tutorialspoint.com/solidity/solidity_view_functions.htm) ve [`pure`](https://www.tutorialspoint.com/solidity/solidity_pure_functions.htm)) `read` altında mevcuttur. Bu durumda, selamlamayı döndüren [`greet`](https://eth-holesky.blockscout.com/address/0xB8f6460Dc30c44401Be26B0d6eD250873d8a50A6?tab=read_contract#cfae3217) işlevine erişmek için bunu kullanırız. + +JavaScript tek iş parçacıklıdır, bu nedenle uzun süren bir işlemi başlattığımızda bunu [eşzamansız olarak yaptığımızı belirtmemiz gerekir](https://eloquentjavascript.net/11_async.html#h-XvLsfAhtsE). Salt okunur bir işlem için bile olsa blokzinciri çağırmak, bilgisayar ile bir blokzincir düğümü arasında bir gidiş-dönüş gerektirir. İşte bu yüzden burada kodun sonucu `await` etmesi gerektiğini belirtiyoruz. + +Bunun nasıl çalıştığıyla ilgileniyorsanız [buradan okuyabilirsiniz](https://www.w3schools.com/js/js_promise.asp), ancak pratik anlamda bilmeniz gereken tek şey, uzun süren bir işlem başlatırsanız sonuçları `await` etmeniz gerektiği ve bunu yapan herhangi bir işlevin `async` olarak bildirilmesi gerektiğidir. + +##### İşlemleri yayınlama + +```typescript +const setGreeting = async (greeting: string): Promise => { +``` + +Bu, selamlamayı değiştiren bir işlemi yayınlamak için çağırdığınız işlevdir. Bu uzun bir işlem olduğundan, işlev `async` olarak bildirilmiştir. Dahili uygulama nedeniyle, herhangi bir `async` işlevinin bir `Promise` nesnesi döndürmesi gerekir. Bu durumda, `Promise` ifadesi `Promise` içinde tam olarak neyin döndürüleceğini belirtmediğimiz anlamına gelir. + +```typescript +const txHash = await greeter.write.setGreeting([greeting]) +``` + +Sözleşme örneğinin `write` alanı, [`setGreeting`](https://eth-holesky.blockscout.com/address/0xB8f6460Dc30c44401Be26B0d6eD250873d8a50A6?tab=write_contract#a4136862) gibi blokzincir durumuna yazan tüm işlevlere (yani bir işlem göndermeyi gerektirenlere) sahiptir. Parametreler, varsa, bir liste olarak sağlanır ve işlev, işlemin karmasını döndürür. + +```typescript + console.log(`Bir düzeltme üzerinde çalışılıyor, bakın https://eth-holesky.blockscout.com/tx/${txHash}`) + + return txHash +} +``` + +İşlemin karmasını (görüntülemek için blok gezginine yönlendiren bir URL'nin parçası olarak) bildirin ve döndürün. + +##### Olaylara yanıt verme + +```typescript +greeter.watchEvent.SetGreeting({ +``` + +[`watchEvent` işlevi](https://viem.sh/docs/actions/public/watchEvent), bir olay yayınlandığında bir işlevin çalıştırılacağını belirtmenize olanak tanır. Yalnızca tek bir olay türüyle ilgileniyorsanız (bu durumda, `SetGreeting`), kendinizi bu olay türüyle sınırlamak için bu sözdizimini kullanabilirsiniz. + +```typescript + onLogs: logs => { +``` + +`onLogs` işlevi, günlük girdileri olduğunda çağrılır. Ethereum'da "log" ve "olay" genellikle birbirinin yerine kullanılabilir. + +```typescript +console.log( + `${logs[0].args.sender} adresi selamlamayı ${logs[0].args.greeting} olarak değiştirdi` +) +``` + +Birden fazla olay olabilir, ancak basitlik adına yalnızca ilkiyle ilgileniyoruz. `logs[0].args`, olayın argümanlarıdır, bu durumda `sender` ve `greeting`. + +```typescript + if (logs[0].args.sender != account.address) + setGreeting(`${account.address} bunun Hello! olmasında ısrar ediyor`) + } +}) +``` + +Gönderici bu sunucu _değilse_, selamlamayı değiştirmek için `setGreeting` kullanın. + +#### `package.json` {#package-json} + +[Bu dosya](https://github.com/qbzzt/20240715-server-component/blob/main/package.json) [Node.js](https://nodejs.org/en) yapılandırmasını kontrol eder. Bu makale yalnızca önemli tanımları açıklamaktadır. + +```json +{ + "main": "dist/index.js", +``` + +Bu tanım, hangi JavaScript dosyasının çalıştırılacağını belirtir. + +```json + "scripts": { + "start": "tsc && node dist/app.js", + }, +``` + +Betikler çeşitli uygulama eylemleridir. Bu durumda, sahip olduğumuz tek betik, sunucuyu derleyip ardından çalıştıran `start`'tır. `tsc` komutu `typescript` paketinin bir parçasıdır ve TypeScript'i JavaScript'e derler. Manuel olarak çalıştırmak isterseniz, `node_modules/.bin` konumunda bulunur. İkinci komut sunucuyu çalıştırır. + +```json + "type": "module", +``` + +Birden fazla JavaScript Node uygulaması türü vardır. `module` türü, en üst düzey kodda `await` kullanmamızı sağlar; bu, yavaş (ve dolayısıyla eşzamansız) işlemler yaptığınızda önemlidir. + +```json + "devDependencies": { + "@types/node": "^20.14.2", + "typescript": "^5.4.5" + }, +``` + +Bunlar yalnızca geliştirme için gerekli olan paketlerdir. Burada `typescript`'e ihtiyacımız var ve bunu Node.js ile kullandığımız için, `process` gibi Node değişkenleri ve nesneleri için türleri de alıyoruz. [`^` gösterimi](https://github.com/npm/node-semver?tab=readme-ov-file#caret-ranges-123-025-004), bu sürümün veya bozucu değişiklikler içermeyen daha yüksek bir sürümün kullanılacağı anlamına gelir. Sürüm numaralarının anlamı hakkında daha fazla bilgi için [buraya](https://semver.org) bakın. + +```json + "dependencies": { + "dotenv": "^16.4.5", + "viem": "2.14.1" + } +} +``` + +Bunlar, `dist/app.js` çalıştırılırken çalışma zamanında gerekli olan paketlerdir. + +## Sonuç {#conclusion} + +Burada oluşturduğumuz merkezi sunucu, bir kullanıcı için aracı olarak hareket etme işini yapıyor. Merkeziyetsiz uygulamanın çalışmaya devam etmesini isteyen ve gaz harcamaya razı olan herkes, sunucunun yeni bir örneğini kendi adresiyle çalıştırabilir. + +Ancak bu, yalnızca merkezi sunucunun eylemleri kolayca doğrulanabildiğinde işe yarar. Merkezi sunucunun herhangi bir gizli durum bilgisi varsa veya zor hesaplamalar yapıyorsa, uygulamayı kullanmak için güvenmeniz gereken merkezi bir varlık hâline gelir ki bu, blokzincirlerin tam olarak kaçınmaya çalıştığı şeydir. Gelecekteki bir makalede, bu sorunun üstesinden gelmek için [sıfır bilgi ispatlarının](/zero-knowledge-proofs) nasıl kullanılacağını göstermeyi planlıyorum. + +[Çalışmalarımdan daha fazlası için buraya bakın](https://cryptodocguy.pro/). diff --git a/public/content/translations/tr/developers/tutorials/set-up-web3js-to-use-ethereum-in-javascript/index.md b/public/content/translations/tr/developers/tutorials/set-up-web3js-to-use-ethereum-in-javascript/index.md index 48596d2f1dd..4ba491b70d6 100644 --- a/public/content/translations/tr/developers/tutorials/set-up-web3js-to-use-ethereum-in-javascript/index.md +++ b/public/content/translations/tr/developers/tutorials/set-up-web3js-to-use-ethereum-in-javascript/index.md @@ -1,10 +1,8 @@ --- -title: JavaScript'te Ethereum blok zincirini kullanmak için web3.js'yi kurun -description: Solidity dilini kullanarak bir token'la etkileşmek için bir akıllı sözleşme nasıl kullanılır +title: "JavaScript'te Ethereum blok zincirini kullanmak için web3.js'yi kurun" +description: "JavaScript uygulamalarından Ethereum blokzinciri ile etkileşim kurmak için web3.js kütüphanesini nasıl kurup yapılandıracağınızı öğrenin." author: "jdourlens" -tags: - - "web3.js" - - "javascript" +tags: [ "web3.js", "javascript" ] skill: beginner lang: tr published: 2020-04-11 @@ -13,7 +11,7 @@ sourceUrl: https://ethereumdev.io/setup-web3js-to-use-the-ethereum-blockchain-in address: "0x19dE91Af973F404EDF5B4c093983a7c6E3EC8ccE" --- -Bu öğreticide, Ethereum blok zinciri ile etkileşime geçmek için [web3.js](https://web3js.readthedocs.io/) ile nasıl başlayacağımızı göreceğiz. Web3.js, blok zincirinden veri okumak veya işlem yapmak ve hatta akıllı sözleşmeleri dağıtmak için hem ön uçlarda hem de arka uçlarda kullanılabilir. +Bu öğreticide, Ethereum blokzinciri ile etkileşime geçmek için [web3.js](https://web3js.readthedocs.io/) ile nasıl başlayacağımızı göreceğiz. Web3.js, blokzincirden veri okumak veya işlem yapmak ve hatta akıllı sözleşmeleri dağıtmak için hem ön uçlarda hem de arka uçlarda kullanılabilir. İlk adım, projenize web3.js'yi dahil etmektir. Bir web sayfasında kullanmak için, JSDeliver gibi bir CDN kullanarak kütüphaneyi doğrudan içe aktarabilirsiniz. @@ -33,13 +31,13 @@ Ardından Web3.js'yi bir Node.js komut dosyasına veya Browserify ön uç projes const Web3 = require("web3") ``` -Şimdi projeye kütüphaneyi dahil ettiğimize göre, onu başlatmamız gerekiyor. Projenizin blok zinciri ile iletişim kurabilmesi gerekiyor. Çoğu Ethereum kütüphanesi bir [düğüm](/developers/docs/nodes-and-clients/) ile RPC çağrıları aracılığıyla iletişim kurar. Web3 sağlayıcımızı başlatmak için, sağlayıcının URL'sini yapıcı olarak geçen bir Web3 örneğini başlatacağız. Eğer bir düğümünüz veya [bilgisayarınızda çalışan bir ganache örneği](https://ethereumdev.io/testing-your-smart-contract-with-existing-protocols-ganache-fork/) varsa şu şekilde gözükecektir: +Artık kütüphaneyi projeye dahil ettiğimize göre onu başlatmamız gerekiyor. Projenizin blokzinciri ile iletişim kurabilmesi gerekiyor. Çoğu Ethereum kütüphanesi, RPC çağrıları aracılığıyla bir [düğüm](/developers/docs/nodes-and-clients/) ile iletişim kurar. Web3 sağlayıcımızı başlatmak için, kurucuya sağlayıcının URL'sini vererek bir Web3 örneği oluşturacağız. Bilgisayarınızda çalışan bir düğümünüz veya [ganache örneğiniz](https://ethereumdev.io/testing-your-smart-contract-with-existing-protocols-ganache-fork/) varsa, şuna benzer görünecektir: ```js const web3 = new Web3("http://localhost:8545") ``` -Barındırılan bir düğüme doğrudan erişmek isterseniz, bununla ilgili seçenekleri [bir hizmet olarak düğümler](/developers/docs/nodes-and-clients/nodes-as-a-service) içinde bulabilirsiniz. +Barındırılan bir düğüme doğrudan erişmek isterseniz, [hizmet olarak düğümler](/developers/docs/nodes-and-clients/nodes-as-a-service) sayfasında seçenekleri bulabilirsiniz. ```js const web3 = new Web3("https://cloudflare-eth.com") @@ -56,7 +54,7 @@ web3.eth.getBlockNumber(function (error, result) { }) ``` -Bu programı çalıştırırsanız, sadece en son blok numarasını yazdıracaktır: blok zincirinin tepesi. Kodunuzda iç içe geri aramaları önlemek için `await/async` fonksiyon çağrılarını da kullanabilirsiniz: +Bu programı çalıştırırsanız, en son blok numarasını yazdıracaktır: blokzincirinin en üstünü. Kodunuzda iç içe geri aramaları önlemek için `await/async` fonksiyon çağrılarını da kullanabilirsiniz: ```js async function getBlockNumber() { @@ -68,27 +66,27 @@ async function getBlockNumber() { getBlockNumber() ``` -Web3 örneğinde kullanılabilen tüm fonksiyonları, [resmi web3.js belgelerinde](https://docs.web3js.org/) görebilirsiniz. +Web3 örneğinde kullanılabilen tüm fonksiyonları [resmi web3.js belgelerinde](https://docs.web3js.org/) görebilirsiniz. -Web3 kütüphanelerinin çoğu eşzamansızdır çünkü arka planda kütüphane, sonucu geri gönderen düğüme JSON RPC çağrıları yapar. +Çoğu Web3 kütüphanesi eşzamansızdır çünkü arka planda kütüphane, sonucu geri gönderen düğüme JSON-RPC çağrıları yapar. -Tarayıcıda çalışıyorsanız, bazı cüzdanlar doğrudan bir Web3 örneği enjekte eder ve özellikle işlem yapmak için kullanıcının Ethereum adresiyle etkileşim kurmayı planlıyorsanız, mümkün olduğunda onu kullanmaya çalışmalısınız. +Tarayıcıda çalışıyorsanız, bazı cüzdanlar doğrudan bir Web3 örneği enjekte eder ve özellikle işlem yapmak için kullanıcının Ethereum adresiyle etkileşim kurmayı planlıyorsanız, mümkün olduğunca kullanmaya çalışmalısınız. -İşte bir MetaMask cüzdanının mevcut olup olmadığını tespit etmek ve varsa onu etkinleştirmeye çalışmak için bir parçacık. Daha sonra, kullanıcının bakiyesini okumanıza ve Ethereum blok zincirinde yapmak istediğiniz işlemleri doğrulamalarına olanak tanır: +Bir MetaMask cüzdanının mevcut olup olmadığını tespit etmek ve varsa etkinleştirmeye çalışmak için gereken kod parçacığı aşağıdadır. Bu, daha sonra kullanıcının bakiyesini okumanıza ve Ethereum blokzincirinde yapmalarını istediğiniz işlemleri doğrulamalarına olanak tanır: ```js if (window.ethereum != null) { state.web3 = new Web3(window.ethereum) try { - // Request account access if needed + // Gerekirse hesap erişimi isteyin await window.ethereum.enable() - // Accounts now exposed + // Hesaplar artık kullanıma açık } catch (error) { - // User denied account access... + // Kullanıcı hesap erişimini reddetti... } } ``` -[Ethers.js](https://docs.ethers.io/) gibi web3.js alternatifleri de mevcuttur ve sıklıkla kullanılır. Bir sonraki öğreticide, [blok zincirindeki yeni gelen blokları kolayca nasıl dinleyeceğinizi ve neler içerdiklerini görmeyi öğreneceğiz](https://ethereumdev.io/listening-to-new-transactions-happening-on-the-blockchain/). +[Ethers.js](https://docs.ethers.io/) gibi web3.js alternatifleri de mevcuttur ve yaygın olarak kullanılmaktadır. Bir sonraki öğreticide, [blokzincirine gelen yeni blokları kolayca nasıl dinleyeceğimizi ve ne içerdiklerini nasıl göreceğimizi](https://ethereumdev.io/listening-to-new-transactions-happening-on-the-blockchain/) göreceğiz. diff --git a/public/content/translations/tr/developers/tutorials/short-abi/index.md b/public/content/translations/tr/developers/tutorials/short-abi/index.md index f12b9e0213b..9e252233eb0 100644 --- a/public/content/translations/tr/developers/tutorials/short-abi/index.md +++ b/public/content/translations/tr/developers/tutorials/short-abi/index.md @@ -1,85 +1,106 @@ --- title: "Çağrı Verisi Optimizasyonu için Kısa ABI'ler" -description: Akıllı sözleşmeleri İyimser Toplamalar için optimize etme +description: "İyimser Toplamalar için akıllı sözleşmeleri optimize etme" author: Ori Pomerantz lang: tr -tags: - - "katman 2" +tags: [ "katman 2" ] skill: intermediate published: 2022-04-01 --- ## Giriş {#introduction} -Bu makalede [iyimser toplamalar](/developers/docs/scaling/optimistic-rollups), onların işlem ücretleri ve bu farklı maliyet yapısının Ethereum Ana Ağı'ndakilere göre farklı şeyler için optimizasyon yapmamızı nasıl şart koştuğu hakkında bilgi edineceksiniz. Aynı zamanda bu optimizasyon işlemini nasıl uygulayacağınızı da göreceksiniz. +Bu makalede [iyimser toplamalar](/developers/docs/scaling/optimistic-rollups), bunların işlem maliyetleri ve bu farklı maliyet yapısının Ethereum Ana Ağı'ndakinden farklı şeyler için optimizasyon yapmamızı nasıl gerektirdiği hakkında bilgi edineceksiniz. +Ayrıca bu optimizasyonu nasıl uygulayacağınızı da öğreneceksiniz. -### Bilgilendirme {#full-disclosure} +### Tam beyan {#full-disclosure} -Ben tam zamanlı bir [ "Optimism"](https://www.optimism.io/) çalışanıyım, bu yüzden bu makaledeki örnekler Optimism üzerinde çalışabilecek örnekler olacaktır. Ancak, burada anlatacağım teknik diğer toplamalarda da işe yarayacaktır. +Ben tam zamanlı bir [Optimism](https://www.optimism.io/) çalışanıyım, bu nedenle bu makaledeki örnekler Optimism üzerinde çalışacaktır. +Ancak, burada açıklanan teknik diğer toplamalar için de aynı şekilde çalışmalıdır. ### Terminoloji {#terminology} -Toplamalar üzerinde konuşurken üretim Ethereum Ağı olan Ana Ağ için "katman 1 (L1)" terimi kullanılacaktır. "Katman 2 (L2)" terimi ise toplama veya güvenliği L1'e dayanan fakat işlemlerinin çoğunu zincir dışında yapan her türlü sistem için kullanılacaktır. +Toplamalar tartışılırken, üretim Ethereum ağı olan Ana Ağ için 'katman 1' (L1) terimi kullanılır. +'Katman 2' (L2) terimi, güvenlik için L1'e dayanan ancak işlemlerinin çoğunu zincir dışında yapan toplama veya diğer herhangi bir sistem için kullanılır. -## L2 işlemlerinin maliyetlerini nasıl daha da azaltabiliriz? {#how-can-we-further-reduce-the-cost-of-L2-transactions} +## L2 işlemlerinin maliyetini nasıl daha da düşürebiliriz? {#how-can-we-further-reduce-the-cost-of-L2-transactions} -[İyimser toplamalar](/developers/docs/scaling/optimistic-rollups), insanların sonradan gözden geçirip durumun doğru olup olmadığını kontrol edebilmesi için tüm geçmiş işlemlerin kayıtlarını tutmalıdır. Verileri Ethereum Ana Ağı'na sokabilmenin en uygun yolu, onları çağrı verisi olarak yazmaktır. Bu çözüm, hem [Optimism](https://help.optimism.io/hc/en-us/articles/4413163242779-What-is-a-rollup-) hem de [Arbitrum](https://developer.offchainlabs.com/docs/rollup_basics#intro-to-rollups) tarafından tercih edilmiştir. +[İyimser toplamalar](/developers/docs/scaling/optimistic-rollups), herkesin bunları inceleyebilmesi ve mevcut durumun doğru olduğunu doğrulayabilmesi için her geçmiş işlemin kaydını tutmak zorundadır. +Verileri Ethereum Ana Ağı'na almanın en ucuz yolu, onları çağrı verisi olarak yazmaktır. +Bu çözüm hem [Optimism](https://help.optimism.io/hc/en-us/articles/4413163242779-What-is-a-rollup-) hem de [Arbitrum](https://developer.offchainlabs.com/docs/rollup_basics#intro-to-rollups) tarafından seçilmiştir. ### L2 işlemlerinin maliyeti {#cost-of-l2-transactions} -L2 işlemlerinin maliyetleri iki bileşenden oluşur: +L2 işlemlerinin maliyeti iki bileşenden oluşur: -1. L2 işlemi, genelde çok ucuzdur -2. L1 depolaması, Ana Ağ'ın gaz ücretlerine bağlıdır +1. Genellikle son derece ucuz olan L2 işleme +2. Ana Ağ gaz maliyetlerine bağlı olan L1 depolaması -Bunu yazarken, Optimism'de L2 gazının maliyeti 0,001 [Gwei](/developers/docs/gas/#pre-london) idi. L1 gazının maliyeti ise şu an yaklaşık 40 Gwei'dir. [Güncel fiyatları buradan inceleyebilirsiniz](https://public-grafana.optimism.io/d/9hkhMxn7z/public-dashboard?orgId=1&refresh=5m). +Bu yazıyı yazarken Optimism'de L2 gaz maliyeti 0,001 [Gwei](/developers/docs/gas/#pre-london)'dir. +Öte yandan L1 gazının maliyeti ise yaklaşık 40 gwei'dir. +[Mevcut fiyatları buradan görebilirsiniz](https://public-grafana.optimism.io/d/9hkhMxn7z/public-dashboard?orgId=1&refresh=5m). -Çağrı verisinin bir baytı 4 gaz (eğer sıfırsa) veya 16 gazdır (eğer farklı bir değerse). EVM'deki en pahalı işlemlerden biri, depolamaya yazmaktır. 32 baytlık bir kelimeyi L2'deki bir depoya yazmanın maksimum maliyeti 22100 gazdır. Şu anda bu 22,1 Gwei'ye tekabül ediyor. Yani eğer sıfır baytlık bir çağrı verisi tasarruf etmemiz, depolamaya 200 bayt bile yazsak hala kârda olabileceğimizi gösteriyor. +Bir çağrı verisi baytının maliyeti, sıfır ise 4 gaz, başka bir değer ise 16 gazdır. +EVM'deki en pahalı işlemlerden biri depolamaya yazmaktır. +32 baytlık bir kelimeyi L2'de depolamaya yazmanın maksimum maliyeti 22.100 gazdır. Şu anda bu, 22,1 gwei'dir. +Dolayısıyla, çağrı verisinden yalnızca sıfır değerli tek bir bayt tasarruf edebilirsek, depolamaya yaklaşık 200 bayt yazabilir ve yine de kârlı çıkabiliriz. ### ABI {#the-abi} -İşlemlerin büyük bir çoğunluğu, bir sözleşmeye dıştan sahiplenilmiş bir hesaptan erişir. Çoğu sözleşme Solidity ile yazılmıştır ve veri alanlarını [uygulama ikili arayüzü (ABI)](https://docs.soliditylang.org/en/latest/abi-spec.html#formal-specification-of-the-encoding) ile uyumlu olacak şekilde yorumlar. +İşlemlerin büyük bir çoğunluğu, bir sözleşmeye dıştan sahiplenilmiş bir hesaptan erişir. +Çoğu sözleşme Solidity ile yazılmıştır ve veri alanlarını [uygulama ikili arayüzüne (ABI)](https://docs.soliditylang.org/en/latest/abi-spec.html#formal-specification-of-the-encoding) göre yorumlar. -Bununla birlikte ABI, bir çağrı verisi baytının maliyetinin yaklaşık olarak dört aritmetik işlemle aynı olduğu L1 için tasarlanmıştır; bir çağrı verisi baytının bin aritmetik işlemden daha pahalı olduğu L2 için değil. Örneğin, [bir ERC-20 transfer işlemini burada bulabilirsiniz](https://kovan-optimistic.etherscan.io/tx/0x7ce4c144ebfce157b4de99d8ad53a352ae91b57b3fa06d8a1c79439df6bfa998). Çağrı verisi şu şekilde bölünür: +Ancak ABI, bir çağrı verisi baytının maliyetinin yaklaşık olarak dört aritmetik işlemle aynı olduğu L1 için tasarlanmıştır, bir çağrı verisi baytının bin aritmetik işlemden daha pahalı olduğu L2 için değil. +Çağrı verisi şu şekilde bölünür: -| Bölüm | Uzunluk | Baytlar | Harcanan bayt | Harcanan gaz | Gereken bayt | Gereken gaz | -| ---------------- | -------:| -------:| -------------:| ------------:| ------------:| -----------:| -| Fonksiyon seçici | 4 | 0-3 | 3 | 48 | 1 | 16 | -| Sıfırlar | 12 | 4-15 | 12 | 48 | 0 | 0 | -| Varış adresi | 20 | 16-35 | 0 | 0 | 20 | 320 | -| Miktar | 32 | 36-67 | 17 | 64 | 15 | 240 | -| Toplam | 68 | | | 160 | | 576 | +| Bölüm | Uzunluk | Bayt | İsraf edilen bayt | İsraf edilen gaz | Gerekli bayt | Gerekli gaz | +| ---------------- | ------: | ----: | ----------------: | ---------------: | -----------: | ----------: | +| Fonksiyon seçici | 4 | 0-3 | 3 | 48 | 1 | 16 | +| Sıfırlar | 12 | 4-15 | 12 | 48 | 0 | 0 | +| Hedef adresi | 20 | 16-35 | 0 | 0 | 20 | 320 | +| Miktar | 32 | 36-67 | 17 | 64 | 15 | 240 | +| Toplam | 68 | | | 160 | | 576 | Açıklama: -- **İşlem Seçici**: Sözleşmenin 256'den az fonksiyonu var, yani bunları tek bir baytla ayrıştırabiliriz. Bu baytların değeri genelde sıfırdan farklıdır ve bu sebeple [maliyetleri 16 gazdır](https://eips.ethereum.org/EIPS/eip-2028). -- **Sıfırlar**: Bu baytlar her zaman 0'dır çünkü 20 baytlık bir adres onu tutabilmek için 32 baytlık bir kelimeye ihtiyaç duymaz. 4 gaz tutan 0 maliyetli baytlar ([sarı kağıdı inceleyin](https://ethereum.github.io/yellowpaper/paper.pdf), Ek G, sayfa 27, `G``txdatazero` değeri). -- **Miktar**: Bu sözleşmede `decimals` değerinin on sekiz (normal değer) ve transfer edilecek maksimum jeton sayısının da 1018 olduğunu varsayarsak, maksimum 1036 gibi bir miktar elde ederiz. 25615 > 1036, yani 15 bayt yeterlidir. +- **Fonksiyon seçici**: Sözleşmenin 256'dan az fonksiyonu olduğundan, bunları tek bir baytla ayırt edebiliriz. + Bu baytlar genellikle sıfır değildir ve bu nedenle [maliyeti 16 gazdır](https://eips.ethereum.org/EIPS/eip-2028). +- **Sıfırlar**: Bu baytlar her zaman sıfırdır çünkü yirmi baytlık bir adres, onu tutmak için otuz iki baytlık bir kelime gerektirmez. + Sıfır değeri taşıyan baytların maliyeti dört gazdır ([sarı bültene bakın](https://ethereum.github.io/yellowpaper/paper.pdf), Ek G, + s. 27, `G``txdatazero` değeri için). +- **Miktar**: Bu sözleşmede `decimals` değerinin on sekiz (normal değer) olduğunu ve transfer edeceğimiz maksimum jeton miktarının 1018 olacağını varsayarsak, maksimum 1036 tutarında bir miktar elde ederiz. + 25615 > 1036, yani on beş bayt yeterlidir. -L1 üzerinde harcanan 160 gaz normalde göz ardı edilebilir bir değerdir. Bir işlemin maliyeti en az [21.000 gazdır](https://yakkomajuri.medium.com/blockchain-definition-of-the-week-ethereum-gas-2f976af774ed), yani ekstra %0,8'in bir önemi yoktur. Fakat L2'de işler biraz daha farklıdır. Buradaki işlem maliyetinin neredeyse tamamı işlemi L1'e yazmaktır. İşlem çağrı verisine ek olarak, 109 baytlık bir işlem başlığı vardır (varış adresi, imza vs.). Toplam maliyet `109*16+576+160=2480` kadardır ve bunun %65'ini boşa harcıyoruz. +L1'de 160 gazlık bir israf normalde ihmal edilebilir düzeydedir. Bir işlemin maliyeti en az [21.000 gazdır](https://yakkomajuri.medium.com/blockchain-definition-of-the-week-ethereum-gas-2f976af774ed), bu nedenle fazladan %0,8'lik bir oran önemli değildir. +Ancak L2'de işler farklıdır. İşlem maliyetinin neredeyse tamamı, işlemi L1'e yazmaktır. +İşlem çağrı verisine ek olarak 109 baytlık bir işlem başlığı (hedef adresi, imza vb.) bulunur. +Bu nedenle toplam maliyet `109*16+576+160=2480` olup bunun yaklaşık %6,5'ini boşa harcıyoruz. -## Hedefi kontrol etmediğimiz durumlarda maliyetleri azaltma {#reducing-costs-when-you-dont-control-the-destination} +## Hedef sözleşmeyi kontrol etmediğinizde maliyetleri düşürme {#reducing-costs-when-you-dont-control-the-destination} -Hedef sözleşme üzerinde kontrolünüz olmadığını varsayarsak, yine de [buna](https://github.com/qbzzt/ethereum.org-20220330-shortABI) benzer bir çözüm yolu kullanabilirsiniz. Hadi ilgili dosyalara bir göz atalım. +Hedef sözleşme üzerinde kontrolünüz olmadığını varsayarsak, yine de [buna](https://github.com/qbzzt/ethereum.org-20220330-shortABI) benzer bir çözüm kullanabilirsiniz. +İlgili dosyalara bir göz atalım. ### Token.sol {#token-sol} -[Bu, hedef sözleşmedir](https://github.com/qbzzt/ethereum.org-20220330-shortABI/blob/master/contracts/Token.sol). Bu, bir ek özellikle gelen standart bir ERC-20 sözleşmesidir. Bu `faucet`, her kullanıcının kullanabilmek için biraz jeton almasını sağlar. Bu, üretim ERC-20 sözleşmesini gereksiz kılabilecek olsa da, ERC-20 sadece test yapmayı kolaylaştırmak amaçlı var olduğunda işleri gerçekten kolaylaştırıyor. +[Bu, hedef sözleşmedir](https://github.com/qbzzt/ethereum.org-20220330-shortABI/blob/master/contracts/Token.sol). +Bu, bir ek özelliğe sahip standart bir ERC-20 sözleşmesidir. +Bu `faucet` fonksiyonu, herhangi bir kullanıcının kullanmak üzere bir miktar jeton almasını sağlar. +Bu, bir üretim ERC-20 sözleşmesini kullanışsız hale getirse de bir ERC-20 yalnızca testi kolaylaştırmak için mevcut olduğunda işleri kolaylaştırır. ```solidity /** - * @dev Gives the caller 1000 tokens to play with + * @dev Çağırana oynaması için 1000 jeton verir */ function faucet() external { _mint(msg.sender, 1000); } // function faucet ``` -[Burada bu sözleşmenin dağıtılmış olduğu bir örneği görebilirsiniz](https://kovan-optimistic.etherscan.io/address/0x950c753c0edbde44a74d3793db738a318e9c8ce8). - ### CalldataInterpreter.sol {#calldatainterpreter-sol} -[Bu, işlemlerin daha küçük çağrı verileriyle çağırması gereken sözleşmedir](https://github.com/qbzzt/ethereum.org-20220330-shortABI/blob/master/contracts/CalldataInterpreter.sol). Hadi satır satır inceleyelim. +[Bu, işlemlerin daha kısa çağrı verisi ile çağırması gereken sözleşmedir](https://github.com/qbzzt/ethereum.org-20220330-shortABI/blob/master/contracts/CalldataInterpreter.sol). +Satır satır üzerinden geçelim. ```solidity //SPDX-License-Identifier: Unlicense @@ -89,7 +110,7 @@ pragma solidity ^0.8.0; import { OrisUselessToken } from "./Token.sol"; ``` -Nasıl çağırabileceğimizi bilmek için jeton işlevine ihtiyacımız var. +Onu nasıl çağıracağımızı bilmek için jeton fonksiyonuna ihtiyacımız var. ```solidity contract CalldataInterpreter { @@ -97,13 +118,13 @@ contract CalldataInterpreter { OrisUselessToken public immutable token; ``` -Bizim vekil olduğumuz jetonun adresi. +Vekil olduğumuz jetonun adresi. ```solidity /** - * @dev Specify the token address - * @param tokenAddr_ ERC-20 contract address + * @dev Jeton adresini belirtin + * @param tokenAddr_ ERC-20 sözleşme adresi */ constructor( address tokenAddr_ @@ -112,26 +133,28 @@ Bizim vekil olduğumuz jetonun adresi. } // constructor ``` -Jetonun adresi belirtmemiz gereken tek parametredir. +Jeton adresi, belirtmemiz gereken tek parametredir. ```solidity function calldataVal(uint startByte, uint length) private pure returns (uint) { ``` -Çağrı verisinden bir değer okuyalım. +Çağrı verisinden bir değer okuyun. ```solidity uint _retVal; require(length < 0x21, - "calldataVal length limit is 32 bytes"); + "calldataVal uzunluk sınırı 32 bayttır"); require(length + startByte <= msg.data.length, - "calldataVal trying to read beyond calldatasize"); + "calldataVal, calldatasize ötesini okumaya çalışıyor"); ``` -32 baytlık (256 bit) tek bir kelimeyi belleğe yükleyecek ve istediğimiz alanın bir parçası olmayan baytlardan kurtulacağız. Bu algoritma, 32 bayttan daha büyük değerler için işe yaramaz ve tabi ki çağrı verisini okuyup geçemeyiz. L1'de gaz tasarrufu için bu testleri atlamak gerekli olabilir fakat L2'de gaz oldukça ucuzdur ve düşünebileceğimiz her mantık kontrolünü yapabilmemize olanak sağlar. +Belleğe tek bir 32 baytlık (256 bit) kelime yükleyeceğiz ve istediğimiz alanın parçası olmayan baytları kaldıracağız. +Bu algoritma 32 bayttan uzun değerler için çalışmaz ve elbette çağrı verisinin sonundan ötesini okuyamayız. +L1'de gazdan tasarruf etmek için bu testleri atlamak gerekebilir, ancak L2'de gaz son derece ucuzdur, bu da aklımıza gelebilecek her türlü mantık kontrolünü yapmamızı sağlar. ```solidity assembly { @@ -139,16 +162,18 @@ Jetonun adresi belirtmemiz gereken tek parametredir. } ``` -`fallback()` (aşağıya bakın) çağrısından verileri kopyalayabilirdik, fakat EVM'nin derleme dili olan [Yul](https://docs.soliditylang.org/en/v0.8.12/yul.html)'u kullanmak daha kolaydır. +Verileri `fallback()` çağrısından (aşağıya bakın) kopyalayabilirdik, ancak EVM'nin assembly dili olan [Yul](https://docs.soliditylang.org/en/v0.8.12/yul.html) dilini kullanmak daha kolaydır. -Burada, baytları okuyup yığına yerleştirmek için (`startByte` ve `startByte+31`) [CALLDATALOAD işlem kodunu](https://www.evm.codes/#35) kullanıyoruz. Genelde, Yul'daki bir işlem kodunun söz dizimi şu şekildedir: `(,...)`. +Burada `startByte` ile `startByte+31` arasındaki baytları yığına okumak için [CALLDATALOAD işlem kodunu](https://www.evm.codes/#35) kullanıyoruz. +Genel olarak, Yul'daki bir işlem kodunun sözdizimi `(,...)` şeklindedir. ```solidity _retVal = _retVal >> (256-length*8); ``` -Sadece en önemli `length` baytları alanın bir parçasıdır, bu yüzden diğer verilerden kurtulmak için [sağa kaydırma](https://en.wikipedia.org/wiki/Logical_shift) kullanıyoruz. Bu işlem, değeri alanın sağına taşıma avantajını sağlıyor; yani değer çarpı 256something yerine değerin kendisini kullanmış oluyoruz. +Alanın yalnızca en anlamlı `uzunluktaki` baytları parçasıdır, bu nedenle diğer değerlerden kurtulmak için [sağa kaydırma](https://en.wikipedia.org/wiki/Logical_shift) yaparız. +Bu, değeri alanın sağına taşıma gibi ek bir avantaja sahiptir, dolayısıyla değerin kendisidir, değer çarpı 256bir şey değildir. ```solidity @@ -159,7 +184,8 @@ Sadece en önemli `length` baytları alanın bir parçasıdır, bu yüzden diğe fallback() external { ``` -Bir Solidity sözleşmesine yapılan çağrı hiçbir işlev imzasıyla eşleşmezse, [`fallback()` fonksiyonunu](https://docs.soliditylang.org/en/v0.8.12/contracts.html#fallback-function) çağırır (bir tane olduğunu varsayarak). `CalldataInterpreter` söz konusu olduğunda, başka bir `external` veya `public` işlev olmadığından _her_ çağrı buraya ulaşır. +Bir Solidity sözleşmesine yapılan bir çağrı, işlev imzalarından herhangi biriyle eşleşmediğinde, [`fallback()` işlevini](https://docs.soliditylang.org/en/v0.8.12/contracts.html#fallback-function) çağırır (varsa). +`CalldataInterpreter` durumunda, başka `external` veya `public` işlevler olmadığı için _herhangi bir_ çağrı buraya gelir. ```solidity uint _func; @@ -167,23 +193,27 @@ Bir Solidity sözleşmesine yapılan çağrı hiçbir işlev imzasıyla eşleşm _func = calldataVal(0, 1); ``` -Çağrı verisinin ilk baytını okuyun, bu bize fonksiyonu anlatır. Burada bir fonksiyonun ulaşılabilir olmamasının iki sebebi vardır: +Bize işlevi söyleyen çağrı verisinin ilk baytını okuyun. +Bir işlevin burada mevcut olmamasının iki nedeni vardır: -1. `pure` veya `view` olan fonksiyonlar, durumu değiştirmezler ve gaz maliyetleri yoktur (zincir dışı olarak çağrıldıklarında). O yüzden gaz maliyetini düşürmeye çalışmanın da bir anlamı yoktur. -2. [`msg.sender`](https://docs.soliditylang.org/en/v0.8.12/units-and-global-variables.html#block-and-transaction-properties)'a bağımlı olan fonksiyonlar. `msg.sender`'ın değeri, çağıranın değil `CalldataInterpreter`'ın adresi olacaktır. +1. `pure` veya `view` olan işlevler durumu değiştirmez ve gaza mal olmaz (zincir dışı çağrıldığında). + Gaz maliyetlerini düşürmeye çalışmanın bir anlamı yoktur. +2. [`msg.sender`](https://docs.soliditylang.org/en/v0.8.12/units-and-global-variables.html#block-and-transaction-properties)'a dayanan işlevler. + `msg.sender` değeri, arayanın değil `CalldataInterpreter` adresinin adresi olacaktır. -Malesef, [ERC-20'nin özelliklerine bakıldığında](https://eips.ethereum.org/EIPS/eip-20) bu bize sadece bir fonksiyon bırakıyor: `transfer`. Bu da bize 2 fonsiyon bırakıyor: `transfer` (çünkü `transferFrom` çağrısı yapabiliyoruz) ve `faucet` (çünkü jetonları bizi kim çağırdıysa ona transfer edebiliyoruz). +Ne yazık ki, [ERC-20 belirtimlerine bakıldığında](https://eips.ethereum.org/EIPS/eip-20), bu geriye yalnızca bir işlev bırakır: `transfer`. +Bu bize sadece iki işlev bırakıyor: `transfer` (`transferFrom` çağırabildiğimiz için) ve `faucet` (jetonları bizi çağıran kişiye geri aktarabildiğimiz için). ```solidity - // Call the state changing methods of token using - // information from the calldata + // Çağrı verisindeki bilgileri kullanarak jetonun durum değiştirme + // yöntemlerini çağırın // faucet if (_func == 1) { ``` -`faucet()`'a yapılan parametresiz bir çağrı. +Parametresi olmayan `faucet()` çağrısı. ```solidity token.faucet(); @@ -192,45 +222,48 @@ Malesef, [ERC-20'nin özelliklerine bakıldığında](https://eips.ethereum.org/ } ``` -`token.faucet()`'i çağırdıktan sonra jetonlara sahip oluyoruz. Fakat vekil sözleşmesi olarak, jetonlara **ihtiyaç** duymuyoruz. Ama EOA (dışarıdan sahip olunan hesap) ya da bizi çağıran sözleşme duyuyor. Yani biz bizi kim çağırırsa ona tüm jetonlarımızı transfer ediyoruz. +`token.faucet()` öğesini çağırdıktan sonra jetonları alırız. Ancak, vekil sözleşmesi olarak jetonlara **ihtiyacımız yok**. +Bizi arayan EOA (harici olarak sahip olunan hesap) veya sözleşmenin ihtiyacı var. +Bu yüzden tüm jetonlarımızı bizi arayan kişiye aktarıyoruz. ```solidity - // transfer (assume we have an allowance for it) + // transfer (bunun için bir yetkimiz olduğunu varsayalım) if (_func == 2) { ``` -Jeton transferi iki parametreye ihtiyaç duyuyor: hedef adres ve miktar. +Jeton transferi iki parametre gerektirir: hedef adres ve miktar. ```solidity token.transferFrom( msg.sender, ``` -Kullanıcıların sadece kendi sahip oldukları jetonları transfer etmesine izin veriyoruz +Arayanların yalnızca sahip oldukları jetonları transfer etmelerine izin veriyoruz ```solidity address(uint160(calldataVal(1, 20))), ``` -Hedef adres, 1 numaralı baytta başlıyor (0 numaralı bayt fonksiyonun kendisi). Bir adres olarak uzunluğu 20 bayttır. +Hedef adresi 1 numaralı bayttan başlar (0 numaralı bayt işlevdir). +Bir adres olarak 20 bayt uzunluğundadır. ```solidity calldataVal(21, 2) ``` -Bu spesifik sözleşme için birinin isteyebileceği maksimum jeton sayısının 2 bayta sığacağını varsayıyoruz (65536'dan daha az). +Bu özel sözleşme için, herhangi birinin transfer etmek isteyeceği maksimum jeton sayısının iki bayta (65536'dan az) sığdığını varsayıyoruz. ```solidity ); } ``` -Ortalama olarak bir transfer 35 bayt kadar çağrı verisi kaplar: +Genel olarak, bir transfer 35 bayt çağrı verisi alır: | Bölüm | Uzunluk | Bayt | -| ---------------- | -------:| -----:| +| ---------------- | ------: | ----: | | Fonksiyon seçici | 1 | 0 | -| Varış adresi | 32 | 1-32 | +| Hedef adresi | 32 | 1-32 | | Miktar | 2 | 33-34 | ```solidity @@ -241,44 +274,48 @@ Ortalama olarak bir transfer 35 bayt kadar çağrı verisi kaplar: ### test.js {#test-js} -[Bu Javascript birim testi](https://github.com/qbzzt/ethereum.org-20220330-shortABI/blob/master/test/test.js) bize bu mekanizmayı nasıl kullanacağımızı (ve nasıl doğru çalışacağını onaylayacağımızı) gösteriyor. [chai](https://www.chaijs.com/) and [ethers](https://docs.ethers.io/v5/) kısımlarını anladığınızı varsayıp sadece sözleşme için geçerli olan kısımları anlatacağım. +[Bu JavaScript birim testi](https://github.com/qbzzt/ethereum.org-20220330-shortABI/blob/master/test/test.js) bize bu mekanizmanın nasıl kullanılacağını (ve doğru çalışıp çalışmadığını nasıl doğrulayacağımızı) gösterir. +[chai](https://www.chaijs.com/) ve [ethers](https://docs.ethers.io/v5/)'ı anladığınızı varsayacağım ve yalnızca sözleşmeye özel olarak uygulanan kısımları açıklayacağım. ```js const { expect } = require("chai"); describe("CalldataInterpreter", function () { - it("Should let us use tokens", async function () { + it("Jetonları kullanmamıza izin vermeli", async function () { const Token = await ethers.getContractFactory("OrisUselessToken") const token = await Token.deploy() await token.deployed() - console.log("Token addr:", token.address) + console.log("Jeton adresi:", token.address) const Cdi = await ethers.getContractFactory("CalldataInterpreter") const cdi = await Cdi.deploy(token.address) await cdi.deployed() - console.log("CalldataInterpreter addr:", cdi.address) + console.log("CalldataInterpreter adresi:", cdi.address) const signer = await ethers.getSigner() ``` -Her iki sözleşmeyi dağıtarak başlıyoruz. +Her iki sözleşmeyi de dağıtarak başlıyoruz. ```javascript - // Get tokens to play with + // Oynamak için jetonları al const faucetTx = { ``` -Normalde işlem oluşturmak için kullandığımız yüksek seviyeli fonksiyonları (`token.faucet()` gibi) kullanamıyoruz, çünkü biz ABI'yi uygulamıyoruz. Bunun yerine, işlemi kendimiz oluşturmalı ve sonrasında göndermeliyiz. +ABI'yi takip etmediğimiz için, normalde kullanacağımız üst düzey işlevleri (`token.faucet()` gibi) işlem oluşturmak için kullanamayız. +Bunun yerine, işlemi kendimiz oluşturmalı ve sonra göndermeliyiz. ```javascript to: cdi.address, data: "0x01" ``` -İşlem için temin etmemiz gereken 2 parametre var: +İşlem için sağlamamız gereken iki parametre vardır: -1. `to`, hedef adres. Bu, çağrı verisi yorumlama sözleşmesidir. -2. `data`, gönderilecek çağrı verisi. Bir musluk çağrısı durumunda veri tek bayttır, `0x01`. +1. `to`, hedef adres. + Bu, çağrı verisi yorumlayıcı sözleşmesidir. +2. `data`, gönderilecek çağrı verisi. + Bir musluk çağrısı durumunda, veri tek bir bayttır, `0x01`. ```javascript @@ -286,26 +323,27 @@ Normalde işlem oluşturmak için kullandığımız yüksek seviyeli fonksiyonla await (await signer.sendTransaction(faucetTx)).wait() ``` -[İmza sahibinin `sendTransaction` yöntemini](https://docs.ethers.io/v5/api/signer/#Signer-sendTransaction) çağırıyoruz. Çünkü hedefi çoktan belirledik (`faucetTx.to`) ve artık imzalanacak olan işleme ihtiyacımız var. +İmzalayanın `sendTransaction` yöntemini çağırırız çünkü hedefi zaten belirttik (`faucetTx.to`) ve işlemin imzalanması gerekiyor. ```javascript -// Check the faucet provides the tokens correctly +// Musluğun jetonları doğru bir şekilde sağladığını kontrol edin expect(await token.balanceOf(signer.address)).to.equal(1000) ``` -Burada bakiyeyi onaylıyoruz. `view` fonsiyonlarında gaz tasarrufuna gerek yoktur, bu yüzden bunları sadece normal şekilde çalıştırıyoruz. +Burada bakiyeyi doğruluyoruz. +`view` işlevlerinde gaz tasarrufu yapmaya gerek yoktur, bu yüzden onları normal bir şekilde çalıştırırız. ```javascript -// CDI'ye bir izin verin (onaylar vekalet edilemez) +// CDI'ye bir yetki verin (onaylar vekil aracılığıyla yapılamaz) const approveTX = await token.approve(cdi.address, 10000) await approveTX.wait() expect(await token.allowance(signer.address, cdi.address)).to.equal(10000) ``` -Çağrı verisi yorumlayıcısına transferleri yapabilmesi için bir ödenek verin. +Transfer yapabilmesi için çağrı verisi yorumlayıcısına bir yetki verin. ```javascript -// Transfer tokens +// Jetonları transfer et const destAddr = "0xf5a6ead936fb47f342bb63e676479bddf26ebe1d" const transferTx = { to: cdi.address, @@ -313,101 +351,101 @@ const transferTx = { } ``` -Bir transfer işlemi oluşturun. İlk bayt "0x02"dir ve ardından hedef adres gelir; son olarak da miktar bulunur (0x0100, ondalık olarak 256). +Bir transfer işlemi oluşturun. İlk bayt "0x02"dir, bunu hedef adresi ve son olarak miktar (0x0100, ondalık sistemde 256'dır) takip eder. ```javascript await (await signer.sendTransaction(transferTx)).wait() - // Check that we have 256 tokens less + // 256 jeton daha azımız olduğunu kontrol edin expect (await token.balanceOf(signer.address)).to.equal(1000-256) - // And that our destination got them + // Ve hedefimizin onları aldığını expect (await token.balanceOf(destAddr)).to.equal(256) }) // it }) // describe ``` -### Örnek {#example} - -Bu dosyaları kendiniz çalıştırmadan çalışırken görmek istiyorsanız, şu bağlantıları izleyin: - -1. [ `OrisUselessToken`](https://kovan-optimistic.etherscan.io/tx/1410744)'ın [`0x950c753c0edbde44a74d3793db738a318e9c8ce8`](https://kovan-optimistic.etherscan.io/address/0x950c753c0edbde44a74d3793db738a318e9c8ce8) adresine dağıtılması. -2. [`CalldataInterpreter`](https://kovan-optimistic.etherscan.io/tx/1410745)'ın [`0x16617fea670aefe3b9051096c0eb4aeb4b3a5f55`](https://kovan-optimistic.etherscan.io/address/0x16617fea670aefe3b9051096c0eb4aeb4b3a5f55) adresine dağıtılması. -3. [`faucet()`](https://kovan-optimistic.etherscan.io/tx/1410746) çağrısı. -4. [`OrisUselessToken.approve()`](https://kovan-optimistic.etherscan.io/tx/1410747) çağrısı. Bu çağrı doğrudan jeton sözleşmesine gider, çünkü işleme `msg.sender`'a dayanır. -5. [`transfer()`](https://kovan-optimistic.etherscan.io/tx/1410748) çağrısı. - -## Hedef sözleşmeyi kontrol ederken maliyeti azaltma {#reducing-the-cost-when-you-do-control-the-destination-contract} +## Hedef sözleşmeyi kontrol ettiğinizde maliyeti düşürme {#reducing-the-cost-when-you-do-control-the-destination-contract} -Eğer hedef sözleşme üzerinde gerçekten kontrolünüz varsa `msg.sender`'i atlatabilen fonksiyonlar oluşturabilirsiniz. Çünkü bunlar çağrı verisi yorumlayıcısına güvenir. [Burada bunun, `control-contract` bölümü](https://github.com/qbzzt/ethereum.org-20220330-shortABI/tree/control-contract) içerisinde nasıl çalıştığına dair bir örnek görebilirsiniz. +Hedef sözleşme üzerinde kontrolünüz varsa, çağrı verisi yorumlayıcısına güvendikleri için `msg.sender` kontrollerini atlayan işlevler oluşturabilirsiniz. +[Bunun nasıl çalıştığına dair bir örneği `control-contract` dalında buradan görebilirsiniz](https://github.com/qbzzt/ethereum.org-20220330-shortABI/tree/control-contract). -Eğer sözleşme sadece harici sözleşmelere cevap veriyorsa, bunu sadece tek bir sözleşmeye sahip olarak halledebiliriz. Fakat bu [birleştirilebilirliiği](/developers/docs/smart-contracts/composability/) bozardı. Normal ERC-20 çağrılarına yanıt veren bir sözleşmeye ve küçük çağrı verilerine cevap verebilen başka bir sözleşmeye sahip olmak çok daha iyidir. +Sözleşme yalnızca harici işlemlere yanıt veriyorsa, yalnızca bir sözleşmeye sahip olarak idare edebilirdik. +Ancak bu, [birleştirilebilirliği](/developers/docs/smart-contracts/composability/) bozar. +Normal ERC-20 çağrılarına yanıt veren bir sözleşmeye ve kısa çağrı verili işlemlere yanıt veren başka bir sözleşmeye sahip olmak çok daha iyidir. ### Token.sol {#token-sol-2} -Bu örnekte, `Token.sol`'u modifiye ediyoruz. Bu, bizim sadece vekilin çağırabileceği bir çok fonksiyona sahip olmamızı sağlıyor. İşte yeni bölümler: +Bu örnekte `Token.sol` dosyasını değiştirebiliriz. +Bu, yalnızca vekilin çağırabileceği bir dizi işleve sahip olmamızı sağlar. +İşte yeni kısımlar: ```solidity - // The only address allowed to specify the CalldataInterpreter address + // CalldataInterpreter adresini belirtmesine izin verilen tek adres address owner; - // The CalldataInterpreter address + // CalldataInterpreter adresi address proxy = address(0); ``` -ERC-2O sözleşmesi yetkili vekilin kimliğini bilmelidir. Fakat, oluşturucu içindeki bu değişkeni biz ayarlayamayız, çünkü değeri henüz bilmiyoruz. Bu sözleşme, vekil jetonun adresinin oluşturucusunda olmasını beklediğinden ilk somutlaştırılan sözleşmedir. +ERC-20 sözleşmesinin yetkili vekilin kimliğini bilmesi gerekir. +Ancak, değeri henüz bilmediğimiz için bu değişkeni kurucuda ayarlayamayız. +Bu sözleşme ilk olarak örneklenir çünkü vekil, kurucusunda jetonun adresini bekler. ```solidity /** - * @dev Calls the ERC20 constructor. + * @dev ERC20 kurucusunu çağırır. */ constructor( - ) ERC20("Oris useless token-2", "OUT-2") { + ) ERC20("Oris'in işe yaramaz jetonu-2", "OUT-2") { owner = msg.sender; } ``` -Vekili belirlemesine izin verilen tek adres olduğundan yaratıcının adresi (`owner`) de burada depolanır. +Oluşturanın adresi (`owner` olarak adlandırılır) burada saklanır çünkü vekili ayarlamasına izin verilen tek adres budur. ```solidity /** - * @dev set the address for the proxy (the CalldataInterpreter). - * Can only be called once by the owner + * @dev Vekil için adresi ayarla (CalldataInterpreter). + * Yalnızca sahip tarafından bir kez çağrılabilir */ function setProxy(address _proxy) external { - require(msg.sender == owner, "Can only be called by owner"); - require(proxy == address(0), "Proxy is already set"); + require(msg.sender == owner, "Yalnızca sahip tarafından çağrılabilir"); + require(proxy == address(0), "Vekil zaten ayarlanmış"); proxy = _proxy; } // function setProxy ``` -Güvenlik kontrollerini atlayabildiği için vekilin ayrıcalıklı erişimi vardır. Vekile güvenebileceğimizden emin olmak için bu fonksiyonu sadece 1 kereliğine `owner`'ın çağırmasına izin veriyoruz. `proxy`'nin gerçek bir değeri olduğunda (sıfır dışında), o değer değişemez; sözleşme sahibi kötü niyetli olarak bunu değiştirmeye kalksa veya anımsatıcısı açığa çıksa bile hala güvendeyiz demektir. +Vekil, güvenlik kontrollerini atlayabildiği için ayrıcalıklı erişime sahiptir. +Vekile güvenebileceğimizden emin olmak için, bu işlevi yalnızca `owner`ın ve yalnızca bir kez çağırmasına izin veriyoruz. +`proxy` gerçek bir değere (sıfır değil) sahip olduğunda, bu değer değiştirilemez, bu nedenle sahibi dolandırıcı olmaya karar verse veya anımsatıcısı ortaya çıksa bile yine de güvendeyiz. ```solidity /** - * @dev Some functions may only be called by the proxy. + * @dev Bazı işlevler yalnızca vekil tarafından çağrılabilir. */ modifier onlyProxy { ``` -Bu [`modifier` fonksiyonudur](https://www.tutorialspoint.com/solidity/solidity_function_modifiers.htm) ve diğer fonksiyonların çalışma şeklini değiştirebilir. +Bu bir [`değiştirici` işlevidir](https://www.tutorialspoint.com/solidity/solidity_function_modifiers.htm), diğer işlevlerin çalışma şeklini değiştirir. ```solidity require(msg.sender == proxy); ``` -İlk olarak, başkası tarafından değil, vekil tarafından çağrıldığımızı doğrulayalım. Eğer değilse, `revert` kullanın. +İlk olarak, vekil tarafından arandığımızı ve başka kimsenin aramadığını doğrulayın. +Değilse, `revert`. ```solidity _; } ``` -Doğrulayabiliyorsa, değiştirdiğimiz fonksiyonu çalıştıralım. +Eğer öyleyse, değiştirdiğimiz işlevi çalıştırın. ```solidity - /* Proxy'nin hesaplar için gerçekten proxy yapmasına izin veren işlevler */ + /* Vekilin hesaplar için gerçekten vekillik yapmasına izin veren işlevler */ function transferProxy(address from, address to, uint256 amount) public virtual onlyProxy() returns (bool) @@ -436,17 +474,18 @@ Doğrulayabiliyorsa, değiştirdiğimiz fonksiyonu çalıştıralım. } ``` -Bunlar normalde mesajın doğrudan jeton aktaran veya bir ödeneği onaylayan kuruluştan gelmesini gerektiren üç işlemdir. Burada bu işlemlerin şu nitelikleri taşıyan vekil versiyonları mevcuttur: +Bunlar normalde mesajın doğrudan jetonları transfer eden veya bir yetkiyi onaylayan kuruluştan gelmesini gerektiren üç işlemdir. +Burada bu işlemlerin şu nitelikleri taşıyan vekil versiyonları mevcuttur: -1. Başka hiç kimse kontrol sahibi olamasın diye `onlyProxy()` tarafından değiştirilmiş. -2. Normalde `msg.sender` olan adresi ekstra parametre olarak alan. +1. `onlyProxy()` tarafından değiştirilmiştir, böylece başka kimsenin onları kontrol etmesine izin verilmez. +2. Normalde `msg.sender` olacak adresi ekstra bir parametre olarak alır. ### CalldataInterpreter.sol {#calldatainterpreter-sol-2} -Çağrı verisi yorumlayıcısı neredeyse yukardakiyle aynı olmasına rağmen şu noktada ayrışır: vekil fonksiyonlar `msg.sender` parametresi alır ve `transfer` için herhangi bir ödeneğe ihtiyaç yoktur. +Çağrı verisi yorumlayıcısı, vekil işlevlerin bir `msg.sender` parametresi alması ve `transfer` için bir yetkiye gerek olmaması dışında, yukarıdakiyle neredeyse aynıdır. ```solidity - // transfer (no need for allowance) + // transfer (yetkiye gerek yok) if (_func == 2) { token.transferProxy( msg.sender, @@ -477,7 +516,7 @@ Bunlar normalde mesajın doğrudan jeton aktaran veya bir ödeneği onaylayan ku ### Test.js {#test-js-2} -Az önceki test kodları ve aşağıdakinin arasında birkaç değişiklik vardır. +Önceki test kodu ile bu kod arasında birkaç değişiklik var. ```js const Cdi = await ethers.getContractFactory("CalldataInterpreter") @@ -486,21 +525,22 @@ await cdi.deployed() await token.setProxy(cdi.address) ``` -ERC-20 sözleşmesine hangi vekil sunucuya güveneceğini aktarmamız gerekir +ERC-20 sözleşmesine hangi vekile güveneceğini söylememiz gerekiyor ```js -console.log("CalldataInterpreter addr:", cdi.address) +console.log("CalldataInterpreter adresi:", cdi.address) -// Need two signers to verify allowances +// Yetkileri doğrulamak için iki imzalayan gerekir const signers = await ethers.getSigners() const signer = signers[0] const poorSigner = signers[1] ``` -`approve()` ve `transferFrom()`'u kontrol edebilmek için ikinci bir imza sahibine ihtiyacımız var. Buna `poorSigner` adını veriyoruz çünkü bizim jetonlarımızın hiçbirini almıyor (elbette ETH sahibi olmasına gerek yok). +`approve()` ve `transferFrom()` kontrol etmek için ikinci bir imzalayana ihtiyacımız var. +Buna `poorSigner` diyoruz çünkü jetonlarımızdan hiçbirini almıyor (tabii ki ETH'ye sahip olması gerekiyor). ```js -// Transfer tokens +// Jetonları transfer et const destAddr = "0xf5a6ead936fb47f342bb63e676479bddf26ebe1d" const transferTx = { to: cdi.address, @@ -509,10 +549,10 @@ const transferTx = { await (await signer.sendTransaction(transferTx)).wait() ``` -ERC-20 sözleşmesi (`cdi`) vekile güvendiğinden transferleri aktarmak için ödeneğe ihtiyaç duymayız. +ERC-20 sözleşmesi vekile (`cdi`) güvendiği için, transferleri iletmek için bir yetkiye ihtiyacımız yok. ```js -// approval and transferFrom +// onay ve transferFrom const approveTx = { to: cdi.address, data: "0x03" + poorSigner.address.slice(2, 42) + "00FF", @@ -527,24 +567,19 @@ const transferFromTx = { } await (await poorSigner.sendTransaction(transferFromTx)).wait() -// Check the approve / transferFrom combo was done correctly +// Onay / transferFrom kombinasyonunun doğru yapıldığını kontrol edin expect(await token.balanceOf(destAddr2)).to.equal(255) ``` -İki yeni fonksiyonu test edin. `transferFromTx` öğesinin iki adres parametresi gerektirdiğini unutmayın: ödeneği veren ve alıcı. +İki yeni işlevi test edin. +`transferFromTx` öğesinin iki adres parametresi gerektirdiğini unutmayın: yetkiyi veren ve alan. -### Örnek {#example-2} - -Bu dosyaları kendiniz çalıştırmadan çalışırken görmek istiyorsanız, şu bağlantıları izleyin: +## Sonuç {#conclusion} -1. [`OrisUselessToken-2`](https://kovan-optimistic.etherscan.io/tx/1475397)'ın [`0xb47c1f550d8af70b339970c673bbdb2594011696`](https://kovan-optimistic.etherscan.io/address/0xb47c1f550d8af70b339970c673bbdb2594011696) adresine dağıtılması. -2. [`CalldataInterpreter`'ın](https://kovan-optimistic.etherscan.io/tx/1475400)[`0x0dccfd03e3aaba2f8c4ea4008487fd0380815892`](https://kovan-optimistic.etherscan.io/address/0x0dccfd03e3aaba2f8c4ea4008487fd0380815892) adresine dağıtılması. -3. [`setProxy()`](https://kovan-optimistic.etherscan.io/tx/1475402) çağrısı. -4. [`faucet()`](https://kovan-optimistic.etherscan.io/tx/1475409) çağrısı. -5. [`transferProxy()`](https://kovan-optimistic.etherscan.io/tx/1475416) çağrısı. -6. [`approveProxy()`](https://kovan-optimistic.etherscan.io/tx/1475419) çağrısı. -7. [`transferFromProxy()`](https://kovan-optimistic.etherscan.io/tx/1475421) çağrısı. Bu çağrının diğerlerinden farklı bir adresten geldiğini de unutmayın; `poorSigner` yerine `signer`. +Hem [Optimism](https://medium.com/ethereum-optimism/the-road-to-sub-dollar-transactions-part-2-compression-edition-6bb2890e3e92) hem de [Arbitrum](https://developer.offchainlabs.com/docs/special_features), L1'e yazılan çağrı verisinin boyutunu ve dolayısıyla işlem maliyetini düşürmenin yollarını arıyor. +Ancak, genel çözümler arayan altyapı sağlayıcıları olarak yeteneklerimiz sınırlıdır. +Merkeziyetsiz uygulama geliştiricisi olarak, uygulamaya özel bilgiye sahipsiniz, bu da çağrı verilerinizi genel bir çözümde yapabileceğimizden çok daha iyi optimize etmenizi sağlar. +Umarım bu makale ihtiyaçlarınız için ideal çözümü bulmanıza yardımcı olur. -## Sonuç {#conclusion} +[Çalışmalarımdan daha fazlası için buraya bakın](https://cryptodocguy.pro/). -Hem [Optimism](https://medium.com/ethereum-optimism/the-road-to-sub-dollar-transactions-part-2-compression-edition-6bb2890e3e92) hem de [Arbitrum](https://developer.offchainlabs.com/docs/special_features), L1'e yazılan çağrı verilerinin boyutunu ve dolayısıyla işlem maliyetlerini azaltmanın yollarını aramaktadır. Fakat altyapı sağlayıcıları genel çözümler arıyorken, bizim yapabileceklerimiz sınırlıdır. Merkeziyetsiz uygulama geliştiricisi olarak uygulamaya özel bilgilere sahipsiniz. Bu da sizin çağrı verilerinizi bizim genel bir çözümle yapabileceğimize göre çok daha iyi optimize edebilmenizi mümkün kılar. Umarım bu makale, ihtiyaçlarınız için ideal çözümler bulmanıza yardımcı olur. diff --git a/public/content/translations/tr/developers/tutorials/smart-contract-security-guidelines/index.md b/public/content/translations/tr/developers/tutorials/smart-contract-security-guidelines/index.md index d46200742c5..0174d7c1fa9 100644 --- a/public/content/translations/tr/developers/tutorials/smart-contract-security-guidelines/index.md +++ b/public/content/translations/tr/developers/tutorials/smart-contract-security-guidelines/index.md @@ -1,94 +1,91 @@ --- -title: Akıllı sözleşme güvenlik yönergeleri -description: Dapp'inizi oluştururken göz önünde bulundurmanız gereken güvenlik yönergelerinin bir kontrol listesi +title: "Akıllı sözleşme güvenlik yönergeleri" +description: "Dapp'inizi oluştururken göz önünde bulundurmanız gereken güvenlik yönergelerinin bir kontrol listesi" author: "Trailofbits" -tags: - - "solidity" - - "akıllı sözleşmeler" - - "güvenlik" +tags: [ "solidity", "akıllı kontratlar", "güvenlik" ] skill: intermediate lang: tr published: 2020-09-06 -source: Güvenli sözleşmeler oluşturmak +source: Building secure contracts sourceUrl: https://github.com/crytic/building-secure-contracts/blob/master/development-guidelines/guidelines.md --- Daha güvenli akıllı sözleşmeler oluşturmak için bu üst düzey önerileri izleyin. -## Tasarım rehberi {#design-guidelines} +## Tasarım yönergeleri {#design-guidelines} Herhangi bir kod satırı yazmadan önce sözleşmenin tasarımı önceden tartışılmalıdır. -### Belgeler ve özellikler {#documentation-and-specifications} +### Dokümantasyon ve spesifikasyonlar {#documentation-and-specifications} Belgeler farklı seviyelerde yazılabilir ve sözleşmeler uygulanırken güncellenmelidir: -- **Sözleşmelerin ne yaptığını ve kod tabanındaki varsayımları açıklayan, sistemin sade bir İngilizce açıklaması**. -- Sözleşme etkileşimleri ve sistemin durum makinesi dahil **şema ve yapısal diyagramlar**. [Slither yazıcıları](https://github.com/crytic/slither/wiki/Printer-documentation), bu şemaların oluşturulmasına yardımcı olabilir. -- **Kod belgeleri** ile [Natspec formatı](https://solidity.readthedocs.io/en/develop/natspec-format.html) Solidity için kullanılabilir. +- **Sözleşmelerin ne yaptığını ve kod tabanındaki varsayımları açıklayan, sistemin sade bir İngilizce açıklaması.** +- **Sözleşme etkileşimleri ve sistemin durum makinesi de dâhil olmak üzere şema ve mimari diyagramlar.** [Slither yazıcıları](https://github.com/crytic/slither/wiki/Printer-documentation) bu şemaların oluşturulmasına yardımcı olabilir. +- **Kapsamlı kod dokümantasyonu**, Solidity için [Natspec formatı](https://docs.soliditylang.org/en/develop/natspec-format.html) kullanılabilir. -### Zincir üstü ve zincir dışı hesaplama {#on-chain-vs-off-chain-computation} +### Zincir üstü ve zincir dışı hesaplama {#onchain-vs-offchain-computation} -- **Zincir dışı bırakabileceğiniz kadar kod saklayın.** Zincir üstü katmanı küçük tutun. Verileri zincir dışı kodla, zincir üstünde doğrulamanın basit olacağı şekilde ön işleme tabi tutun. Sıralı bir listeye mi ihtiyacınız var? Listeyi zincir dışı sıralayın, ardından yalnızca zincirdeki sırasını kontrol edin. +- **Olabildiğince çok kodu zincir dışında tutun.** Zincir üstü katmanı küçük tutun. Verileri zincir dışı kodla, zincir üstünde doğrulamanın basit olacağı şekilde ön işleme tabi tutun. Sıralı bir listeye mi ihtiyacınız var? Listeyi zincir dışı sıralayın, ardından yalnızca zincirdeki sırasını kontrol edin. ### Yükseltilebilirlik {#upgradeability} -[Blog gönderimizde](https://blog.trailofbits.com/2018/09/05/contract-upgrade-anti-patterns/) farklı yükseltilebilirlik çözümlerini tartıştık. Herhangi bir kod yazmadan önce yükseltilebilirliği desteklemek için bilinçli bir seçim yapın. Karar, kodumuzu nasıl yapılandırdığınızı etkileyecektir. Genel olarak, şunları öneririz: +[Blog yazımızda](https://blog.trailofbits.com/2018/09/05/contract-upgrade-anti-patterns/) farklı yükseltilebilirlik çözümlerini tartıştık. Herhangi bir kod yazmadan önce yükseltilebilirliği desteklemek için bilinçli bir seçim yapın. Karar, kodunuzu nasıl yapılandırdığınızı etkileyecektir. Genel olarak, şunları öneririz: -- **Yükseltilebilirlik yerine [sözleşme geçişini](https://blog.trailofbits.com/2018/10/29/how-contract-migration-works/) tercih etme.** Geçiş sistemi, dezavantajları olmaksızın yükseltilebilir sistemle aynı avantajların çoğuna sahiptir. -- **delegatecallproxy yerine veri ayrımı modelini kullanma.** Projenizin net bir soyutlama ayrımı vardır, veri ayrımı kullanılarak yükseltilebilirlik yalnızca birkaç ayarlama gerektirecektir. Delegecallproxy, EVM uzmanlığı gerektirir ve yüksek oranda hataya açıktır. -- **Dağıtımdan önce taşıma/yükseltme prosedürünü belgeleyin.** Herhangi bir yönerge olmadan stres altında tepki vermeniz gerekiyorsa, hata yaparsınız. İzlenecek prosedürü önceden yazın. Şunları içermeli: +- **[Sözleşme geçişini](https://blog.trailofbits.com/2018/10/29/how-contract-migration-works/) yükseltilebilirliğe tercih etmek.** Geçiş sistemleri, yükseltilebilir olanlarla aynı avantajların çoğuna, dezavantajları olmaksızın sahiptir. +- **`delegatecallproxy` yerine veri ayırma modelini kullanmak.** Projenizin net bir soyutlama ayrımı varsa, veri ayırma kullanılarak yükseltilebilirlik yalnızca birkaç ayarlama gerektirecektir. Delegecallproxy, EVM uzmanlığı gerektirir ve yüksek oranda hataya açıktır. +- **Dağıtımdan önce taşıma/yükseltme prosedürünü belgeleyin.** Herhangi bir yönerge olmadan stres altında tepki vermeniz gerekiyorsa hata yaparsınız. İzlenecek prosedürü önceden yazın. Şunları içermeli: - Yeni sözleşmeleri başlatan çağrılar - Anahtarlar nerede saklanır ve bunlara nasıl erişilir - Dağıtımın nasıl kontrol edileceği! Bir dağıtım sonrası komut dosyası geliştirin ve test edin. ## Uygulama yönergeleri {#implementation-guidelines} -**Sadelik sağlamaya çalışın.** Daima amacınıza uyan en basit çözümü kullanın. Ekibinizin herhangi bir üyesi çözümünüzü anlayabilmelidir. +**Sadelik için çabalayın.** Daima amacınıza uyan en basit çözümü kullanın. Ekibinizin herhangi bir üyesi çözümünüzü anlayabilmelidir. -### Fonksiyon kompozisyonu {#function-composition} +### Fonksiyon bileşimi {#function-composition} Kod tabanınızın mimarisi, kodunuzun gözden geçirilmesini kolaylaştırmalıdır. Doğruluğu hakkında mantık kurma yeteneğini azaltan mimari seçimlerden kaçının. -- Ya birden çok sözleşme aracılığıyla ya da benzer fonksiyonları aynı grupta toplayarak (örneğin kimlik doğrulama, aritmetik vb.) **sisteminizin mantığını bölün**. -- **Açık bir amaç ile küçük işlevler yazın.** Bu, incelemeyi kolaylaştıracak ve ayrı bileşenlerin test edilmesini sağlayacaktır. +- **Sisteminizin mantığını,** ya birden çok sözleşme aracılığıyla ya da benzer fonksiyonları (örneğin; kimlik doğrulama, aritmetik...) bir araya getirerek **bölün**. +- **Açık bir amaca sahip küçük fonksiyonlar yazın.** Bu, daha kolay gözden geçirmeyi kolaylaştıracak ve bireysel bileşenlerin test edilmesine olanak tanıyacaktır. ### Kalıtım {#inheritance} -- **Kalıtımı yönetilebilir seviyede tutun.** Mantığı bölmek için kalıtım kullanılmalıdır ancak projeniz kalıtım ağacının derinliğini ve genişliğini en aza indirmeyi hedeflemelidir. +- **Kalıtımı yönetilebilir tutun.** Mantığı bölmek için kalıtım kullanılmalıdır, ancak projeniz kalıtım ağacının derinliğini ve genişliğini en aza indirmeyi hedeflemelidir. - **Sözleşmelerin hiyerarşisini kontrol etmek için Slither'ın [kalıtım yazıcısını](https://github.com/crytic/slither/wiki/Printer-documentation#inheritance-graph) kullanın.** Kalıtım yazıcısı, hiyerarşinin boyutunu gözden geçirmenize yardımcı olur. ### Olaylar {#events} -- **Tüm önemli işlemleri kaydedin.** Olaylar, geliştirme sırasında sözleşmede hata ayıklamaya ve dağıtımdan sonra sözleşmeyi izlemeye yardımcı olur. +- **Tüm kritik işlemleri günlüğe kaydedin.** Olaylar, geliştirme sırasında sözleşmede hata ayıklamaya ve dağıtım sonrasında onu izlemeye yardımcı olacaktır. -### Bilinen hatalardan kaçının {#avoid-known-pitfalls} +### Bilinen tuzaklardan kaçının {#avoid-known-pitfalls} -- **En yaygın güvenlik sorunlarının farkında olun.** Yaygın sorunlar hakkında bilgi edinmek için [Ethernaut CTF](https://ethernaut.openzeppelin.com/), [Capture the Ether](https://capturetheether.com/) veya [Not so smart contracts](https://github.com/crytic/not-so-smart-contracts/) gibi birçok çevrimiçi kaynak bulunur. -- **[Solidity belgelerindeki](https://solidity.readthedocs.io/en/latest/) uyarı bölümlerine dikkat edin.** Uyarı bölümleri, dilin açık olmayan davranışı hakkında sizi bilgilendirecektir. +- **En yaygın güvenlik sorunlarının farkında olun.** [Ethernaut CTF](https://ethernaut.openzeppelin.com/), [Capture the Ether](https://capturetheether.com/) veya [Not so smart contracts](https://github.com/crytic/not-so-smart-contracts/) gibi yaygın sorunlar hakkında bilgi edinmek için birçok çevrimiçi kaynak bulunmaktadır. +- **[Solidity dokümantasyonundaki](https://docs.soliditylang.org/en/latest/) uyarı bölümlerine dikkat edin.** Uyarı bölümleri sizi dilin bariz olmayan davranışları hakkında bilgilendirecektir. ### Bağımlılıklar {#dependencies} -- **İyi test edilmiş kütüphaneleri kullanın.** İyi test edilmiş kütüphanelerden kod içe aktarmak, hatalı kod yazma olasılığınızı azaltır. Eğer bir ERC20 sözleşmesi yazmak istiyorsanız, [OpenZeppelin](https://github.com/OpenZeppelin/openzeppelin-contracts/tree/master/contracts/token/ERC20) kullanın. -- **Bir bağımlılık yöneticisi kullanın; kodu kopyalayıp yapıştırmaktan kaçının.** Harici bir kaynak kullanıyorsanız, onu orijinal kaynakla güncel tutmalısınız. +- **İyi test edilmiş kütüphaneler kullanın.** İyi test edilmiş kütüphanelerden kod içe aktarmak, hatalı kod yazma olasılığınızı azaltır. Bir ERC20 sözleşmesi yazmak istiyorsanız, [OpenZeppelin](https://github.com/OpenZeppelin/openzeppelin-contracts/tree/master/contracts/token/ERC20) kullanın. +- **Bir bağımlılık yöneticisi kullanın; kodu kopyalayıp yapıştırmaktan kaçının.** Harici bir kaynağa güveniyorsanız, onu orijinal kaynakla güncel tutmalısınız. ### Test ve doğrulama {#testing-and-verification} - **Kapsamlı birim testleri yazın.** Yüksek kaliteli yazılım oluşturmak için kapsamlı bir test paketi çok önemlidir. -- **[Slither](https://github.com/crytic/slither), [Echidna](https://github.com/crytic/echidna) ve [Manticore](https://github.com/trailofbits/manticore) özel kontrolleri ve özellikleri yazın.** Otomatikleştirilmiş araçlar sözleşmenizin güvenli olduğundan emin olmaya yardımcı olacaktır. Etkili kontrollerin ve özelliklerin nasıl yazılacağını öğrenmek için bu kılavuzun geri kalanını gözden geçirin. -- **[crytic.io](https://crytic.io/) kullanın.** Crytic, GitHub ile bütünleşir, özel Slither algılayıcılarına erişim sağlar ve Echidna'dan özel özellik kontrolleri çalıştırır. +- **[Slither](https://github.com/crytic/slither), [Echidna](https://github.com/crytic/echidna) ve [Manticore](https://github.com/trailofbits/manticore) için özel denetimler ve özellikler yazın.** Otomatikleştirilmiş araçlar, sözleşmenizin güvenli olmasını sağlamaya yardımcı olacaktır. Etkili kontrollerin ve özelliklerin nasıl yazılacağını öğrenmek için bu kılavuzun geri kalanını gözden geçirin. +- **[crytic.io](https://crytic.io/) kullanın.** Crytic, GitHub ile entegre olur, özel Slither dedektörlerine erişim sağlar ve Echidna'dan özel özellik denetimleri çalıştırır. ### Solidity {#solidity} -- **0.4 ve 0.6 yerine Solidity 0.5'i tercih edin.** Bize göre Solidity 0.5, 0.4'ten daha güvenli ve daha iyi yerleşik uygulamalara sahip. Solidity 0.6'nın üretim için fazla dengesiz olduğu tespit edildi ve olgunlaşması için zamana ihtiyacı var. -- **Derlemek için dengeli bir sürüm kullanın; uyarıları kontrol etmek için en son sürümü kullanın.** Kodunuzun en son derleyici sürümüyle ilgili bildirilen herhangi bir sorun olup olmadığını kontrol edin. Bununla birlikte, Solidity'nin hızlı bir yayın döngüsü ve bir derleyici hataları geçmişi vardır, bu nedenle dağıtım için en son sürümü önermiyoruz (bkz. Slither'ın [solc sürümü önerisi](https://github.com/crytic/slither/wiki/Detector-Documentation#recommendation-33)). -- **Satır içi derleme kullanmayın.** Derleme, EVM uzmanlığı gerektirir. Sarı kağıtta _ustalaşmadıysanız_ EVM kodu yazmayın. +- **0.4 ve 0.6 yerine Solidity 0.5'i tercih edin. Bize göre Solidity 0.5, 0.4'ten daha güvenli ve daha iyi yerleşik uygulamalara sahip.** Solidity 0.6'nın üretim için fazla dengesiz olduğu tespit edildi ve olgunlaşması için zamana ihtiyacı var. +- **Derlemek için kararlı bir sürüm kullanın; uyarıları kontrol etmek için en son sürümü kullanın.** Kodunuzun en son derleyici sürümüyle ilgili bildirilmiş bir sorunu olmadığını kontrol edin. Ancak Solidity'nin hızlı bir sürüm döngüsü ve derleyici hataları geçmişi vardır, bu nedenle dağıtım için en son sürümü önermiyoruz (bkz. Slither'ın [solc sürüm önerisi](https://github.com/crytic/slither/wiki/Detector-Documentation#recommendation-33)). +- **Satır içi assembly kullanmayın.** Assembly, EVM uzmanlığı gerektirir. Yellow Paper'da _uzmanlaşmadıysanız_ EVM kodu yazmayın. ## Dağıtım yönergeleri {#deployment-guidelines} Sözleşme geliştirilip dağıtıldıktan sonra: -- **Sözleşmelerinizi izleyin.** Kayıtları izleyin ve sözleşme veya cüzdan güvenliğinin ihlal edilmesi durumunda tepki vermeye hazır olun. -- **İletişim bilgilerinizi [blockchain-security-contacts](https://github.com/crytic/blockchain-security-contacts)'e ekleyin.** Bu liste, bir güvenlik açığı tespit edilirse üçüncü tarafların sizinle iletişim kurmasına yardımcı olur. -- **Ayrıcalıklı kullanıcıların cüzdanlarını güvence altına alın.** [en iyi yönetim uygulamalarımızı](https://blog.trailofbits.com/2018/11/27/10-rules-for-the-secure-use-of-cryptocurrency-hardware-wallets/) takip edin. -- **Olay planına bir karşılık geliştirin.** Akıllı sözleşmelerinizin güvenliğinin ihlal edilebileceğini unutmayın. Sözleşmeleriniz hata içermese bile bir saldırgan, sözleşme sahibinin anahtarlarının kontrolünü ele geçirebilir. +- **Sözleşmelerinizi izleyin.** Günlükleri izleyin ve bir sözleşme veya cüzdan güvenliğinin ihlal edilmesi durumunda tepki vermeye hazır olun. +- **İletişim bilgilerinizi [blockchain-security-contacts](https://github.com/crytic/blockchain-security-contacts) listesine ekleyin.** Bu liste, bir güvenlik açığı keşfedildiğinde üçüncü tarafların sizinle iletişime geçmesine yardımcı olur. +- **Ayrıcalıklı kullanıcıların cüzdanlarını güvenceye alın.** Anahtarları donanım cüzdanlarında saklıyorsanız, [en iyi uygulamalarımızı](https://blog.trailofbits.com/2018/11/27/10-rules-for-the-secure-use-of-cryptocurrency-hardware-wallets/) takip edin. +- **Bir olaya müdahale planınız olsun.** Akıllı sözleşmelerinizin güvenliğinin ihlal edilebileceğini göz önünde bulundurun. Sözleşmeleriniz hata içermese bile bir saldırgan, sözleşme sahibinin anahtarlarının kontrolünü ele geçirebilir. diff --git a/public/content/translations/tr/developers/tutorials/stealth-addr/index.md b/public/content/translations/tr/developers/tutorials/stealth-addr/index.md new file mode 100644 index 00000000000..a26f4a38548 --- /dev/null +++ b/public/content/translations/tr/developers/tutorials/stealth-addr/index.md @@ -0,0 +1,443 @@ +--- +title: "Gizli Adresleri Kullanma" +description: "Gizli adresler, kullanıcıların varlıkları anonim olarak aktarmasına olanak tanır. Bu makaleyi okuduktan sonra şunları yapabileceksiniz: Gizli adreslerin ne olduğunu ve nasıl çalıştığını açıklayabilecek, anonimliği koruyacak şekilde gizli adreslerin nasıl kullanılacağını anlayabilecek ve gizli adresleri kullanan web tabanlı bir uygulama yazabileceksiniz." +author: Ori Pomerantz +tags: + [ + "Gizli adres", + "gizlilik", + "kriptografi", + "rust", + "wasm" + ] +skill: intermediate +published: 2025-11-30 +lang: tr +sidebarDepth: 3 +--- + +Siz Bill'siniz. Ayrıntısına girmeyeceğimiz nedenlerden ötürü, "Alice Dünya Kraliçesi Olsun" kampanyasına bağış yapmak ve kazanırsa sizi ödüllendirmesi için Alice'in bağış yaptığınızı bilmesini istiyorsunuz. Ne yazık ki zaferi garanti değil. Rakip bir kampanya var: "Carol Güneş Sistemi İmparatoriçesi Olsun". Eğer Carol kazanırsa ve Alice'e bağış yaptığınızı öğrenirse başınız belaya girer. Bu yüzden hesabınızdan Alice'in hesabına öylece 200 ETH transfer edemezsiniz. + +[ERC-5564](https://eips.ethereum.org/EIPS/eip-5564) bunun için bir çözüm sunar. Bu ERC, anonim transfer için [gizli adreslerin](https://nerolation.github.io/stealth-utils) nasıl kullanılacağını açıklar. + +**Uyarı**: Bildiğimiz kadarıyla gizli adreslerin arkasındaki kriptografi sağlamdır. Ancak, potansiyel yan kanal saldırıları mevcuttur. [Aşağıda](#go-wrong), bu riski azaltmak için neler yapabileceğinizi göreceksiniz. + +## Gizli adresler nasıl çalışır {#how} + +Bu makale, gizli adresleri iki şekilde açıklamaya çalışacaktır. İlki, [onların nasıl kullanılacağıdır](#how-use). Bu bölüm, makalenin geri kalanını anlamak için yeterlidir. Ardından, [arkasındaki matematiğin bir açıklaması](#how-math) bulunmaktadır. Kriptografi ile ilgileniyorsanız bu bölümü de okuyun. + +### Basit versiyon (gizli adresler nasıl kullanılır) {#how-use} + +Alice iki özel anahtar oluşturur ve bunlara karşılık gelen açık anahtarları yayımlar (bunlar tek bir çift uzunluklu meta adreste birleştirilebilir). Bill de bir özel anahtar oluşturur ve buna karşılık gelen açık anahtarı yayımlar. + +Bir tarafın açık anahtarını ve diğerinin özel anahtarını kullanarak, yalnızca Alice ve Bill tarafından bilinen ortak bir sır türetebilirsiniz (yalnızca açık anahtarlardan türetilemez). Bu ortak sırrı kullanarak Bill gizli adresi elde eder ve ona varlık gönderebilir. + +Alice de adresi ortak sırdan alır, ancak yayımladığı açık anahtarların özel anahtarlarını bildiği için, o adresten para çekmesine izin veren özel anahtarı da alabilir. + +### Matematik (gizli adresler neden böyle çalışır) {#how-math} + +Standart gizli adresler, daha az anahtar bitiyle daha iyi performans elde etmek ve aynı zamanda aynı güvenlik seviyesini korumak için [eliptik eğri kriptografisi (ECC)](https://blog.cloudflare.com/a-relatively-easy-to-understand-primer-on-elliptic-curve-cryptography/#elliptic-curves-building-blocks-of-a-better-trapdoor) kullanır. Ancak çoğunlukla bunu göz ardı edebilir ve normal aritmetik kullanıyormuş gibi davranabiliriz. + +Herkesin bildiği bir sayı vardır, _G_. _G_ ile çarpabilirsiniz. Ancak ECC'nin doğası gereği _G_'ye bölmek pratik olarak imkansızdır. Ethereum'da açık anahtar kriptografisinin genel çalışma şekli, daha sonra _Ppub = GPpriv_ açık anahtarıyla doğrulanan işlemleri imzalamak için _Ppriv_ özel anahtarını kullanabilmenizdir. + +Alice, _Kpriv_ ve _Vpriv_ olmak üzere iki özel anahtar oluşturur. _Kpriv_ gizli adresten para harcamak için ve _Vpriv_ Alice'e ait adresleri görüntülemek için kullanılacaktır. Alice daha sonra açık anahtarları yayımlar: _Kpub = GKpriv_ ve _Vpub = GVpriv_ + +Bill, üçüncü bir özel anahtar olan _Rpriv_'i oluşturur ve _Rpub = GRpriv_'i merkezi bir kayıt defterine yayımlar (Bill bunu Alice'e de gönderebilirdi, ancak Carol'ın dinlediğini varsayıyoruz). + +Bill, Alice'in de bilmesini beklediği _RprivVpub = GRprivVpriv_ değerini hesaplar (aşağıda açıklanmıştır). Bu değere ortak sır olan _S_ denir. Bu, Bill'e bir açık anahtar verir: _Ppub = Kpub+G\*hash(S)_. Bu açık anahtardan bir adres hesaplayabilir ve istediği kaynakları bu adrese gönderebilir. Gelecekte Alice kazanırsa, Bill kaynakların kendisinden geldiğini kanıtlamak için ona _Rpriv_'i söyleyebilir. + +Alice _RpubVpriv = GRprivVpriv_ değerini hesaplar. Bu ona aynı ortak sırrı, yani _S_'i verir. Özel anahtar olan _Kpriv_'i bildiği için, _Ppriv = Kpriv+hash(S)_ değerini hesaplayabilir. Bu anahtar, _Ppub = GPpriv = GKpriv+G\*hash(S) = Kpub+G\*hash(S)_ sonucundan kaynaklanan adresteki varlıklara erişmesini sağlar. + +Alice'in Dave'in Dünya Hakimiyeti Kampanya Hizmetleri'ne taşeronluk yapmasına izin vermek için ayrı bir görüntüleme anahtarımız var. Alice, Dave'in açık adresleri bilmesine ve daha fazla para olduğunda onu bilgilendirmesine izin vermek istiyor, ancak onun kampanya parasını harcamasını istemiyor. + +Görüntüleme ve harcama ayrı anahtarlar kullandığından, Alice Dave'e _Vpriv_'i verebilir. Daha sonra Dave, _S = RpubVpriv = GRprivVpriv_ hesaplayabilir ve bu şekilde açık anahtarları (_Ppub = Kpub+G\*hash(S)_) alabilir. Ancak _Kpriv_ olmadan Dave özel anahtarı alamaz. + +Özetlemek gerekirse, bunlar farklı katılımcılar tarafından bilinen değerlerdir. + +| Alice | Yayımlandı | Bill | Dave | | +| ------------------------------------------------------------------------- | ----------------- | ------------------------------------------------------------------------- | --------------------------------------------------------------------------- | --------------------------------------------- | +| G | G | G | G | | +| _Kpriv_ | — | — | — | | +| _Vpriv_ | — | — | _Vpriv_ | | +| _Kpub = GKpriv_ | _Kpub_ | _Kpub_ | _Kpub_ | | +| _Vpub = GVpriv_ | _Vpub_ | _Vpub_ | _Vpub_ | | +| — | — | _Rpriv_ | — | | +| _Rpub_ | _Rpub_ | _Rpub = GRpriv_ | _Rpub_ | | +| _S = RpubVpriv = GRprivVpriv_ | — | _S = RprivVpub = GRprivVpriv_ | _S = _RpubVpriv_ = GRprivVpriv_ | | +| _Ppub = Kpub+G\*hash(S)_ | — | _Ppub = Kpub+G\*hash(S)_ | _Ppub = Kpub+G\*hash(S)_ | | +| _Adres=f(Ppub)_ | — | _Adres=f(Ppub)_ | _Adres=f(Ppub)_ | _Adres=f(Ppub)_ | +| _Ppriv = Kpriv+hash(S)_ | — | — | — | | + +## Gizli adresler ters gittiğinde {#go-wrong} + +_Blokzincirde sır yoktur_. Gizli adresler size gizlilik sağlayabilirken, bu gizlilik trafik analizine karşı savunmasızdır. Basit bir örnek vermek gerekirse, Bill'in bir adresi fonladığını ve hemen bir _Rpub_ değeri yayımlamak için bir işlem gönderdiğini hayal edin. Alice'in _Vpriv_'i olmadan bunun bir gizli adres olduğundan emin olamayız, ancak bahis bu yönde olur. Sonra, o adresten tüm ETH'yi Alice'in kampanya fonu adresine aktaran başka bir işlem görüyoruz. Bunu kanıtlayamayabiliriz, ancak Bill'in Alice'in kampanyasına bağış yapmış olması muhtemeldir. Carol kesinlikle böyle düşünürdü. + +_Rpub_'un yayımlanmasını gizli adresin fonlanmasından ayırmak Bill için kolaydır (bunları farklı zamanlarda, farklı adreslerden yapın). Ancak, bu yetersizdir. Carol'un aradığı model, Bill'in bir adresi fonlaması ve ardından Alice'in kampanya fonunun bu adresten çekim yapmasıdır. + +Çözümlerden biri, Alice'in kampanyasının parayı doğrudan çekmemesi, bunun yerine üçüncü bir tarafa ödeme yapmak için kullanmasıdır. Alice'in kampanyası Dave'in Dünya Hakimiyeti Kampanya Hizmetleri'ne 10 ETH gönderirse Carol, Bill'in Dave'in müşterilerinden birine bağış yaptığını bilir. Eğer Dave'in yeterince müşterisi varsa Carol, Bill'in kendisiyle rekabet eden Alice'e mi yoksa Carol'un umursamadığı Adam'a, Albert'a veya Abigail'e mi bağış yaptığını bilemez. Alice ödemeye bir karma değeri ekleyebilir ve ardından bunun kendi bağışı olduğunu kanıtlamak için Dave'e ön görüntüyü sağlayabilir. Alternatif olarak, yukarıda belirtildiği gibi, Alice Dave'e _Vpriv_'ini verirse, ödemenin kimden geldiğini zaten bilir. + +Bu çözümdeki ana sorun, gizliliğin Bill'in yararına olduğu durumlarda Alice'in bu gizliliğe önem vermesini gerektirmesidir. Alice, Bill'in arkadaşı Bob'un da kendisine bağış yapması için itibarını korumak isteyebilir. Ancak Bill'i ifşa etmekten çekinmemesi de mümkündür, çünkü o zaman Carol'un kazanması durumunda ne olacağından korkacaktır. Bill, Alice'e daha da fazla destek sağlayabilir. + +### Birden çok gizli katman kullanma {#multi-layer} + +Bill'in gizliliğini korumak için Alice'e güvenmek yerine, Bill bunu kendisi yapabilir. Kurgusal kişiler olan Bob ve Bella için birden fazla meta adres oluşturabilir. Bill daha sonra Bob'a ETH gönderir ve "Bob" (aslında Bill'dir) bunu Bella'ya gönderir. "Bella" (yine Bill'dir) bunu Alice'e gönderir. + +Carol yine de trafik analizi yapabilir ve Bill'den Bob'a, Bob'dan Bella'ya, Bella'dan Alice'e giden hattı görebilir. Ancak, "Bob" ve "Bella" ETH'yi başka amaçlar için de kullanırsa, Alice gizli adresten bilinen kampanya adresine hemen para çekse bile, Bill'in Alice'e herhangi bir şey aktardığı görülmeyecektir. + +## Gizli adres uygulaması yazma {#write-app} + +Bu makale, [GitHub'da bulunan](https://github.com/qbzzt/251022-stealth-addresses.git) bir gizli adres uygulamasını açıklamaktadır. + +### Araçlar {#tools} + +Kullanabileceğimiz [bir typescript gizli adres kütüphanesi](https://github.com/ScopeLift/stealth-address-sdk) var. Ancak, kriptografik işlemler CPU'yu yoğun bir şekilde kullanabilir. Bunları [Rust](https://rust-lang.org/) gibi derlenmiş bir dilde uygulamayı ve kodu tarayıcıda çalıştırmak için [WASM](https://webassembly.org/) kullanmayı tercih ediyorum. + +[Vite](https://vite.dev/) ve [React](https://react.dev/) kullanacağız. Bunlar endüstri standardı araçlardır; onlara aşina değilseniz [bu öğreticiyi](/developers/tutorials/creating-a-wagmi-ui-for-your-contract/) kullanabilirsiniz. Vite'ı kullanmak için Node'a ihtiyacımız var. + +### Gizli adresleri çalışırken görün {#in-action} + +1. Gerekli araçları yükleyin: [Rust](https://rust-lang.org/tools/install/) ve [Node](https://nodejs.org/en/download). + +2. GitHub deposunu klonlayın. + + ```sh + git clone https://github.com/qbzzt/251022-stealth-addresses.git + cd 251022-stealth-addresses + ``` + +3. Ön koşulları yükleyin ve Rust kodunu derleyin. + + ```sh + cd src/rust-wasm + rustup target add wasm32-unknown-unknown + cargo install wasm-pack + wasm-pack build --target web + ``` + +4. Web sunucusunu başlatın. + + ```sh + cd ../.. + npm install + npm run dev + ``` + +5. [Uygulamaya](http://localhost:5173/) göz atın. Bu uygulama sayfasında iki çerçeve bulunur: biri Alice'in kullanıcı arayüzü, diğeri ise Bill'in kullanıcı arayüzü içindir. İki çerçeve iletişim kurmaz; yalnızca kolaylık sağlamak için aynı sayfadadırlar. + +6. Alice olarak, **Gizli Bir Meta Adres Oluştur**'a tıklayın. Bu, yeni gizli adresi ve karşılık gelen özel anahtarları gösterecektir. Gizli meta adresi panoya kopyalayın. + +7. Bill olarak, yeni gizli meta adresi yapıştırın ve **Bir adres oluştur**'a tıklayın. Bu size Alice için fonlanacak adresi verir. + +8. Adresi ve Bill'in açık anahtarını kopyalayın ve bunları Alice'in kullanıcı arayüzündeki "Bill tarafından oluşturulan adres için özel anahtar" alanına yapıştırın. Bu alanlar doldurulduktan sonra, o adresteki varlıklara erişmek için özel anahtarı göreceksiniz. + +9. Özel anahtarın adrese karşılık geldiğinden emin olmak için [çevrimiçi bir hesap makinesi](https://iancoleman.net/ethereum-private-key-to-address/) kullanabilirsiniz. + +### Program nasıl çalışır {#how-the-program-works} + +#### WASM bileşeni {#wasm} + +WASM'ye derlenen kaynak kodu [Rust](https://rust-lang.org/) dilinde yazılmıştır. Bunu [`src/rust_wasm/src/lib.rs`](https://github.com/qbzzt/251022-stealth-addresses/blob/main/src/rust-wasm/src/lib.rs) içinde görebilirsiniz. Bu kod öncelikli olarak JavaScript kodu ile [`eth-stealth-addresses` kütüphanesi](https://github.com/kassandraoftroy/eth-stealth-addresses) arasında bir arayüzdür. + +**`Cargo.toml`** + +Rust'taki [`Cargo.toml`](https://doc.rust-lang.org/cargo/reference/manifest.html), JavaScript'teki [`package.json`](https://docs.npmjs.com/cli/v9/configuring-npm/package-json) ile benzerdir. Paket bilgilerini, bağımlılık bildirimlerini vb. içerir. + +```toml +[package] +name = "rust-wasm" +version = "0.1.0" +edition = "2024" + +[dependencies] +eth-stealth-addresses = "0.1.0" +hex = "0.4.3" +wasm-bindgen = "0.2.104" +getrandom = { version = "0.2", features = ["js"] } +``` + +[`getrandom`](https://docs.rs/getrandom/latest/getrandom/) paketi rastgele değerler üretmek için gereklidir. Bu, tamamen algoritmik yollarla yapılamaz; bir entropi kaynağı olarak fiziksel bir sürece erişim gerektirir. Bu tanım, bu entropiyi içinde çalıştığımız tarayıcıya sorarak alacağımızı belirtir. + +```toml +console_error_panic_hook = "0.1.7" +``` + +[Bu kütüphane](https://docs.rs/console_error_panic_hook/latest/console_error_panic_hook/), WASM kodu paniklediğinde ve devam edemediğinde bize daha anlamlı hata mesajları verir. + +```toml +[lib] +crate-type = ["cdylib", "rlib"] +``` + +WASM kodu üretmek için gereken çıktı türü. + +**`lib.rs`** + +Bu, gerçek Rust kodudur. + +```rust +use wasm_bindgen::prelude::*; +``` + +Rust'tan bir WASM paketi oluşturmak için kullanılan tanımlar. [Burada](https://wasm-bindgen.github.io/wasm-bindgen/reference/attributes/index.html) belgelenmiştir. + +```rust +use eth_stealth_addresses::{ + generate_stealth_meta_address, + generate_stealth_address, + compute_stealth_key +}; +``` + +[`eth-stealth-addresses` kütüphanesinden](https://github.com/kassandraoftroy/eth-stealth-addresses) ihtiyaç duyduğumuz fonksiyonlar. + +```rust +use hex::{decode,encode}; +``` + +Rust, değerler için genellikle bayt [dizileri](https://doc.rust-lang.org/std/primitive.array.html) (`[u8; ]`) kullanır. Ancak JavaScript'te genellikle onaltılık dizeler kullanırız. [`hex` kütüphanesi](https://docs.rs/hex/latest/hex/) bizim için bir gösterimden diğerine çeviri yapar. + +```rust +#[wasm_bindgen] +``` + +Bu işlevi JavaScript'ten çağırabilmek için WASM bağlamaları oluşturun. + +```rust +pub fn wasm_generate_stealth_meta_address() -> String { +``` + +Birden çok alanı olan bir nesneyi döndürmenin en kolay yolu bir JSON dizesi döndürmektir. + +```rust + let (address, spend_private_key, view_private_key) = + generate_stealth_meta_address(); +``` + +[`generate_stealth_meta_address`](https://docs.rs/eth-stealth-addresses/latest/eth_stealth_addresses/fn.generate_stealth_meta_address.html) üç alan döndürür: + +- Meta adres (_Kpub_ ve _Vpub_) +- Görüntüleme özel anahtarı (_Vpriv_) +- Harcama özel anahtarı (_Kpriv_) + +[Demet](https://doc.rust-lang.org/std/primitive.tuple.html) sözdizimi, bu değerleri tekrar ayırmamızı sağlar. + +```rust + format!("{{\"address\":\"{}\",\"view_private_key\":\"{}\",\"spend_private_key\":\"{}\"}}", + encode(address), + encode(view_private_key), + encode(spend_private_key) + ) +} +``` + +JSON kodlu dizeyi oluşturmak için [`format!`](https://doc.rust-lang.org/std/fmt/index.html) makrosunu kullanın. Dizileri onaltılık dizelere dönüştürmek için [`hex::encode`](https://docs.rs/hex/latest/hex/fn.encode.html) kullanın. + +```rust +fn str_to_array(s: &str) -> Option<[u8; N]> { +``` + +Bu fonksiyon, bir onaltılık dizeyi (JavaScript tarafından sağlanan) bir bayt dizisine dönüştürür. Bunu, JavaScript kodu tarafından sağlanan değerleri ayrıştırmak için kullanırız. Bu işlev, Rust'ın dizileri ve vektörleri nasıl işlediği nedeniyle karmaşıktır. + +`` ifadesine [jenerik](https://doc.rust-lang.org/book/ch10-01-syntax.html) denir. `N`, döndürülen dizinin uzunluğunu kontrol eden bir parametredir. Fonksiyon aslında `str_to_array::` olarak adlandırılır, burada `n` dizi uzunluğudur. + +Dönüş değeri `Option<[u8; N]>`'dir, bu da döndürülen dizinin [isteğe bağlı](https://doc.rust-lang.org/std/option/) olduğu anlamına gelir. Bu, Rust'ta başarısız olabilecek fonksiyonlar için tipik bir kalıptır. + +Örneğin, `str_to_array::10("bad060a7")` çağırırsak, fonksiyonun on değerli bir dizi döndürmesi gerekir, ancak girdi yalnızca dört bayttır. Fonksiyonun başarısız olması gerekir ve bunu `None` döndürerek yapar. `str_to_array::4("bad060a7")` için dönüş değeri `Some<[0xba, 0xd0, 0x60, 0xa7]>` olacaktır. + +```rust + // decode, Result, _> döndürür + let vec = decode(s).ok()?; +``` + +[`hex::decode`](https://docs.rs/hex/latest/hex/fn.decode.html) fonksiyonu bir `Result, FromHexError>` döndürür. [`Result`](https://doc.rust-lang.org/std/result/) türü, başarılı bir sonuç (`Ok(değer)`) veya bir hata (`Err(hata)`) içerebilir. + +`.ok()` yöntemi, `Result`'ı bir `Option`'a dönüştürür; değeri başarılıysa `Ok()` değeri, değilse `None`'dur. Son olarak, [soru işareti operatörü](https://doc.rust-lang.org/std/option/#the-question-mark-operator-), `Option` boşsa mevcut fonksiyonları durdurur ve bir `None` döndürür. Aksi takdirde, değeri açar ve onu döndürür (bu durumda, `vec`'e bir değer atamak için). + +Bu, hataları işlemek için garip bir şekilde karmaşık bir yöntem gibi görünüyor, ancak `Result` ve `Option`, tüm hataların bir şekilde ele alınmasını sağlar. + +```rust + if vec.len() != N { return None; } +``` + +Bayt sayısı yanlışsa, bu bir başarısızlıktır ve `None` döndürürüz. + +```rust + // try_into, vec'i tüketir ve [u8; N] oluşturmaya çalışır + let array: [u8; N] = vec.try_into().ok()?; +``` + +Rust'ta iki dizi türü vardır. [Diziler](https://doc.rust-lang.org/std/primitive.array.html) sabit bir boyuta sahiptir. [Vektörler](https://doc.rust-lang.org/std/vec/index.html) büyüyebilir ve küçülebilir. `hex::decode` bir vektör döndürür, ancak `eth_stealth_addresses` kütüphanesi dizileri almak ister. [`.try_into()`](https://doc.rust-lang.org/std/convert/trait.TryInto.html#required-methods), bir değeri başka bir türe, örneğin bir vektörü bir diziye dönüştürür. + +```rust + Some(array) +} +``` + +Rust, bir fonksiyonun sonunda bir değer döndürürken [`return`](https://doc.rust-lang.org/std/keyword.return.html) anahtar kelimesini kullanmanızı gerektirmez. + +```rust +#[wasm_bindgen] +pub fn wasm_generate_stealth_address(stealth_address: &str) -> Option { +``` + +Bu fonksiyon, hem _Vpub_ hem de _Kpub_'ı içeren açık bir meta adres alır. Gizli adresi, yayımlanacak açık anahtarı (_Rpub_) ve yayımlanan adreslerden hangilerinin Alice'e ait olabileceğinin tanımlanmasını hızlandıran tek baytlık bir tarama değerini döndürür. + +Tarama değeri, ortak sırrın bir parçasıdır (_S = GRprivVpriv_). Bu değer Alice için mevcuttur ve onu kontrol etmek, _f(Kpub+G\*hash(S))_'nin yayımlanan adrese eşit olup olmadığını kontrol etmekten çok daha hızlıdır. + +```rust + let (address, r_pub, scan) = + generate_stealth_address(&str_to_array::<66>(stealth_address)?); +``` + +Kütüphanenin [`generate_stealth_address`](https://docs.rs/eth-stealth-addresses/latest/eth_stealth_addresses/fn.generate_stealth_address.html) fonksiyonunu kullanıyoruz. + +```rust + format!("{{\"address\":\"{}\",\"rPub\":\"{}\",\"scan\":\"{}\"}}", + encode(address), + encode(r_pub), + encode(&[scan]) + ).into() +} +``` + +JSON kodlu çıktı dizesini hazırlayın. + +```rust +#[wasm_bindgen] +pub fn wasm_compute_stealth_key( + address: &str, + bill_pub_key: &str, + view_private_key: &str, + spend_private_key: &str +) -> Option { + . + . + . +} +``` + +Bu fonksiyon, adresten (_Rpriv_) çekim yapmak için özel anahtarı hesaplamak üzere kütüphanenin [`compute_stealth_key`](https://docs.rs/eth-stealth-addresses/latest/eth_stealth_addresses/fn.compute_stealth_key.html) fonksiyonunu kullanır. Bu hesaplama şu değerleri gerektirir: + +- Adres (_Adres=f(Ppub)_) +- Bill tarafından oluşturulan açık anahtar (_Rpub_) +- Görünüm özel anahtarı (_Vpriv_) +- Harcama özel anahtarı (_Kpriv_) + +```rust +#[wasm_bindgen(start)] +``` + +[`#[wasm_bindgen(start)]`](https://wasm-bindgen.github.io/wasm-bindgen/reference/attributes/on-rust-exports/start.html), fonksiyonun WASM kodu başlatıldığında yürütüldüğünü belirtir. + +```rust +pub fn main() { + console_error_panic_hook::set_once(); +} +``` + +Bu kod, panik çıktısının JavaScript konsoluna gönderileceğini belirtir. Çalışırken görmek için, uygulamayı kullanın ve Bill'e geçersiz bir meta-adres verin (sadece bir onaltılık basamağı değiştirin). JavaScript konsolunda şu hatayı göreceksiniz: + +``` +rust_wasm.js:236 panicked at /home/ori/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/subtle-2.6.1/src/lib.rs:701:9: +assertion `left == right` failed + left: 0 + right: 1 +``` + +Ardından bir yığın izlemesi gelir. Ardından Bill'e geçerli meta adresi verin ve Alice'e ya geçersiz bir adres ya da geçersiz bir açık anahtar verin. Şu hatayı göreceksiniz: + +``` +rust_wasm.js:236 panicked at /home/ori/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/eth-stealth-addresses-0.1.0/src/lib.rs:78:9: +keys do not generate stealth address +``` + +Yine, ardından bir yığın izlemesi gelir. + +#### Kullanıcı arayüzü {#ui} + +Kullanıcı arayüzü [React](https://react.dev/) kullanılarak yazılmıştır ve [Vite](https://vite.dev/) tarafından sunulmaktadır. Onlar hakkında [bu öğreticiyi](/developers/tutorials/creating-a-wagmi-ui-for-your-contract/) kullanarak bilgi edinebilirsiniz. Burada [WAGMI](https://wagmi.sh/)'ye gerek yoktur çünkü doğrudan bir blokzincir veya cüzdan ile etkileşimde bulunmuyoruz. + +Kullanıcı arayüzünün tek bariz olmayan kısmı WASM bağlantısıdır. İşte nasıl çalıştığı. + +**`vite.config.js`** + +Bu dosya [Vite yapılandırmasını](https://vite.dev/config/) içerir. + +```js +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' +import wasm from "vite-plugin-wasm"; + +// https://vite.dev/config/ +export default defineConfig({ + plugins: [react(), wasm()], +}) +``` + +İki Vite eklentisine ihtiyacımız var: [react](https://www.npmjs.com/package/@vitejs/plugin-react) ve [wasm](https://github.com/Menci/vite-plugin-wasm#readme). + +**`App.jsx`** + +Bu dosya uygulamanın ana bileşenidir. İki bileşen içeren bir kapsayıcıdır: `Alice` ve `Bill`, bu kullanıcılar için kullanıcı arayüzleridir. WASM için ilgili kısım başlatma kodudur. + +```jsx +import init from './rust-wasm/pkg/rust_wasm.js' +``` + +[`wasm-pack`](https://rustwasm.github.io/docs/wasm-pack/) kullandığımızda, burada kullandığımız iki dosya oluşturur: gerçek kodu içeren bir wasm dosyası (burada, `src/rust-wasm/pkg/rust_wasm_bg.wasm`) ve onu kullanmak için tanımları içeren bir JavaScript dosyası (burada, `src/rust-wasm/pkg/rust_wasm.js`). Bu JavaScript dosyasının varsayılan dışa aktarımı, WASM'ı başlatmak için çalışması gereken koddur. + +```jsx +function App() { + . + . + . + useEffect(() => { + const loadWasm = async () => { + try { + await init(); + setWasmReady(true) + } catch (err) { + console.error('Wasm yüklenirken hata:', err) + alert("Wasm hatası: " + err) + } + } + + loadWasm() + }, [] + ) +``` + +[`useEffect` kancası](https://react.dev/reference/react/useEffect), durum değişkenleri değiştiğinde yürütülen bir işlevi belirtmenize olanak tanır. Burada, durum değişkenleri listesi boştur (`[]`), bu nedenle bu işlev sayfa yüklendiğinde yalnızca bir kez yürütülür. + +Etki fonksiyonu hemen geri dönmelidir. WASM `init` gibi eşzamansız kodu kullanmak için (`.wasm` dosyasını yüklemesi gerektiği ve dolayısıyla zaman aldığı için) dahili bir [`async`](https://en.wikipedia.org/wiki/Async/await) fonksiyonu tanımlar ve onu bir `await` olmadan çalıştırırız. + +**`Bill.jsx`** + +Bu, Bill için kullanıcı arayüzüdür. Alice tarafından sağlanan gizli meta adrese dayalı olarak bir adres oluşturma eylemi olmak üzere tek bir eylemi vardır. + +```jsx +import { wasm_generate_stealth_address } from './rust-wasm/pkg/rust_wasm.js' +``` + +Varsayılan dışa aktarmaya ek olarak, `wasm-pack` tarafından oluşturulan JavaScript kodu, WASM kodundaki her bir işlev için bir işlevi dışa aktarır. + +```jsx +