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 spesifikasyonunu 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 kitaplıklarla geliştiriciler, Ethereum ile etkileşime giren JSON RPC isteklerini (başlık altında) başlatmak için sezgisel, tek satırlı yöntemler yazabilir.

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// A Web3Provider wraps a standard Web3 provider, which is
2// what MetaMask injects as window.ethereum into each page
3const provider = new ethers.providers.Web3Provider(window.ethereum)
4
5// The MetaMask plugin also allows signing transactions to
6// send ether and pay to change state within the blockchain.
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.fromMnemonic(mnemonic)
5
6// ...or from a private key
7walletPrivateKey = new Wallet(walletMnemonic.privateKey)
8
9walletMnemonic.address === walletPrivateKey.address
10// true
11
12// The address as a Promise per the Signer API
13walletMnemonic.getAddress()
14// { Promise: '0x71CB05EE1b1F506fF321Da3dac38f25c0c9ce6E1' }
15
16// A Wallet address is also available synchronously
17walletMnemonic.address
18// '0x71CB05EE1b1F506fF321Da3dac38f25c0c9ce6E1'
19
20// The internal cryptographic components
21walletMnemonic.privateKey
22// '0x1da6847600b0ee25e9ad9a52abbd786dd2502fa4005dd5af9310b7cc7a3b25db'
23walletMnemonic.publicKey
24// '0x04b9e72dfd423bcf95b3801ac93f4392be5ff22143f9980eb78b3a860c4843bfd04829ae61cdba4b3b1978ac5fc64f5cc2f4350e35a108a9c9a92a81200a60cd64'
25
26// The wallet mnemonic
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// Note: A wallet created with a private key does not
35// have a mnemonic (the derivation prevents it)
36walletPrivateKey.mnemonic
37// null
38
39// Signing a message
40walletMnemonic.signMessage("Hello World")
41// { Promise: '0x14280e5885a19f60e536de50097e96e3738c7acae4e9e62d67272d794b8127d31c03d9cd59781d4ee31fb4e1b893bd9b020ec67dfa65cfb51e2bdadbb1de26d91c' }
42
43tx = {
44 to: "0x8ba1f109551bD432803012645Ac136ddd64DBA72",
45 value: utils.parseEther("1.0"),
46}
47
48// Signing a transaction
49walletMnemonic.signTransaction(tx)
50// { Promise: '0xf865808080948ba1f109551bd432803012645ac136ddd64dba72880de0b6b3a7640000801ca0918e294306d177ab7bd664f5e141436563854ebe0a3e523b9690b4922bbb52b8a01181612cec9c431c4257a79b8c9f0c980a2c49bb5a0e6ac52949163eeb565dfc' }
51
52// The connect method returns a new instance of the
53// Wallet connected to a provider
54wallet = walletMnemonic.connect(provider)
55
56// Querying the network
57wallet.getBalance()
58// { Promise: { BigNumber: "42" } }
59wallet.getTransactionCount()
60// { Promise: 0 }
61
62// Sending ether
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?