Relazione pubblica sul mio percorso di apprendimento dell’implementazione di smart contract sulla blockchain di Ethereum

Il 27 Marzo 2022 ho deciso di iniziare una full immersion nell’apprendimento di Solidity partendo da una infarinatura generale di come funziona il mondo della Blockchain, da una lunga esperienza nel mondo del web development e da una base per metà universitaria e per metà autodidattica di alcuni dei linguaggi su cui si basa (C++, Python).
Il motivo per cui ho creato questa pagina é per avere un commitment pubblico. Se hai un’idea per un progetto basato su Solidity o vuoi darmi un suggerimento per facilitare il mio apprendimento, puoi contattarmi da qui.

2 Aprile, 2022

  • Quest’oggi ho ripreso a studiare la documentazione ufficiale di Solidity da dove l’avevo interrotta. Dopo un paio d’ore ho iniziato ad accusare i tecnicismi e mi sono reso conto che forse sarebbe meglio tenerla come reference generale e spostarmi su qualcos’altro.
  • Tra gli argomenti che ho toccato ci sono le tipologie di variabili, di funzioni (pure/view/payable), naming conventions e altri tecnicismi.
  • Mi sono spostato sull’ottimo CryptoZombies.io di cui avevo sentito già parlare su Reddit che già dopo pochissimo mi ha chiarito e semplificato alcune cose che non avevo capito. Sito web fantastico, ottimo per i neofiti come me! Ho creato subito un account.
  • Ho studiato la funzione keccac256 – molto interessante. Si basa su SHA-3 e mi sembra di capire che sia estensivamente utilizzata sulla piattaforma Ethereum. Alcuni dettagli qui.
  • Ho capito qualcosa di più sugli Eventi, che servono a comunicare al frontend di un app che qualcosa é avvenuto sulla blockchain.
  • Se ho capito bene, Web3.js é la libreria Javascript che serve per mostrare ciò che avviene all’interno della blockchain di Ethereum su un frontend, compreso un sito web o una web app. Se così fosse, credo che potrei aver trovato la chiave per sviluppare uno smart contract e dargli una forma concreta sul web.

Note della giornata

  • Funzione pure: non accede a dati né li modifica.
  • Funzione view: accede a dati ma non li modifica.
  • Le variabili che iniziano con l’underscore (_) sono reference per convenzione
  • Le funzioni che iniziano con l’underscore (_) sono private per convenzione
  • La location memory (da inserire ad esempio nella dichiarazione delle variabili di una funzione) é richiesta per tutti i reference types (array, struct, mapping e stringhe)
  • La funzione keccak256 si aspetta sempre un parametro singolo di typo bytes. Per “impacchettare” il parametro si può utilizzare abi.encodePacked().

Il mio ufficio quest'oggi

27 Marzo, 2022

Alcune correzioni apportate il 2 Aprile, 2022

  • La scelta su quale materiale usare come base per l’apprendimento é ricaduta innanzitutto sulla documentazione ufficiale di Solidity. In genere tendo ad evitare libri o video guide sviluppate da terzi in quanto potrebbero essere datate. Le utilizzerò come supporto in quei momenti in cui sento che non ci sto capendo più niente.
  • Ho iniziato a prendere familiarità con Remix, una delle più usate Ethereum IDE. Mi sembra di capire che sia una soluzione ottimale per la scrittura di smart contract non troppo complessi e per l’apprendimento.
  • Ho sviluppato un primo utilizzo di Storage seguendo la documentazione.
  • Ho sviluppato un primo esempio di smart contract per una cryptocurrency (“Coin”) seguendo la documentazione. Ho condotto vari test per comprendere l’invio e la ricezione di valuta virtuale.
  • Ho studiato altri esempi di smart contract, come un sistema di votazione (e delegazione di votazione) o un sistema d’aste (pubblico o al buio) basato su blockchain Ethereum.
  • Nello scoprire i primi Blockchain Explorer ho compreso che i test da me effettuati vengono registrati soltanto a livello di Storage ma non appaiono sulla Blockchain se non vengono chiamati degli specifici Events che li espongano.
  • Ho iniziato ad approfondire la sintassi e i vari tipi di dato consentiti dal linguaggio.
  • Alcune parole interessanti registrate oggi: smart contract, Ether, wei, EVM, Storage, memory, stack, address, minter, mapping, msg, block, gas, payload.

Idee e suggerimenti

Compila il modulo se vuoi offrirmi un suggerimento sul mio percorso di studi o se ti va di raccontarmi la tua idea di progetto basato su Solidity.