Pular para o conteúdo principal

Ajude a atualizar esta página

🌏

Há uma nova versão desta página mas, no momento, ela está apenas em inglês. Ajude-nos a traduzir a última versão.

Traduzir página
Visualizar em inglês

Não há bugs aqui!🐛

Esta página não está sendo traduzida. Ela foi intencionalmente deixada em inglês, por enquanto.

Bibliotecas de API JavaScript

Última edição: , Invalid DateTime
Editar Página

Para que um aplicativo web interaja com a cadeia de blocos Ethereum (ou seja, leia os dados da cadeia de blocos e/ou envie transações para a rede), ele deve se conectar a um nó Ethereum.

Para isso, cada cliente Ethereum implementa a especificação JSON-RPC, então há um conjunto uniforme de endpoints com os quais os aplicativos podem contar.

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.

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 meio de JSON-RPC, INFURA, Etherscan, Alquimia ou MetaMask.

Exemplo de Ethers

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// Para isso, precisamos do signatário da conta...
8const signer = provider.getSigner()
9
📋 Copiar

Exemplo Web3js

1var web3 = new Web3("http://localhost:8545")
2// ou
3var web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"))
4
5// mudar provedor
6web3.etProvider("ws://localhost:8546")
7// ou
8web3.setProvider(new Web3.providers.WebsocketProvider("ws://localhost:8546"))
9
10// Usando o provedor IPC em node.js
11var net = require("net")
12var web3 = new Web3("/Users/myuser/Library/Ethereum/geth.ipc", net) // caminho do mac os
13// ou
14var web3 = new Web3(
15 new Web3.providers.IpcProvider("/Users/myuser/Library/Ethereum/geth.ipc", net)
16) // Caminho mac os
17// no windows o caminho é: "\\\\.\\pipe\\geth.ipc"
18// no linux o caminho é: "/users/myuser/.ethereum/geth.ipc"
19
Exibir tudo
📋 Copiar

Uma vez configurado, você poderá consultar a cadeia de blocos 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.

Aqui estão 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)
5
6// ...ou de uma chave privada
7walletPrivateKey = new Wallet(walletMnemonic.privateKey)
8
9walletMnemonic.address === walletPrivateKey.address
10// true
11
12// Endereço como uma Promise para Signer API
13walletMnemonic.getAddress()
14// { Promise: '0x71CB05EE1b1F506fF321Da3dac38f25c0c9ce6E1' }
15
16// Um endereço da carteira também está disponível de forma síncrona
17walletMnemonic.address
18// '0x71CB05EE1b1F506fF321Da3dac38f25c0c9ce6E1'
19
20// Componentes internos criptográficos
21walletMnemonic.privateKey
22// '0x1da6847600b0ee25e9ad9a52abbd786dd2502fa4005dd5af9310b7cc7a3b25db'
23walletMnemonic.publicKey
24// '0x04b9e72dfd423bcf95b3801ac93f4392be5ff22143f9980eb78b3a860c4843bfd04829ae61cdba4b3b1978ac5fc64f5cc2f4350e35a108a9c9a92a81200a60cd64'
25
26// O mnemônico da carteira
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// Nota: Uma carteira criada com chave privada não possui
35// um mnemônico (a derivação previne isso)
36walletPrivateKey.mnemonic
37// null
38
39// Assinando uma mensagem
40walletMnemonic.signMessage("Hello World")
41// { Promise: '0x14280e5885a19f60e536de50097e96e3738c7acae4e9e62d67272d794b8127d31c03d9cd59781d4ee31fb4e1b893bd9b020ec67dfa65cfb51e2bdadbb1de26d91c' }
42
43tx = {
44 to: "0x8ba1f109551bD432803012645Ac136ddd64DBA72",
45 value: utils.parseEther("1.0"),
46}
47
48// Assinando uma transação
49walletMnemonic.signTransaction(tx)
50// { Promise: '0xf865808080948ba1f109551bd432803012645ac136ddd64dba72880de0b6b3a7640000801ca0918e294306d177ab7bd664f5e141436563854ebe0a3e523b9690b4922bbb52b8a01181612cec9c431c4257a79b8c9f0c980a2c49bb5a0e6ac52949163eeb565dfc' }
51
52// O método connect retorna uma nova instância da carteira conectada a um provedor
53wallet = walletMnemonic.connect(provider)
54
55// Consultando a rede
56wallet.getBalance()
57// { Promise: { BigNumber: "42" } }
58wallet.getTransactionCount()
59// { Promise: 0 }
60
61// Enviando ether
62wallet.sendTransaction(tx)
63
Exibir tudo
📋 Copiar

Leia a documentação completa

Uma vez configurado você será capaz de:

  • criar contas
  • enviar transações
  • assinar transações
  • e mais...

Interaja com funções de contrato inteligentes

JavaScript client libraries allow your application to call smart contract functions by reading the Application Binary Interface (ABI) of a compiled contract.

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;
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}
16
Exibir tudo
📋 Copiar

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":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}]
25
Exibir tudo
📋 Copiar

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 no 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" }
4
5// Muitas vezes você precisará formatar a saída para o usuário
6// que preferem ver valores no ether (em vez de wei)
7ethers.utils.formatEther(balance)
8// '2.337132817842795605'
9
📋 Copiar

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.

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 for fetching NFT data, including ownership, metadata attributes and more.

Leitura adicional

Conhece um recurso da comunidade que ajudou você? Edite esta página e adicione-o!

Este artigo foi útil?