Per saperne di più

Cos’è Ethers.js? Un’immersione profonda nella libreria JavaScript di Ethereum

11 mins
Aggiornato da

Se state puntando Ether (ETH) rispetto ad altre criptovalute, dovreste prendervi un momento per capire Ethereum da una prospettiva più tecnica. Protocollo blockchain noto per il suo toolkit, i contratti intelligenti e l’ecosistema allineato al codice, Ethereum si affida fortemente a ethers.js – una libreria Javascript – per dare al suo approccio incentrato sugli sviluppatori la potenza necessaria.

Sebbene ethers.js non sia l’unica libreria JavaScript nativa di Ethereum, è l’opzione migliore per le DApp più piccole. In questa guida approfondiamo gli aspetti di ethers.js, aiutandovi a dare un senso a questo concetto tecnico.

Disimballare ethers.js

ethers.js è una libreria JavaScript – un insieme di codice pre-scritto che automatizza diverse funzioni. L’uso di librerie JavaScript per lo sviluppo può ridurre al minimo lo sforzo di scrittura del codice. Il processo diventa più semplice e per gli sviluppatori di DApp queste librerie aiutano a offrire funzionalità di base specifiche per la blockchain come bundle.

Ethers.js and the development cycle: BIC
Ethers.js e il ciclo di sviluppo: BeInCrypto

Ecco il repository GitHub della libreria.

Cosa sono le librerie JavaScript?

Prima di approfondire l’argomento ethers.js, diamo un’occhiata più da vicino alle librerie JavaScript. Queste librerie sono insiemi pre-scritti di codice JavaScript che possono automatizzare specifiche attività comuni. L’ uso di librerie come ethers.js può accelerare il processo di creazione della DApp e anche altre interazioni specifiche della blockchain.

Perché abbiamo bisogno di librerie JavaScript in Ethereum?

Ethereum si è evoluto in una piattaforma di sviluppo software decentralizzata. Dai contratti intelligenti alle applicazioni DeFialle DApp, la codifica è parte integrante dell’ecosistema Ethereum. È proprio per questo che esistono librerie JavaScript su misura per Ethereum come ethers.js. Utilizzando queste librerie, gli sviluppatori possono connettersi alla rete, distribuire e interagire con i contratti intelligenti e gestire facilmente i dati della blockchain.

Did you know? Ethers.js isn’t the only known Ethereum Javascript library. Another prominent one is Web3.js, founded by the Ethereum Foundation. Web3.js is known for its comprehensive collection of documentation and is meant for the more complex DApps.

Perché ethers.js è importante?

Come accennato in precedenza, ethers.js si rivolge agli sviluppatori che si impegnano con la blockchain di Ethereum. Per quanto riguarda l’importanza, questa libreria sviluppata da Richard Moore, commercializzata con il nome di “Ethers”, è utile per i seguenti compiti:

  1. Semplificare diverse transazioni Ethereum
  2. Offre accesso a documentazione e risorse complete
  3. Facilitare lo sviluppo di DApp.
Ethers.js ecosystem and the roles it can assume:BIC
L’ecosistema Ethers.js e i ruoli che può assumere: BeInCrypto

Ecco un rapido esempio del frammento di codice utilizzato per ottenere il saldo corrente di un conto Ethereum. Leggiamo prima il codice e capiamo come ethers.js semplifica la vita:

const { ethers } = require(‘ethers’);

// Connect to the Ethereum network

const provider = new ethers.providers.JsonRpcProvider(‘https://mainnet.infura.io/v3/YOUR_INFURA_API_KEY’);

// Specify the account address

const accountAddress = ‘0xABC123…’;

// Fetch and display the balance

provider.getBalance(accountAddress).then((balance) => {

// Convert the balance from Wei to Ether

const balanceInEther = ethers.utils.formatEther(balance);

console.log(`Balance: ${balanceInEther} ETH`);

});

In questo esempio, si vede chiaramente come il comando – ethers.providers.JsonRpcProvider – invochi un endpoint Infura e getBalance recuperi il saldo. Non è necessario avere a che fare direttamente con il JSON RPC di Ethereum o con la Remote Procedure Call. In questo caso, si può pensare a ethers.js come a un traduttore che rende Ethereum più semplice e familiare.

Non siete ancora sicuri del significato di ethers.js? Ecco una rapida analogia.

Pensate a ethers.js come alla tessera di una vecchia biblioteca. Ricordate che le tessere avevano cataloghi che permettevano di trovare il libro giusto individuando il corridoio e poi il numero dello scaffale? Questo è l’obiettivo di ethers.js. Semplifica e organizza le enormi capacità di Ethereum, consentendo agli sviluppatori di trovare esattamente ciò di cui hanno bisogno.

https://twitter.com/wonder_nw/status/1764751034096800009

Tutte le versioni di Ethers.js spiegate

Nel corso degli anni sono apparse diverse versioni di Ethers.js, ognuna delle quali ha introdotto una nuova funzionalità o una correzione di un bug. Inoltre, il versioning segue la semantica standard, come v1.2.3, dove il primo numero indica la major e il secondo e il terzo numero indicano la minor e la patch. Per ora prenderemo in considerazione solo gli aggiornamenti di versione più importanti – modifiche che potrebbero non essere retrocompatibili.

  • Versione 1.x (Legacy): È stato il rilascio iniziale, seguito da funzioni relative alla firma delle transazioni, alla gestione dei portafogli e altro ancora.
  • Versione 2.x (Ethers Wallet): Si è concentrata sulle utilità e sulle caratteristiche del portafoglio, includendo la memorizzazione sicura delle chiavi private.
  • Versione 3.x (Ethers provider): Ha introdotto astrazioni per la connessione ai nodi Ethereum. Sono stati accolti diversi tipi di operatori, includendo Infura, WebSockets e altro.
  • Versione 4.x (contratto Ethers): Sono state ampliate le proprietà dei contratti intelligenti, con maggiori utilità per la codifica e la decodifica dei dati, filtri per gli eventi e altro ancora.
  • Versione 5.x: Offre un’architettura modulare, un supporto migliorato per ENS, una gestione completa degli errori e altro ancora.
  • Versione 6.x: Inclusione delle funzionalità di ES6, introduzione di BigInt, accessibilità all’overloading e altro ancora.
Ethers.js architecture and components: BIC
Architettura e componenti di Ethers.js: BeInCrypto

È possibile trovare maggiori dettagli su ciascuna versione consultando la documentazione originale di Ethers.js.

Stagista Redbelly, Builder: X

Come iniziare con ethers.js

Prima di pianificare di sfruttare il potenziale di ethers.js, è necessario sapere in quale fase dello sviluppo di DApp o smart contract viene invocato. Ecco una rapida panoramica per chi ha bisogno di conoscere e capire questi elementi da zero.

“Web3.js è più semplice per i principianti e più conciso di ethers.js.

Ethers.js, invece, offre più opzioni ed è nuovo; è un po’ più complesso di Web3.js”.


degenBRo, sviluppatore blockchain e fondatore di Solidity Finance: Come detto a BeInCrypto

Per iniziare, è necessario aprire il computer e configurare l’ambiente di sviluppo. Questo include Node.js e l’ambiente di sviluppo integrato. Si noti che JavaScript viene solitamente eseguito sul browser, ma con Node.js, lo stesso può essere eseguito sul computer. È l’ambiente di runtime Node.js che installa le librerie Javascript come ethers.js.

Per quanto riguarda l’IDE, che uno sviluppatore di software deve testare, si può prendere in considerazione VS Code, Sublime Text o qualsiasi altro programma.

https://twitter.com/junior_rbn_dev/status/1765370597066862749

Installazione del supporto ethers.js

Il passo successivo è installare Ethers, la libreria che ospita ethers.js.

npm installare ethers

Quindi, è necessario utilizzare Ethers per connettersi al portafoglio Ethereum, poiché l’interazione con la blockchain richiederà questo passaggio per la convalida delle credenziali. A tale scopo si può utilizzare la libreria Ethers installata. Ecco il comando di esempio:

const { ethers } = require(‘ethers’);

// Connect to the MetaMask wallet

const provider = new ethers.providers.Web3Provider(window.ethereum);

Una volta fatto, si può usare l’IDE per scrivere il codice solidity e creare contratti intelligenti per le DApp. Ethers.js sarà usato per distribuire lo stesso. È anche possibile testare la DApp o il contratto in locale, utilizzando ambienti come Truffle e Hardhat. Poi, si distribuiscono i contratti sulla rete Ethereum, per i quali è necessario ethers.js.

const contract = new ethers.ContractFactory(abi, bytecode, signer);

const deployedContract = await contract.deploy();

Per i non addetti ai lavori abi, Bytecode, Signer sono termini necessari per lo sviluppo di contratti intelligenti senza soluzione di continuità. L’Abi, o interfaccia binaria dell’applicazione, è più che altro un’etichetta che aiuta la rete a riconoscere i contratti intelligenti. Il bytecode è la versione compilata o meglio pronta per la rete del contratto smart e il signer è l’entità che genera la firma.

Ethers.js per il front-end

Una volta distribuito lo smart contract, è necessario costruire il front-end o l’interfaccia utente della DApp. Per questo, si può usare Angular o React. Potete anche integrare Ethers.js nel front-end per assicurarvi che possa interagire con gli smart contract di Ethereum. Ecco un esempio di codice:

const provider = new ethers.providers.Web3Provider(window.ethereum);

const contract = new ethers.Contract(contractAddress, contractABI, provider.getSigner());

Dopodiché, è necessario testare la DApp su una rete di test, ad esempio Rinkeby o Ropsten. Una volta soddisfatti, si può lanciare la DApp sulla mainnet. Notate quante volte durante il processo è necessario interagire con Ethers o ethers.js.

Caratteristiche principali

Ethers.js si presenta come una libreria Ethereum completa. Ecco alcune delle offerte esclusive che possono semplificare la vita degli sviluppatori:

Fornitori

I provider di Ethers.js fungono da ricongiunti tra la rete Ethereum e la DApp su cui si sta lavorando. Ciò comporta una semplificazione delle interrogazioni sui dati della blockchain e aiuta anche a trasmettere le transazioni. Infura è uno dei provider utilizzati da Ethers.js.

Ecco un esempio di codice:

const { ethers } = require(‘ethers’);

// Connect using Infura

const provider = new ethers.providers.JsonRpcProvider(‘https://mainnet.infura.io/v3/YOUR_INFURA_PROJECT_ID’);

// Check the current block number

provider.getBlockNumber().then((blockNumber) => {

console.log(“Current block number:”, blockNumber);

});

Portafogli

Ethers.js permette di gestire i portafogli, consentendo di creare nuovi account, importare account esistenti, gestire in modo sicuro le chiavi private per firmare le transazioni e altro ancora.

Contratti

Questa componente di Ethers.js supporta l’istanziazione di oggetti. Questo rende più facile chiamare funzioni specifiche del contratto, più simili ai metodi nativi di Javascript.

Ethers.js and smart contract interaction: BeInCrypto
Ethers.js e l’interazione con gli smart contract: BeInCrypto

Integrazione ENS

Ethers.js è in grado di risolvere i nomi ENS con i loro indirizzi Ethereum e viceversa. Questa caratteristica riduce il rischio di errori.

Ecco uno snippet di codice di esempio:

const { ethers } = require(‘ethers’);

const provider = new ethers.providers.JsonRpcProvider(‘https://mainnet.infura.io/v3/YOUR_INFURA_PROJECT_ID’);

const ensName = ‘alice.eth’;

provider.resolveName(ensName).then((address) => {

console.log(`${ensName} is resolved to ${address}`);

});

Oltre alle caratteristiche citate, Ethers.js vanta anche i seguenti aspetti o caratteristiche, che aiutano gli sviluppatori con un accesso diretto specifico a Ethereum:

  • Firmatari
  • Utilità
  • Ascoltatori di eventi e filtri (per attivare risposte in tempo reale alle azioni della blockchain)
  • transazioni
  • Supporto multicall
  • Supporto TypeScript (per migliorare l’affidabilità del codice e l’esperienza complessiva dello sviluppatore)

Una manciata di vantaggi dell’utilizzo di Ethers.js:

https://twitter.com/junior_rbn_dev/status/1765370617937736000

Come le pubblicazioni di crittografia possono sfruttare Ethers.js

Le testate giornalistiche come BeInCrypto possono sfruttare Ethers.js per creare da zero strumenti web3 avanzati e ricchi di risorse.Inquestomodo, diventa possibile utilizzare le funzionalità della blockchain o, meglio, di Ethereum per migliorare l’usabilità. Ecco le opzioni che si possono considerare:

Feed di dati

Le funzionalità di Ethers.js possono essere utilizzate per integrare feed di dati in tempo reale sulle criptovalute, come statistiche di rete, tariffe del gas e altro ancora, per mantenere articoli e risorse sempre aggiornati. Ecco un esempio di codice per recuperare l’ultimo numero di blocco, ad esempio per Bitcoin, per monitorare il dimezzamento in tempo reale.

const { ethers } = require(‘ethers’);

const provider = new ethers.providers.JsonRpcProvider(‘https://mainnet.infura.io/v3/YOUR_INFURA_PROJECT_ID’);

provider.getBlockNumber().then((blockNumber) => {

console.log(“Current block number:”, blockNumber);

// Integrate this data into your publication’s platform for a real-time data feed

});

Contenuti interattivi

Le pubblicazioni possono creare contenuti interattivi, consentendo agli utenti di interagire direttamente con gli smart contract, partecipare a sondaggi o persino giocare a piccoli giochi, se necessario.

Ecco un esempio di codice per recuperare un saluto specifico di una milestone da uno smart contract:

const { ethers } = require(‘ethers’);

const provider = new ethers.providers.Web3Provider(window.ethereum);

const contractAddress = ‘0x…’;

const contractABI = [

“function getGreeting() view returns (string)”

];

const contract = new ethers.Contract(contractAddress, contractABI, provider);

async function displayGreeting() {

const greeting = await contract.getGreeting();

document.getElementById(‘greeting’).innerText = greeting;

}

Un esempio reale di come viene distribuito Ethers.js:

https://twitter.com/ronak_pal1/status/1767071343345095092

Pubblicazione decentralizzata

Le pubblicazioni dei media possono anche prendere in considerazione la pubblicazione decentralizzata, in cui un residuo di un articolo viene pubblicato sulla rete blockchain. Ciò può contribuire alla resistenza alla censura e all’integrità dei contenuti.

Ecco un esempio di codice in cui l’hash dell’articolo viene memorizzato online come prova di pubblicazione:

const { ethers } = require(‘ethers’);

const wallet = new ethers.Wallet(‘YOUR_PRIVATE_KEY’, provider);

const contentHash = ethers.utils.id(“Article content here”);

const tx = await wallet.sendTransaction({

to: ‘0xSomeStorageContractAddress’,

data: contentHash // Assuming the contract accepts and stores this data

});

console.log(“Transaction hash (proof of publication):”, tx.hash);

Questi sono solo alcuni casi d’uso per le pubblicazioni dei media. Ma ci sono altri settori che possono sfruttare la potenza di ethers.js. Tra questi vi sono:

  • Sviluppatori di blockchain (previsti)
  • Analisti finanziari che lavorano con le metriche DeFi
  • Sviluppatori di giochi
  • Creatori di contenuti
  • Gestori della catena di approvvigionamento

E altro ancora.

Applicazioni di Ethers.js nel mondo reale

Oltre a essere utili in DeFi, NFT e progetti di gioco, ci sono alcune DApp esistenti che supportano l’uso di Ethers.js. Tra queste vi sono le seguenti:

  • Uniswap: Ether.js interagisce con gli smart contract di Uniswap per eseguire scambiare, aggiungere liquidità e persino interrogare le statistiche dell’insieme. In questo caso, gli sviluppatori di DApp intendono costruire strumenti che interagiscono con Uniswap, come bot di trading, strumenti di gestione del portafoglio e altro ancora.
  • Aave: Gli sviluppatori di DApp e altre parti interessate possono sfruttare le funzionalità di Ether.js per interagire con gli smart contract specifici di Aave. In questo modo, possono attivare il front-end per prendere in prestito asset, depositare garanzie e fare altro.

Sfatare alcuni miti di Ether.js:

https://twitter.com/imashuttoshh/status/1765558806291894739

Considerazioni sulla sicurezza

L’utilizzo di Ethers.js comporta un’ampia serie di considerazioni sulla sicurezza. Eccone alcune da seguire:

  • È consigliabile non codificare le chiavi private all’interno del codice dell’applicazione.
  • Ogni interazione con gli smart contract deve essere preceduta da test e verifiche approfondite dei contratti.
  • Ogni volta che si interagisce con gli smart contract, utilizzare pattern sicuri come “call” per le attività di sola lettura.
  • Per ottimizzare l’uso di ethers.js, si può considerare il batching delle richieste. In questo caso è possibile raggruppare, ad esempio, le richieste di sola lettura per ridurre al minimo il numero di chiamate alla rete. È ovvio che queste tecniche di ottimizzazione possono rendere l’applicazione altamente scalabile ed efficiente dal punto di vista dei costi.

Ecco un esempio di come funziona:

// Pseudocode for batching contract calls with Ethers.js (conceptual example)

const contract = new ethers.Contract(address, abi, provider);

const [value1, value2, value3] = await Promise.all([

contract.viewFunction1(),

contract.viewFunction2(),

contract.viewFunction3()

]);

Ethers.js: uno strumento versatile

Come dimostrato in questa guida, Ethers.js è uno strumento versatile. Anche se abbiamo dato una rapida occhiata alle sue capacità, il modo migliore per comprendere completamente Ethers.js è quello di approfondire il mondo dei contratti intelligenti, di JavaScript, degli IDE, delle DApp e altro ancora. Inoltre, può essere utile entrare a far parte delle comunità di Ethereum e Ethers.

Domande frequenti

How can developers use Ethers.js events?

What are the key utilities offered by Ethers.js?

What is the connection between Ethers.js and Web3.js?

Top piattaforme di crypto in Italia | Giugno 2024

Trusted

Scopri la dichiarazione di non responsabilità

All the information contained on our website is published in good faith and for general information purposes only. Any action the reader takes upon the information found on our website is strictly at their own risk.

Ananda.png
Ananda Banerjee è un tecnico specializzato nella scrittura di contenuti per il web3, criptovalute, Blockchain, AI e SaaS, con una carriera di oltre 12 anni. Dopo aver completato il suo M.Tech in ingegneria delle telecomunicazioni presso RCCIIT, India, Ananda ha rapidamente combinato le sue competenze tecniche con la creazione di contenuti, contribuendo a piattaforme come Towardsdatascience, Hackernoon, Dzone, Elephant Journal, Business2Community e molte altre. Attualmente, Ananda scrive...
Leggi la biografia completa