Bibliotecas de API JavaScript
Última edição: @iborba(opens in a new tab), 28 de junho de 2024
Para que um aplicativo web interaja com a cadeia de blocos Ethereum (ou seja, leia os dados da blockchain e/ou envie transações para a rede), ele deve se conectar a um nó Ethereum.
Para esse propósito, cada cliente Ethereum implementa a especificação JSON-RPC, então há um conjunto uniforme de métodos com os quais os aplicativos podem conta.
Se você quiser usar JavaScript para se conectar a um nó Ethereum, é possível usar o JavaScript vanilla, mas existem várias bibliotecas convenientes dentro do ecossistema que tornam isso muito mais fácil. Com essas bibliotecas, desenvolvedores podem escrever métodos intuitivos, one-line para inicializar solicitações JSON RPC (sob o capô) que interagem com Ethereum.
Observe que, desde A Fusão (The Merge), duas partes conectadas do software Ethereum — um cliente de execução e um cliente de consenso — são necessárias para executar um nó. Certifique-se de que seu nó inclui tanto o cliente de execução quanto o consensual. Se o seu nó não estiver na sua máquina local (por exemplo, seu nó está sendo executado em uma instância da AWS) atualize os endereços IP no tutorial adequadamente. Para obter mais informações, veja nossa página no executando um nó.
Pré-requisitos
Além de entender o JavaScript, pode ser útil entender a pilha de Ethereum e clientes Ethereum.
Por que usar uma biblioteca?
Essas bibliotecas abstraem muito da complexidade de interagir diretamente com um nó Ethereum. Eles também fornecem funções de utilidade (por exemplo, Convertendo ETH para Gwei) para que como desenvolvedor, você possa passar menos tempo lidando com as complexidades de clientes da Ethereum e mais tempo focado na funcionalidade única do seu aplicativo.
Recursos da biblioteca
Conectar aos nós da Ethereum
Usando provedores, essas bibliotecas permitem que você se conecte à Ethereum e leia os seus dados, seja por JSON-RPC, INFURA, Etherscan, Alquimia ou MetaMask.
Exemplo de Ethers
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// Para isso, precisamos do signatário da conta...8const signer = provider.getSigner()Copiar
Exemplo de Web3js
1var web3 = new Web3("http://localhost:8545")2// ou3var web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"))45// mudar provedor6web3.etProvider("ws://localhost:8546")7// ou8web3.setProvider(new Web3.providers.WebsocketProvider("ws://localhost:8546"))910// Usando o provedor IPC em node.js11var net = require("net")12var web3 = new Web3("/Users/myuser/Library/Ethereum/geth.ipc", net) // caminho do mac os13// ou14var web3 = new Web3(15 new Web3.providers.IpcProvider("/Users/myuser/Library/Ethereum/geth.ipc", net)16) // Caminho mac os17// no windows o caminho é: "\\\\.\\pipe\\geth.ipc"18// no linux o caminho é: "/users/myuser/.ethereum/geth.ipc"Exibir tudoCopiar
Uma vez configurado, você poderá consultar a blockchain para:
- numero de blocos
- estimativas de gás
- eventos de contratos inteligentes
- id da rede
- e mais...
Funcionalidade de carteira
Essas bibliotecas oferecem a funcionalidade de criar carteiras, gerenciar chaves e assinar transações.
Veja alguns exemplos de Ethers
1// Cria uma instância de carteira de um mnemonic...2mnemonic =3 "announce room limb pattern dry unit scale effort smooth jazz weasel alcohol"4walletMnemonic = Wallet.fromMnemonic(mnemonic)56// ...ou de uma chave privada7walletPrivateKey = new Wallet(walletMnemonic.privateKey)89walletMnemonic.address === walletPrivateKey.address10// true1112// Endereço como uma Promise para Signer API13walletMnemonic.getAddress()14// { Promise: '0x71CB05EE1b1F506fF321Da3dac38f25c0c9ce6E1' }1516// Um endereço da carteira também está disponível de forma síncrona17walletMnemonic.address18// '0x71CB05EE1b1F506fF321Da3dac38f25c0c9ce6E1'1920// Componentes internos criptográficos21walletMnemonic.privateKey22// '0x1da6847600b0ee25e9ad9a52abbd786dd2502fa4005dd5af9310b7cc7a3b25db'23walletMnemonic.publicKey24// '0x04b9e72dfd423bcf95b3801ac93f4392be5ff22143f9980eb78b3a860c4843bfd04829ae61cdba4b3b1978ac5fc64f5cc2f4350e35a108a9c9a92a81200a60cd64'2526// O mnemônico da carteira27walletMnemonic.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// Nota: Uma carteira criada com chave privada não possui35// um mnemônico (a derivação previne isso)36walletPrivateKey.mnemonic37// null3839// Assinando uma mensagem40walletMnemonic.signMessage("Hello World")41// { Promise: '0x14280e5885a19f60e536de50097e96e3738c7acae4e9e62d67272d794b8127d31c03d9cd59781d4ee31fb4e1b893bd9b020ec67dfa65cfb51e2bdadbb1de26d91c' }4243tx = {44 to: "0x8ba1f109551bD432803012645Ac136ddd64DBA72",45 value: utils.parseEther("1.0"),46}4748// Assinando uma transação49walletMnemonic.signTransaction(tx)50// { Promise: '0xf865808080948ba1f109551bd432803012645ac136ddd64dba72880de0b6b3a7640000801ca0918e294306d177ab7bd664f5e141436563854ebe0a3e523b9690b4922bbb52b8a01181612cec9c431c4257a79b8c9f0c980a2c49bb5a0e6ac52949163eeb565dfc' }5152// O método connect retorna uma nova instância da carteira conectada a um provedor53wallet = walletMnemonic.connect(provider)5455// Consultando a rede56wallet.getBalance()57// { Promise: { BigNumber: "42" } }58wallet.getTransactionCount()59// { Promise: 0 }6061// Enviando ether62wallet.sendTransaction(tx)Exibir tudoCopiar
Leia a documentação completa(opens in a new tab)
Uma vez configurado você será capaz de:
- criar contas
- enviar transações
- assinar transações
- e mais...
Interaja com funções de contrato inteligentes
As bibliotecas de clientes Javascript permitem que sua aplicação chame funções de contratos inteligentes lendo a Interface Binária da Aplicação (en: ABI, pt: IBA) de um contrato compilado.
O ABI essencialmente explica as funções do contrato em um formato JSON e permite que você use-o como um objeto JavaScript normal.
Então, o seguinte contrato de Solidity:
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}Exibir tudoCopiar
Resultaria no seguinte JSON:
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}]Exibir tudoCopiar
Isso significa que você pode:
- Enviar uma transação para o contrato inteligente e executar seu método
- Estimar o gás que um método de execução consumirá quando executado na EVM
- Implantar um contrato
- E mais...
Funções utilitárias
Funções utilitárias lhe dão atalhos úteis que facilitam um pouco a construção com a Ethereum.
Os valores ETH estão em Wei por padrão. 1 ETH = 1.000.000.000.000.000.000 WEI – isso significa que você está lidando com muitos números! web3.utils.toWei
converte ether para Wei pra você.
E em ethers fica assim:
1// Obtenha o saldo de uma conta (por endereço ou nome ENS)2balance = await provider.getBalance("ethers.eth")3// { BigNumber: "2337132817842795605" }45// Muitas vezes você precisará formatar a saída para o usuário6// que preferem ver valores no ether (em vez de wei)7ethers.utils.formatEther(balance)8// '2.337132817842795605'Copiar
- Funções utilitárias da Web3js(opens in a new tab)
- Funções utilitárias da EthersJs(opens in a new tab)
Bibliotecas disponíveis
Web3.js - API para Ethereum em JavaScript.
Ethers.js - Implementação completa de uma carteira Ethereum e utilidades em JavaScript e TypeScript.
The Graph - Um protocolo para indexação de dados de Ethereum e IPFS e sua consulta usando GraphQL.
- The Graph(opens in a new tab)
- Graph Explorer(opens in a new tab)
- Documentação(opens in a new tab)
- GitHub(opens in a new tab)
- Discord(opens in a new tab)
light.js - Uma biblioteca em alto nível reativa em JS otimizada para clientes leves.
Web3-wrapper - Alternativa ao Web3.js em Typescript.
Alchemyweb3 - Wrapper em torno de Web3.js com tentativas automáticas e apis aprimoradas.
Alchemy NFT API - API para buscar dados NFT, incluindo propriedade, atributos de metadados e muito mais.
viem - Interface TypeScript para Ethereum.
Leitura adicional
Conhece algum recurso da comunidade que o ajudou? Edite essa página e adicione!
Tópicos relacionados
Tutoriais relacionados
- Configure Web3js para usar a blockchain Ethereum em Javascript – Instruções para configurar web3.js no seu projeto.
- Chamando um contrato inteligente do JavaScript – Usando o token do DAI, veja como os contratos de chamadas funcionam usando JavaScript.
- Enviando transações usando web3 e Alchemy – Passo a passo para enviar transações pelo back-end.