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 is2// what MetaMask injects as window.ethereum into each page3const provider = new ethers.providers.Web3Provider(window.ethereum)45// The MetaMask plugin also allows signing transactions to6// 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// or3var web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"))45// change provider6web3.setProvider("ws://localhost:8546")7// or8web3.setProvider(new Web3.providers.WebsocketProvider("ws://localhost:8546"))910// Using the IPC provider in node.js11var net = require("net")12var web3 = new Web3("/Users/myuser/Library/Ethereum/geth.ipc", net) // mac os path13// or14var web3 = new Web3(15 new Web3.providers.IpcProvider("/Users/myuser/Library/Ethereum/geth.ipc", net)16) // mac os path17// on windows the path is: "\\\\.\\pipe\\geth.ipc"18// on linux the path is: "/users/myuser/.ethereum/geth.ipc"Tümünü gösterKopyala
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)56// ...or from a private key7walletPrivateKey = new Wallet(walletMnemonic.privateKey)89walletMnemonic.address === walletPrivateKey.address10// true1112// The address as a Promise per the Signer API13walletMnemonic.getAddress()14// { Promise: '0x71CB05EE1b1F506fF321Da3dac38f25c0c9ce6E1' }1516// A Wallet address is also available synchronously17walletMnemonic.address18// '0x71CB05EE1b1F506fF321Da3dac38f25c0c9ce6E1'1920// The internal cryptographic components21walletMnemonic.privateKey22// '0x1da6847600b0ee25e9ad9a52abbd786dd2502fa4005dd5af9310b7cc7a3b25db'23walletMnemonic.publicKey24// '0x04b9e72dfd423bcf95b3801ac93f4392be5ff22143f9980eb78b3a860c4843bfd04829ae61cdba4b3b1978ac5fc64f5cc2f4350e35a108a9c9a92a81200a60cd64'2526// The wallet mnemonic27walletMnemonic.mnemonic28// {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// }3334// Note: A wallet created with a private key does not35// have a mnemonic (the derivation prevents it)36walletPrivateKey.mnemonic37// null3839// Signing a message40walletMnemonic.signMessage("Hello World")41// { Promise: '0x14280e5885a19f60e536de50097e96e3738c7acae4e9e62d67272d794b8127d31c03d9cd59781d4ee31fb4e1b893bd9b020ec67dfa65cfb51e2bdadbb1de26d91c' }4243tx = {44 to: "0x8ba1f109551bD432803012645Ac136ddd64DBA72",45 value: utils.parseEther("1.0"),46}4748// Signing a transaction49walletMnemonic.signTransaction(tx)50// { Promise: '0xf865808080948ba1f109551bd432803012645ac136ddd64dba72880de0b6b3a7640000801ca0918e294306d177ab7bd664f5e141436563854ebe0a3e523b9690b4922bbb52b8a01181612cec9c431c4257a79b8c9f0c980a2c49bb5a0e6ac52949163eeb565dfc' }5152// The connect method returns a new instance of the53// Wallet connected to a provider54wallet = walletMnemonic.connect(provider)5556// Querying the network57wallet.getBalance()58// { Promise: { BigNumber: "42" } }59wallet.getTransactionCount()60// { Promise: 0 }6162// Sending ether63wallet.sendTransaction(tx)Tümünü gösterKopyala
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;45 function Test(uint testInt) { a = testInt;}67 event Event(uint indexed b, bytes32 c);89 event Event2(uint indexed b, bytes32 c);1011 function foo(uint b, bytes32 c) returns(address) {12 Event(b, c);13 return d;14 }15}Tümünü gösterKopyala
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":false19 },{20 "type":"event",21 "name":"Event2",22 "inputs":[{"indexed":true,"name":"b","type":"uint256"},{"indexed":false,"name":"c","type":"bytes32"}],23 "anonymous":false24}]Tümünü gösterKopyala
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" }45// Often you will need to format the output for the user6// 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.
- The Graph(opens in a new tab)
- Graph Gezgini(opens in a new tab)
- Belgeler(opens in a new tab)
- GitHub(opens in a new tab)
- Discord(opens in a new tab)
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!
İlgili konular
İlgili öğreticiler
- 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.