8 semplici trucchi per l'ottimizzazione del gas per la solidità

Per interagire con una blockchain EVM (Ethereum Virtual Machine), dovrai sempre pagare le tariffe del gas. Queste commissioni possono essere frustranti in quanto possono essere molto alte. Diamo un'occhiata a cosa sono esattamente e come possiamo ottimizzare il nostro codice di contratto intelligente per ridurre le tariffe del gas.

Cos'è il gas in Ethereum?

Nel Documentazione Ethereum, il gas è definito come segue:

“Il gas si riferisce all'unità che misura la quantità di sforzo computazionale richiesto per eseguire operazioni specifiche sulla rete Ethereum. Poiché ogni transazione Ethereum richiede risorse computazionali per essere eseguita, ogni transazione richiede una commissione. Il gas si riferisce alla commissione richiesta per condurre con successo una transazione su Ethereum. 

In altre parole, più complesso è il tuo codice, più costerà.
Descrivere in dettaglio come vengono calcolate le tariffe del gas è complesso e potrebbe essere oggetto di un altro post a sé stante. La formula più importante da capire è:

Tariffe gas=Unità gas*Prezzo gas

Unità a gas sono il costo totale delle operazioni computazionali misurato nell'unità chiamata gas.
Prezzo del gas è il prezzo del gas in GWEI (10-9 etere). Il prezzo del gas varia a seconda dell'utilizzo della rete Ethereum.

Non puoi influenzare il prezzo del gas, quindi devi concentrarti sulle unità di gas del tuo codice per ridurle il più possibile.

Come ottimizzare le tariffe del gas

L'ottimizzazione del gas sta semplicemente favorendo ciò che è "economico" da calcolare come variabili o costanti locali ed evitando il più possibile ciò che è "costoso" da calcolare come variabili di stato memorizzate nella memoria del contratto o nei loop.

Ecco alcuni suggerimenti per iniziare a ottimizzare il gas.

Suggerimento n. 1: non inizializzare le variabili

Se la variabile non è inizializzata, si presume che abbia un valore predefinito (0, false, 0x0, …). L'inizializzazione variabili è quindi solo a spreco di gas.

Suggerimento n. 2: utilizzare le variabili locali anziché le variabili di stato all'interno dei cicli

Leggendo e scrivendo locale le variabili è economico, mentre leggere e scrivere stato le variabili archiviate nell'archiviazione del contratto sono costoso.

Suggerimento n. 3: utilizzare esterno e interno anziché pubblico

external significa che puoi chiamare la tua funzione al di fuori del tuo contratto.
internal significa che puoi chiamare la tua funzione dall'interno del tuo contratto.
public è un mix di external ed internal, puoi fare entrambe le cose.
As external ed internal concede meno accesso rispetto a public, lo sono più economico.
Lo faremo quindi sempre preferire usare external or internal prima e cambialo la percezione se necessario.

Suggerimento n. 4: archivia i dati nella memoria, non nell'archiviazione

La scelta della perfetta posizione dei dati è essenziale. Devi sapere questi: 

  • conservazione – la variabile è memorizzata sulla blockchain. È una variabile di stato persistente. Costi Gas per definirlo e cambiarlo.
  • memoria – variabile temporanea dichiarata all'interno di una funzione. Nessun gas per la dichiarazione. Ma costa gas per cambiare le variabili di memoria (meno dello spazio di archiviazione)
  • dati della chiamata – come la memoria ma non modificabile e disponibile solo come argomento di funzioni esterne

Se non specificato, la posizione dei dati è l'archiviazione per impostazione predefinita.

Suggerimento n. 5: ordina le tue variabili

L'ordine delle tue variabili è importante nei contratti intelligenti. La solidità memorizza i dati in un file slot singolo di 256 bit. Se la tua variabile è più piccola di uno slot, è impacchettata con un'altra variabile da inserire in un singolo slot. Ma per farlo, dobbiamo mettere queste variabili una accanto all'altra.

Suggerimento n. 6: elimina le tue variabili per ottenere un rimborso del gas

Questa è anche un'ottima caratteristica di Solidity. Poiché non esiste una raccolta dei rifiuti, devi eliminare tu stesso i dati inutilizzati. L'obiettivo qui è risparmiare spazio sulla blockchain. La buona notizia è che otterrai Rimborso del 75% dei costi di archiviazione

Basta usare la parola chiave delete.

Suggerimento n. 7: usa nidificato if o multiplo richiedere invece di && operatore

Primo per visibilità, quindi perché lo è più economico!

Suggerimento n. 8: usa l'ottimizzatore di Solidity

Assicurarsi che Ottimizzatore di solidità is abilitato. Riduce i costi del gas. Il numero predefinito è 200. 

Se si desidera eseguire l'ottimizzazione del gas per l'implementazione del contratto (costo inferiore per l'implementazione di un contratto), impostare l'ottimizzatore Solidity su un numero basso. 
Se si desidera ottimizzare per i costi del gas di runtime (quando le funzioni vengono richiamate su un contratto), impostare l'ottimizzatore su un numero elevato.

Scritto Da
Avigdor Sason Cohen

Avigdor è un ricercatore di sicurezza web3 presso Sayfer. È appassionato delle nuove tecnologie blockchain e di come possiamo assicurarci di svilupparle in modo sicuro.

 

Salta al contenuto