Ana içeriğe geç

Bu sayfanın güncellenmesine yardım edin

🌏

Bu sayfanın yeni bir sürümü vardır ancak şu anda yalnızca İngilizce'dir. Son sürümü çevirmemize yardımcı ol.

Sayfayı çevir
İngilizce'yi gör

Burada hata yok!🐛

Bu sayfa tercüme edilmiyor. Bu sayfayı şimdilik kasıtlı olarak İngilizce bıraktık.

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

solidity
hardhat
alchemy
akıllı sözleşmeler
başlarken
dağıtma
Yeni başlayan
✍elanh
📆31 Mart 2021
⏱️10 dakikalık okuma

Blok zinciri geliştirme konusunda yeniyseniz ve nereden başlayacağınızı bilmiyorsanız veya akıllı sözleşmelerin nasıl dağıtıldığını ve bunlarla nasıl etkileşime geçileceğini anlamak istiyorsanız bu rehber tam size göre. Bir sanal cüzdan (MetaMask), Solidity, Hardhat ve Alchemy kullanarak Ropsten test ağında basit bir akıllı sözleşme oluşturma ve dağıtma adımlarını inceleyeceğiz (bunların ne demek olduğunu anlamıyorsanız üzülmeyin, açıklayacağız).

Bu öğreticinin 2. bölümünde, dağıtıldıktan sonra akıllı sözleşmemizle nasıl etkileşime geçebileceğimizi inceleyeceğiz ve 3. bölümde, bunu Etherscan'de nasıl yayınlayacağımızı ele alacağız.

Herhangi bir noktada sorularınız varsa, Alchemy Discord'da 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 izin veren bir blok zinciri geliştirici platformu ve API olan Alchemy'de ücretsiz bir hesap kullanacağız. Platform ayrıca, akıllı sözleşme dağıtımımızda arka planda neler olup bittiğini anlamak için bu öğreticide yararlanacağımız izleme ve analitik için geliştirici araçlarına sahiptir. Henüz bir Alchemy hesabınız yoksa, buradan ücretsiz kaydolabilirsiniz.

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, Ropsten test ağına istekte bulunmamıza izin verecektir. Eğer test ağlarına aşina değilseniz, bu sayfaya bakınız.

  1. İmlecinizi gezinme çubuğundaki "Apps"in (Uygulamalar) üzerine gelip "Create App"e (Uygulama Oluştur) tıklayarak Alchemy Gösterge Panelinizdeki "Create App" sayfasına gidin

Merhaba dünya uygulama oluşturma

  1. Uygulamanıza "Hello World" adını verin, kısa bir açıklama yazın, Environment (Ortam) için "Staging"i (Hazırlama) seçin (uygulamanızın muhasebesi için kullanılır) ve network (ağ) için "Ropsten"i seçin.

merhaba dünya görüntüleme uygulamasını oluşturma

  1. "Create app"e (Uygulama oluştur) tıklamanız yeterlidir! Uygulamanız aşağıdaki tabloda görünmelidir.

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

İşlem göndermek ve almak için bir Ethereum hesabına ihtiyacımız var. Bu eğitim için, Ethereum hesap adresinizi yönetmek için kullanılan tarayıcı üstü bir sanal cüzdan olan MetaMask'i kullanacağız. İşlemler üzerine dahası.

Buradan ücretsiz olarak indirebilir ve bir MetaMask hesabı oluşturabilirsiniz. Bir hesap oluşturuyorsanız veya zaten bir hesabınız varsa, sağ üstteki "Ropsten Test Ağı"na geçtiğinizden emin olun (böylece gerçek parayla uğraşmayız).

metamask ropsten örneği

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. ETH almak için Ropsten musluğuna gidebilir ve Ropsten hesap adresinizi girip "Send Ropsten ETH"e (Ropsten ETH Gönder) tıklayabilirsiniz. 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 yerinde olduğundan emin olmak için Alchemy düzenleyici arayıcını kullanarak bir eth_getBalance talebi oluşturalım. Bu, cüzdanımızdaki ETH miktarını döndürür. MetaMask hesap adresinizi girdikten ve "Send Request"e tıkladıktan sonra aşağıdaki gibi bir yanıt görmelisiniz:

1{ "jsonrpc": "2.0", "id": 0, "result": "0x2B5E3AF16B1880000" }
2
📋 Kopyala

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

Vay be! Tüm sahte paramız yerinde 🤑.

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-world
2cd hello-world
3

Artık proje klasörümüzün içinde olduğumuza göre, projeyi başlatmak için npm init kullanacağız. Hâlihazırda npm kurulu değilse, bu talimatları izleyin (Node.js'ye de ihtiyacımız olacak, onu da indirin!).

1npm init
2

Kurulum sorularına nasıl cevap verdiğiniz çok önemli değil; referans olması için nasıl yaptığımız aşağıda açıklanmıştır:

1package name: (hello-world)
2version: (1.0.0)
3description: hello world smart contract
4entry point: (index.js)
5test command:
6git repository:
7keywords:
8author:
9license: (ISC)
10About to write to /Users/.../.../.../hello-world/package.json:
11
12{
13 "name": "hello-world",
14 "version": "1.0.0",
15 "description": "hello world smart contract",
16 "main": "index.js",
17 "scripts": {
18 "test": "echo \\"Error: no test specified\\" && exit 1"
19 },
20 "author": "",
21 "license": "ISC"
22}
23
Tümünü göster

package.json'ı onayladıktan sonra hazırız!

Adım 7: Hardhat{#step-7}'i indirin

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. Canlı zincire dağıtmadan önce yerel olarak akıllı sözleşmeler ve dApp'ler oluştururken geliştiricilere yardımcı olur.

hello-world projemizin içinde şunu yürütün:

1npm install --save-dev hardhat
2

Kurulum talimatları 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 hardhat
2

Daha sonra bir karşılama mesajı ve ne yapmak istediğinizi seçme seçeneği görmelisiniz. "create an empty hardhat.config.js"yi (boş bir hardhat.config.js oluştur) seçin:

1888 888 888 888 888
2888 888 888 888 888
3888 888 888 888 888
48888888888 8888b. 888d888 .d88888 88888b. 8888b. 888888
5888 888 "88b 888P" d88" 888 888 "88b "88b 888
6888 888 .d888888 888 888 888 888 888 .d888888 888
7888 888 888 888 888 Y88b 888 888 888 888 888 Y88b.
8888 888 "Y888888 888 "Y88888 888 888 "Y888888 "Y888
9
10👷 Welcome to Hardhat v2.0.11 👷‍?
11
12Ne yapmak istersin? …
13Create a sample project
14❯ Create an empty hardhat.config.js
15Quit
16
Tümünü göster

Bu, bizim için bir hardhat.config.js dosyası oluşturacak ve burada projemiz için tüm ayarları belirteceğiz (adım 13'te).

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 contracts
2mkdir scripts
3
  • contracts/ merhaba dünya akıllı sözleşme kod dosyamızı tutacağımız yerdir
  • scripts/, sözleşmemizi dağıtmak ve etkileşim kurmak için komut dosyalarını tutacağımız yerdir

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

Ne zaman kod yazmaya başlayacağınızı merak ediyor olabilirsiniz. Evet, Adım 10'a kadar geldik.

Favori düzenleyicinizde hello-world projesini açın. (biz VSCode'u tercih ediyoruz). Akıllı sözleşmeler, HelloWorld.sol akıllı sözleşmemizi yazmak için kullanacağımız Solidity adlı bir dilde yazılır.‌

  1. "Sözleşmeler" klasörüne gidin ve HelloWorld.sol adlı yeni bir dosya oluşturun
  2. Aşağıda, bu öğretici için kullanacağımız Ethereum Vakfı'ndan örnek bir Hello World akıllı sözleşmesi bulunmaktadır. Aşağıdaki içeriği kopyalayıp HelloWorld.sol dosyanıza yapıştırın ve bu sözleşmenin ne yaptığını anlamak için yorumları okuduğunuzdan emin olun:
1// Specifies the version of Solidity, using semantic versioning.
2// Learn more: https://solidity.readthedocs.io/en/v0.5.10/layout-of-source-files.html#pragma
3pragma solidity ^0.7.0;
4
5// Defines a contract named `HelloWorld`.
6// A contract is a collection of functions and data (its state). Once deployed, a contract resides at a specific address on the Ethereum blockchain. Learn more: https://solidity.readthedocs.io/en/v0.5.10/structure-of-a-contract.html
7contract HelloWorld {
8
9 // Declares a state variable `message` of type `string`.
10 // State variables are variables whose values are permanently stored in contract storage. The keyword `public` makes variables accessible from outside a contract and creates a function that other contracts or clients can call to access the value.
11 string public message;
12
13 // Similar to many class-based object-oriented languages, a constructor is a special function that is only executed upon contract creation.
14 // Constructors are used to initialize the contract's data. Learn more:https://solidity.readthedocs.io/en/v0.5.10/contracts.html#constructors
15 constructor(string memory initMessage) {
16
17 // Accepts a string argument `initMessage` and sets the value into the contract's `message` storage variable).
18 message = initMessage;
19 }
20
21 // A public function that accepts a string argument and updates the `message` storage variable.
22 function update(string memory newMessage) public {
23 message = newMessage;
24 }
25}
26
Tümünü göster
📋 Kopyala

Bu, oluşturulduktan sonra bir mesaj depolayan ve update fonksiyonu çağrılarak güncellenebilen süper basit bir akıllı sözleşmedir.

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

Bir MetaMask cüzdanı ile Alchemy hesabı oluşturduk ve akıllı sözleşmemizi yazdık, şimdi üçünü birleştirme 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 bakın.

İlk önce dotenv paketini proje dizininize kurun:

1npm install dotenv --save
2

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

  • Özel anahtarınızı almak için şu talimatları takip edin
  • HTTP Alchemy API URL'sini almak için aşağıya göz atın

alchemy api anahtarı alma

Alchemy API URL'sini kopyalayın

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

1API_URL = "https://eth-ropsten.alchemyapi.io/v2/your-api-key"
2PRIVATE_KEY = "your-metamask-private-key"
3

Bunları kodumuza gerçekten bağlamak için, adım 13'te hardhat.config.js dosyamızda bu değişkenlere başvuracağız.

.env taahhüt etmeyin! Lütfen .env dosyanızı asla kimseyle paylaşmadığınızdan veya ifşa etmediğinizden emin olun, çünkü bunu yaparken sırlarınızı tehlikeye atıyorsunuz. Sürüm kontrolü kullanıyorsanız, .env dosyanızı bir gitignore dosyasına ekleyin.

Adım 12: Ethers.js'yi kurun

Ethers.js, standart JSON-RPC yöntemlerini daha kullanıcı dostu yöntemlerle birleştirerek Ethereum'la etkileşimde bulunmayı ve Ethereum'a istek göndermeyi kolaylaştıran bir kütüphanedir.

Hardhat, ek araçlar ve genişletilmiş işlevsellik için Eklentiler'i entegre etmeyi çok kolaylaştırır. Sözleşme dağıtımı için Ethers eklentisinden yararlanacağız (Ethers.js'nin bazı aşırı temiz sözleşme dağıtım yöntemleri vardır).

Proje klasörünüzde şunu yazın:

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

Bir sonraki adımda hardhat.config.js'mizde de ether'lara ihtiyacımız olacak.

Adım 13: hardhat.config.js'yi güncelleyin

Şimdiye kadar birkaç bağımlılık ve eklenti ekledik, şimdi projemizin bunların hepsini tanıması için hardhat.config.js'yi güncellememiz gerekiyor.

hardhat.config.js dosyanızı şöyle görünecek şekilde güncelleyin:

1require('dotenv').config();
2
3require("@nomiclabs/hardhat-ethers");
4const { API_URL, PRIVATE_KEY } = process.env;
5
6/**
7* @type import('hardhat/config').HardhatUserConfig
8*/
9module.exports = {
10 solidity: "0.7.3",
11 defaultNetwork: "ropsten",
12 networks: {
13 hardhat: {},
14 ropsten: {
15 url: API_URL,
16 accounts: [`0x${PRIVATE_KEY}`]
17 }
18 },
19}
20
Tümünü göster

Adı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örevlerden biridir.

Komut satırından şunu yürütün:

1npx hardhat compile
2

SPDX license identifier not provided in source file uyarısı (Kaynak dosyada verilmeyen SPDX lisans tanımlayıcısı) alabilirsiniz, ancak bunun için endişelenmenize gerek yok, geri kalan her şey düzgün olacaktır! Düzgün değilse, istediğiniz zaman Alchemy discord'da mesaj gönderebilirsiniz.

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 kullanıma hazır olduğuna göre, sözleşme dağıtım komut dosyanızı yazmanın zamanı geldi.

scripts/ klasörüne gidin ve aşağıdaki içeriği ekleyerek deploy.js adlı yeni bir dosya oluşturun:

1async function main() {
2 const HelloWorld = await ethers.getContractFactory("HelloWorld");
3
4 // Start deployment, returning a promise that resolves to a contract object
5 const hello_world = await HelloWorld.deploy("Hello World!");
6 console.log("Contract deployed to address:", hello_world.address);}
7
8main()
9 .then(() => process.exit(0))
10 .catch(error => {
11 console.error(error);
12 process.exit(1);
13 });
14
Tümünü göster

Hardhat, bu kod satırlarının her birinin ne işe yaradığını Sözleşme öğreticisinde harika bir şekilde açıklıyor, Hardhat açıklamalarını buraya aktardık.

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

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

1const hello_world = await HelloWorld.deploy();
2

Bir ContractFactory üzerinde deploy() öğesinin çağrılması, dağıtımı başlatır ve bir Contract olarak çözümlenen bir Promise döndürür. Bu, akıllı sözleşme fonksiyonlarımızın her biri için bir yöntemi olan nesnedir.

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 yürütün:

1npx hardhat run scripts/deploy.js --network ropsten
2

Daha sonra şöyle bir şey görmelisiniz:

1Contract deployed to address: 0x6cd7d44516a20882cEa2DE9f205bF401c0d23570
2

Ropsten etherscan'e gidersek ve sözleşme adresimizi ararsak, bunun başarıyla dağıtıldığını görebiliriz. İşlem şunun gibi gözükecektir:

etherscan sözleşmesi

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

etherscan işlemi

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

Perde arkasında neler olduğunu anlamak için Alchemy gösterge panelimizde Explorer (Gezgin) sekmesine gidelim. Birden fazla Alchemy uygulamanız varsa, uygulamaya göre filtreleme yaptığınızdan ve "Hello World"ü seçtiğinizden emin olun. merhaba dünya gezgini

Burada, .deploy() fonksiyonunu çağırdığımızda Hardhat/Ethers'ın bizim için arka planda yaptığı bir avuç JSON-RPC çağrısı göreceksiniz. Burada belirtilmesi gereken iki önemli şey, akıllı sözleşmemizi Ropsten zincirine yazma isteği olan eth_sendRawTransaction ve hash değerine göre işlemimiz hakkındaki bilgileri okuma isteği olan (işlem gönderirken sık kullanılan bir şablon) eth_getTransactionByHash öğeleridir. İşlem gönderme hakkında daha fazlasını öğrenmek için, Web3 kullanarak işlem gönderme üzerine olan şu öğreticiye göz atın

Öğreticinin 1. bölümü bu kadar, 2. bölümde ilk mesajımızı güncelleyerek akıllı sözleşmemizle gerçekten etkileşime geçeceğiz ve 3. bölümde herkesin akıllı sözleşmemizle nasıl etkileşimde bulunacağını bilmesi için akıllı sözleşmemizi Etherscan'da yayınlayacağız.

Alchemy hakkında daha fazla bilgi edinmek mi istiyorsunuz? Web sitemize göz atın. Hiç bir güncellemeyi kaçırmak istemiyor musunuz? Bültenimize buradan abone olun! Ayrıca Twitter'ımızı takip ettiğinizden ve Discord'umuza katıldığınızdan da emin olun.

Son düzenleme: , Invalid DateTime
Sayfayı düzenle

Bu sayfa yararlı oldu mu?