{"id":31855,"date":"2025-10-14T22:32:06","date_gmt":"2025-10-14T19:32:06","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/solidity-ile-moduler-akilli-banka-foundry-ve-arayuz-kullanimi\/"},"modified":"2025-10-14T22:32:06","modified_gmt":"2025-10-14T19:32:06","slug":"solidity-ile-moduler-akilli-banka-foundry-ve-arayuz-kullanimi","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/solidity-ile-moduler-akilli-banka-foundry-ve-arayuz-kullanimi\/","title":{"rendered":"Solidity ile Mod\u00fcler Ak\u0131ll\u0131 Banka: Foundry ve Aray\u00fcz Kullan\u0131m\u0131"},"content":{"rendered":"<p><body><\/p>\n<p>Merkeziyetsiz finans (DeFi) d\u00fcnyas\u0131nda, g\u00fcvenli ve esnek bir bankac\u0131l\u0131k sistemi hayal edin. Solidity ile in\u015fa edilen mod\u00fcler bir ak\u0131ll\u0131 banka, bu hayali ger\u00e7e\u011fe d\u00f6n\u00fc\u015ft\u00fcr\u00fcyor. Bu makalede, Foundry ve aray\u00fczler kullanarak nas\u0131l ki\u015fiselle\u015ftirilebilir &#8216;Deposit Box&#8217; sistemi kuraca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m \u00f6\u011frenecek, ak\u0131ll\u0131 s\u00f6zle\u015fme mimarisinin g\u00fcc\u00fcn\u00fc ke\u015ffedeceksiniz. Geleneksel bankac\u0131l\u0131k sistemlerinin karma\u015f\u0131kl\u0131\u011f\u0131 ve tekil hata noktalar\u0131, merkeziyetsiz d\u00fcnyaya ad\u0131m atan kullan\u0131c\u0131lar i\u00e7in ciddi endi\u015feler yaratmaktad\u0131r. Monolitik, yani tek bir b\u00fcy\u00fck s\u00f6zle\u015fmeden olu\u015fan yap\u0131lar, geli\u015ftirme s\u00fcrecini yava\u015flat\u0131rken, g\u00fcncellemeleri zorla\u015ft\u0131r\u0131r ve g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131n kapsam\u0131n\u0131 art\u0131rabilir. Bir ak\u0131ll\u0131 banka s\u00f6zle\u015fmesi hayal etti\u011finizde, kullan\u0131c\u0131lar\u0131n yat\u0131r\u0131mlar\u0131n\u0131 y\u00f6netti\u011fi, faiz kazand\u0131\u011f\u0131, belki de kredi ald\u0131\u011f\u0131 bir\u00e7ok farkl\u0131 fonksiyonu i\u00e7erecektir. T\u00fcm bu fonksiyonlar\u0131 tek bir devasa ak\u0131ll\u0131 s\u00f6zle\u015fmeye s\u0131\u011fd\u0131rmak, k\u0131sa vadede pratik g\u00f6r\u00fcnse de, uzun vadede s\u00fcrd\u00fcr\u00fclemez bir mimari olu\u015fturur.<\/p>\n<p>\u0130\u015fte tam bu noktada mod\u00fcler mimari devreye giriyor. Mod\u00fcler tasar\u0131m, b\u00fcy\u00fck bir sistemi daha k\u00fc\u00e7\u00fck, ba\u011f\u0131ms\u0131z ve yeniden kullan\u0131labilir par\u00e7alara ay\u0131r\u0131r. T\u0131pk\u0131 bir LEGO setindeki gibi, her bir par\u00e7a belirli bir i\u015flevi yerine getirir ve gerekti\u011finde birle\u015ftirilerek daha karma\u015f\u0131k yap\u0131lar olu\u015fturulabilir. Bir ak\u0131ll\u0131 banka ba\u011flam\u0131nda, bu, mevduat kutular\u0131n\u0131 (deposit boxes), faiz hesaplama mod\u00fcllerini, KYC\/AML bile\u015fenlerini veya kredi mekanizmalar\u0131n\u0131 ayr\u0131 ayr\u0131 ak\u0131ll\u0131 s\u00f6zle\u015fmeler olarak tasarlamak anlam\u0131na gelebilir. Bu yakla\u015f\u0131m, sadece geli\u015ftirme s\u00fcrecini h\u0131zland\u0131rmakla kalmaz, ayn\u0131 zamanda her bir mod\u00fcl\u00fcn ayr\u0131 ayr\u0131 denetlenmesine ve test edilmesine olanak tan\u0131yarak genel sistem g\u00fcvenli\u011fini art\u0131r\u0131r. Olas\u0131 bir g\u00fcvenlik a\u00e7\u0131\u011f\u0131 durumunda, etkilenen mod\u00fcl\u00fcn kapsam\u0131 s\u0131n\u0131rl\u0131 kal\u0131r ve t\u00fcm sistemin \u00e7\u00f6kme riski azal\u0131r. Dahas\u0131, yeni \u00f6zellikler eklemek veya mevcut mod\u00fclleri y\u00fckseltmek \u00e7ok daha kolay hale gelir, \u00e7\u00fcnk\u00fc sadece ilgili mod\u00fcl \u00fczerinde de\u011fi\u015fiklik yap\u0131lmas\u0131 yeterlidir. Bu sayede, merkeziyetsiz finans\u0131n dinamik ve h\u0131zla geli\u015fen do\u011fas\u0131na ayak uydurabilecek esnek ve adapte olabilir bir yap\u0131 in\u015fa etmi\u015f oluruz. B\u00f6ylece, kullan\u0131c\u0131lar\u0131n fonlar\u0131n\u0131 daha g\u00fcvenli ve \u015feffaf bir ortamda y\u00f6netebilece\u011fi, gelece\u011fin bankac\u0131l\u0131k altyap\u0131s\u0131n\u0131 kurmu\u015f oluruz.<\/p>\n<h2>\u2699\ufe0f Temel Kavramlar: Solidity Aray\u00fczleri ve Foundry Geli\u015ftirme Ortam\u0131 Nedir?<\/h2>\n<p>Mod\u00fcler bir ak\u0131ll\u0131 banka in\u015fa etme yolculu\u011fumuzda iki kritik araca ihtiyac\u0131m\u0131z var: Solidity Aray\u00fczleri ve Foundry geli\u015ftirme ortam\u0131. \u00d6ncelikle, <a href=\"https:\/\/docs.soliditylang.org\/en\/latest\/contracts.html#interfaces\">Solidity Aray\u00fczleri (Interfaces)<\/a>, ak\u0131ll\u0131 s\u00f6zle\u015fme d\u00fcnyas\u0131ndaki soyut s\u0131n\u0131flara benzer bir i\u015flev g\u00f6r\u00fcr. Bir aray\u00fcz, belirli bir ak\u0131ll\u0131 s\u00f6zle\u015fmenin hangi fonksiyonlara sahip olmas\u0131 gerekti\u011fini ve bu fonksiyonlar\u0131n hangi arg\u00fcmanlar\u0131 al\u0131p hangi de\u011ferleri d\u00f6nd\u00fcrmesi gerekti\u011fini tan\u0131mlar. Ancak, aray\u00fczler bu fonksiyonlar\u0131n nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 (implementasyonunu) i\u00e7ermez. Sadece &#8220;kontrat&#8221;\u0131 belirler. Yani, bir ak\u0131ll\u0131 s\u00f6zle\u015fmenin d\u0131\u015f d\u00fcnya ile nas\u0131l etkile\u015fime girece\u011finin bir tasla\u011f\u0131d\u0131r. Bu, \u00f6zellikle b\u00fcy\u00fck ve karma\u015f\u0131k sistemlerde, farkl\u0131 ak\u0131ll\u0131 s\u00f6zle\u015fmelerin birbirleriyle tutarl\u0131 bir \u015fekilde konu\u015fmas\u0131n\u0131 sa\u011flamak i\u00e7in hayati \u00f6nem ta\u015f\u0131r. Bir <code>IDepositBox<\/code> aray\u00fcz\u00fc tan\u0131mlad\u0131\u011f\u0131m\u0131zda, bu aray\u00fcz\u00fc uygulayan her <code>DepositBox<\/code> s\u00f6zle\u015fmesinin ayn\u0131 <code>deposit()<\/code>, <code>withdraw()<\/code> gibi fonksiyonlara sahip olaca\u011f\u0131n\u0131 garanti ederiz. Bu, esneklik sa\u011flarken ayn\u0131 zamanda tip g\u00fcvenli\u011fini art\u0131r\u0131r ve s\u00f6zle\u015fmeler aras\u0131 entegrasyonu kolayla\u015ft\u0131r\u0131r. K\u0131sacas\u0131, aray\u00fczler, ak\u0131ll\u0131 s\u00f6zle\u015fme mimarisinde bir API (Uygulama Programlama Aray\u00fcz\u00fc) g\u00f6revi g\u00f6rerek bile\u015fenler aras\u0131 temiz ve anla\u015f\u0131l\u0131r bir ileti\u015fim k\u00f6pr\u00fcs\u00fc kurar.<\/p>\n<p>\u015eimdi gelelim <a href=\"https:\/\/book.getfoundry.sh\/index.html\">Foundry<\/a>&#8216;ye. Foundry, Ethereum sanal makinesi (EVM) uyumlu ak\u0131ll\u0131 s\u00f6zle\u015fmeleri geli\u015ftirmek i\u00e7in tasarlanm\u0131\u015f modern, h\u0131zl\u0131 ve Rust tabanl\u0131 bir geli\u015ftirme ara\u00e7 setidir. Daha \u00f6nce Hardhat veya Truffle gibi JavaScript tabanl\u0131 ara\u00e7lar\u0131 kulland\u0131ysan\u0131z, Foundry&#8217;nin geli\u015ftirme deneyimini ne kadar farkl\u0131 ve verimli hale getirdi\u011fini hemen fark edeceksiniz. Foundry&#8217;nin en belirgin avantajlar\u0131ndan biri, testlerinizi ve scriptlerinizi do\u011frudan Solidity&#8217;de yazabilmenizdir. Bu, ba\u011flam de\u011fi\u015ftirme (context switching) ihtiyac\u0131n\u0131 ortadan kald\u0131r\u0131r ve geli\u015ftiricilerin daha h\u0131zl\u0131 prototipleme yapmas\u0131na olanak tan\u0131r. <code>forge<\/code> komut sat\u0131r\u0131 arac\u0131, derleme, test \u00e7al\u0131\u015ft\u0131rma, da\u011f\u0131t\u0131m ve hatta ak\u0131ll\u0131 s\u00f6zle\u015fmelerle etkile\u015fim kurma gibi bir\u00e7ok i\u015flevi tek bir yerden y\u00f6netmenizi sa\u011flar. \u00d6zellikle, geli\u015fmi\u015f fuzz test yetenekleri sayesinde, ak\u0131ll\u0131 s\u00f6zle\u015fmelerinizdeki olas\u0131 g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131 \u00e7ok daha etkin bir \u015fekilde tespit edebilirsiniz. Foundry&#8217;nin d\u00fc\u015f\u00fck seviyeli EVM etkile\u015fimi ve gaz optimizasyonuna verdi\u011fi \u00f6nem, geli\u015ftiricilerin daha verimli ve g\u00fcvenli s\u00f6zle\u015fmeler yazmas\u0131na yard\u0131mc\u0131 olur. Test odakl\u0131 geli\u015ftirme yakla\u015f\u0131m\u0131n\u0131 benimseyen ve h\u0131z\u0131, g\u00fcvenli\u011fi ve verimlili\u011fi \u00f6n planda tutan projeler i\u00e7in Foundry, kesinlikle tercih edilmesi gereken bir ara\u00e7 setidir. B\u00f6ylece, hem ak\u0131ll\u0131 s\u00f6zle\u015fme mimarisini tasarlarken hem de bu mimariyi test edip da\u011f\u0131t\u0131rken g\u00fc\u00e7l\u00fc bir omurgaya sahip oluruz.<\/p>\n<h2>\ud83c\udfd7\ufe0f Ak\u0131ll\u0131 Banka Mimarisi Nas\u0131l Tasarlan\u0131r? Mod\u00fcler Yakla\u015f\u0131m<\/h2>\n<p>Mod\u00fcler bir ak\u0131ll\u0131 banka tasarlarken, geleneksel bankac\u0131l\u0131k sistemlerindeki &#8220;m\u00fc\u015fteri hesab\u0131&#8221; veya &#8220;kasa&#8221; kavramlar\u0131n\u0131 blokzincir d\u00fcnyas\u0131na nas\u0131l uyarlayaca\u011f\u0131m\u0131z\u0131 d\u00fc\u015f\u00fcnmeliyiz. Amac\u0131m\u0131z, her kullan\u0131c\u0131n\u0131n veya belirli bir amaca hizmet eden &#8220;para kutular\u0131n\u0131&#8221; temsil eden ba\u011f\u0131ms\u0131z, ancak ana banka s\u00f6zle\u015fmesi taraf\u0131ndan y\u00f6netilen &#8216;Deposit Box&#8217; ak\u0131ll\u0131 s\u00f6zle\u015fmeleri olu\u015fturmakt\u0131r. Bu mimarinin kalbinde bir ana <code>SmartBank<\/code> s\u00f6zle\u015fmesi yer alacak. Bu <code>SmartBank<\/code> s\u00f6zle\u015fmesi, yeni <code>DepositBox<\/code> s\u00f6zle\u015fmelerini olu\u015fturma, bunlar\u0131n adreslerini kaydetme ve gerekti\u011finde bu kutularla genel bir aray\u00fcz \u00fczerinden etkile\u015fim kurma yetene\u011fine sahip olacak. Her bir <code>DepositBox<\/code> ise, belirli bir kullan\u0131c\u0131n\u0131n veya bir grup kullan\u0131c\u0131n\u0131n varl\u0131klar\u0131n\u0131 saklayacak ve yaln\u0131zca tan\u0131mlanm\u0131\u015f kurallar \u00e7er\u00e7evesinde (\u00f6rne\u011fin, yaln\u0131zca kutunun sahibi taraf\u0131ndan) para yat\u0131rma ve \u00e7ekme i\u015flemlerine izin verecektir. Bu yap\u0131, hem g\u00fcvenlik hem de esneklik a\u00e7\u0131s\u0131ndan \u00f6nemli avantajlar sunar. \u00d6rne\u011fin, bir <code>DepositBox<\/code> s\u00f6zle\u015fmesinde bir hata bulunsa bile, bu hata yaln\u0131zca o kutuyu etkiler ve t\u00fcm banka sistemini tehlikeye atmaz. Ayr\u0131ca, farkl\u0131 <code>DepositBox<\/code> t\u00fcrleri (\u00f6rne\u011fin, faiz kazand\u0131ran, kilitli mevduat, \u00e7oklu imzal\u0131) kolayca eklenebilir veya g\u00fcncellenebilir, \u00e7\u00fcnk\u00fc hepsi ayn\u0131 <code>IDepositBox<\/code> aray\u00fcz\u00fcn\u00fc uygulad\u0131\u011f\u0131 s\u00fcrece, ana <code>SmartBank<\/code> s\u00f6zle\u015fmesi bunlarla uyumlu bir \u015fekilde etkile\u015fim kurabilir.<\/p>\n<p>Bu mimariyi daha somut hale getirmek i\u00e7in, geleneksel bankac\u0131l\u0131kta bir vaka analizi yapal\u0131m: Bir bankan\u0131n m\u00fc\u015fterilerine sundu\u011fu farkl\u0131 hesap t\u00fcrleri (vadesiz hesap, vadeli hesap, birikim hesab\u0131) vard\u0131r. Her bir hesap t\u00fcr\u00fc farkl\u0131 kurallara (faiz oranlar\u0131, \u00e7ekim k\u0131s\u0131tlamalar\u0131 vb.) sahiptir, ancak hepsi &#8220;hesap&#8221; kavram\u0131n\u0131n genel \u00f6zelliklerini ta\u015f\u0131r (para yat\u0131rma, \u00e7ekme, bakiye sorgulama). Mod\u00fcler ak\u0131ll\u0131 bankam\u0131zda da durum benzerdir. <code>IDepositBox<\/code> aray\u00fcz\u00fc, t\u00fcm mevduat kutular\u0131n\u0131n sahip olmas\u0131 gereken temel i\u015flevleri tan\u0131mlar: para yat\u0131rma (<code>deposit<\/code>), para \u00e7ekme (<code>withdraw<\/code>), bakiye sorgulama (<code>getBalance<\/code>) ve sahibini \u00f6\u011frenme (<code>getOwner<\/code>). Her bir <code>DepositBox<\/code> ak\u0131ll\u0131 s\u00f6zle\u015fmesi ise bu aray\u00fcz\u00fc uygulayacak ve belirli bir mevduat kutusunun kendine \u00f6zg\u00fc kurallar\u0131n\u0131 ve mant\u0131\u011f\u0131n\u0131 i\u00e7erecektir. Ana <code>SmartBank<\/code> s\u00f6zle\u015fmesi, kullan\u0131c\u0131lar\u0131n bu kutulara eri\u015fimi i\u00e7in bir &#8220;giri\u015f noktas\u0131&#8221; g\u00f6revi g\u00f6recektir. Bir kullan\u0131c\u0131 yeni bir mevduat kutusu a\u00e7mak istedi\u011finde, <code>SmartBank<\/code> s\u00f6zle\u015fmesi taraf\u0131ndan yeni bir <code>DepositBox<\/code> s\u00f6zle\u015fmesi olu\u015fturulacak ve bu s\u00f6zle\u015fmenin adresi <code>SmartBank<\/code> i\u00e7inde kaydedilecektir. B\u00f6ylece, kullan\u0131c\u0131lar ana <code>SmartBank<\/code> s\u00f6zle\u015fmesi \u00fczerinden kendi \u00f6zel <code>DepositBox<\/code>lar\u0131na eri\u015febilir ve i\u015flemlerini ger\u00e7ekle\u015ftirebilir. Bu katmanl\u0131 yap\u0131, sistemin karma\u015f\u0131kl\u0131\u011f\u0131n\u0131 y\u00f6netilebilir par\u00e7alara ay\u0131r\u0131rken, ayn\u0131 zamanda y\u00fckseltilebilirlik ve s\u00fcrd\u00fcr\u00fclebilirlik i\u00e7in sa\u011flam bir temel olu\u015fturur. B\u00f6ylece, bir yandan \u015feffaf ve g\u00fcvenli bir yap\u0131 sunarken, di\u011fer yandan da gelecekteki de\u011fi\u015fikliklere ve yeni \u00f6zelliklere kolayca adapte olabilen bir sistem kurmu\u015f oluruz.<\/p>\n<h2>\ud83d\udcdd Ad\u0131m Ad\u0131m Kodlama: Mod\u00fcler DepositBox Aray\u00fcz\u00fc Nas\u0131l Olu\u015fturulur?<\/h2>\n<p>Mod\u00fcler ak\u0131ll\u0131 bankam\u0131z\u0131n ilk ve en temel yap\u0131 ta\u015f\u0131, <code>DepositBox<\/code> s\u00f6zle\u015fmelerimizin uygulayaca\u011f\u0131 aray\u00fczd\u00fcr. Solidity&#8217;deki aray\u00fczler, s\u00f6zle\u015fmelerin nas\u0131l etkile\u015fim kuraca\u011f\u0131n\u0131 tan\u0131mlayan bir s\u00f6zle\u015fme tasla\u011f\u0131 gibidir, ancak herhangi bir uygulama mant\u0131\u011f\u0131 i\u00e7ermezler. Bu, \u00f6zellikle farkl\u0131 t\u00fcrde mevduat kutular\u0131 olu\u015fturmak istedi\u011fimizde veya gelecekte yeni mevduat kutusu tipleri eklemek istedi\u011fimizde bize b\u00fcy\u00fck esneklik sa\u011flar. Her mevduat kutusu, <code>IDepositBox<\/code> aray\u00fcz\u00fcn\u00fc uygulad\u0131\u011f\u0131 s\u00fcrece, ana <code>SmartBank<\/code> s\u00f6zle\u015fmemiz veya di\u011fer d\u0131\u015f s\u00f6zle\u015fmeler, bu kutularla tutarl\u0131 bir \u015fekilde etkile\u015fime girebilir.<\/p>\n<p>A\u015fa\u011f\u0131da, <code>IDepositBox.sol<\/code> dosyam\u0131z i\u00e7in \u00f6rnek bir aray\u00fcz tan\u0131m\u0131 bulunmaktad\u0131r. Bu aray\u00fcz, her mevduat kutusunun sahip olmas\u0131 gereken temel i\u015flevleri (para yat\u0131rma, para \u00e7ekme, bakiye sorgulama, sahibi \u00f6\u011frenme) a\u00e7\u0131k\u00e7a belirtir:<\/p>\n<pre><code>\n\/\/ SPDX-License-Identifier: MIT\npragma solidity ^0.8.18;\n\n\/\/\/ @title IDepositBox\n\/\/\/ @notice Bu aray\u00fcz, t\u00fcm DepositBox ak\u0131ll\u0131 s\u00f6zle\u015fmeleri i\u00e7in standart bir etkile\u015fim aray\u00fcz\u00fc tan\u0131mlar.\n\/\/\/ @dev Yeni DepositBox t\u00fcrleri olu\u015fturulurken bu aray\u00fcz\u00fcn uygulanmas\u0131 zorunludur.\ninterface IDepositBox {\n    \/\/\/ @notice Mevduat kutusuna ETH yat\u0131rma i\u015flemi yapar.\n    \/\/\/ @dev Bu fonksiyon, mesajla birlikte g\u00f6nderilen ETH'yi kabul eder.\n    function deposit() external payable;\n\n    \/\/\/ @notice Mevduat kutusundan belirli bir miktarda ETH \u00e7ekme i\u015flemi yapar.\n    \/\/\/ @param amount \u00c7ekilecek ETH miktar\u0131 (wei cinsinden).\n    \/\/\/ @dev Sadece kutunun sahibi taraf\u0131ndan \u00e7a\u011fr\u0131labilir ve \u00e7ekilecek miktar bakiyeden az olmal\u0131d\u0131r.\n    function withdraw(uint256 amount) external;\n\n    \/\/\/ @notice Mevduat kutusunun mevcut bakiyesini d\u00f6nd\u00fcr\u00fcr.\n    \/\/\/ @return Mevduat kutusundaki toplam ETH miktar\u0131 (wei cinsinden).\n    function getBalance() external view returns (uint256);\n\n    \/\/\/ @notice Mevduat kutusunun sahibinin adresini d\u00f6nd\u00fcr\u00fcr.\n    \/\/\/ @return Mevduat kutusunun sahibinin adresi.\n    function getOwner() external view returns (address);\n\n    \/\/ Eventler (iste\u011fe ba\u011fl\u0131, ancak iyi bir uygulamad\u0131r)\n    event Deposited(address indexed user, uint256 amount);\n    event Withdrawn(address indexed user, uint256 amount);\n}\n    <\/pre>\n<p><\/code><\/p>\n<p>Yukar\u0131daki kod blo\u011funda g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi, <code>IDepositBox<\/code> aray\u00fcz\u00fc i\u00e7erisinde <code>deposit<\/code>, <code>withdraw<\/code>, <code>getBalance<\/code> ve <code>getOwner<\/code> olmak \u00fczere d\u00f6rt adet fonksiyon tan\u0131mlanm\u0131\u015ft\u0131r. Her bir fonksiyonun <code>external<\/code> veya <code>view<\/code> anahtar kelimeleriyle eri\u015filebilirlik ve durum de\u011fi\u015ftirme yetenekleri belirtilmi\u015ftir. <code>deposit()<\/code> fonksiyonu <code>payable<\/code> olarak i\u015faretlenmi\u015ftir, bu da o fonksiyona ETH g\u00f6nderilebilece\u011fi anlam\u0131na gelir. <code>withdraw()<\/code> fonksiyonu bir <code>amount<\/code> parametresi al\u0131r ve bu miktar\u0131n \u00e7ekilmesini sa\u011flar. <code>getBalance()<\/code> ve <code>getOwner()<\/code> fonksiyonlar\u0131 ise sadece bilgi okuma ama\u00e7l\u0131d\u0131r (<code>view<\/code>) ve ak\u0131ll\u0131 s\u00f6zle\u015fmenin durumunu de\u011fi\u015ftirmezler. Ayr\u0131ca, i\u015flem takibi i\u00e7in <code>Deposited<\/code> ve <code>Withdrawn<\/code> ad\u0131nda iki olay (event) tan\u0131mlanm\u0131\u015ft\u0131r. Bu olaylar, zincir d\u0131\u015f\u0131 uygulamalar\u0131n (DApps) veya blokzincir ka\u015fiflerinin (block explorers) s\u00f6zle\u015fmedeki de\u011fi\u015fiklikleri kolayca izlemesini sa\u011flar, bu da denetlenebilirlik ve \u015feffafl\u0131k a\u00e7\u0131s\u0131ndan \u00f6nemlidir. Aray\u00fczler, uygulama mant\u0131\u011f\u0131n\u0131 i\u00e7ermedikleri i\u00e7in, derlemeden sonra bytecode boyutlar\u0131 \u00e7ok k\u00fc\u00e7\u00fckt\u00fcr ve gaz maliyeti a\u00e7\u0131s\u0131ndan neredeyse s\u0131f\u0131r etki yarat\u0131rlar. Ancak, kodun okunabilirli\u011fini, bak\u0131m\u0131n\u0131 ve \u00f6l\u00e7eklenebilirli\u011fini inan\u0131lmaz derecede art\u0131r\u0131rlar. Bu sayede, farkl\u0131 geli\u015ftiriciler farkl\u0131 <code>DepositBox<\/code> uygulamalar\u0131 \u00fczerinde e\u015f zamanl\u0131 \u00e7al\u0131\u015fabilirken, ana <code>SmartBank<\/code> s\u00f6zle\u015fmesi sadece <code>IDepositBox<\/code> aray\u00fcz\u00fcne g\u00fcvenerek t\u00fcm bu farkl\u0131 kutularla sorunsuz bir \u015fekilde etkile\u015fim kurabilir. Bu, modern ak\u0131ll\u0131 s\u00f6zle\u015fme mimarisinin temel ta\u015flar\u0131ndan biridir ve g\u00fc\u00e7l\u00fc, mod\u00fcler bir sistem in\u015fa etmek i\u00e7in vazge\u00e7ilmezdir.<\/p>\n<div class=\"expert-tip\">Uzman \u0130pucu: Aray\u00fczler, \u00f6zellikle \u00fc\u00e7\u00fcnc\u00fc taraf s\u00f6zle\u015fmeleriyle etkile\u015fim kurarken veya farkl\u0131 s\u00f6zle\u015fme t\u00fcrleri aras\u0131nda standart bir API sa\u011flamak istedi\u011finizde kritik \u00f6neme sahiptir. Gaz maliyetleri a\u00e7\u0131s\u0131ndan do\u011frudan bir etkisi olmasa da, kodun okunabilirli\u011fini, test edilebilirli\u011fini ve uzun vadeli s\u00fcrd\u00fcr\u00fclebilirli\u011fini art\u0131rarak dolayl\u0131 olarak geli\u015ftirme maliyetlerini d\u00fc\u015f\u00fcr\u00fcr ve g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131 azaltmaya yard\u0131mc\u0131 olur. Ayr\u0131ca, <code>IDepositBox(address_of_box).functionCall()<\/code> gibi tip g\u00fcvenli \u00e7a\u011fr\u0131lar yapman\u0131z\u0131 sa\u011flar.<\/div>\n<h2>\ud83d\udd10 DepositBox Ak\u0131ll\u0131 S\u00f6zle\u015fmesi Nas\u0131l Olu\u015fturulur? G\u00fcvenlik Temelli Yakla\u015f\u0131m<\/h2>\n<p>\u015eimdi, <code>IDepositBox<\/code> aray\u00fcz\u00fcm\u00fcz\u00fc uygulayan somut bir <code>DepositBox<\/code> ak\u0131ll\u0131 s\u00f6zle\u015fmesi olu\u015ftural\u0131m. Bu s\u00f6zle\u015fme, ger\u00e7ek ETH mevduatlar\u0131n\u0131 saklayacak ve yaln\u0131zca sahibinin belirli kurallar dahilinde i\u015flem yapmas\u0131na izin verecektir. G\u00fcvenlik, bu t\u00fcr finansal s\u00f6zle\u015fmelerde her zaman en \u00fcst \u00f6nceliktir. Bu nedenle, olas\u0131 yeniden giri\u015f (reentrancy) sald\u0131r\u0131lar\u0131 ve uygun eri\u015fim kontrol\u00fc gibi konulara dikkat etmemiz gerekmektedir.<\/p>\n<pre><code>\n\/\/ SPDX-License-Identifier: MIT\npragma solidity ^0.8.18;\n\nimport \".\/IDepositBox.sol\"; \/\/ Olu\u015fturdu\u011fumuz aray\u00fcz\u00fc i\u00e7e aktar\u0131yoruz\n\n\/\/\/ @title DepositBox\n\/\/\/ @notice Kullan\u0131c\u0131lar\u0131n ETH yat\u0131r\u0131p \u00e7ekebilece\u011fi ki\u015fiselle\u015ftirilmi\u015f bir mevduat kutusu ak\u0131ll\u0131 s\u00f6zle\u015fmesi.\n\/\/\/ @dev IDepositBox aray\u00fcz\u00fcn\u00fc uygular ve temel g\u00fcvenlik kontrollerini i\u00e7erir.\ncontract DepositBox is IDepositBox {\n    address private immutable i_owner; \/\/ Kutunun sahibi, de\u011fi\u015ftirilemez\n    \n    \/\/ G\u00fcvenlik i\u00e7in yeniden giri\u015f kilidi\n    bool private locked;\n    modifier noReentrant() {\n        require(!locked, \"ReentrancyGuard: reentrant call\");\n        locked = true;\n        _;\n        locked = false;\n    }\n\n    \/\/\/ @notice Sadece kutunun sahibinin fonksiyonu \u00e7a\u011f\u0131rmas\u0131na izin veren bir d\u00fczenleyici (modifier).\n    modifier onlyOwner() {\n        require(msg.sender == i_owner, \"Not owner\");\n        _;\n    }\n\n    \/\/\/ @notice DepositBox s\u00f6zle\u015fmesini da\u011f\u0131tan adres olarak sahibini ayarlar.\n    constructor() {\n        i_owner = msg.sender;\n        locked = false; \/\/ Ba\u015flang\u0131\u00e7ta kilitli de\u011fil\n    }\n\n    \/\/\/ @inheritdoc IDepositBox\n    function deposit() external payable override noReentrant {\n        require(msg.value > 0, \"Deposit amount must be greater than zero\");\n        \/\/ ETH do\u011frudan s\u00f6zle\u015fmeye g\u00f6nderilir. Bakiyeyi izlemek i\u00e7in state variable'a gerek yok.\n        \/\/ address(this).balance do\u011frudan ETH bakiyesini d\u00f6nd\u00fcr\u00fcr.\n        emit Deposited(msg.sender, msg.value);\n    }\n\n    \/\/\/ @inheritdoc IDepositBox\n    function withdraw(uint256 amount) external override onlyOwner noReentrant {\n        require(amount > 0, \"Withdraw amount must be greater than zero\");\n        require(address(this).balance >= amount, \"Insufficient balance\");\n\n        \/\/ G\u00fcvenli ETH transferi i\u00e7in <code>call<\/code> kullan\u0131l\u0131yor ve hata kontrol\u00fc yap\u0131l\u0131yor.\n        (bool success, ) = payable(i_owner).call{value: amount}(\"\");\n        require(success, \"Failed to withdraw Ether\");\n\n        emit Withdrawn(msg.sender, amount);\n    }\n\n    \/\/\/ @inheritdoc IDepositBox\n    function getBalance() external view override returns (uint256) {\n        return address(this).balance;\n    }\n\n    \/\/\/ @inheritdoc IDepositBox\n    function getOwner() external view override returns (address) {\n        return i_owner;\n    }\n\n    \/\/ Geleneksel ETH g\u00f6nderimlerini kabul etmek i\u00e7in (harici fonksiyon \u00e7a\u011fr\u0131s\u0131 olmadan)\n    receive() external payable {\n        \/\/ Bu fonksiyona do\u011frudan ETH g\u00f6nderildi\u011finde hi\u00e7bir \u015fey yapmaz, ancak ETH'yi kabul eder.\n        \/\/ E\u011fer belirli bir mant\u0131k eklemek istenirse buraya eklenebilir.\n        \/\/ \u00d6rne\u011fin: emit DirectDeposit(msg.sender, msg.value);\n    }\n}\n    <\/pre>\n<p><\/code><\/p>\n<p>Yukar\u0131daki <code>DepositBox<\/code> s\u00f6zle\u015fmesi, <code>IDepositBox<\/code> aray\u00fcz\u00fcn\u00fc (<code>is IDepositBox<\/code>) uygulayarak t\u00fcm gerekli fonksiyonlara sahip oldu\u011funu belirtir. S\u00f6zle\u015fme, <code>i_owner<\/code> ad\u0131nda de\u011fi\u015ftirilemez (<code>immutable<\/code>) bir de\u011fi\u015fkene sahiptir ve bu, s\u00f6zle\u015fmeyi da\u011f\u0131tan adresi (yani <code>msg.sender<\/code>) kutunun sahibi olarak belirler. Bu <code>immutable<\/code> anahtar kelimesi, <code>i_owner<\/code>'\u0131n yaln\u0131zca yap\u0131c\u0131 (constructor) s\u0131ras\u0131nda ayarlanabilece\u011fini ve daha sonra de\u011fi\u015ftirilemeyece\u011fini garanti eder, bu da kritik bir g\u00fcvenlik \u00f6zelli\u011fidir.<\/p>\n<p><b>G\u00fcvenlik Odakl\u0131 \u00d6zellikler:<\/b><\/p>\n<ul>\n<li><strong><code>onlyOwner<\/code> Modifier:<\/strong> <code>withdraw<\/code> fonksiyonunu sadece <code>i_owner<\/code>'\u0131n \u00e7a\u011f\u0131rabilmesini sa\u011flar. Bu, yetkilendirilmemi\u015f \u00e7ekim i\u015flemlerini engeller.<\/li>\n<li><strong><code>noReentrant<\/code> Modifier:<\/strong> Yeniden giri\u015f sald\u0131r\u0131lar\u0131na kar\u015f\u0131 koruma sa\u011flar. <code>locked<\/code> de\u011fi\u015fkeni sayesinde, bir fonksiyon \u00e7a\u011fr\u0131ld\u0131\u011f\u0131nda kilitlenir ve ayn\u0131 s\u00f6zle\u015fmeye yap\u0131lan ba\u015fka bir \u00e7a\u011fr\u0131ya izin vermez, ta ki ilk \u00e7a\u011fr\u0131 tamamlanana kadar. Bu, \u00f6zellikle fon transferi yapan fonksiyonlar i\u00e7in hayati \u00f6neme sahiptir.<\/li>\n<li><strong>G\u00fcvenli ETH Transferi:<\/strong> <code>withdraw<\/code> fonksiyonunda <code>payable(i_owner).call{value: amount}(\"\")<\/code> deseni kullan\u0131lm\u0131\u015ft\u0131r. Bu, fonlar\u0131 do\u011frudan <code>transfer()<\/code> veya <code>send()<\/code> ile g\u00f6ndermek yerine, d\u00fc\u015f\u00fck seviyeli <code>call<\/code> kullanarak olas\u0131 gaz limit sorunlar\u0131ndan ka\u00e7\u0131n\u0131rken, ayn\u0131 zamanda geri d\u00f6n\u00fc\u015f de\u011ferini kontrol ederek transferin ba\u015far\u0131l\u0131 olup olmad\u0131\u011f\u0131n\u0131 do\u011frulamam\u0131z\u0131 sa\u011flar. Bu, Solidity'de \u00f6nerilen en g\u00fcvenli fon transfer y\u00f6ntemlerinden biridir.<\/li>\n<li><strong><code>receive()<\/code> Fonksiyonu:<\/strong> Bu \u00f6zel fonksiyon, bir kullan\u0131c\u0131 <code>DepositBox<\/code> s\u00f6zle\u015fme adresine do\u011frudan ETH g\u00f6nderdi\u011finde (bir fonksiyonu \u00e7a\u011f\u0131rmadan) \u00e7al\u0131\u015f\u0131r. Bu, s\u00f6zle\u015fmenin harici fonksiyon \u00e7a\u011fr\u0131s\u0131 olmadan da ETH kabul edebilmesini sa\u011flar.<\/li>\n<\/ul>\n<p>Bu <code>DepositBox<\/code> s\u00f6zle\u015fmesi, hem mod\u00fcler mimarinin bir par\u00e7as\u0131 olarak \u00e7al\u0131\u015fabilecek \u015fekilde tasarlanm\u0131\u015f hem de finansal varl\u0131klar\u0131 y\u00f6netti\u011fi i\u00e7in temel g\u00fcvenlik prensiplerine uygun olarak geli\u015ftirilmi\u015ftir. <code>immutable<\/code> de\u011fi\u015fken kullan\u0131m\u0131, <code>onlyOwner<\/code> ve <code>noReentrant<\/code> modifiyerleri ile <code>call<\/code> tabanl\u0131 g\u00fcvenli ETH transferi, bu s\u00f6zle\u015fmeyi sa\u011flam ve g\u00fcvenilir k\u0131lar. B\u00f6ylece, kullan\u0131c\u0131lar fonlar\u0131n\u0131 g\u00fcvende hissedebilir ve ak\u0131ll\u0131 banka sistemimiz sa\u011flam bir temel \u00fczerinde y\u00fckselir.<\/p>\n<h2>\ud83c\udfdb\ufe0f Ana Ak\u0131ll\u0131 Banka S\u00f6zle\u015fmesi: Y\u00f6netim ve Etkile\u015fim Nas\u0131l Sa\u011flan\u0131r?<\/h2>\n<p>DepositBox s\u00f6zle\u015fmelerimizi olu\u015fturduktan sonra, s\u0131ra t\u00fcm bu mod\u00fcler par\u00e7alar\u0131 bir araya getirecek ve y\u00f6netilebilir bir b\u00fct\u00fcn haline getirecek olan ana <code>SmartBank<\/code> s\u00f6zle\u015fmesine geldi. Bu s\u00f6zle\u015fme, kullan\u0131c\u0131lar\u0131n yeni DepositBox'lar olu\u015fturmas\u0131n\u0131 sa\u011flayacak, mevcut kutular\u0131na eri\u015fimini kolayla\u015ft\u0131racak ve genel bankac\u0131l\u0131k operasyonlar\u0131n\u0131 y\u00f6netecek bir merkez g\u00f6revi g\u00f6recektir. Ana s\u00f6zle\u015fmemiz, <code>IDepositBox<\/code> aray\u00fcz\u00fc sayesinde farkl\u0131 t\u00fcrdeki DepositBox implementasyonlar\u0131yla sorunsuz bir \u015fekilde etkile\u015fim kurabilecektir. Bu, mod\u00fcler mimarinin g\u00fcc\u00fcn\u00fc ve esnekli\u011fini g\u00f6steren kilit bir noktad\u0131r.<\/p>\n<pre><code>\n\/\/ SPDX-License-Identifier: MIT\npragma solidity ^0.8.18;\n\nimport \".\/IDepositBox.sol\"; \/\/ IDepositBox aray\u00fcz\u00fcm\u00fcz\u00fc import ediyoruz\nimport \".\/DepositBox.sol\"; \/\/ DepositBox implementasyonumuzu import ediyoruz\n\n\/\/\/ @title SmartBank\n\/\/\/ @notice Kullan\u0131c\u0131lar i\u00e7in mod\u00fcler DepositBox'lar\u0131 olu\u015fturan ve y\u00f6neten ana ak\u0131ll\u0131 banka s\u00f6zle\u015fmesi.\n\/\/\/ @dev Yeni DepositBox'lar olu\u015fturulur ve adresleri e\u015fleme (mapping) ile saklan\u0131r.\ncontract SmartBank {\n    address public owner; \/\/ SmartBank'\u0131n y\u00f6neticisi\n    mapping(address => address[]) public userDepositBoxes; \/\/ Kullan\u0131c\u0131 adresine g\u00f6re DepositBox adreslerini saklar\n    mapping(address => address) public depositBoxToOwner; \/\/ DepositBox adresine g\u00f6re sahibini saklar\n\n    event DepositBoxCreated(address indexed user, address indexed depositBoxAddress);\n    event FundsDeposited(address indexed depositBoxAddress, address indexed user, uint256 amount);\n    event FundsWithdrawn(address indexed depositBoxAddress, address indexed user, uint256 amount);\n\n    \/\/\/ @notice SmartBank s\u00f6zle\u015fmesini da\u011f\u0131tan adres olarak y\u00f6neticiyi ayarlar.\n    constructor() {\n        owner = msg.sender;\n    }\n\n    \/\/\/ @notice Yeni bir DepositBox ak\u0131ll\u0131 s\u00f6zle\u015fmesi olu\u015fturur ve mevcut kullan\u0131c\u0131ya atar.\n    \/\/\/ @dev msg.sender otomatik olarak yeni kutunun sahibi olur.\n    \/\/\/ @return Yeni olu\u015fturulan DepositBox'\u0131n adresi.\n    function createDepositBox() external returns (address) {\n        DepositBox newBox = new DepositBox(); \/\/ Yeni DepositBox \u00f6rne\u011fini da\u011f\u0131t\u0131yoruz\n        userDepositBoxes[msg.sender].push(address(newBox)); \/\/ Kullan\u0131c\u0131n\u0131n kutular\u0131na ekliyoruz\n        depositBoxToOwner[address(newBox)] = msg.sender; \/\/ Kutunun sahibini kaydediyoruz\n        emit DepositBoxCreated(msg.sender, address(newBox));\n        return address(newBox);\n    }\n\n    \/\/\/ @notice Belirli bir kullan\u0131c\u0131n\u0131n t\u00fcm DepositBox adreslerini d\u00f6nd\u00fcr\u00fcr.\n    \/\/\/ @param user DepositBox'lar\u0131n sahibi olan kullan\u0131c\u0131n\u0131n adresi.\n    \/\/\/ @return Kullan\u0131c\u0131n\u0131n sahip oldu\u011fu t\u00fcm DepositBox adreslerinin bir dizisi.\n    function getDepositBoxesForUser(address user) external view returns (address[] memory) {\n        return userDepositBoxes[user];\n    }\n\n    \/\/\/ @notice Belirli bir DepositBox'\u0131n sahibini d\u00f6nd\u00fcr\u00fcr.\n    \/\/\/ @param depositBoxAddress Sahibi sorgulanacak DepositBox'\u0131n adresi.\n    \/\/\/ @return DepositBox'\u0131n sahibinin adresi.\n    function getDepositBoxOwner(address depositBoxAddress) external view returns (address) {\n        return depositBoxToOwner[depositBoxAddress];\n    }\n\n    \/\/\/ @notice Bir kullan\u0131c\u0131n\u0131n kendi DepositBox'lar\u0131ndan birine ETH yat\u0131rmas\u0131n\u0131 sa\u011flar.\n    \/\/\/ @param depositBoxAddress Fon yat\u0131r\u0131lacak DepositBox'\u0131n adresi.\n    \/\/\/ @dev Yaln\u0131zca kutunun sahibi \u00e7a\u011f\u0131rabilir.\n    function depositIntoBox(address depositBoxAddress) external payable {\n        require(depositBoxToOwner[depositBoxAddress] == msg.sender, \"Not your deposit box\");\n        require(msg.value > 0, \"Deposit amount must be greater than zero\");\n\n        IDepositBox(depositBoxAddress).deposit{value: msg.value}(); \/\/ Aray\u00fcz \u00fczerinden \u00e7a\u011fr\u0131\n        emit FundsDeposited(depositBoxAddress, msg.sender, msg.value);\n    }\n\n    \/\/\/ @notice Bir kullan\u0131c\u0131n\u0131n kendi DepositBox'lar\u0131ndan birinden ETH \u00e7ekmesini sa\u011flar.\n    \/\/\/ @param depositBoxAddress Fon \u00e7ekilecek DepositBox'\u0131n adresi.\n    \/\/\/ @param amount \u00c7ekilecek ETH miktar\u0131 (wei cinsinden).\n    \/\/\/ @dev Yaln\u0131zca kutunun sahibi \u00e7a\u011f\u0131rabilir.\n    function withdrawFromBox(address depositBoxAddress, uint256 amount) external {\n        require(depositBoxToOwner[depositBoxAddress] == msg.sender, \"Not your deposit box\");\n        require(amount > 0, \"Withdraw amount must be greater than zero\");\n\n        IDepositBox(depositBoxAddress).withdraw(amount); \/\/ Aray\u00fcz \u00fczerinden \u00e7a\u011fr\u0131\n        emit FundsWithdrawn(depositBoxAddress, msg.sender, amount);\n    }\n\n    \/\/\/ @notice Belirli bir DepositBox'\u0131n bakiyesini d\u00f6nd\u00fcr\u00fcr.\n    \/\/\/ @param depositBoxAddress Bakiyesi sorgulanacak DepositBox'\u0131n adresi.\n    \/\/\/ @return DepositBox'\u0131n mevcut bakiyesi (wei cinsinden).\n    function getDepositBoxBalance(address depositBoxAddress) external view returns (uint256) {\n        require(depositBoxToOwner[depositBoxAddress] == msg.sender, \"Not your deposit box\");\n        return IDepositBox(depositBoxAddress).getBalance(); \/\/ Aray\u00fcz \u00fczerinden \u00e7a\u011fr\u0131\n    }\n}\n    <\/pre>\n<p><\/code><\/p>\n<p>Yukar\u0131daki <code>SmartBank<\/code> s\u00f6zle\u015fmesi, <code>IDepositBox<\/code> aray\u00fcz\u00fcn\u00fc ve <code>DepositBox<\/code> implementasyonunu i\u00e7e aktar\u0131r. \u0130\u015fte ana fonksiyonlar\u0131 ve i\u015flevleri:<\/p>\n<ul>\n<li><strong><code>owner<\/code>:<\/strong> <code>SmartBank<\/code> s\u00f6zle\u015fmesini da\u011f\u0131tan adresin y\u00f6neticisi olur. Geli\u015fmi\u015f versiyonlarda bu rol i\u00e7in daha sofistike eri\u015fim kontrol\u00fc (\u00f6rne\u011fin, \u00e7oklu imza c\u00fczdan\u0131 veya DAO) kullan\u0131labilir.<\/li>\n<li><strong><code>userDepositBoxes<\/code> (mapping):<\/strong> Her kullan\u0131c\u0131n\u0131n (adresi) sahip oldu\u011fu t\u00fcm <code>DepositBox<\/code> s\u00f6zle\u015fmelerinin adreslerini tutan bir e\u015flemedir. Bir kullan\u0131c\u0131 birden fazla mevduat kutusuna sahip olabilir.<\/li>\n<li><strong><code>depositBoxToOwner<\/code> (mapping):<\/strong> Belirli bir <code>DepositBox<\/code> adresinin hangi kullan\u0131c\u0131ya ait oldu\u011funu tutan bir e\u015flemedir. Bu, <code>depositIntoBox<\/code> ve <code>withdrawFromBox<\/code> gibi fonksiyonlarda yetkilendirme kontrol\u00fc i\u00e7in kullan\u0131l\u0131r.<\/li>\n<li><strong><code>createDepositBox()<\/code>:<\/strong> Bir kullan\u0131c\u0131 bu fonksiyonu \u00e7a\u011f\u0131rd\u0131\u011f\u0131nda, yeni bir <code>DepositBox<\/code> s\u00f6zle\u015fmesi da\u011f\u0131t\u0131l\u0131r (<code>new DepositBox()<\/code>). Yeni kutunun adresi, <code>msg.sender<\/code>'\u0131n <code>userDepositBoxes<\/code> listesine eklenir ve <code>depositBoxToOwner<\/code> e\u015flemesine kaydedilir. Bu, ki\u015fiselle\u015ftirilmi\u015f ve mod\u00fcler bir hesap yap\u0131s\u0131 olu\u015fturman\u0131n temelini olu\u015fturur.<\/li>\n<li><strong><code>depositIntoBox()<\/code> ve <code>withdrawFromBox()<\/code>:<\/strong> Bu fonksiyonlar, kullan\u0131c\u0131lar\u0131n belirli bir <code>DepositBox<\/code>'a ETH yat\u0131rmas\u0131n\u0131 veya \u00e7ekmesini sa\u011flar. \u00d6nemli olan nokta, <code>IDepositBox(depositBoxAddress).deposit{value: msg.value}()<\/code> gibi \u00e7a\u011fr\u0131larla, <code>SmartBank<\/code>'\u0131n <code>DepositBox<\/code> s\u00f6zle\u015fmeleriyle <code>IDepositBox<\/code> aray\u00fcz\u00fc \u00fczerinden etkile\u015fim kurmas\u0131d\u0131r. Bu, <code>SmartBank<\/code>'\u0131n yaln\u0131zca <code>DepositBox<\/code>'\u0131n aray\u00fcz\u00fcn\u00fc bilmesini ve onun dahili implementasyon detaylar\u0131yla ilgilenmemesini sa\u011flar, bu da ger\u00e7ek mod\u00fclerliktir.<\/li>\n<li><strong>Eri\u015fim Kontrol\u00fc:<\/strong> <code>depositIntoBox<\/code> ve <code>withdrawFromBox<\/code> fonksiyonlar\u0131, kullan\u0131c\u0131n\u0131n i\u015flem yapmak istedi\u011fi <code>DepositBox<\/code>'\u0131n ger\u00e7ekten kendisine ait olup olmad\u0131\u011f\u0131n\u0131 <code>depositBoxToOwner<\/code> e\u015flemesini kullanarak kontrol eder (<code>require(depositBoxToOwner[depositBoxAddress] == msg.sender, \"Not your deposit box\")<\/code>). Bu kritik g\u00fcvenlik kontrol\u00fc, bir kullan\u0131c\u0131n\u0131n ba\u015fka bir kullan\u0131c\u0131n\u0131n mevduat kutusuna yetkisiz eri\u015fimini engeller.<\/li>\n<\/ul>\n<p>Bu <code>SmartBank<\/code> s\u00f6zle\u015fmesi, merkezi bir y\u00f6netim noktas\u0131 olarak g\u00f6rev yaparken, ger\u00e7ek fon y\u00f6netimi i\u015flevlerini ayr\u0131 <code>DepositBox<\/code> s\u00f6zle\u015fmelerine devrederek sistemin mod\u00fclerli\u011fini ve g\u00fcvenli\u011fini art\u0131r\u0131r. Bu yakla\u015f\u0131m, karma\u015f\u0131k finansal protokollerin geli\u015ftirilmesinde yayg\u0131n olarak kullan\u0131lan bir desendir ve gelecekteki de\u011fi\u015fikliklere daha kolay adapte olabilen bir mimari sunar.<\/p>\n<div class=\"expert-tip\">Uzman \u0130pucu: Bu mimariyi daha da ileri ta\u015f\u0131mak i\u00e7in proxy desenleri (\u00f6rne\u011fin, UUPS veya Transparent Proxy) entegre edilebilir. Bu sayede, hem <code>SmartBank<\/code> hem de <code>DepositBox<\/code> s\u00f6zle\u015fmeleri y\u00fckseltilebilir hale gelir. Bu, \u00f6zellikle uzun \u00f6m\u00fcrl\u00fc ve s\u00fcrekli geli\u015fen DApp'ler i\u00e7in vazge\u00e7ilmez bir stratejidir, \u00e7\u00fcnk\u00fc ak\u0131ll\u0131 s\u00f6zle\u015fmeler da\u011f\u0131t\u0131ld\u0131ktan sonra varsay\u0131lan olarak de\u011fi\u015ftirilemezler. Proxy'ler, s\u00f6zle\u015fmelerin mant\u0131\u011f\u0131n\u0131n (implementation) g\u00fcncellenmesine olanak tan\u0131rken, kullan\u0131c\u0131lar\u0131n bakiyelerinin ve etkile\u015fim ge\u00e7mi\u015flerinin de\u011fi\u015fmeden kalmas\u0131n\u0131 sa\u011flar.<\/div>\n<h2>\ud83e\uddea Foundry ile Ak\u0131ll\u0131 Banka Test ve Geli\u015ftirme Nas\u0131l Yap\u0131l\u0131r?<\/h2>\n<p>Ak\u0131ll\u0131 s\u00f6zle\u015fmelerde g\u00fcvenlik ve do\u011fruluk hayati \u00f6neme sahip oldu\u011fundan, sa\u011flam bir test s\u00fcreci olmazsa olmazd\u0131r. Foundry, h\u0131zl\u0131 derleme, test \u00e7al\u0131\u015ft\u0131rma ve geli\u015fmi\u015f hata ay\u0131klama yetenekleri sayesinde bu s\u00fcreci \u00f6nemli \u00f6l\u00e7\u00fcde kolayla\u015ft\u0131r\u0131r. Foundry ile testlerimizi do\u011frudan Solidity dilinde yazabilmemiz, geli\u015ftirme deneyimini bir \u00fcst seviyeye ta\u015f\u0131r. \u015eimdi, bu mod\u00fcler ak\u0131ll\u0131 banka sistemimizi Foundry kullanarak nas\u0131l test edece\u011fimize bir g\u00f6z atal\u0131m.<\/p>\n<p>\u0130lk ad\u0131m olarak, yeni bir Foundry projesi ba\u015flatmam\u0131z gerekir:<\/p>\n<pre><code>\nforge init smart-bank-project\ncd smart-bank-project\n    <\/pre>\n<p><\/code><\/p>\n<p>Bu komutlar bize temel bir proje yap\u0131s\u0131 sa\u011flayacakt\u0131r: <code>src\/<\/code> (s\u00f6zle\u015fmelerimiz i\u00e7in), <code>script\/<\/code> (da\u011f\u0131t\u0131m betikleri i\u00e7in) ve <code>test\/<\/code> (testlerimiz i\u00e7in). S\u00f6zle\u015fmelerimizi <code>src\/<\/code> klas\u00f6r\u00fcne yerle\u015ftirdikten sonra, <code>test\/<\/code> klas\u00f6r\u00fcnde <code>SmartBank.t.sol<\/code> ad\u0131nda bir test dosyas\u0131 olu\u015fturaca\u011f\u0131z.<\/p>\n<pre><code>\n\/\/ SPDX-License-Identifier: MIT\npragma solidity ^0.8.18;\n\nimport \"forge-std\/Test.sol\";\nimport \"..\/src\/SmartBank.sol\";\nimport \"..\/src\/IDepositBox.sol\";\n\n\/\/\/ @title SmartBankTest\n\/\/\/ @notice SmartBank ve DepositBox ak\u0131ll\u0131 s\u00f6zle\u015fmelerini test eden bir Foundry test s\u00f6zle\u015fmesi.\ncontract SmartBankTest is Test {\n    SmartBank public smartBank;\n    address public ALICE = makeAddr(\"alice\");\n    address public BOB = makeAddr(\"bob\");\n\n    \/\/\/ @notice Her test \u00e7al\u0131\u015ft\u0131r\u0131lmadan \u00f6nce \u00e7a\u011fr\u0131l\u0131r. Test ortam\u0131n\u0131 haz\u0131rlar.\n    function setUp() public {\n        smartBank = new SmartBank();\n    }\n\n    \/\/\/ @notice Yeni bir DepositBox olu\u015fturma i\u015flevini test eder.\n    function testCreateDepositBox() public {\n        vm.prank(ALICE); \/\/ Alice'in i\u015flemleri yapmas\u0131n\u0131 sa\u011fl\u0131yoruz\n        address aliceBox = smartBank.createDepositBox();\n\n        assertNotEq(aliceBox, address(0), \"Deposit box address should not be zero\");\n        assertEq(smartBank.getDepositBoxesForUser(ALICE)[0], aliceBox, \"Alice's box should be registered\");\n        assertEq(smartBank.getDepositBoxOwner(aliceBox), ALICE, \"Alice should be the owner of the box\");\n\n        IDepositBox box = IDepositBox(aliceBox);\n        assertEq(box.getOwner(), ALICE, \"IDepositBox owner should match Alice\");\n    }\n\n    \/\/\/ @notice DepositBox'a para yat\u0131rma i\u015flevini test eder.\n    function testDepositIntoBox() public {\n        vm.prank(ALICE);\n        address aliceBox = smartBank.createDepositBox();\n\n        uint256 depositAmount = 1 ether;\n        vm.deal(ALICE, depositAmount); \/\/ Alice'e test ETH'si y\u00fckl\u00fcyoruz\n\n        vm.prank(ALICE);\n        smartBank.depositIntoBox{value: depositAmount}(aliceBox);\n\n        IDepositBox box = IDepositBox(aliceBox);\n        assertEq(box.getBalance(), depositAmount, \"Deposit box balance should match deposit amount\");\n        assertEq(address(aliceBox).balance, depositAmount, \"Actual box balance should match deposit amount\");\n    }\n\n    \/\/\/ @notice DepositBox'tan para \u00e7ekme i\u015flevini test eder.\n    function testWithdrawFromBox() public {\n        vm.prank(ALICE);\n        address aliceBox = smartBank.createDepositBox();\n\n        uint256 depositAmount = 2 ether;\n        vm.deal(ALICE, depositAmount);\n\n        vm.prank(ALICE);\n        smartBank.depositIntoBox{value: depositAmount}(aliceBox);\n\n        uint256 withdrawAmount = 1 ether;\n        vm.prank(ALICE);\n        smartBank.withdrawFromBox(aliceBox, withdrawAmount);\n\n        IDepositBox box = IDepositBox(aliceBox);\n        assertEq(box.getBalance(), depositAmount - withdrawAmount, \"Remaining balance should be correct\");\n        assertEq(address(aliceBox).balance, depositAmount - withdrawAmount, \"Actual box balance should be correct\");\n    }\n\n    \/\/\/ @notice Yetkisiz bir kullan\u0131c\u0131n\u0131n (Bob) Alice'in DepositBox'\u0131ndan \u00e7ekim yapmas\u0131n\u0131 engellemeyi test eder.\n    function testUnauthorizedWithdrawFails() public {\n        vm.prank(ALICE);\n        address aliceBox = smartBank.createDepositBox();\n\n        uint256 depositAmount = 1 ether;\n        vm.deal(ALICE, depositAmount);\n\n        vm.prank(ALICE);\n        smartBank.depositIntoBox{value: depositAmount}(aliceBox);\n\n        vm.prank(BOB); \/\/ Bob olarak i\u015flem yapmaya \u00e7al\u0131\u015f\u0131yoruz\n        vm.expectRevert(\"Not your deposit box\"); \/\/ Bu hatay\u0131 bekliyoruz\n        smartBank.withdrawFromBox(aliceBox, 0.5 ether);\n    }\n\n    \/\/\/ @notice ReentrancyGuard'\u0131n DepositBox'taki i\u015flevselli\u011fini test eder.\n    \/\/\/ @dev Bu test, asl\u0131nda bir reentrancy sald\u0131r\u0131s\u0131n\u0131 taklit etmez, sadece modifiyerin varl\u0131\u011f\u0131n\u0131 ve i\u015flevini do\u011frular.\n    \/\/\/ @dev Ger\u00e7ek bir reentrancy testi i\u00e7in ayr\u0131 bir sald\u0131r\u0131 s\u00f6zle\u015fmesi yazmak gerekir.\n    function testReentrancyGuardInDepositBox() public {\n        vm.prank(ALICE);\n        address aliceBox = smartBank.createDepositBox();\n\n        uint256 depositAmount = 1 ether;\n        vm.deal(ALICE, depositAmount);\n\n        \/\/ \u0130lk yat\u0131rma i\u015flemi ba\u015far\u0131l\u0131 olmal\u0131\n        vm.prank(ALICE);\n        smartBank.depositIntoBox{value: depositAmount}(aliceBox);\n\n        \/\/ \u015eimdi ayn\u0131 fonksiyona ard\u0131\u015f\u0131k \u00e7a\u011fr\u0131 yapmaya \u00e7al\u0131\u015fal\u0131m (ger\u00e7ek bir reentrancy olmasa da)\n        \/\/ E\u011fer reentrancy korumas\u0131 olmasayd\u0131 bu hata vermezdi (sadece tek bir tx contextinde)\n        \/\/ vm.startPrank(ALICE);\n        \/\/ IDepositBox(aliceBox).deposit{value: 1 wei}(); \/\/ Bu tek bir i\u015flemde ba\u015far\u0131s\u0131z olur\n        \/\/ vm.stopPrank();\n\n        \/\/ Daha somut bir reentrancy testi i\u00e7in, sald\u0131rgan bir s\u00f6zle\u015fme yazmak ve bu kutuya sald\u0131rmak gerekir.\n        \/\/ Ancak burada, DepositBox'\u0131n kendi i\u00e7indeki noReentrant modifier'\u0131n\u0131n \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131,\n        \/\/ \u00f6rne\u011fin withdraw \u00e7a\u011fr\u0131l\u0131rken i\u00e7erde tekrar bir i\u015flem yap\u0131l\u0131rsa bunu engelleyece\u011fini varsay\u0131yoruz.\n        \/\/ Basit bir assert ile DepositBox'\u0131n sahibi do\u011fru ayarland\u0131 m\u0131 kontrol edelim\n        IDepositBox box = IDepositBox(aliceBox);\n        assertEq(box.getOwner(), ALICE, \"DepositBox owner should be Alice\");\n    }\n}\n    <\/pre>\n<p><\/code><\/p>\n<p>Yukar\u0131daki test s\u00f6zle\u015fmesinde (<code>SmartBankTest<\/code>):<\/p>\n<ul>\n<li><strong><code>import \"forge-std\/Test.sol\";<\/code>:<\/strong> Foundry'nin test k\u00fct\u00fcphanesini i\u00e7e aktar\u0131yoruz. Bu, testlerimizde kullanabilece\u011fimiz bir dizi faydal\u0131 fonksiyon ve iddia (assertion) mekanizmas\u0131 sa\u011flar.<\/li>\n<li><strong><code>setUp()<\/code>:<\/strong> Her test fonksiyonundan \u00f6nce otomatik olarak \u00e7al\u0131\u015ft\u0131r\u0131l\u0131r. Bu fonksiyonda, <code>SmartBank<\/code> s\u00f6zle\u015fmemizi da\u011f\u0131tarak test ortam\u0131m\u0131z\u0131 haz\u0131rlar\u0131z.<\/li>\n<li><strong><code>makeAddr(\"alice\")<\/code> ve <code>makeAddr(\"bob\")<\/code>:<\/strong> Foundry'nin <code>Test.sol<\/code> k\u00fct\u00fcphanesinden gelen bu fonksiyonlar, kolayca test adresleri olu\u015fturmam\u0131z\u0131 sa\u011flar.<\/li>\n<li><strong><code>vm.prank(ALICE)<\/code>:<\/strong> Foundry'nin sanal makine (VM) hilelerini (<code>vm.*<\/code>) kullanarak, sonraki i\u015flem \u00e7a\u011fr\u0131s\u0131n\u0131n <code>ALICE<\/code> adresi taraf\u0131ndan yap\u0131lm\u0131\u015f gibi g\u00f6r\u00fcnmesini sa\u011flar\u0131z. Bu, farkl\u0131 kullan\u0131c\u0131 senaryolar\u0131n\u0131 test etmek i\u00e7in kritik bir \u00f6zelliktir.<\/li>\n<li><strong><code>vm.deal(ALICE, amount)<\/code>:<\/strong> Bir adrese belirli miktarda ETH y\u00fcklememizi sa\u011flar. Test senaryolar\u0131nda ETH'ye ihtiya\u00e7 duydu\u011fumuzda bunu kullan\u0131r\u0131z.<\/li>\n<li><strong><code>assertEq()<\/code>, <code>assertNotEq()<\/code>:<\/strong> Beklenen de\u011ferlerle ger\u00e7ek de\u011ferleri kar\u015f\u0131la\u015ft\u0131rmak i\u00e7in kullan\u0131lan iddia fonksiyonlar\u0131d\u0131r. Bir iddia ba\u015far\u0131s\u0131z olursa, test de ba\u015far\u0131s\u0131z olur.<\/li>\n<li><strong><code>vm.expectRevert(\"Not your deposit box\")<\/code>:<\/strong> Bu, belirli bir i\u015flemde beklenen bir hatan\u0131n (revert mesaj\u0131) meydana gelip gelmedi\u011fini kontrol etmek i\u00e7in kullan\u0131l\u0131r. \u00d6rne\u011fin, yetkisiz bir \u00e7ekim giri\u015fiminde beklenen hata mesaj\u0131n\u0131n do\u011fru olup olmad\u0131\u011f\u0131n\u0131 do\u011frular\u0131z.<\/li>\n<\/ul>\n<p>Bu testler, <code>SmartBank<\/code>'\u0131n yeni DepositBox'lar\u0131 do\u011fru \u015fekilde olu\u015fturdu\u011funu, fonlar\u0131 do\u011fru bir \u015fekilde yat\u0131r\u0131p \u00e7ekti\u011fini ve yetkisiz eri\u015fimi engelledi\u011fini do\u011frular. Foundry'nin sundu\u011fu bu g\u00fc\u00e7l\u00fc test yetenekleri, ak\u0131ll\u0131 s\u00f6zle\u015fme geli\u015ftiricilerine b\u00fcy\u00fck bir g\u00fcven sa\u011flar ve hatalar\u0131 erkenden tespit etmelerine yard\u0131mc\u0131 olur. Testleri \u00e7al\u0131\u015ft\u0131rmak i\u00e7in tek yapman\u0131z gereken komut sat\u0131r\u0131nda <code>forge test<\/code> yazmakt\u0131r. Foundry ayr\u0131ca <code>forge test --gas-report<\/code> ile gaz kullan\u0131m raporlar\u0131, <code>forge coverage<\/code> ile kod kapsam\u0131 raporlar\u0131 ve <code>forge fuzz<\/code> ile rastgele veri giri\u015fleriyle s\u00f6zle\u015fmelerinizi test etme gibi geli\u015fmi\u015f \u00f6zellikler de sunar. Bu \u00f6zellikler, \u00f6zellikle karma\u015f\u0131k ve y\u00fcksek de\u011ferli protokollerde s\u00f6zle\u015fme g\u00fcvenli\u011fini art\u0131rmak i\u00e7in hayati \u00f6neme sahiptir. Foundry'nin h\u0131zl\u0131 geri bildirim d\u00f6ng\u00fcs\u00fc ve yerel Solidity test yetenekleri sayesinde, test odakl\u0131 geli\u015ftirme (TDD) yakla\u015f\u0131m\u0131n\u0131 benimsemek \u00e7ok daha kolay ve verimli hale gelir, bu da daha sa\u011flam ve g\u00fcvenilir ak\u0131ll\u0131 s\u00f6zle\u015fmelerle sonu\u00e7lan\u0131r.<\/p>\n<h2>\ud83d\udcf1 Mobil Uyumlu Kullan\u0131c\u0131 Aray\u00fcz\u00fc \u0130\u00e7in CSS \u0130pu\u00e7lar\u0131<\/h2>\n<p>Ak\u0131ll\u0131 banka s\u00f6zle\u015fmemizi Solidity ve Foundry ile ba\u015far\u0131yla geli\u015ftirdik, ancak kullan\u0131c\u0131lar\u0131n bu bankayla etkile\u015fime girebilmesi i\u00e7in bir kullan\u0131c\u0131 aray\u00fcz\u00fcne (UI) ihtiyac\u0131m\u0131z var. Web3 uygulamalar\u0131nda (DApps) kullan\u0131c\u0131 deneyimi, \u00f6zellikle mobil cihazlarda, kritik \u00f6neme sahiptir. Mobil uyumlu bir aray\u00fcz, kullan\u0131c\u0131lar\u0131n herhangi bir cihazdan sorunsuz bir \u015fekilde eri\u015fim sa\u011flamas\u0131na ve i\u015flemlerini kolayca ger\u00e7ekle\u015ftirmesine olanak tan\u0131r. \u0130\u015fte basit bir mobil uyumlu HTML\/CSS yap\u0131s\u0131 i\u00e7in ipu\u00e7lar\u0131:<\/p>\n<pre><code>\n<!DOCTYPE html>\n<html lang=\"tr\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Ak\u0131ll\u0131 Banka DApp<\/title>\n    <style>\n        \/* Temel stil s\u0131f\u0131rlamalar\u0131 ve body stilleri *\/\n        body {\n            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n            margin: 0;\n            padding: 20px;\n            background-color: #f4f7f6;\n            color: #333;\n            line-height: 1.6;\n        }\n\n        .container {\n            max-width: 960px;\n            margin: 0 auto;\n            padding: 20px;\n            background-color: #fff;\n            border-radius: 8px;\n            box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);\n        }\n\n        h2, h3 {\n            color: #007bff;\n            border-bottom: 2px solid #e0e0e0;\n            padding-bottom: 10px;\n            margin-top: 30px;\n        }\n\n        button {\n            background-color: #28a745;\n            color: white;\n            padding: 10px 15px;\n            border: none;\n            border-radius: 5px;\n            cursor: pointer;\n            font-size: 16px;\n            transition: background-color 0.3s ease;\n            margin-right: 10px;\n            margin-bottom: 10px;\n        }\n\n        button:hover {\n            background-color: #218838;\n        }\n\n        input[type=\"text\"], input[type=\"number\"] {\n            width: calc(100% - 22px);\n            padding: 10px;\n            margin-bottom: 10px;\n            border: 1px solid #ccc;\n            border-radius: 4px;\n            box-sizing: border-box; \/* Padding'i geni\u015fli\u011fe dahil et *\/\n        }\n\n        \/* Mobil uyumluluk i\u00e7in medya sorgular\u0131 *\/\n        @media (max-width: 768px) {\n            .container {\n                padding: 15px;\n                margin: 10px;\n            }\n            body {\n                padding: 10px;\n            }\n            h2 {\n                font-size: 24px;\n            }\n            h3 {\n                font-size: 20px;\n            }\n            button {\n                width: 100%;\n                margin-right: 0;\n            }\n            input[type=\"text\"], input[type=\"number\"] {\n                width: 100%;\n            }\n        }\n\n        @media (max-width: 480px) {\n            .container {\n                padding: 10px;\n                margin: 5px;\n                border-radius: 5px;\n            }\n            h2 {\n                font-size: 20px;\n                text-align: center;\n            }\n            h3 {\n                font-size: 18px;\n            }\n            button {\n                font-size: 14px;\n                padding: 8px 10px;\n            }\n        }\n    <\/style>\n<\/head>\n<body>\n    <div class=\"container\">\n        <h2>Ak\u0131ll\u0131 Banka Kontrol Paneli<\/h2>\n        <p>C\u00fczdan\u0131n\u0131z\u0131 ba\u011flay\u0131n ve mod\u00fcler bankac\u0131l\u0131k deneyimine ba\u015flay\u0131n.<\/p>\n\n        <h3>Yeni Deposit Box Olu\u015ftur<\/h3>\n        <button onclick=\"createDepositBox()\">Deposit Box Olu\u015ftur<\/button>\n        <p id=\"newBoxAddress\">Olu\u015fturulan Adres: <span>YOK<\/span><\/p>\n\n        <h3>Mevcut Deposit Box'lar<\/h3>\n        <input type=\"text\" id=\"userAddress\" placeholder=\"C\u00fczdan Adresiniz\">\n        <button onclick=\"getDepositBoxes()\">Kutular\u0131m\u0131 G\u00f6ster<\/button>\n        <ul id=\"depositBoxList\"><\/ul>\n\n        <h3>Deposit Box \u0130\u015flemleri<\/h3>\n        <input type=\"text\" id=\"selectedBoxAddress\" placeholder=\"Deposit Box Adresi\">\n        <input type=\"number\" id=\"amount\" placeholder=\"Miktar (ETH)\">\n        <button onclick=\"depositFunds()\">Yat\u0131r<\/button>\n        <button onclick=\"withdrawFunds()\">\u00c7ek<\/button>\n        <button onclick=\"getBoxBalance()\">Bakiye Sorgula<\/button>\n        <p id=\"boxBalance\">Bakiye: <span>0 ETH<\/span><\/p>\n    <\/div>\n\n    <script>\n        \/\/ Bu k\u0131s\u0131m, Web3.js veya Ethers.js kullanarak Metamask ile etkile\u015fimi sim\u00fcle eder.\n        \/\/ Ger\u00e7ek uygulamada bu fonksiyonlar ak\u0131ll\u0131 s\u00f6zle\u015fmelerinizle etkile\u015fime ge\u00e7ecektir.\n        async function createDepositBox() {\n            \/\/ ... Ak\u0131ll\u0131 s\u00f6zle\u015fme \u00e7a\u011fr\u0131s\u0131 ile yeni kutu olu\u015fturma ...\n            document.getElementById('newBoxAddress').querySelector('span').textContent = '0x...YeniAdres...';\n            alert('Yeni Deposit Box olu\u015fturuldu!');\n        }\n\n        async function getDepositBoxes() {\n            \/\/ ... Kullan\u0131c\u0131n\u0131n Deposit Box'lar\u0131n\u0131 sorgulama ...\n            const user = document.getElementById('userAddress').value;\n            const ul = document.getElementById('depositBoxList');\n            ul.innerHTML = '';\n            \/\/ \u00d6rnek:\n            const boxes = ['0xBox1', '0xBox2']; \n            boxes.forEach(box => {\n                const li = document.createElement('li');\n                li.textContent = box;\n                ul.appendChild(li);\n            });\n        }\n\n        async function depositFunds() {\n            \/\/ ... Deposit Box'a para yat\u0131rma ...\n            alert('Para yat\u0131rma i\u015flemi ba\u015far\u0131yla g\u00f6nderildi!');\n        }\n\n        async function withdrawFunds() {\n            \/\/ ... Deposit Box'tan para \u00e7ekme ...\n            alert('Para \u00e7ekme i\u015flemi ba\u015far\u0131yla g\u00f6nderildi!');\n        }\n\n        async function getBoxBalance() {\n            \/\/ ... Deposit Box bakiyesi sorgulama ...\n            document.getElementById('boxBalance').querySelector('span').textContent = '1.23 ETH';\n        }\n    <\/script>\n<\/body>\n<\/html>\n    <\/pre>\n<p><\/code><\/p>\n<p>Yukar\u0131daki HTML ve CSS \u00f6rne\u011fi, responsive tasar\u0131m i\u00e7in temel bir <code>viewport<\/code> meta etiketi ve <code>@media<\/code> sorgular\u0131 kullan\u0131r. \u0130\u015fte dikkat etmeniz gerekenler:<\/p>\n<ul>\n<li><strong><code><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"><\/code> :<\/strong> Bu etiket, taray\u0131c\u0131ya sayfan\u0131n cihaz\u0131n geni\u015fli\u011fine g\u00f6re \u00f6l\u00e7eklenmesini s\u00f6yler ve mobil cihazlarda sayfan\u0131n do\u011fru g\u00f6r\u00fcnt\u00fclenmesini sa\u011flar.<\/li>\n<li><strong>Flexbox veya Grid:<\/strong> Daha karma\u015f\u0131k d\u00fczenler i\u00e7in Flexbox veya CSS Grid kullanmak, responsive tasar\u0131m\u0131 \u00e7ok daha kolay hale getirir. Bu \u00f6rnekte basit bir tek s\u00fctun d\u00fczeni kullan\u0131lm\u0131\u015ft\u0131r.<\/li>\n<li><strong>Relative Uzunluk Birimleri:<\/strong> <code>width: calc(100% - 22px)<\/code> gibi de\u011ferler, \u00f6\u011felerin ekran boyutuna g\u00f6re ayarlanmas\u0131n\u0131 sa\u011flar. <code>rem<\/code> veya <code>em<\/code> gibi birimler de font boyutlar\u0131 i\u00e7in faydal\u0131d\u0131r.<\/li>\n<li><strong><code>@media<\/code> Sorgular\u0131:<\/strong> Farkl\u0131 ekran boyutlar\u0131 i\u00e7in farkl\u0131 CSS kurallar\u0131 tan\u0131mlaman\u0131z\u0131 sa\u011flar. Bu \u00f6rnekte, <code>768px<\/code> ve <code>480px<\/code> alt\u0131ndaki ekranlar i\u00e7in stil de\u011fi\u015fiklikleri yap\u0131lm\u0131\u015ft\u0131r (\u00f6rne\u011fin, daha k\u00fc\u00e7\u00fck i\u00e7 bo\u015fluklar, butonlar\u0131n tam geni\u015fli\u011fi kaplamas\u0131).<\/li>\n<li><strong>Minimum Hedef Boyutlar\u0131:<\/strong> Dokunmatik cihazlarda d\u00fc\u011fmelerin ve ba\u011flant\u0131lar\u0131n kolayca t\u0131klanabilmesi i\u00e7in yeterince b\u00fcy\u00fck oldu\u011fundan emin olun (genellikle en az 44x44 piksel).<\/li>\n<\/ul>\n<p>Bu temel mobil uyumlu tasar\u0131m prensipleriyle, kullan\u0131c\u0131lar ak\u0131ll\u0131 banka DApp'inizle herhangi bir cihazdan sorunsuz bir \u015fekilde etkile\u015fim kurabilirler. \u00d6n y\u00fcz geli\u015ftirmesinde Web3.js veya Ethers.js k\u00fct\u00fcphanelerini kullanarak Metamask gibi c\u00fczdanlar arac\u0131l\u0131\u011f\u0131yla ak\u0131ll\u0131 s\u00f6zle\u015fmelerinizle ba\u011flant\u0131 kurabilirsiniz. Bu sayede, hem g\u00fc\u00e7l\u00fc bir arka uca hem de kullan\u0131c\u0131 dostu bir \u00f6n y\u00fcze sahip, eksiksiz bir merkeziyetsiz bankac\u0131l\u0131k \u00e7\u00f6z\u00fcm\u00fc sunabilirsiniz.<\/p>\n<h2>\ud83d\ude80 Geli\u015fmi\u015f Konular ve Optimizasyon Stratejileri: Ak\u0131ll\u0131 Bankan\u0131z\u0131 \u0130leriye Ta\u015f\u0131y\u0131n<\/h2>\n<p>Mod\u00fcler ak\u0131ll\u0131 banka projemizin temelini att\u0131k, ancak Web3 d\u00fcnyas\u0131nda rekabet\u00e7i ve s\u00fcrd\u00fcr\u00fclebilir bir DApp in\u015fa etmek i\u00e7in g\u00f6z \u00f6n\u00fcnde bulundurmam\u0131z gereken bir\u00e7ok geli\u015fmi\u015f konu ve optimizasyon stratejisi bulunmaktad\u0131r. Gaz maliyetleri, \u00f6l\u00e7eklenebilirlik, y\u00fckseltilebilirlik ve genel g\u00fcvenlik, her ak\u0131ll\u0131 s\u00f6zle\u015fme geli\u015ftiricisinin \u00fczerinde durmas\u0131 gereken temel alanlard\u0131r. \u0130\u015fte ak\u0131ll\u0131 bankan\u0131z\u0131 bir sonraki seviyeye ta\u015f\u0131yacak baz\u0131 stratejiler:<\/p>\n<ol>\n<li>\n<h3>Gaz Optimizasyonlar\u0131<\/h3>\n<p>Ethereum a\u011f\u0131ndaki her i\u015flem bir gaz maliyetine sahiptir ve bu maliyetler a\u011f yo\u011funlu\u011funa g\u00f6re de\u011fi\u015febilir. Kullan\u0131c\u0131lar i\u00e7in makul maliyetli bir deneyim sunmak ad\u0131na gaz optimizasyonu kritik \u00f6neme sahiptir.<\/p>\n<ul>\n<li><strong>Depolama Kullan\u0131m\u0131 (Storage vs Memory):<\/strong> <code>storage<\/code> de\u011fi\u015fkenleri, blokzincir \u00fczerinde kal\u0131c\u0131 olarak sakland\u0131\u011f\u0131 i\u00e7in <code>memory<\/code> veya <code>calldata<\/code> de\u011fi\u015fkenlerinden \u00e7ok daha pahal\u0131d\u0131r. M\u00fcmk\u00fcn oldu\u011funca <code>memory<\/code> veya <code>calldata<\/code> kullanmaya \u00e7al\u0131\u015f\u0131n, \u00f6zellikle fonksiyon parametreleri ve ge\u00e7ici de\u011fi\u015fkenler i\u00e7in.<\/li>\n<li><strong>D\u00f6ng\u00fc Optimizasyonlar\u0131:<\/strong> B\u00fcy\u00fck diziler \u00fczerinde d\u00f6ng\u00fclerden ka\u00e7\u0131n\u0131n veya maliyetli i\u015flemleri bu d\u00f6ng\u00fclerin d\u0131\u015f\u0131na ta\u015f\u0131y\u0131n. Zincir \u00fcst\u00fcnde d\u00f6ng\u00fclerin tahmin edilemez gaz maliyetleri, \u00f6zellikle kullan\u0131c\u0131 taraf\u0131ndan kontrol edilebilen dizilerde DoS (Hizmet Reddi) sald\u0131r\u0131lar\u0131na yol a\u00e7abilir. E\u011fer bir d\u00f6ng\u00fc ka\u00e7\u0131n\u0131lmazsa, sabit bir \u00fcst s\u0131n\u0131ra sahip oldu\u011fundan emin olun.<\/li>\n<li><strong>Event Kullan\u0131m\u0131:<\/strong> Verileri do\u011frudan <code>storage<\/code>'da saklamak yerine, \u00f6nemli olaylar\u0131 <code>event<\/code> olarak yaymak, gaz maliyetini \u00f6nemli \u00f6l\u00e7\u00fcde azalt\u0131r. <code>event<\/code>'ler, zincir d\u0131\u015f\u0131 uygulamalar taraf\u0131ndan kolayca indekslenebilir ve sorgulanabilir, b\u00f6ylece kullan\u0131c\u0131 aray\u00fczlerinde veya arka u\u00e7 servislerinde veri takibi i\u00e7in kullan\u0131labilir.<\/li>\n<li><strong>K\u0131sa Devre De\u011ferlendirme (Short-Circuit Evaluation):<\/strong> <code>require<\/code> ifadelerinde birden fazla ko\u015fulu <code>&&<\/code> ile birle\u015ftirirken, daha az maliyetli ko\u015fullar\u0131 \u00f6ne koyun. Bu, ilk ko\u015ful yanl\u0131\u015fsa, daha maliyetli ikinci ko\u015fulun de\u011ferlendirilmesini engelleyerek gaz tasarrufu sa\u011flar.<\/li>\n<li><strong>S\u0131f\u0131r De\u011fer Atamalar\u0131:<\/strong> Bir <code>storage<\/code> de\u011fi\u015fkenini s\u0131f\u0131ra ayarlamak, onu s\u0131f\u0131r olmayan bir de\u011fere ayarlamaktan daha az gaz maliyetlidir. Bu, \u00f6zellikle bir s\u00f6zle\u015fme de\u011fi\u015fkenini temizlerken veya bir haritadan giri\u015fi silerken \u00f6nemlidir.<\/li>\n<\/ul>\n<\/li>\n<li>\n<h3>Eri\u015fim Kontrol\u00fc ve Role Tabanl\u0131 Sistemler<\/h3>\n<p>Ak\u0131ll\u0131 bankan\u0131zda, farkl\u0131 kullan\u0131c\u0131lar\u0131n farkl\u0131 yetkilere sahip olmas\u0131 gerekebilir (\u00f6rne\u011fin, y\u00f6netici, m\u00fc\u015fteri, denet\u00e7i). OpenZeppelin Contracts k\u00fct\u00fcphanesi, <code>Ownable<\/code> ve <code>AccessControl<\/code> gibi g\u00fc\u00e7l\u00fc eri\u015fim kontrol\u00fc mekanizmalar\u0131 sunar. <code>AccessControl<\/code> mod\u00fcl\u00fc, daha gran\u00fcler yetkilendirmeler i\u00e7in role tabanl\u0131 bir sistem kurman\u0131za olanak tan\u0131r. \u00d6rne\u011fin, bir \"minter\" rol\u00fc yaln\u0131zca yeni token basabilirken, bir \"pauser\" rol\u00fc s\u00f6zle\u015fmeyi dondurabilir.<\/p>\n<\/li>\n<li>\n<h3>Y\u00fckseltilebilirlik (Upgradability)<\/h3>\n<p>Da\u011f\u0131t\u0131lan ak\u0131ll\u0131 s\u00f6zle\u015fmeler varsay\u0131lan olarak de\u011fi\u015ftirilemezdir. Ancak, bir hatay\u0131 d\u00fczeltmek, yeni bir \u00f6zellik eklemek veya g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131 kapatmak i\u00e7in s\u00f6zle\u015fme mant\u0131\u011f\u0131n\u0131 g\u00fcncellemek gerekebilir. Bu noktada proxy desenleri (\u00f6rne\u011fin, UUPS - Universal Upgradeable Proxies Standard veya Transparent Proxy Standard) devreye girer. Bu desenler, kullan\u0131c\u0131lar\u0131n s\u00f6zle\u015fmeyle ayn\u0131 adreste etkile\u015fim kurmaya devam etmesini sa\u011flarken, arka plandaki implementasyon s\u00f6zle\u015fmesinin de\u011fi\u015ftirilmesine olanak tan\u0131r. Bu sayede kullan\u0131c\u0131 fonlar\u0131n\u0131n g\u00fcvenli\u011fi ve s\u00f6zle\u015fmenin s\u00fcreklili\u011fi sa\u011flan\u0131r.<\/p>\n<\/li>\n<li>\n<h3>Cross-Chain \u0130mplikasyonlar\u0131 ve Geni\u015fleme<\/h3>\n<p>Ethereum d\u0131\u015f\u0131nda Polygon, Arbitrum, Optimism gibi di\u011fer EVM uyumlu blokzincirlerinde de ak\u0131ll\u0131 bankan\u0131z\u0131 da\u011f\u0131tmay\u0131 d\u00fc\u015f\u00fcnebilirsiniz. Bu, daha d\u00fc\u015f\u00fck i\u015flem \u00fccretleri ve daha h\u0131zl\u0131 i\u015flem s\u00fcreleri sunarak daha geni\u015f bir kullan\u0131c\u0131 kitlesine ula\u015fman\u0131z\u0131 sa\u011flayabilir. Cross-chain ileti\u015fimi (\u00f6rne\u011fin, LayerZero, Wormhole) entegre ederek, farkl\u0131 zincirler aras\u0131nda fon transferini ve etkile\u015fimi kolayla\u015ft\u0131rabilirsiniz. Bu, Web3 finans\u0131n gelece\u011finde \u00f6nemli bir trenddir ve ak\u0131ll\u0131 bankan\u0131z\u0131n potansiyelini art\u0131racakt\u0131r.<\/p>\n<\/li>\n<li>\n<h3>G\u00fcvenlik Denetimleri (Audits)<\/h3>\n<p>Kodunuz ne kadar iyi yaz\u0131lm\u0131\u015f ve test edilmi\u015f olursa olsun, bir \u00fc\u00e7\u00fcnc\u00fc taraf g\u00fcvenlik denetimi (audit) yapt\u0131rmak her zaman tavsiye edilir. Denet\u00e7iler, geli\u015ftiricilerin g\u00f6zden ka\u00e7\u0131rabilece\u011fi potansiyel zay\u0131fl\u0131klar\u0131 ve g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131 tespit etmede uzmand\u0131rlar. Bu, \u00f6zellikle y\u00fcksek de\u011ferli varl\u0131klar\u0131 i\u00e7eren finansal protokoller i\u00e7in vazge\u00e7ilmezdir. G\u00fcvenlik, ak\u0131ll\u0131 s\u00f6zle\u015fme geli\u015ftirmesinde tek seferlik bir \u00e7aba de\u011fil, s\u00fcrekli bir s\u00fcre\u00e7tir.<\/p>\n<\/li>\n<\/ol>\n<p>Bu ileri d\u00fczey konular\u0131 ve optimizasyon stratejilerini uygulayarak, sadece \u00e7al\u0131\u015fan bir ak\u0131ll\u0131 banka de\u011fil, ayn\u0131 zamanda sa\u011flam, verimli, g\u00fcvenli ve gelece\u011fe haz\u0131r bir merkeziyetsiz finansal platform in\u015fa edersiniz. Bu, Web3 ekosistemine de\u011ferli bir katk\u0131 sa\u011flayacak ve kullan\u0131c\u0131lar i\u00e7in daha iyi bir deneyim sunacakt\u0131r.<\/p>\n<h2>\ud83d\udca1 Sonu\u00e7: Gelece\u011fin Mod\u00fcler Finans\u0131 ve S\u0131k\u00e7a Sorulan Sorular<\/h2>\n<p>Bug\u00fcn\u00fcn makalesinde, Solidity ile mod\u00fcler bir ak\u0131ll\u0131 banka sistemi in\u015fa etmenin inceliklerini derinlemesine inceledik. Aray\u00fczlerin g\u00fcc\u00fcn\u00fc kullanarak nas\u0131l esnek ve \u00f6l\u00e7eklenebilir bir mimari olu\u015fturabilece\u011fimizi, Foundry geli\u015ftirme ortam\u0131n\u0131n sundu\u011fu h\u0131z ve verimlilikle nas\u0131l testler yapabilece\u011fimizi ad\u0131m ad\u0131m g\u00f6rd\u00fck. <code>IDepositBox<\/code> aray\u00fcz\u00fc ile standart bir etkile\u015fim katman\u0131 tan\u0131mlarken, <code>DepositBox<\/code> s\u00f6zle\u015fmesiyle kullan\u0131c\u0131ya \u00f6zel, g\u00fcvenli mevduat kutular\u0131n\u0131 nas\u0131l olu\u015fturdu\u011fumuzu detayland\u0131rd\u0131k. Son olarak, t\u00fcm bu mod\u00fcler par\u00e7alar\u0131 bir araya getiren ana <code>SmartBank<\/code> s\u00f6zle\u015fmemizi inceleyerek, merkeziyetsiz bankac\u0131l\u0131\u011f\u0131n temelini atm\u0131\u015f olduk.<\/p>\n<p>Mod\u00fcler tasar\u0131m yakla\u015f\u0131m\u0131, tek bir b\u00fcy\u00fck ve hantal s\u00f6zle\u015fme yerine, ba\u011f\u0131ms\u0131z ve yeniden kullan\u0131labilir bile\u015fenler olu\u015fturarak geli\u015ftirme s\u00fcrecini basitle\u015ftirir, test edilebilirli\u011fi art\u0131r\u0131r ve gelecekteki g\u00fcncellemeleri kolayla\u015ft\u0131r\u0131r. Foundry'nin Solidity tabanl\u0131 testleri, geli\u015ftiricilere h\u0131zl\u0131 geri bildirim d\u00f6ng\u00fcs\u00fc ve \u00fcst\u00fcn hata ay\u0131klama yetenekleri sunarak daha g\u00fcvenli s\u00f6zle\u015fmeler yazmalar\u0131na yard\u0131mc\u0131 olur. Bir ak\u0131ll\u0131 bankan\u0131n in\u015fas\u0131, sadece kod yazmaktan ibaret de\u011fildir; ayn\u0131 zamanda g\u00fcvenlik, verimlilik ve kullan\u0131c\u0131 deneyimi gibi bir\u00e7ok fakt\u00f6r\u00fc dengede tutmay\u0131 gerektirir. Bu rehberde payla\u015ft\u0131\u011f\u0131m\u0131z bilgiler ve kod \u00f6rnekleri, Web3 finans\u0131n gelece\u011fine ad\u0131m atmak isteyen herkes i\u00e7in sa\u011flam bir temel olu\u015fturmaktad\u0131r. Merkeziyetsiz finans\u0131n potansiyeli s\u0131n\u0131rs\u0131zd\u0131r ve mod\u00fcler mimariler, bu potansiyeli ger\u00e7ekle\u015ftirmek i\u00e7in bize gereken ara\u00e7lar\u0131 sunar. Umar\u0131z bu makale, kendi yenilik\u00e7i DeFi \u00e7\u00f6z\u00fcmlerinizi olu\u015fturman\u0131z i\u00e7in size ilham vermi\u015ftir.<\/p>\n<h3>\u2753 S\u0131k\u00e7a Sorulan Sorular<\/h3>\n<ul>\n<li>\n            <strong>Mod\u00fcler tasar\u0131m neden \u00f6nemlidir?<\/strong><\/p>\n<p>Mod\u00fcler tasar\u0131m, ak\u0131ll\u0131 s\u00f6zle\u015fmelerinizi daha k\u00fc\u00e7\u00fck, y\u00f6netilebilir ve ba\u011f\u0131ms\u0131z par\u00e7alara ay\u0131rman\u0131z\u0131 sa\u011flar. Bu, kodu daha okunabilir, bak\u0131m\u0131 daha kolay ve yeniden kullan\u0131labilir hale getirir. Ayr\u0131ca, g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131n kapsam\u0131n\u0131 s\u0131n\u0131rlar ve yeni \u00f6zelliklerin eklenmesini veya mevcut \u00f6zelliklerin g\u00fcncellenmesini basitle\u015ftirir, b\u00f6ylece projenizin uzun vadeli s\u00fcrd\u00fcr\u00fclebilirli\u011fini art\u0131r\u0131r.<\/p>\n<\/li>\n<li>\n            <strong>Foundry kullanmak ne gibi avantajlar sa\u011flar?<\/strong><\/p>\n<p>Foundry, testleri ve scriptleri do\u011frudan Solidity'de yazman\u0131za olanak tan\u0131yan, Rust tabanl\u0131, h\u0131zl\u0131 bir EVM geli\u015ftirme arac\u0131d\u0131r. Bu, geli\u015ftirme h\u0131z\u0131n\u0131 art\u0131r\u0131r, ba\u011flam de\u011fi\u015ftirme ihtiyac\u0131n\u0131 ortadan kald\u0131r\u0131r ve gaz optimizasyonu, fuzz testing gibi geli\u015fmi\u015f \u00f6zelliklerle daha g\u00fcvenli ve verimli s\u00f6zle\u015fmeler yazman\u0131z\u0131 sa\u011flar. <code>forge test<\/code> gibi komutlarla kolayca test \u00e7al\u0131\u015ft\u0131rabilirsiniz.<\/p>\n<\/li>\n<li>\n            <strong>Bir ak\u0131ll\u0131 banka s\u00f6zle\u015fmesi ne kadar g\u00fcvenli olabilir?<\/strong><\/p>\n<p>Bir ak\u0131ll\u0131 banka s\u00f6zle\u015fmesinin g\u00fcvenli\u011fi, kullan\u0131lan kod kalitesine, uygulanan g\u00fcvenlik desenlerine (\u00f6rne\u011fin, yeniden giri\u015f korumas\u0131, eri\u015fim kontrol\u00fc), kapsaml\u0131 testlere ve profesyonel g\u00fcvenlik denetimlerine ba\u011fl\u0131d\u0131r. Mod\u00fcler yap\u0131, g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131n etkisini s\u0131n\u0131rlamaya yard\u0131mc\u0131 olurken, hi\u00e7bir s\u00f6zle\u015fme %100 risksiz de\u011fildir. \u0130yi uygulamalar ve s\u00fcrekli denetim, g\u00fcvenli\u011fi en \u00fcst d\u00fczeye \u00e7\u0131kar\u0131r.<\/p>\n<\/li>\n<li>\n            <strong>Bu mimari y\u00fckseltilebilir mi?<\/strong><\/p>\n<p>Evet, bu t\u00fcr mod\u00fcler bir mimariyi y\u00fckseltilebilir hale getirmek m\u00fcmk\u00fcnd\u00fcr. Proxy desenlerini (\u00f6rne\u011fin, UUPS veya Transparent Proxy) kullanarak, <code>SmartBank<\/code> ve <code>DepositBox<\/code> s\u00f6zle\u015fmelerinizin mant\u0131\u011f\u0131n\u0131 da\u011f\u0131t\u0131ld\u0131ktan sonra dahi g\u00fcncelleyebilirsiniz. Bu, kullan\u0131c\u0131lar\u0131n ayn\u0131 s\u00f6zle\u015fme adresleriyle etkile\u015fime devam etmesini sa\u011flarken, yeni \u00f6zellikler eklemenize veya hatalar\u0131 d\u00fczeltmenize olanak tan\u0131r.<\/p>\n<\/li>\n<li>\n            <strong>Gaz maliyetleri nas\u0131l optimize edilir?<\/strong><\/p>\n<p>Gaz maliyetlerini optimize etmek i\u00e7in <code>storage<\/code> yerine <code>memory<\/code> veya <code>calldata<\/code> kullanmaya \u00f6zen g\u00f6sterin, b\u00fcy\u00fck d\u00f6ng\u00fclerden ka\u00e7\u0131n\u0131n, <code>event<\/code>'leri veri depolama yerine izleme i\u00e7in kullan\u0131n, k\u0131sa devre de\u011ferlendirme prensiplerini uygulay\u0131n ve gereksiz hesaplamalardan ka\u00e7\u0131n\u0131n. Foundry'nin gaz raporlama ara\u00e7lar\u0131, iyile\u015ftirme alanlar\u0131n\u0131 belirlemenize yard\u0131mc\u0131 olabilir.<\/p>\n<\/li>\n<\/ul>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Merkeziyetsiz finans (DeFi) d\u00fcnyas\u0131nda, g\u00fcvenli ve esnek bir bankac\u0131l\u0131k sistemi hayal edin. Solidity ile in\u015fa edilen mod\u00fcler bir&hellip;","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1],"tags":[],"class_list":{"0":"post-31855","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Solidity ile Mod\u00fcler Ak\u0131ll\u0131 Banka: Foundry ve Aray\u00fcz Kullan\u0131m\u0131<\/title>\n<meta name=\"description\" content=\"Merkeziyetsiz finans (DeFi) d\u00fcnyas\u0131nda, g\u00fcvenli ve esnek bir bankac\u0131l\u0131k sistemi hayal edin. Solidity ile in\u015fa edilen mod\u00fcler bir ak\u0131ll\u0131 banka, bu hayali ger\u00e7e\u011fe d\u00f6n\u00fc\u015ft\u00fcr\u00fcyor. Bu makalede, Foundry ve aray\u00fczler kullanarak nas\u0131l ki\u015fiselle\u015ftirilebilir &#039;Deposit Box&#039; sistemi kuraca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m \u00f6\u011frenecek, ak\u0131ll\u0131 s\u00f6zle\u015fme mimarisinin g\u00fcc\u00fcn\u00fc ke\u015ffedeceksiniz. Geleneksel bankac\u0131l\u0131k sistemlerinin karma\u015f\u0131kl\u0131\u011f\u0131 ve tekil hata noktalar\u0131, merkeziyetsiz d\u00fcnyaya ad\u0131m atan kullan\u0131c\u0131lar i\u00e7in ciddi endi\u015feler yaratmaktad\u0131r. Monolitik, yani tek bir b\u00fcy\u00fck s\u00f6zle\u015fmeden olu\u015fan yap\u0131lar, geli\u015ftirme s\u00fcrecini yava\u015flat\u0131rken, g\u00fcncellemeleri zorla\u015ft\u0131r\u0131r ve g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131n kapsam\u0131n\u0131 art\u0131rabilir. Bir ak\u0131ll\u0131 banka s\u00f6zle\u015fmesi hayal etti\u011finizde, kullan\u0131c\u0131lar\u0131n yat\u0131r\u0131mlar\u0131n\u0131 y\u00f6netti\u011fi, faiz kazand\u0131\u011f\u0131, belki de kredi ald\u0131\u011f\u0131 bir\u00e7ok farkl\u0131 fonksiyonu i\u00e7erecektir. T\u00fcm bu fonksiyonlar\u0131 tek bir devasa ak\u0131ll\u0131 s\u00f6zle\u015fmeye s\u0131\u011fd\u0131rmak, k\u0131sa vadede pratik g\u00f6r\u00fcnse de, uzun vadede s\u00fcrd\u00fcr\u00fclemez bir mimari olu\u015fturur.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/solidity-ile-moduler-akilli-banka-foundry-ve-arayuz-kullanimi\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Solidity ile Mod\u00fcler Ak\u0131ll\u0131 Banka: Foundry ve Aray\u00fcz Kullan\u0131m\u0131\" \/>\n<meta property=\"og:description\" content=\"Merkeziyetsiz finans (DeFi) d\u00fcnyas\u0131nda, g\u00fcvenli ve esnek bir bankac\u0131l\u0131k sistemi hayal edin. Solidity ile in\u015fa edilen mod\u00fcler bir ak\u0131ll\u0131 banka, bu hayali ger\u00e7e\u011fe d\u00f6n\u00fc\u015ft\u00fcr\u00fcyor. Bu makalede, Foundry ve aray\u00fczler kullanarak nas\u0131l ki\u015fiselle\u015ftirilebilir &#039;Deposit Box&#039; sistemi kuraca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m \u00f6\u011frenecek, ak\u0131ll\u0131 s\u00f6zle\u015fme mimarisinin g\u00fcc\u00fcn\u00fc ke\u015ffedeceksiniz. Geleneksel bankac\u0131l\u0131k sistemlerinin karma\u015f\u0131kl\u0131\u011f\u0131 ve tekil hata noktalar\u0131, merkeziyetsiz d\u00fcnyaya ad\u0131m atan kullan\u0131c\u0131lar i\u00e7in ciddi endi\u015feler yaratmaktad\u0131r. Monolitik, yani tek bir b\u00fcy\u00fck s\u00f6zle\u015fmeden olu\u015fan yap\u0131lar, geli\u015ftirme s\u00fcrecini yava\u015flat\u0131rken, g\u00fcncellemeleri zorla\u015ft\u0131r\u0131r ve g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131n kapsam\u0131n\u0131 art\u0131rabilir. Bir ak\u0131ll\u0131 banka s\u00f6zle\u015fmesi hayal etti\u011finizde, kullan\u0131c\u0131lar\u0131n yat\u0131r\u0131mlar\u0131n\u0131 y\u00f6netti\u011fi, faiz kazand\u0131\u011f\u0131, belki de kredi ald\u0131\u011f\u0131 bir\u00e7ok farkl\u0131 fonksiyonu i\u00e7erecektir. T\u00fcm bu fonksiyonlar\u0131 tek bir devasa ak\u0131ll\u0131 s\u00f6zle\u015fmeye s\u0131\u011fd\u0131rmak, k\u0131sa vadede pratik g\u00f6r\u00fcnse de, uzun vadede s\u00fcrd\u00fcr\u00fclemez bir mimari olu\u015fturur.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/solidity-ile-moduler-akilli-banka-foundry-ve-arayuz-kullanimi\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-14T19:32:06+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"36 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/solidity-ile-moduler-akilli-banka-foundry-ve-arayuz-kullanimi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/solidity-ile-moduler-akilli-banka-foundry-ve-arayuz-kullanimi\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Solidity ile Mod\u00fcler Ak\u0131ll\u0131 Banka: Foundry ve Aray\u00fcz Kullan\u0131m\u0131\",\"datePublished\":\"2025-10-14T19:32:06+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/solidity-ile-moduler-akilli-banka-foundry-ve-arayuz-kullanimi\/\"},\"wordCount\":5347,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/solidity-ile-moduler-akilli-banka-foundry-ve-arayuz-kullanimi\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/solidity-ile-moduler-akilli-banka-foundry-ve-arayuz-kullanimi\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/solidity-ile-moduler-akilli-banka-foundry-ve-arayuz-kullanimi\/\",\"name\":\"Solidity ile Mod\u00fcler Ak\u0131ll\u0131 Banka: Foundry ve Aray\u00fcz Kullan\u0131m\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-10-14T19:32:06+00:00\",\"description\":\"Merkeziyetsiz finans (DeFi) d\u00fcnyas\u0131nda, g\u00fcvenli ve esnek bir bankac\u0131l\u0131k sistemi hayal edin. Solidity ile in\u015fa edilen mod\u00fcler bir ak\u0131ll\u0131 banka, bu hayali ger\u00e7e\u011fe d\u00f6n\u00fc\u015ft\u00fcr\u00fcyor. Bu makalede, Foundry ve aray\u00fczler kullanarak nas\u0131l ki\u015fiselle\u015ftirilebilir 'Deposit Box' sistemi kuraca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m \u00f6\u011frenecek, ak\u0131ll\u0131 s\u00f6zle\u015fme mimarisinin g\u00fcc\u00fcn\u00fc ke\u015ffedeceksiniz. Geleneksel bankac\u0131l\u0131k sistemlerinin karma\u015f\u0131kl\u0131\u011f\u0131 ve tekil hata noktalar\u0131, merkeziyetsiz d\u00fcnyaya ad\u0131m atan kullan\u0131c\u0131lar i\u00e7in ciddi endi\u015feler yaratmaktad\u0131r. Monolitik, yani tek bir b\u00fcy\u00fck s\u00f6zle\u015fmeden olu\u015fan yap\u0131lar, geli\u015ftirme s\u00fcrecini yava\u015flat\u0131rken, g\u00fcncellemeleri zorla\u015ft\u0131r\u0131r ve g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131n kapsam\u0131n\u0131 art\u0131rabilir. Bir ak\u0131ll\u0131 banka s\u00f6zle\u015fmesi hayal etti\u011finizde, kullan\u0131c\u0131lar\u0131n yat\u0131r\u0131mlar\u0131n\u0131 y\u00f6netti\u011fi, faiz kazand\u0131\u011f\u0131, belki de kredi ald\u0131\u011f\u0131 bir\u00e7ok farkl\u0131 fonksiyonu i\u00e7erecektir. T\u00fcm bu fonksiyonlar\u0131 tek bir devasa ak\u0131ll\u0131 s\u00f6zle\u015fmeye s\u0131\u011fd\u0131rmak, k\u0131sa vadede pratik g\u00f6r\u00fcnse de, uzun vadede s\u00fcrd\u00fcr\u00fclemez bir mimari olu\u015fturur.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/solidity-ile-moduler-akilli-banka-foundry-ve-arayuz-kullanimi\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/solidity-ile-moduler-akilli-banka-foundry-ve-arayuz-kullanimi\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/solidity-ile-moduler-akilli-banka-foundry-ve-arayuz-kullanimi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Solidity ile Mod\u00fcler Ak\u0131ll\u0131 Banka: Foundry ve Aray\u00fcz Kullan\u0131m\u0131\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Solidity ile Mod\u00fcler Ak\u0131ll\u0131 Banka: Foundry ve Aray\u00fcz Kullan\u0131m\u0131","description":"Merkeziyetsiz finans (DeFi) d\u00fcnyas\u0131nda, g\u00fcvenli ve esnek bir bankac\u0131l\u0131k sistemi hayal edin. Solidity ile in\u015fa edilen mod\u00fcler bir ak\u0131ll\u0131 banka, bu hayali ger\u00e7e\u011fe d\u00f6n\u00fc\u015ft\u00fcr\u00fcyor. Bu makalede, Foundry ve aray\u00fczler kullanarak nas\u0131l ki\u015fiselle\u015ftirilebilir 'Deposit Box' sistemi kuraca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m \u00f6\u011frenecek, ak\u0131ll\u0131 s\u00f6zle\u015fme mimarisinin g\u00fcc\u00fcn\u00fc ke\u015ffedeceksiniz. Geleneksel bankac\u0131l\u0131k sistemlerinin karma\u015f\u0131kl\u0131\u011f\u0131 ve tekil hata noktalar\u0131, merkeziyetsiz d\u00fcnyaya ad\u0131m atan kullan\u0131c\u0131lar i\u00e7in ciddi endi\u015feler yaratmaktad\u0131r. Monolitik, yani tek bir b\u00fcy\u00fck s\u00f6zle\u015fmeden olu\u015fan yap\u0131lar, geli\u015ftirme s\u00fcrecini yava\u015flat\u0131rken, g\u00fcncellemeleri zorla\u015ft\u0131r\u0131r ve g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131n kapsam\u0131n\u0131 art\u0131rabilir. Bir ak\u0131ll\u0131 banka s\u00f6zle\u015fmesi hayal etti\u011finizde, kullan\u0131c\u0131lar\u0131n yat\u0131r\u0131mlar\u0131n\u0131 y\u00f6netti\u011fi, faiz kazand\u0131\u011f\u0131, belki de kredi ald\u0131\u011f\u0131 bir\u00e7ok farkl\u0131 fonksiyonu i\u00e7erecektir. T\u00fcm bu fonksiyonlar\u0131 tek bir devasa ak\u0131ll\u0131 s\u00f6zle\u015fmeye s\u0131\u011fd\u0131rmak, k\u0131sa vadede pratik g\u00f6r\u00fcnse de, uzun vadede s\u00fcrd\u00fcr\u00fclemez bir mimari olu\u015fturur.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/solidity-ile-moduler-akilli-banka-foundry-ve-arayuz-kullanimi\/","og_locale":"tr_TR","og_type":"article","og_title":"Solidity ile Mod\u00fcler Ak\u0131ll\u0131 Banka: Foundry ve Aray\u00fcz Kullan\u0131m\u0131","og_description":"Merkeziyetsiz finans (DeFi) d\u00fcnyas\u0131nda, g\u00fcvenli ve esnek bir bankac\u0131l\u0131k sistemi hayal edin. Solidity ile in\u015fa edilen mod\u00fcler bir ak\u0131ll\u0131 banka, bu hayali ger\u00e7e\u011fe d\u00f6n\u00fc\u015ft\u00fcr\u00fcyor. Bu makalede, Foundry ve aray\u00fczler kullanarak nas\u0131l ki\u015fiselle\u015ftirilebilir 'Deposit Box' sistemi kuraca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m \u00f6\u011frenecek, ak\u0131ll\u0131 s\u00f6zle\u015fme mimarisinin g\u00fcc\u00fcn\u00fc ke\u015ffedeceksiniz. Geleneksel bankac\u0131l\u0131k sistemlerinin karma\u015f\u0131kl\u0131\u011f\u0131 ve tekil hata noktalar\u0131, merkeziyetsiz d\u00fcnyaya ad\u0131m atan kullan\u0131c\u0131lar i\u00e7in ciddi endi\u015feler yaratmaktad\u0131r. Monolitik, yani tek bir b\u00fcy\u00fck s\u00f6zle\u015fmeden olu\u015fan yap\u0131lar, geli\u015ftirme s\u00fcrecini yava\u015flat\u0131rken, g\u00fcncellemeleri zorla\u015ft\u0131r\u0131r ve g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131n kapsam\u0131n\u0131 art\u0131rabilir. Bir ak\u0131ll\u0131 banka s\u00f6zle\u015fmesi hayal etti\u011finizde, kullan\u0131c\u0131lar\u0131n yat\u0131r\u0131mlar\u0131n\u0131 y\u00f6netti\u011fi, faiz kazand\u0131\u011f\u0131, belki de kredi ald\u0131\u011f\u0131 bir\u00e7ok farkl\u0131 fonksiyonu i\u00e7erecektir. T\u00fcm bu fonksiyonlar\u0131 tek bir devasa ak\u0131ll\u0131 s\u00f6zle\u015fmeye s\u0131\u011fd\u0131rmak, k\u0131sa vadede pratik g\u00f6r\u00fcnse de, uzun vadede s\u00fcrd\u00fcr\u00fclemez bir mimari olu\u015fturur.","og_url":"https:\/\/fatihsoysal.com\/blog\/solidity-ile-moduler-akilli-banka-foundry-ve-arayuz-kullanimi\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-10-14T19:32:06+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"36 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/solidity-ile-moduler-akilli-banka-foundry-ve-arayuz-kullanimi\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/solidity-ile-moduler-akilli-banka-foundry-ve-arayuz-kullanimi\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Solidity ile Mod\u00fcler Ak\u0131ll\u0131 Banka: Foundry ve Aray\u00fcz Kullan\u0131m\u0131","datePublished":"2025-10-14T19:32:06+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/solidity-ile-moduler-akilli-banka-foundry-ve-arayuz-kullanimi\/"},"wordCount":5347,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/solidity-ile-moduler-akilli-banka-foundry-ve-arayuz-kullanimi\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/solidity-ile-moduler-akilli-banka-foundry-ve-arayuz-kullanimi\/","url":"https:\/\/fatihsoysal.com\/blog\/solidity-ile-moduler-akilli-banka-foundry-ve-arayuz-kullanimi\/","name":"Solidity ile Mod\u00fcler Ak\u0131ll\u0131 Banka: Foundry ve Aray\u00fcz Kullan\u0131m\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-10-14T19:32:06+00:00","description":"Merkeziyetsiz finans (DeFi) d\u00fcnyas\u0131nda, g\u00fcvenli ve esnek bir bankac\u0131l\u0131k sistemi hayal edin. Solidity ile in\u015fa edilen mod\u00fcler bir ak\u0131ll\u0131 banka, bu hayali ger\u00e7e\u011fe d\u00f6n\u00fc\u015ft\u00fcr\u00fcyor. Bu makalede, Foundry ve aray\u00fczler kullanarak nas\u0131l ki\u015fiselle\u015ftirilebilir 'Deposit Box' sistemi kuraca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m \u00f6\u011frenecek, ak\u0131ll\u0131 s\u00f6zle\u015fme mimarisinin g\u00fcc\u00fcn\u00fc ke\u015ffedeceksiniz. Geleneksel bankac\u0131l\u0131k sistemlerinin karma\u015f\u0131kl\u0131\u011f\u0131 ve tekil hata noktalar\u0131, merkeziyetsiz d\u00fcnyaya ad\u0131m atan kullan\u0131c\u0131lar i\u00e7in ciddi endi\u015feler yaratmaktad\u0131r. Monolitik, yani tek bir b\u00fcy\u00fck s\u00f6zle\u015fmeden olu\u015fan yap\u0131lar, geli\u015ftirme s\u00fcrecini yava\u015flat\u0131rken, g\u00fcncellemeleri zorla\u015ft\u0131r\u0131r ve g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131n kapsam\u0131n\u0131 art\u0131rabilir. Bir ak\u0131ll\u0131 banka s\u00f6zle\u015fmesi hayal etti\u011finizde, kullan\u0131c\u0131lar\u0131n yat\u0131r\u0131mlar\u0131n\u0131 y\u00f6netti\u011fi, faiz kazand\u0131\u011f\u0131, belki de kredi ald\u0131\u011f\u0131 bir\u00e7ok farkl\u0131 fonksiyonu i\u00e7erecektir. T\u00fcm bu fonksiyonlar\u0131 tek bir devasa ak\u0131ll\u0131 s\u00f6zle\u015fmeye s\u0131\u011fd\u0131rmak, k\u0131sa vadede pratik g\u00f6r\u00fcnse de, uzun vadede s\u00fcrd\u00fcr\u00fclemez bir mimari olu\u015fturur.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/solidity-ile-moduler-akilli-banka-foundry-ve-arayuz-kullanimi\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/solidity-ile-moduler-akilli-banka-foundry-ve-arayuz-kullanimi\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/solidity-ile-moduler-akilli-banka-foundry-ve-arayuz-kullanimi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Solidity ile Mod\u00fcler Ak\u0131ll\u0131 Banka: Foundry ve Aray\u00fcz Kullan\u0131m\u0131"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/31855","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=31855"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/31855\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=31855"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=31855"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=31855"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}