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.

JavaScript'ten bir akıllı sözleşme çağırmak

işlemler
ön uç
JavaScript
web3.js
Yeni başlayan
✍jdourlens
📚EthereumDev
📆19 Nisan 2020
⏱️3 dakikalık okuma
İpucu yazarı 0x19dE91Af973F404EDF5B4c093983a7c6E3EC8ccE

Bu öğreticide, JavaScript'ten bir akıllı sözleşme fonksiyonunun nasıl çağrılacağını göreceğiz. İlk önce bir akıllı sözleşmenin durumunu okuyoruz (örneğin bir ERC20 sahibinin bakiyesi), ardından bir token transferi yaparak blok zincirinin durumunu değiştireceğiz. Blok zinciri ile etkileşim kurmak için bir JavaScript ortamı kurmaya önceden aşina olmalısınız.

Bu örnekler için DAI token'ını ele alacağız, test amacıyla ganache-cli kullanarak blok zincirini çatallayacağız ve zaten çok fazla DAI içeren bir adresin kilidini açacağız:

ganache-cli -f https://mainnet.infura.io/v3/[YOUR INFURA KEY] -d -i 66 1 --unlock 0x4d10ae710Bd8D1C31bd7465c8CBC3add6F279E81

Akıllı bir sözleşmeyle etkileşim kurmak için bir adrese ve ABI'ye ihtiyacımız olacak:

1const ERC20TransferABI = [
2 {
3 constant: false,
4 inputs: [
5 {
6 name: "_to",
7 type: "address",
8 },
9 {
10 name: "_value",
11 type: "uint256",
12 },
13 ],
14 name: "transfer",
15 outputs: [
16 {
17 name: "",
18 type: "bool",
19 },
20 ],
21 payable: false,
22 stateMutability: "nonpayable",
23 type: "function",
24 },
25 {
26 constant: true,
27 inputs: [
28 {
29 name: "_owner",
30 type: "address",
31 },
32 ],
33 name: "balanceOf",
34 outputs: [
35 {
36 name: "balance",
37 type: "uint256",
38 },
39 ],
40 payable: false,
41 stateMutability: "view",
42 type: "function",
43 },
44]
45
46const DAI_ADDRESS = "0x6b175474e89094c44da98b954eedeac495271d0f"
47
Tümünü göster
📋 Kopyala

Bu proje için, sadece balanceOf ve transfer fonksiyonunu korumak için tam ERC20 ABI'den bazı şeyleri çıkardık, ancak eksiksiz ERC20 ABI'ye buradan ulaşabilirsiniz.

Daha sonra akıllı sözleşmemizi somutlaştırmamız gerekiyor:

1const web3 = new Web3("http://localhost:8545")
2
3const daiToken = new web3.eth.Contract(ERC20TransferABI, DAI_ADDRESS)
4
📋 Kopyala

Ayrıca iki adres kuracağız:

  • transferi alacak olan ve
  • zaten kilidini açtığımız, gönderecek olan:
1const senderAddress = "0x4d10ae710Bd8D1C31bd7465c8CBC3add6F279E81"
2const receiverAddress = "0x19dE91Af973F404EDF5B4c093983a7c6E3EC8ccE"
3
📋 Kopyala

Sonraki bölümde, her iki adresin de tuttuğu mevcut token miktarını almak için balanceOf fonksiyonunu çağıracağız.

Call: Bir akıllı sözleşmeden değer okuma

İlk satır bir "sabit" yöntemi getirecek ve akıllı sözleşme yöntemini herhangi bir işlem göndermeden EVM'de çalıştıracaktır. Bunun için bir adresin ERC20 bakiyesini okuyacağız. ERC20 token'ları hakkındaki makalemizi okuyun.

ABI'yi sağladığınız somutlaştırılmış akıllı sözleşme yöntemlerine aşağıdaki şekilde erişebilirsiniz: yourContract.methods.methodname. call fonksiyonunu kullanarak fonksiyonu yürütmenin sonucunu alacaksınız.

1daiToken.methods.balanceOf(senderAddress).call(function (err, res) {
2 if (err) {
3 console.log("An error occured", err)
4 return
5 }
6 console.log("The balance is: ", res)
7})
8
📋 Kopyala

DAI ERC20'nin 18 ondalık basamağa sahip olduğunu unutmayın; bu, doğru miktarı elde etmek için 18 sıfırı kaldırmanız gerektiği anlamına gelir. uint256, JavaScript büyük sayısal değerleri işlemediğinden dizgi olarak döndürülür. JS'de büyük sayılarla nasıl başa çıkacağınızdan emin değilseniz, bignumber.js hakkındaki öğreticimize bakın.

Send: Akıllı sözleşme fonksiyonuna bir işlem gönderme

İkinci örnek için, ikinci adresimize 10 DAI göndermek için DAI akıllı sözleşmesinin transfer fonksiyonunu çağıracağız. Transfer fonksiyonu 2 parametreyi kabul eder: alıcı adres ve transfer edilcek token miktarı:

1daiToken.methods
2 .transfer(receiverAddress, "100000000000000000000")
3 .send({ from: senderAddress }, function (err, res) {
4 if (err) {
5 console.log("An error occured", err)
6 return
7 }
8 console.log("Hash of the transaction: " + res)
9 })
10
Tümünü göster
📋 Kopyala

Çağırma fonksiyonu, blok zincirine kazılacak işlemin hash değerini döndürür. Ethereum'da işlem hash değerleri tahmin edilebilirdir: Bu sayede işlem yapılmadan önce işlemin hash değerini alabiliriz (hash değerinin nasıl hesaplandığını buradan öğrenebilirsiniz).

Fonksiyon yalnızca işlemi blok zincirine gönderdiğinden, ne zaman çıkarıldığını ve blok zincirine dahil edildiğini öğrenene kadar sonucu göremeyiz. Bir sonraki öğreticide, bir işlemin hash değerini öğrenerek işlemin blok zincirinde yürütülmesinin nasıl bekleneceğini öğreneceğiz.

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

Bu sayfa yararlı oldu mu?