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.
Vuoi saperne di più?
Un incontro di consulenza gratuito incluso.