Yeni Başlayanlar için Merhaba Dünya Akıllı Sözleşmesi
Blok zinciri geliştirme konusunda yeniyseniz ve nereden başlayacağınızı bilmiyorsanız veya sadece akıllı sözleşmelerin nasıl dağıtılacağını ve onlarla nasıl etkileşim kurulacağını anlamak istiyorsanız, bu kılavuz tam size göre. Sanal bir MetaMask (opens in a new tab) cüzdanı, Solidity (opens in a new tab), Hardhat (opens in a new tab) ve Alchemy (opens in a new tab) kullanarak Sepolia test ağında basit bir akıllı sözleşme oluşturma ve dağıtma sürecini adım adım anlatacağız (bu terimlerin ne anlama geldiğini henüz bilmiyorsanız endişelenmeyin, açıklayacağız).
Bu öğreticinin 2. bölümünde (opens in a new tab), akıllı sözleşmemiz dağıtıldıktan sonra onunla nasıl etkileşim kurabileceğimizi ele alacağız ve 3. bölümde (opens in a new tab) ise Etherscan'de nasıl yayınlayacağımızı anlatacağız.
Herhangi bir noktada sorularınız olursa Alchemy Discord (opens in a new tab) üzerinden bize ulaşmaktan çekinmeyin!
Adım 1: Ethereum ağına bağlanın
Ethereum zincirine istek göndermenin birçok yolu vardır. Basit olması için, kendi düğümlerimizi çalıştırmak zorunda kalmadan Ethereum zinciriyle iletişim kurmamıza olanak tanıyan bir blok zinciri geliştirici platformu ve API'si olan Alchemy'de ücretsiz bir hesap kullanacağız. Platform ayrıca, bu öğreticide akıllı sözleşme dağıtımımızın perde arkasında neler olup bittiğini anlamak için yararlanacağımız izleme ve analiz için geliştirici araçlarına da sahiptir. Henüz bir Alchemy hesabınız yoksa, buradan ücretsiz olarak kaydolabilirsiniz (opens in a new tab).
Adım 2: Uygulamanızı (ve API anahtarınızı) oluşturun
Bir Alchemy hesabı oluşturduktan sonra, bir uygulama yaratarak bir API anahtarı oluşturabilirsiniz. Bu, Sepolia test ağına istekte bulunmamıza izin verecektir. Test ağlarına aşina değilseniz, bu sayfaya göz atın.
- Alchemy Panonuzda, gezinme çubuğundan "Bir uygulama seçin" ögesini seçip "Yeni uygulama oluştur" düğmesine tıklayarak "Yeni uygulama oluştur" sayfasına gidin.
- Uygulamanıza “Merhaba Dünya” adını verin, kısa bir açıklama sunun ve örneğin "Altyapı ve Araçlar" gibi bir kullanım durumu seçin. Ardından, "Ethereum" için arama yapın ve ağı seçin.
- Devam etmek için "İleri"ye, ardından “Uygulama oluştur”a tıklayın, hepsi bu kadar! Uygulamanız, kopyalanmaya hazır bir API Anahtarı ile birlikte gezinme çubuğundaki açılır menüde görünmelidir.
Adım 3: Bir Ethereum hesabı (adres) oluşturun
İşlem göndermek ve almak için bir Ethereum hesabına ihtiyacımız var. Bu öğretici için, Ethereum hesap adresinizi yönetmek için kullanılan tarayıcıda sanal bir cüzdan olan MetaMask'ı kullanacağız. İşlemler hakkında daha fazla bilgi.
Buradan (opens in a new tab) MetaMask'ı indirebilir ve ücretsiz bir Ethereum hesabı oluşturabilirsiniz. Bir hesap oluştururken veya zaten bir hesabınız varsa, (gerçek parayla işlem yapmamak için) ağ açılır menüsünü kullanarak "Sepolia" test ağına geçtiğinizden emin olun.
Sepolia'yı listede görmüyorsanız, menüye, ardından Gelişmiş'e gidin ve "Test ağlarını göster" seçeneğini açmak için aşağı kaydırın. Ağ seçim menüsünde, test ağları listesini bulmak için "Özel" sekmesini seçin ve "Sepolia"yı seçin.
Adım 4: Bir musluktan ether ekleyin
Akıllı sözleşmemizi test ağına dağıtmak için sahte Eth'ye ihtiyacımız olacak. Sepolia ETH almak için, çeşitli muslukların bir listesini görüntülemek üzere Sepolia ağ ayrıntıları sayfasına gidebilirsiniz. Biri çalışmazsa, başka birini deneyin çünkü bazen kaynakları tükenebilir. Ağ trafiği nedeniyle sahte ETH'nizi almanız biraz zaman alabilir. Kısa bir süre sonra MetaMask hesabınızda ETH'yi görmelisiniz!
Adım 5: Bakiyenizi kontrol edin
Bakiyemizin orada olup olmadığını iki kez kontrol etmek için, Alchemy'nin oluşturucu aracını (opens in a new tab) kullanarak bir eth_getBalance isteği yapalım. Bu, cüzdanımızdaki ETH miktarını döndürür. MetaMask hesap adresinizi girdikten ve "Send Request"e tıkladıktan sonra aşağıdaki gibi bir yanıt görmelisiniz:
1{ "jsonrpc": "2.0", "id": 0, "result": "0x2B5E3AF16B1880000" }NOT: Bu sonuç ETH değil, wei cinsindendir. Wei, ether'ın en küçük birimi olarak kullanılır. wei'den ETH'ye dönüşüm: 1 eth = 1018 wei'dir. Yani 0x2B5E3AF16B1880000 ondalık sayıya dönüştürürsek, 5 ETH'ye eşit olan 5*10¹⁸ değerini elde ederiz.
Vay be! Sahte paramızın tamamı burada .
Adım 6: Projemizi başlatın
Öncelikle projemiz için bir klasör oluşturmamız gerekecek. Komut satırınıza gidin ve şunu yazın:
1mkdir hello-world2cd hello-worldArtık proje klasörümüzün içinde olduğumuza göre projeyi başlatmak için npm init komutunu kullanacağız. Eğer npm zaten kurulu değilse, bu talimatları (opens in a new tab) izleyin (Node.js'e de ihtiyacımız olacak, bu yüzden onu da indirin!).
1npm initKurulum sorularını nasıl yanıtladığınız gerçekten önemli değil, referans olması için bizim nasıl yaptığımız aşağıda verilmiştir:
1package name: (hello-world)2version: (1.0.0)3description: merhaba dünya akıllı sözleşmesi4entry point: (index.js)5test command:6git repository:7keywords:8author:9license: (ISC)10About to write to /Users/.../.../.../hello-world/package.json:1112{13 "name": "hello-world",14 "version": "1.0.0",15 "description": "merhaba dünya akıllı sözleşmesi",16 "main": "index.js",17 "scripts": {18 "test": "echo \"Error: no test specified\" && exit 1"19 },20 "author": "",21 "license": "ISC"22}Tümünü gösterpackage.json dosyasını onaylayın ve artık hazırız!
Adım 7: Hardhat (opens in a new tab) İndirin
Hardhat, Ethereum yazılımınızı derlemek, dağıtmak, test etmek ve hatalarını ayıklamak için bir geliştirme ortamıdır. Bu geliştiricilere canlı zincirde dağıtmadan önce akıllı sözleşmelerini ve merkeziyetsiz uygulamalarını geliştirirken yardımcı olur.
hello-world projemizin içinde şunu çalıştırın:
1npm install --save-dev hardhatKurulum talimatları (opens in a new tab) hakkında daha fazla ayrıntı için bu sayfaya göz atın.
Adım 8: Hardhat projesi oluşturun
Proje klasörümüzün içinde şunu yürütün:
1npx hardhatDaha sonra bir karşılama mesajı ve ne yapmak istediğinizi seçme seçeneği görmelisiniz. "create an empty hardhat.config.js"yi (boş bir hardhat.config.js oluştur) seçin:
1888 888 888 888 8882888 888 888 888 8883888 888 888 888 88848888888888 8888b. 888d888 .d88888 88888b. 8888b. 8888885888 888 "88b 888P" d88" 888 888 "88b "88b 8886888 888 .d888888 888 888 888 888 888 .d888888 8887888 888 888 888 888 Y88b 888 888 888 888 888 Y88b.8888 888 "Y888888 888 "Y88888 888 888 "Y888888 "Y888910👷 Hardhat v2.0.11'e Hoş Geldiniz 👷?1112Ne yapmak istersiniz? …13Örnek bir proje oluştur14❯ Boş bir hardhat.config.js oluştur15ÇıkışTümünü gösterBu, bizim için projemizin tüm kurulumunu belirleyeceğimiz bir hardhat.config.js dosyası oluşturacaktır (13. adımda).
Adım 9: Proje klasörleri ekleyin
Projemizi düzenli tutmak için iki yeni klasör oluşturacağız. Komut satırınızda projenizin kök dizinine gidin ve şunu yazın:
1mkdir contracts2mkdir scriptscontracts/, merhaba dünya akıllı sözleşme kodu dosyamızı tutacağımız yerdirscripts/, sözleşmemizi dağıtmak ve onunla etkileşim kurmak için komut dosyalarını tutacağımız yerdir
Adım 10: Sözleşmemizi yazın
Ne zaman kod yazmaya başlayacağımızı merak ediyor olabilirsiniz?? İşte geldik, 10. adıma.
hello-world projesini favori düzenleyicinizde açın (biz VSCode (opens in a new tab)'u seviyoruz). Akıllı sözleşmeler, HelloWorld.sol akıllı sözleşmemizi yazmak için kullanacağımız Solidity adlı bir dilde yazılır.
- “contracts” klasörüne gidin ve HelloWorld.sol adında yeni bir dosya oluşturun.
- Aşağıda, bu öğretici için kullanacağımız Ethereum Vakfı'ndan örnek bir Merhaba Dünya akıllı sözleşmesi bulunmaktadır. Aşağıdaki içeriği kopyalayıp HelloWorld.sol dosyanıza yapıştırın ve bu sözleşmenin ne yaptığını anlamak için yorumları okuduğunuzdan emin olun:
1// Anlamsal sürümleme kullanarak Solidity sürümünü belirtir.2// Daha fazla bilgi edinin: https://solidity.readthedocs.io/en/v0.5.10/layout-of-source-files.html#pragma3pragma solidity ^0.7.0;45// `HelloWorld` adında bir sözleşme tanımlar.6// Bir sözleşme, fonksiyonlar ve verilerden (durumundan) oluşan bir koleksiyondur. Dağıtıldıktan sonra, bir sözleşme Ethereum blok zincirinde belirli bir adreste bulunur. Daha fazla bilgi edinin: https://solidity.readthedocs.io/en/v0.5.10/structure-of-a-contract.html7contract HelloWorld {89 // `string` türünde `message` adında bir durum değişkeni bildirir.10 // Durum değişkenleri, değerleri kalıcı olarak sözleşme depolama alanında saklanan değişkenlerdir. `public` anahtar kelimesi, değişkenleri bir sözleşmenin dışından erişilebilir hale getirir ve diğer sözleşmelerin veya istemcilerin değere erişmek için çağırabileceği bir fonksiyon oluşturur.11 string public message;1213 // Birçok sınıf tabanlı nesne yönelimli dilde olduğu gibi, kurucu yalnızca sözleşme oluşturulurken yürütülen özel bir fonksiyondur.14 // Kurucular, sözleşmenin verilerini başlatmak için kullanılır. Daha fazla bilgi edinin: https://solidity.readthedocs.io/en/v0.5.10/contracts.html#constructors15 constructor(string memory initMessage) {1617 // `initMessage` dize bağımsız değişkenini kabul eder ve değeri sözleşmenin `message` depolama değişkenine ayarlar).18 message = initMessage;19 }2021 // Bir dize bağımsız değişkenini kabul eden ve `message` depolama değişkenini güncelleyen bir genel fonksiyon.22 function update(string memory newMessage) public {23 message = newMessage;24 }25}Tümünü gösterBu, oluşturma sırasında bir mesaj depolayan ve update fonksiyonu çağrılarak güncellenebilen çok basit bir akıllı sözleşmedir.
Adım 11: MetaMask ve Alchemy'yi projenize bağlayın
Bir MetaMask cüzdanı ve Alchemy hesabı oluşturduk ve akıllı sözleşmemizi yazdık, şimdi bu üçünü birbirine bağlama zamanı.
Sanal cüzdanınızdan gönderilen her işlem, benzersiz özel anahtarınızı kullanan bir imza gerektirir. Programımıza bu izni sağlamak için özel anahtarımızı (ve Alchemy API anahtarımızı) bir ortam dosyasında güvenle saklayabiliriz.
İşlem gönderme hakkında daha fazla bilgi edinmek için, web3 kullanarak işlem göndermeyle ilgili bu öğreticiye göz atın.
İlk önce dotenv paketini proje dizininize kurun:
1npm install dotenv --saveArdından, projemizin kök dizininde bir .env dosyası oluşturun ve MetaMask özel anahtarınızı ve HTTP Alchemy API URL'nizi buna ekleyin.
- Özel anahtarınızı dışa aktarmak için bu talimatları (opens in a new tab) izleyin.
- HTTP Alchemy API URL'sini almak için aşağıya bakın
Alchemy API URL'sini Kopyalayın
.env dosyanız şu şekilde görünmelidir:
1API_URL = "https://eth-sepolia.g.alchemy.com/v2/your-api-key"2PRIVATE_KEY = "your-metamask-private-key"Bunları gerçekten kodumuza bağlamak için 13. adımda hardhat.config.js dosyamızdaki bu değişkenlere başvuracağız.
.env dosyasını commit'lemeyin! Lütfen .env dosyanızı asla kimseyle paylaşmadığınızdan veya ifşa etmediğinizden emin olun, çünkü bunu yaparken sırlarınızı tehlikeye atıyorsunuz. Sürüm kontrolü kullanıyorsanız, .env dosyanızı bir gitignore dosyasına ekleyin.Adım 12: Ethers.js'i Yükleyin
Ethers.js, standart JSON-RPC yöntemlerini daha kullanıcı dostu yöntemlerle sarmalayarak Ethereum ile etkileşim kurmayı ve istek göndermeyi kolaylaştıran bir kütüphanedir.
Hardhat, ek araçlar ve genişletilmiş işlevsellik için Eklentileri (opens in a new tab) entegre etmeyi çok kolaylaştırır. Sözleşme dağıtımı için Ethers eklentisinden (opens in a new tab) yararlanacağız (Ethers.js (opens in a new tab) çok temiz sözleşme dağıtım yöntemlerine sahiptir).
Proje klasörünüzde şunu yazın:
1npm install --save-dev @nomiclabs/hardhat-ethers "ethers@^5.0.0"Bir sonraki adımda hardhat.config.js dosyamızda da ethers gerektireceğiz.
Adım 13: hardhat.config.js dosyasını güncelleyin
Şimdiye kadar birkaç bağımlılık ve eklenti ekledik, şimdi projemizin hepsini tanıması için hardhat.config.js dosyasını güncellememiz gerekiyor.
hardhat.config.js dosyanızı aşağıdaki gibi görünecek şekilde güncelleyin:
1require('dotenv').config();23require("@nomiclabs/hardhat-ethers");4const { API_URL, PRIVATE_KEY } = process.env;56/**7* @type import('hardhat/config').HardhatUserConfig8*/9module.exports = {10 solidity: "0.7.3",11 defaultNetwork: "sepolia",12 networks: {13 hardhat: {},14 sepolia: {15 url: API_URL,16 accounts: [`0x${PRIVATE_KEY}`]17 }18 },19}Tümünü gösterAdım 14: Sözleşmemizi derleyin
Şimdiye kadar yaptığımız her şeyin çalıştığından emin olmak için sözleşmemizi derleyelim. compile görevi, yerleşik hardhat görevlerinden biridir.
Komut satırından şunu yürütün:
1npx hardhat compileSPDX license identifier not provided in source file hakkında bir uyarı alabilirsiniz, ancak bunun için endişelenmenize gerek yok — umarız diğer her şey yolundadır! Sorun yaşarsanız Alchemy Discord (opens in a new tab) üzerinden her zaman mesaj atabilirsiniz.
Adım 15: Dağıtım betiğimizi yazın
Artık sözleşmemiz yazıldığına ve yapılandırma dosyamız kullanıma hazır olduğuna göre, sözleşme dağıtım komut dosyanızı yazmanın zamanı geldi.
scripts/ klasörüne gidin ve deploy.js adında yeni bir dosya oluşturup içine aşağıdaki içeriği ekleyin:
1async function main() {2 const HelloWorld = await ethers.getContractFactory("HelloWorld");34 // Dağıtımı başlatır, bir sözleşme nesnesine çözümlenen bir promise döndürür5 const hello_world = await HelloWorld.deploy("Hello World!");6 console.log("Sözleşme şu adrese dağıtıldı:", hello_world.address);}78main()9 .then(() => process.exit(0))10 .catch(error => {11 console.error(error);12 process.exit(1);13 });Tümünü gösterHardhat, Sözleşmeler öğreticisinde (opens in a new tab) bu kod satırlarının her birinin ne işe yaradığını harika bir şekilde açıklıyor, biz de buraya onların açıklamalarını aldık.
1const HelloWorld = await ethers.getContractFactory("HelloWorld");ethers.js'deki bir ContractFactory, yeni akıllı sözleşmeler dağıtmak için kullanılan bir soyutlamadır, bu nedenle buradaki HelloWorld, bizim merhaba dünya sözleşmemizin örnekleri için bir fabrikadır. hardhat-ethers eklentisini kullanırken, ContractFactory ve Contract örnekleri varsayılan olarak ilk imzalayana bağlanır.
1const hello_world = await HelloWorld.deploy();Bir ContractFactory üzerinde deploy() çağırmak dağıtımı başlatır ve bir Contract'a çözümlenen bir Promise döndürür. Bu, akıllı sözleşme fonksiyonlarımızın her biri için bir yöntemi olan nesnedir.
Adım 16: Sözleşmemizi dağıtın
Sonunda akıllı sözleşmemizi uygulamaya hazırız! Komut satırına gidin ve şunu çalıştırın:
1npx hardhat run scripts/deploy.js --network sepoliaDaha sonra şöyle bir şey görmelisiniz:
1Sözleşme şu adrese dağıtıldı: 0x6cd7d44516a20882cEa2DE9f205bF401c0d23570Sepolia etherscan (opens in a new tab) sitesine gider ve sözleşme adresimizi aratırsak, başarıyla dağıtıldığını görebilmeliyiz. İşlem şunun gibi gözükecektir:
From adresi, MetaMask hesap adresinizle eşleşmelidir ve To adresinde “Contract Creation” yazar, ancak işleme tıklarsak To alanında sözleşme adresimizi görürüz:
Tebrikler! Ethereum zincirine bir akıllı sözleşme dağıttınız 🎉
Perde arkasında neler olduğunu anlamak için Alchemy gösterge panelimizdeki (opens in a new tab) Explorer sekmesine gidelim. Birden fazla Alchemy uygulamanız varsa, uygulamaya göre filtrelediğinizden ve “Merhaba Dünya”yı seçtiğinizden emin olun.

Burada, .deploy() fonksiyonunu çağırdığımızda Hardhat/Ethers'in bizim için perde arkasında yaptığı bir avuç JSON-RPC çağrısı göreceksiniz. Burada dikkat çekilmesi gereken iki önemli çağrı, aslında sözleşmemizi Sepolia zincirine yazma isteği olan eth_sendRawTransaction (opens in a new tab) ve karma değeri verildiğinde işlemimiz hakkındaki bilgileri okuma isteği olan eth_getTransactionByHash (opens in a new tab) çağrısıdır (işlemlerde tipik bir modeldir). İşlem gönderme hakkında daha fazla bilgi edinmek için, Web3 kullanarak işlem gönderme hakkındaki bu öğreticiye göz atın.
Bu öğreticinin 1. bölümü bu kadar; 2. bölümde, ilk mesajımızı güncelleyerek akıllı sözleşmemizle gerçekten etkileşime gireceğiz (opens in a new tab) ve 3. bölümde herkesin onunla nasıl etkileşim kuracağını bilmesi için akıllı sözleşmemizi Etherscan'de yayınlayacağız (opens in a new tab).
Alchemy hakkında daha fazla bilgi edinmek mi istiyorsunuz? Web sitemize (opens in a new tab) göz atın. Hiçbir güncellemeyi kaçırmak istemiyor musunuz? Buradan (opens in a new tab) bültenimize abone olun! Discord (opens in a new tab) sunucumuza da katıldığınızdan emin olun.**.
Sayfanın son güncellenmesi: 5 Aralık 2025





