diff options
author | Al <80943867+al-ias@users.noreply.github.com> | 2022-07-23 10:14:11 +0200 |
---|---|---|
committer | Al <80943867+al-ias@users.noreply.github.com> | 2022-07-23 10:14:11 +0200 |
commit | 4a60cef1899a23e4810ecdb42c7128a41cb6711d (patch) | |
tree | ec0b9cf52bc3d53ce9a5fecbb0e0521fca10f68b /it-it | |
parent | 107ff5cadf312703fadc7df0bb3c1da3a3de6fec (diff) |
Transalte branching and loop section (6)
Diffstat (limited to 'it-it')
-rw-r--r-- | it-it/solidity.html.markdown | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/it-it/solidity.html.markdown b/it-it/solidity.html.markdown index 3ca814ac..e396eeb2 100644 --- a/it-it/solidity.html.markdown +++ b/it-it/solidity.html.markdown @@ -580,4 +580,32 @@ modifier checkValue(uint amount) { } +// 6. ISTRUZIONI CONDIZIONALI E CICLI + +// Troviamo tutte le istruzioni condizionali di base - incluse if/else, for, +// while, break, continue e return - ma non c'è lo switch + +// La sintassi è la stessa di javascript, ma non esiste la conversione di tipo +// in booleano dai non booleani (bisogna usare gli operatori logici per +// ottenere il valore boolean) + +// Bisogna stare attenti i loop che iterano in base al comportamento +// dell'utente, dato che i contratti hanno un tetto massimo di gas +// per blocco di codice e falliranno se lo superano +// Ad esempio: +for(uint x = 0; x < refundAddressList.length; x++) { + refundAddressList[x].transfer(SOME_AMOUNT); +} + +// Ci sono due errori nel codice precedente: +// 1. Un fallimento su una transfer impedisce al loop di completare tutti +// i cicli, bloccando dei soldi; +// 2. Questo loop potrebbe essere arbitrariamente lungo (si basa sul numero +// degli utenti che hanno diritto al rimborso), quindi potrebbe fallire sempre +// se supera il tetto massimo di gas per blocco; +// Come soluzione, si potrebbe permettere agli utenti di prelevare +// individualmente dal loro subaccount e segnare il rimborso come riscosso +// Ad es. preferire pull payments ai push payment + + ``` |