Ana içeriğe atla

Yeni Başlayanlar İçin Merhaba Dünya Akıllı Sözleşmesi

solidity
hardhat
alchemy
akıllı sözleşmeler
dağıtım
Başlangıç
elanh
31 Mart 2021
10 dakikalık okuma

Blokzincir geliştirmeye yeniyseniz ve nereden başlayacağınızı bilmiyorsanız veya sadece akıllı sözleşmeleri nasıl dağıtacağınızı ve onlarla nasıl etkileşime gireceğinizi anlamak istiyorsanız, bu rehber tam size göre. Sanal bir cüzdan olan MetaMask (opens in a new tab), 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 adımlarını inceleyeceğiz (bunların ne anlama geldiğini henüz anlamıyorsanız endişelenmeyin, açıklayacağız).

Bu eğitimin 2. bölümünde, akıllı sözleşmemiz burada dağıtıldıktan sonra onunla nasıl etkileşime girebileceğimizi inceleyeceğiz ve 3. bölümünde onu Etherscan'de nasıl yayınlayacağımızı ele alacağız.

Herhangi bir noktada sorularınız olursa Alchemy Discord (opens in a new tab) kanalından ulaşmaktan çekinmeyin!

Adım 1: Ethereum ağına bağlanın

Ethereum zincirine istekte bulunmanın birçok yolu vardır. Basitlik adına, kendi düğümlerimizi çalıştırmak zorunda kalmadan Ethereum zinciriyle iletişim kurmamızı sağlayan bir blokzincir geliştirici platformu ve API'si olan Alchemy'de ücretsiz bir hesap kullanacağız. Platform ayrıca, akıllı sözleşme dağıtımımızın arka planında neler olup bittiğini anlamak için bu eğitimde 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 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 oluşturarak bir API anahtarı üretebilirsiniz. Bu, Sepolia test ağına istekte bulunmamızı sağlayacaktır. Test ağlarına aşina değilseniz, bu sayfaya göz atın.

  1. Gezinme çubuğunda "Select an app" (Bir uygulama seç) seçeneğini belirleyip "Create new app" (Yeni uygulama oluştur) düğmesine tıklayarak Alchemy Kontrol Panelinizdeki "Create new app" sayfasına gidin.

Hello world create app

  1. Uygulamanıza "Hello World" adını verin, kısa bir açıklama sunun ve bir kullanım senaryosu seçin, örn. "Infra & Tooling". Ardından, "Ethereum"u arayın ve ağı seçin.

create app view hello world

  1. İlerlemek için "Next" (İleri) düğmesine, ardından "Create app" (Uygulama oluştur) düğmesine tıklayın ve işte bu kadar! Uygulamanız, kopyalanmaya hazır bir API Anahtarı ile birlikte gezinme çubuğu açılır menüsünde görünmelidir.

Adım 3: Bir Ethereum hesabı (adresi) oluşturun

İşlemleri göndermek ve almak için bir Ethereum hesabına ihtiyacımız var. Bu eğitim için, Ethereum hesap adresinizi yönetmek için kullanılan tarayıcıdaki sanal bir cüzdan olan MetaMask'ı kullanacağız. İşlemler hakkında daha fazla bilgi.

MetaMask'ı indirebilir ve buradan (opens in a new tab) ücretsiz olarak bir Ethereum hesabı oluşturabilirsiniz. Bir hesap oluştururken veya zaten bir hesabınız varsa, ağ açılır menüsünü kullanarak "Sepolia" test ağına geçtiğinizden emin olun (böylece gerçek parayla uğraşmamış oluruz).

Sepolia'nın listelendiğini görmüyorsanız, menüye, ardından Gelişmiş'e (Advanced) gidin ve "Test ağlarını göster" (Show test networks) seçeneğini açmak için aşağı kaydırın. Ağ seçim menüsünde, test ağlarının bir listesini bulmak için "Özel" (Custom) sekmesini seçin ve "Sepolia"yı seçin.

metamask sepolia example

Adım 4: Bir musluktan ether ekleyin

Akıllı sözleşmemizi test ağına dağıtmak için biraz 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ına gidebilirsiniz. Biri çalışmazsa, bazen kuruyabildikleri için diğerini deneyin. Ağ trafiği nedeniyle sahte ETH'nizi almanız biraz zaman alabilir. Kısa bir süre sonra MetaMask hesabınızda ETH görmelisiniz!

Adım 5: Bakiyenizi Kontrol Edin

Bakiyemizin orada olduğunu iki kez kontrol etmek için, Alchemy'nin composer 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ürecektir. MetaMask hesap adresinizi girip "Send Request" (İsteği Gönder) düğmesine tıkladıktan sonra şöyle bir yanıt görmelisiniz:

{ "jsonrpc": "2.0", "id": 0, "result": "0x2B5E3AF16B1880000" }

NOT: Bu sonuç ETH değil Wei cinsindendir. Wei, ether'in en küçük birimi olarak kullanılır. Wei'den ETH'ye dönüşüm şöyledir: 1 eth = 1018 wei. Yani 0x2B5E3AF16B1880000 değerini ondalık sayıya çevirirsek 5*10¹⁸ elde ederiz, bu da 5 ETH'ye eşittir.

Oh be! Sahte paramızın hepsi orada .

Adım 6: Projemizi başlatın

İlk olarak, projemiz için bir klasör oluşturmamız gerekecek. Komut satırınıza gidin ve şunu yazın:

mkdir hello-world
cd hello-world

Artık proje klasörümüzün içinde olduğumuza göre, projeyi başlatmak için npm init komutunu kullanacağız. Eğer npm henüz kurulu değilse, Node.js kurulum talimatlarını (opens in a new tab) izleyin (bu eğitim için Node.js ve npm'e ihtiyacımız olacak).

npm init

Kurulum sorularını nasıl yanıtladığınız pek önemli değil, referans olması için biz şu şekilde yaptık:

package.json dosyasını onaylayın ve artık hazırız!

Adım 7: Hardhat (opens in a new tab)'i İ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. Geliştiricilere, canlı zincire dağıtmadan önce akıllı sözleşmeler ve merkeziyetsiz uygulamalar (dapp'ler) oluştururken yerel olarak yardımcı olur.

hello-world projemizin içinde şunu çalıştırın:

npm install --save-dev hardhat

Kurulum 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 çalıştırın:

npx hardhat

Ardından bir karşılama mesajı ve ne yapmak istediğinizi seçme seçeneği görmelisiniz. "create an empty hardhat.config.js" seçeneğini belirleyin:

Bu, bizim için projemizin tüm kurulumunu belirteceğimiz (13. adımda) bir hardhat.config.js dosyası oluşturacaktır.

Adım 9: Proje klasörlerini 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:

mkdir contracts
mkdir scripts
  • contracts/, merhaba dünya akıllı sözleşme kod dosyamızı tutacağımız yerdir
  • scripts/, sözleşmemizi dağıtmak ve onunla etkileşime girmek için komut dosyalarını tutacağımız yerdir

Adım 10: Sözleşmemizi yazın

Kendi kendinize, ne zaman kod yazacağız diye soruyor olabilirsiniz?? İşte buradayız, 10. adımda.

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.‌

  1. "contracts" klasörüne gidin ve HelloWorld.sol adında yeni bir dosya oluşturun
  2. Aşağıda, bu eğitim için kullanacağımız Ethereum Vakfı'ndan örnek bir Merhaba Dünya akıllı sözleşmesi bulunmaktadır. Aşağıdaki içerikleri 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:

Bu, oluşturulduğunda bir mesajı depolayan ve update işlevi çağrılarak güncellenebilen süper basit bir akıllı sözleşmedir.

Adım 11: MetaMask ve Alchemy'yi projenize bağlayın

Bir MetaMask cüzdanı, 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ı kullanarak bir imza gerektirir. Programımıza bu izni sağlamak için özel anahtarımızı (ve Alchemy API anahtarını) bir ortam dosyasında güvenle saklayabiliriz.

İşlem gönderme hakkında daha fazla bilgi edinmek için, Web3 kullanarak işlem gönderme hakkındaki bu eğitime göz atın.

İlk olarak, proje dizininize dotenv paketini kurun:

npm install dotenv --save

Ardından, projemizin kök dizininde bir .env dosyası oluşturun ve MetaMask özel anahtarınızı ve HTTP Alchemy API URL'nizi buna ekleyin.

get alchemy api key

Alchemy API URL'sini Kopyalayın

.env dosyanız şu şekilde görünmelidir:

API_URL = "https://eth-sepolia.g.alchemy.com/v2/your-api-key"
PRIVATE_KEY = "your-metamask-private-key"

Bunları kodumuza fiilen bağlamak için, 13. adımda hardhat.config.js dosyamızda bu değişkenlere referans vereceğiz.

.env dosyasını işlemeyin (commit etmeyin)! Lütfen .env dosyanızı asla kimseyle paylaşmadığınızdan veya ifşa etmediğinizden emin olun, çünkü bunu yaparak sırlarınızı tehlikeye atmış olursunuz. Sürüm kontrolü kullanıyorsanız, .env dosyanızı bir gitignore dosyasına ekleyin.

Adım 12: Ethers.js'i Kurun

Ethers.js, standart JSON-RPC yöntemlerini daha kullanıcı dostu yöntemlerle sararak Ethereum ile etkileşime girmeyi ve istekte bulunmayı 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 son derece 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) bazı süper temiz sözleşme dağıtım yöntemlerine sahiptir).

Proje dizininizde şunu yazın:

npm install --save-dev @nomiclabs/hardhat-ethers "ethers@^5.0.0"

Bir sonraki adımda hardhat.config.js dosyamızda ethers'ı da gerektireceğiz.

Adım 13: hardhat.config.js dosyasını güncelleyin

Şimdiye kadar birkaç bağımlılık ve eklenti ekledik, şimdi projemizin hepsinden haberdar olması için hardhat.config.js dosyasını güncellememiz gerekiyor.

hardhat.config.js dosyanızı şu şekilde görünecek biçimde güncelleyin:

Adım 14: Sözleşmemizi derleyin

Şimdiye kadar 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 çalıştırın:

npx hardhat compile

SPDX license identifier not provided in source file hakkında bir uyarı alabilirsiniz, ancak bunun için endişelenmenize gerek yok — umarım diğer her şey iyi görünüyordur! Değilse, her zaman Alchemy Discord (opens in a new tab) kanalından mesaj atabilirsiniz.

Adım 15: Dağıtım komut dosyamızı yazın

Artık sözleşmemiz yazıldığına ve yapılandırma dosyamız hazır olduğuna göre, sözleşme dağıtım komut dosyamızı yazma zamanı geldi.

scripts/ klasörüne gidin ve deploy.js adında yeni bir dosya oluşturarak içine aşağıdaki içerikleri ekleyin:

Hardhat, Sözleşmeler eğitiminde (opens in a new tab) bu kod satırlarının her birinin ne yaptığını açıklamakta harika bir iş çıkarıyor, biz de onların açıklamalarını burada benimsedik.

const HelloWorld = await ethers.getContractFactory("HelloWorld");

Ethers.js'deki bir ContractFactory, yeni akıllı sözleşmeleri dağıtmak için kullanılan bir soyutlamadır, bu nedenle buradaki HelloWorld, merhaba dünya sözleşmemizin örnekleri için bir fabrikadır. hardhat-ethers eklentisini kullanırken ContractFactory ve Contract örnekleri varsayılan olarak ilk imzalayana bağlanır.

const hello_world = await HelloWorld.deploy();

Bir ContractFactory üzerinde deploy() çağırmak dağıtımı başlatacak ve bir Contract nesnesine çözümlenen bir Promise döndürecektir. Bu, akıllı sözleşme işlevlerimizin her biri için bir yöntemi olan nesnedir.

Adım 16: Sözleşmemizi dağıtın

Sonunda akıllı sözleşmemizi dağıtmaya hazırız! Komut satırına gidin ve şunu çalıştırın:

npx hardhat run scripts/deploy.js --network sepolia

Ardından şuna benzer bir şey görmelisiniz:

Contract deployed to address: 0x6cd7d44516a20882cEa2DE9f205bF401c0d23570

Sepolia Etherscan (opens in a new tab)'e gidip sözleşme adresimizi aratırsak, başarıyla dağıtıldığını görebilmeliyiz. İşlem şuna benzer görünecektir:

etherscan contract

From adresi MetaMask hesap adresinizle eşleşmelidir ve Alıcı (To) adresi "Contract Creation" (Sözleşme Oluşturma) diyecektir, ancak işleme tıklarsak sözleşme adresimizi To alanında göreceğiz:

etherscan transaction

Tebrikler! Ethereum zincirine az önce bir akıllı sözleşme dağıttınız 🎉

Arka planda neler olup bittiğini anlamak için Alchemy kontrol panelimizdeki (opens in a new tab) Explorer (Gezgin) sekmesine gidelim. Birden fazla Alchemy uygulamanız varsa, uygulamaya göre filtrelediğinizden ve "Hello World"ü seçtiğinizden emin olun. hello world explorer

Burada, .deploy() işlevini çağırdığımızda Hardhat/Ethers'ın arka planda bizim için yaptığı bir avuç JSON-RPC çağrısını göreceksiniz. Burada belirtilmesi gereken iki önemli çağrı, sözleşmemizi fiilen Sepolia zincirine yazma isteği olan eth_sendRawTransaction (opens in a new tab) ve hash verildiğinde işlemimiz hakkındaki bilgileri okuma isteği olan eth_getTransactionByHash (opens in a new tab)'dir (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 eğitime göz atın.

Bu eğitimin 1. bölümü için bu kadar, 2. bölümde başlangıç mesajımızı güncelleyerek akıllı sözleşmemizle fiilen etkileşime gireceğiz ve 3. bölümde herkesin onunla nasıl etkileşime gireceğini bilmesi için akıllı sözleşmemizi Etherscan'de yayınlayacağız.

Alchemy hakkında daha fazla bilgi edinmek ister misiniz? 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! Ayrıca Discord (opens in a new tab) kanalımıza da katıldığınızdan emin olun.