Ana içeriğe geç
Change page

JavaScript API kütüphaneleri

Son düzenleme: @sekoman01(opens in a new tab), 28 Haziran 2024

Bir web uygulamasının Ethereum blok zinciri ile etkileşime girebilmesi için (yani blok zinciri verilerini okuması ve/veya ağa işlem gönderebilmesi) bir Ethereum düğümüne bağlanması gerekir.

Bu amaçla, her Ethereum istemcisi JSON-RPC özelliklerini uygular, böylece uygulamaların güvenebileceği tek tip metotlar olur.

Eğer bir Ethereum düğümüne bağlanmak için JavaScript kullanmak istiyorsanız, düz JavaScript'i kullanmak mümkündür ancak ekosistem içinde bunu çok daha kolay hâle getiren birkaç kolaylık kütüphanesi bulunur. Bu kütüphanelerle geliştiriciler, Ethereum ile etkileşime giren JSON RPC taleplerini (arka planda) başlatmak için sezgisel ve tek satırlı yöntemler yazabilirler.

Lütfen "Birleşim olayından bu yana, bir düğümü çalıştırmak için iki bağlantılı Ethereum yazılımının parçası olan bir yürütüm istemcisi ve bir fikir birliği istemcisi gerektiğini unutmayın. Lütfen düğümünüzün hem bir yürütüm hem de fikir birliği istemcisini içerdiğinden emin olun. Eğer düğümünüz yerel makinanızda değilse (ör. düğümünüz bir AWS örneğinde çalışıyorsa) bu eğitimdeki IP adreslerini buna göre güncelleyin. Daha fazla bilgi için lütfen bir düğüm çalıştırma sayfamıza bakın.

Ön koşullar

JavaScript'i anlamanın yanı sıra, Ethereum Yığınını ve Ethereum istemcilerini de anlamak faydalı olabilir.

Neden bir kitaplık kullanılır?

Bu kütüphaneler, bir Ethereum düğümü ile doğrudan etkileşim kurmanın karmaşıklığının çoğunu ortadan kaldırır. Ayrıca, bir geliştirici olarak Ethereum istemcilerinin karmaşıklıkları ile daha az zaman harcayarak ve uygulamanızın benzersiz işlevselliğine daha fazla zaman ayırabilmeniz için yardımcı işlevler (örneğin, ETH'yi Gwei'ye dönüştürmek) sağlarlar.

Kütüphane özellikleri

Ethereum düğümlerine bağlanın

Bu kütüphaneler, sağlayıcıları kullanarak JSON-RPC, INFURA, Etherscan, Alchemy veya MetaMask üzerinden Ethereum'a bağlanmanıza ve Ethereum verilerini okumanıza olanak tanır.

Ethers örneği

1// Bir BrowserProvider, MetaMask'ın her sayfaya window.ethereum
2// olarak enjekte ettiği standart bir Web3 sağlayıcısını sarar
3// sabit sağlayıcı = yeni ethers.BrowserProvider(window.ethereum)
4
5// MetaMask eklentisi ayrıca işlemlerin imzalanmasına, ether göndermeye ve
6// blokzincirdeki durumu değiştirmek için ödeme yapmaya olanak tanır.
7// Bunun için hesap imzalayana ihtiyacımız var...
8sabit imzalayan = sağlayıcı.getSigner()
Kopyala

Web3js örneği

1var web3 = new Web3("http://localhost:8545")
2// or
3var web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"))
4
5// change provider
6web3.setProvider("ws://localhost:8546")
7// or
8web3.setProvider(new Web3.providers.WebsocketProvider("ws://localhost:8546"))
9
10// Using the IPC provider in node.js
11var net = require("net")
12var web3 = new Web3("/Users/myuser/Library/Ethereum/geth.ipc", net) // mac os path
13// or
14var web3 = new Web3(
15 new Web3.providers.IpcProvider("/Users/myuser/Library/Ethereum/geth.ipc", net)
16) // mac os path
17// on windows the path is: "\\\\.\\pipe\\geth.ipc"
18// on linux the path is: "/users/myuser/.ethereum/geth.ipc"
Tümünü göster
Kopyala

Kurulduktan sonra blok zinciri aşağıdakiler için sorgulayabileceksiniz:

  • blok numaraları
  • gaz tahminleri
  • akıllı sözleşme olayları
  • ağ kimliği
  • ve daha fazlası...

Cüzdan işlevselliği

Bu kitaplıklar size cüzdan oluşturma, anahtarları yönetme ve işlemleri imzalama işlevleri sunar.

İşte Ether'lerden bir örnek

1// Bir anımsatıcıdan bir cüzdan örneği oluşturun...
2mnemonic =
3 "announce room limb pattern dry unit scale effort smooth jazz weasel alcohol"
4walletMnemonic = Wallet.fromPhrase(mnemonic)
5
6// ...ya da özel anahtardan
7walletPrivateKey = new Wallet(walletMnemonic.privateKey)
8
9walletMnemonic.address === walletPrivateKey.address
10// true
11
12// Signer API'si uyarınca bir Promise olarak adres
13walletMnemonic.getAddress()
14// { Promise: '0x71CB05EE1b1F506fF321Da3dac38f25c0c9ce6E1' }
15
16// Bir cüzdan adresi de senkronize olarak müsaittir
17walletMnemonic.address
18// '0x71CB05EE1b1F506fF321Da3dac38f25c0c9ce6E1'
19
20// Dahili kriptografik bileşenler
21walletMnemonic.privateKey
22// '0x1da6847600b0ee25e9ad9a52abbd786dd2502fa4005dd5af9310b7cc7a3b25db'
23walletMnemonic.publicKey
24// '0x04b9e72dfd423bcf95b3801ac93f4392be5ff22143f9980eb78b3a860c4843bfd04829ae61cdba4b3b1978ac5fc64f5cc2f4350e35a108a9c9a92a81200a60cd64'
25
26// Cüzdan mnemonic'i
27walletMnemonic.mnemonic
28// {
29// locale: 'en',
30// path: 'm/44\'/60\'/0\'/0/0',
31// phrase: 'announce room limb pattern dry unit scale effort smooth jazz weasel alcohol'
32// }
33
34// Not: Özel anahtarla oluşturulan bir cüzdan
35// mnemonic'e sahip değildir (türetme bunu engeller)
36walletPrivateKey.mnemonic
37// null
38
39// Mesaj imzalama
40walletMnemonic.signMessage("Hello World")
41// { Promise: '0x14280e5885a19f60e536de50097e96e3738c7acae4e9e62d67272d794b8127d31c03d9cd59781d4ee31fb4e1b893bd9b020ec67dfa65cfb51e2bdadbb1de26d91c' }
42
43tx = {
44 to: "0x8ba1f109551bD432803012645Ac136ddd64DBA72",
45 value: utils.parseEther("1.0"),
46}
47
48// İşlem imzalama
49walletMnemonic.signTransaction(tx)
50// { Promise: '0xf865808080948ba1f109551bd432803012645ac136ddd64dba72880de0b6b3a7640000801ca0918e294306d177ab7bd664f5e141436563854ebe0a3e523b9690b4922bbb52b8a01181612cec9c431c4257a79b8c9f0c980a2c49bb5a0e6ac52949163eeb565dfc' }
51
52// Bağlanma metodu yeni bir örneği
53// sağlayıcıya bağlı olan cüzdana gönderir
54wallet = walletMnemonic.connect(provider)
55
56// Ağı sorgulama
57wallet.getBalance()
58// { Promise: { BigNumber: "42" } }
59wallet.getTransactionCount()
60// { Promise: 0 }
61
62// Ether gönderme
63wallet.sendTransaction(tx)
Tümünü göster
Kopyala

Belgelerin tamamını okuyun(opens in a new tab)

Kurulduktan sonra şunları yapabileceksiniz:

  • hesap oluşturabilirsiniz
  • işlem gönderebilirsiniz
  • işlemleri imzalayabilirsiniz
  • ve daha fazlası...

Akıllı sözleşme fonksiyonlarıyla etkileşim kurmak

Javascript istemci kütüphaneleri, derlenmiş bir sözleşmenin Uygulama İkili Arayüzünü (ABI) okuyarak uygulamanızın akıllı sözleşme fonksiyonlarını çağırmasına olanak tanır.

ABI, esasen sözleşmenin işlevlerini bir JSON formatında açıklar ve bunu normal bir JavaScript nesnesi gibi kullanmanıza izin verir.

Yani aşağıdaki Solidity sözleşmesi:

1contract Test {
2 uint a;
3 address d = 0x12345678901234567890123456789012;
4
5 function Test(uint testInt) { a = testInt;}
6
7 event Event(uint indexed b, bytes32 c);
8
9 event Event2(uint indexed b, bytes32 c);
10
11 function foo(uint b, bytes32 c) returns(address) {
12 Event(b, c);
13 return d;
14 }
15}
Tümünü göster
Kopyala

Aşağıdaki JSON ile sonuçlanır:

1[{
2 "type":"constructor",
3 "payable":false,
4 "stateMutability":"nonpayable"
5 "inputs":[{"name":"testInt","type":"uint256"}],
6 },{
7 "type":"function",
8 "name":"foo",
9 "constant":false,
10 "payable":false,
11 "stateMutability":"nonpayable",
12 "inputs":[{"name":"b","type":"uint256"}, {"name":"c","type":"bytes32"}],
13 "outputs":[{"name":"","type":"address"}]
14 },{
15 "type":"event",
16 "name":"Event",
17 "inputs":[{"indexed":true,"name":"b","type":"uint256"}, {"indexed":false,"name":"c","type":"bytes32"}],
18 "anonymous":false
19 },{
20 "type":"event",
21 "name":"Event2",
22 "inputs":[{"indexed":true,"name":"b","type":"uint256"},{"indexed":false,"name":"c","type":"bytes32"}],
23 "anonymous":false
24}]
Tümünü göster
Kopyala

Bu, şunları yapabileceğiniz anlamına gelir:

  • Akıllı sözleşmeye bir işlem gönderin ve yöntemini uygulayın
  • EVM'de yürütüldüğünde bir yöntem yürütmesinin harcayacağı gazı tahmin etme çağrısı
  • Sözleşme dağıtmak
  • Ve daha fazlası...

Yardımcı fonksiyonlar

Yardımcı fonksiyonlar, Ethereum ile oluşturmayı biraz daha kolaylaştıran kullanışlı kısayollar sunar.

ETH değerleri varsayılan olarak Wei cinsindendir. 1 ETH = 1.000.000.000.000.000.000 WEI – bu, çok sayıda sayıyla uğraştığınız anlamına gelir! web3.utils.toWei, ether'ı sizin için Wei'ye dönüştürür.

Ve ethers cinsinden şöyle görünür:

1// Get the balance of an account (by address or ENS name)
2balance = await provider.getBalance("ethers.eth")
3// { BigNumber: "2337132817842795605" }
4
5// Often you will need to format the output for the user
6// which prefer to see values in ether (instead of wei)
7ethers.utils.formatEther(balance)
8// '2.337132817842795605'
Kopyala

Mevcut kütüphaneler

Web3.js - Ethereum JavaScript API.

Ethers.js - JavaScript ve TypeScript'te eksiksiz Ethereum cüzdan uygulamaları ve araçları.

The Graph - Ethereum ve IPFS verilerini endekslemek ve GraphQL kullanarak sorgulamak için bir protokol.

light.js - Hafif istemciler için yüksek seviyede duyarlı JS kütüphanesidir.

Web3-wrapper - Web3.js için alternatif yazı tipi.

Alchemyweb3 - Otomatik yeniden denemeler ve geliştirilmiş API'lar ile Web3.js odaklı paketleyici.

Alchemy NFT API - Sahiplik, meta veri özellikleri ve daha fazlası dahil olmak üzere NFT verilerini almak için API.

viem - Ethereum için TypeScript Arayüzü

Daha fazla bilgi

Size yardımcı olan bir topluluk kaynağı biliyor musunuz? Bu sayfayı düzenleyin ve ekleyin!

  • Düğümler ve İstemciler
  • Geliştirici çerçeveleri
  • JavaScript'te Ethereum blok zincirini kullanmak için Web3js'yi kurun – Projenizde web3.js kurulumu için talimatlar.
  • JavaScript'ten akıllı sözleşme çağırma – DAI belirtecini kullanarak, JavaScript kullanan sözleşme işlevini nasıl çağıracağınızı görün.
  • Web3 ve Alchemy kullanarak işlem gönderme – Arka uçtan işlem göndermek için adım adım izlenecek yol.

Bu makale yararlı oldu mu?