Vai al contenuto principale
Change page

Librerie API JavaScript

Ultimo aggiornamento della pagina: 25 febbraio 2026

Affinché un'app web possa interagire con la blockchain di Ethereum (ovvero, leggere i dati della blockchain e/o inviare transazioni alla rete), deve connettersi a un nodo di Ethereum.

A questo scopo, ogni client di Ethereum implementa la specifica JSON-RPC, quindi esiste un insieme uniforme di metodi su cui le applicazioni possono fare affidamento.

Se desideri utilizzare JavaScript per connetterti a un nodo di Ethereum, è possibile utilizzare JavaScript puro, ma all'interno dell'ecosistema esistono diverse librerie di utilità che rendono l'operazione molto più semplice. Con queste librerie, gli sviluppatori possono scrivere metodi intuitivi di una sola riga per inizializzare richieste JSON-RPC (dietro le quinte) che interagiscono con Ethereum.

Tieni presente che da La Fusione (The Merge), per eseguire un nodo sono necessari due software di Ethereum connessi: un client di esecuzione e un client di consenso. Assicurati che il tuo nodo includa sia un client di esecuzione che uno di consenso. Se il tuo nodo non si trova sulla tua macchina locale (ad es., il tuo nodo è in esecuzione su un'istanza AWS), aggiorna di conseguenza gli indirizzi IP nel tutorial. Per maggiori informazioni, consulta la nostra pagina su come eseguire un nodo.

Prerequisiti

Oltre a comprendere JavaScript, potrebbe essere utile comprendere lo stack di Ethereum e i client di Ethereum.

Perché usare una libreria?

Queste librerie astraggono gran parte della complessità dell'interazione diretta con un nodo di Ethereum. Forniscono anche funzioni di utilità (ad es., la conversione di ETH in Gwei), in modo che, come sviluppatore, tu possa dedicare meno tempo ad affrontare le complessità dei client di Ethereum e più tempo a concentrarti sulle funzionalità uniche della tua applicazione.

Funzionalità delle librerie

Connettersi ai nodi di Ethereum

Utilizzando i provider, queste librerie ti consentono di connetterti a Ethereum e leggerne i dati, che sia tramite JSON-RPC, INFURA, Etherscan, Alchemy o MetaMask.

Attenzione: Web3.js è stato archiviato il 4 marzo 2025. Leggi l'annuncio (opens in a new tab). Prendi in considerazione l'utilizzo di librerie alternative come ethers.js (opens in a new tab) o viem (opens in a new tab) per i nuovi progetti.

Esempio con Ethers

1// Un BrowserProvider incapsula un provider Web3 standard, che è
2// ciò che MetaMask inietta come window.ethereum in ogni pagina
3const provider = new ethers.BrowserProvider(window.ethereum)
4
5// Il plugin MetaMask consente anche di firmare transazioni per
6// inviare ether e pagare per cambiare stato all'interno della blockchain.
7// Per questo, abbiamo bisogno del firmatario dell'account...
8const signer = provider.getSigner()

Esempio con Web3js

1var web3 = new Web3("http://localhost:8545")
2// oppure
3var web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"))
4
5// cambiare provider
6web3.setProvider("ws://localhost:8546")
7// oppure
8web3.setProvider(new Web3.providers.WebsocketProvider("ws://localhost:8546"))
9
10// Usare il provider IPC in node.js
11var net = require("net")
12var web3 = new Web3("/Users/myuser/Library/Ethereum/geth.ipc", net) // percorso mac os
13// oppure
14var web3 = new Web3(
15 new Web3.providers.IpcProvider("/Users/myuser/Library/Ethereum/geth.ipc", net)
16) // percorso mac os
17// su windows il percorso è: "\\\\.\\pipe\\geth.ipc"
18// su linux il percorso è: "/users/myuser/.ethereum/geth.ipc"
Mostra tutto

Una volta configurato, sarai in grado di interrogare la blockchain per:

  • numeri dei blocchi
  • stime del gas
  • eventi del contratto intelligente
  • id della rete
  • e altro ancora...

Funzionalità del portafoglio

Queste librerie ti offrono funzionalità per creare portafogli, gestire chiavi e firmare transazioni.

Ecco un esempio da Ethers

1// Crea un'istanza del portafoglio da una frase mnemonica...
2mnemonic =
3 "announce room limb pattern dry unit scale effort smooth jazz weasel alcohol"
4walletMnemonic = Wallet.fromPhrase(mnemonic)
5
6// ...o da una chiave privata
7walletPrivateKey = new Wallet(walletMnemonic.privateKey)
8
9walletMnemonic.address === walletPrivateKey.address
10// true
11
12// L'indirizzo come Promise secondo l'API del Signer
13walletMnemonic.getAddress()
14// { Promise: '0x71CB05EE1b1F506fF321Da3dac38f25c0c9ce6E1' }
15
16// Un indirizzo del portafoglio è disponibile anche in modo sincrono
17walletMnemonic.address
18// '0x71CB05EE1b1F506fF321Da3dac38f25c0c9ce6E1'
19
20// I componenti crittografici interni
21walletMnemonic.privateKey
22// '0x1da6847600b0ee25e9ad9a52abbd786dd2502fa4005dd5af9310b7cc7a3b25db'
23walletMnemonic.publicKey
24// '0x04b9e72dfd423bcf95b3801ac93f4392be5ff22143f9980eb78b3a860c4843bfd04829ae61cdba4b3b1978ac5fc64f5cc2f4350e35a108a9c9a92a81200a60cd64'
25
26// La frase mnemonica del portafoglio
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: Un portafoglio creato con una chiave privata non
35// ha una frase mnemonica (la derivazione lo impedisce)
36walletPrivateKey.mnemonic
37// null
38
39// Firmare un messaggio
40walletMnemonic.signMessage("Hello World")
41// { Promise: '0x14280e5885a19f60e536de50097e96e3738c7acae4e9e62d67272d794b8127d31c03d9cd59781d4ee31fb4e1b893bd9b020ec67dfa65cfb51e2bdadbb1de26d91c' }
42
43tx = {
44 to: "0x8ba1f109551bD432803012645Ac136ddd64DBA72",
45 value: utils.parseEther("1.0"),
46}
47
48// Firmare una transazione
49walletMnemonic.signTransaction(tx)
50// { Promise: '0xf865808080948ba1f109551bd432803012645ac136ddd64dba72880de0b6b3a7640000801ca0918e294306d177ab7bd664f5e141436563854ebe0a3e523b9690b4922bbb52b8a01181612cec9c431c4257a79b8c9f0c980a2c49bb5a0e6ac52949163eeb565dfc' }
51
52// Il metodo connect restituisce una nuova istanza del
53// portafoglio connesso a un provider
54wallet = walletMnemonic.connect(provider)
55
56// Interrogare la rete
57wallet.getBalance()
58// { Promise: { BigNumber: "42" } }
59wallet.getTransactionCount()
60// { Promise: 0 }
61
62// Inviare ether
63wallet.sendTransaction(tx)
Mostra tutto

Leggi la documentazione completa (opens in a new tab)

Una volta configurato, sarai in grado di:

  • creare account
  • inviare transazioni
  • firmare transazioni
  • e altro ancora...

Interagire con le funzioni dei contratti intelligenti

Le librerie client JavaScript consentono alla tua applicazione di chiamare le funzioni dei contratti intelligenti leggendo l'Application Binary Interface (ABI) di un contratto compilato.

L'ABI spiega essenzialmente le funzioni del contratto in un formato JSON e ti consente di utilizzarlo come un normale oggetto JavaScript.

Quindi il seguente contratto Solidity:

1contract Test {
2 uint a;
3 address d = 0x12345678901234567890123456789012;
4
5 constructor(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}
Mostra tutto

Risulterebbe nel seguente 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}]
Mostra tutto

Questo significa che puoi:

  • Inviare una transazione al contratto intelligente ed eseguire il suo metodo
  • Chiamare per stimare il gas che richiederà l'esecuzione di un metodo quando eseguito nella EVM
  • Distribuire un contratto
  • E altro ancora...

Funzioni di utilità

Le funzioni di utilità ti offrono comode scorciatoie che rendono la costruzione con Ethereum un po' più semplice.

I valori in ETH sono in Wei per impostazione predefinita. 1 ETH = 1.000.000.000.000.000.000 WEI – questo significa che hai a che fare con molti numeri! web3.utils.toWei converte gli ether in Wei per te.

E in ethers si presenta così:

1// Ottenere il saldo di un account (tramite indirizzo o nome ENS)
2balance = await provider.getBalance("ethers.eth")
3// { BigNumber: "2337132817842795605" }
4
5// Spesso sarà necessario formattare l'output per l'utente
6// che preferisce vedere i valori in ether (invece che in wei)
7ethers.utils.formatEther(balance)
8// '2.337132817842795605'

Librerie disponibili

Web3.js - API JavaScript di Ethereum.

Ethers.js - Implementazione completa del portafoglio Ethereum e utilità in JavaScript e TypeScript.

The Graph - Un protocollo per indicizzare i dati di Ethereum e IPFS e interrogarli utilizzando GraphQL.

Alchemy SDK - Wrapper per Ethers.js con API migliorate.

viem - Interfaccia TypeScript per Ethereum.

Codex - API di dati blockchain arricchiti in tempo reale su decine di catene.

Drift - Meta-libreria TypeScript con caching integrato, hook e mock di test.

Letture di approfondimento

Conosci una risorsa della community che ti è stata utile? Modifica questa pagina e aggiungila!

Tutorial: API JavaScript e WebSocket su Ethereum

  • Usare i WebSocket – Come usare i WebSocket con Alchemy per iscriversi agli eventi di Ethereum ed effettuare richieste JSON-RPC in tempo reale.

Questo articolo è stato utile?