2.2 - Tecnologie scelte
2.2.1 Blockchain pura, non proveniente da fork di altre tecnologie.
T.R.I.N.C.I. non è un fork di un’altra blockchain. Né di Bitcoin, né di Ethereum, né di Polkadot o altre. T.R.I.N.C.I. è una blockchain nata da zero.
La motivazione principale che ci ha spinto a costruire una blockchain non derivante da fork è relativa al fatto che volessimo essere una nuova proposta differente dalle tecnologie già presenti sul mercato.
Il nostro obiettivo è quello di produrre una tecnologia …
2.2.2 Rust e Web Assembly
Abbiamo fatto molti tentativi in vari linguaggi di scrittura: C#, Java, Go (uno dei candidati più importanti per la stesura della tecnologia).
Dai giganti si impara in fretta che una tecnologia la si sceglie su due filoni principali: 1 - la conoscenza che i propri sviluppatori hanno di una tecnologia particolare ti spinge a fare scelte importanti verso di essa; 2 - testare le tecnologie ed i linguaggi direttamente sul campo e non semplicemente consultando Stack Overflow per capire come performano, poiché ogni linguaggio ha delle caratteristiche che si vedono nell’ambito della propria applicazione, non a livello generale.
Abbiamo quindi costruito un classico banco di prova per testare quale tecnologia, quale linguaggio fosse più attinente ai nostri scopi.
Quando abbiamo messo sul banco di prova la nostra applicazione, i nostri sistemi, i nostri algoritmi, le nostre funzioni, abbiamo effettuato benchmark mirati per misurare il consumo di memoria e l'utilizzo della CPU, così da avere un metro di paragone tra i vari linguaggi in un contesto blockchain.
Tra queste, sviluppate in Rust, C Sharp o Go, il linguaggio Rust è risultato il migliore, staccando di un ordine di grandezza tutti gli altri linguaggi scelti.
2.2.3 Rust
Rust è un linguaggio compilato a basso livello con tipizzazione statica, multi-paradigmico, che nasce con l’intento di primeggiare in termini di sicurezza e di prestazioni. Rust nasce nel 2010 nei laboratori Mozilla Research, ad oggi è uno dei linguaggi più amati dagli sviluppatori (stackoverflow survey) e vanta di grandi community che lo promuovono, offrono assistenza e sviluppano moduli e documentazione per il suo ecosistema. Le ragioni del suo successo ed i motivi per cui è stato scelto come linguaggio di sviluppo del nodo della rete blockchain T.R.I.N.C.I. sono svariate: alte prestazioni assicurando comunque memory safety, buon supporto della programmazione concorrente, grossa crescita di librerie secondarie, retrocompatibilità con versioni precedenti del linguaggio.
C’è però da constatare che per garantire la memory safety di cui si fa vanto, il linguaggio è molto rigido per quanto riguarda regole di scrittura del codice. Per questo motivo entra in gioco il Package Manager di Rust, Cargo, che si occupa anche di compilare.
Cargo, infatti: offre, in ambito di compilazione, una dettagliata collezione di messaggi per guidare lo sviluppatore a risolvere gli errori che comprometterebbero la sicurezza del pacchetto creato; vanta ottimi strumenti di gestione di dipendenze, versionamento di queste e distribuzione di pacchetti generati dalla community; rende impeccabile l’interazione con pacchetti terzi, portando lo sviluppatore a concentrarsi semplicemente all’implementazione e non a problemi di compatibilità che un pacchetto potrebbe causare in caso di aggiornamenti non attesi.
Rust è stato scelto come linguaggio di programmazione poiché ritenuto maggiormente idoneo per sviluppare T.R.I.N.C.I., ma è necessario comprendere che la competenza di sviluppatore in Rust è strettamente dedicata alla tecnologia del core e del nodo per modificarne l’uso. Ecco perché, per un’azienda che decide di usare e/o di implementare la tecnologia T.R.I.N.C.I. nel proprio business, non è strettamente necessario avere uno o più sviluppatori con conoscenza di Rust. Diventerà necessario solo qualora l’azienda avesse interesse a modificare il core o il nodo per farci un altro uso.
2.2.4 WASM (WebAssembly)
Il secondo pilastro su cui si basa la nostra tecnologia è il WASM, prodotto di una delle community W3C. Questo è un formato binario di istruzioni per virtual machine stack-oriented. L’obiettivo del WASM è quello di avere come prodotto della compilazione di codice sorgente un target file che possa essere eseguito via web da applicazioni client e server.
La forza del WASM quindi è la sua portabilità, potendolo eseguire sui web browser più comuni (Firefox, Chrome, Safari e Edge), ed elasticità dato che è possibile generare file WebAssembly dai linguaggi di programmazione più comuni, degni di nota sono: C, Ruby, Go e Rust essendo così effettivamente un “esperanto” per prodotti web. I punti di forza del WebAssembly sono: Efficienza e velocità: lo stack machine WASM è progettato per essere codificato in un formato binario efficiente in termini di dimensioni e tempi di caricamento. WebAssembly mira a essere eseguito a velocità nativa sfruttando le capacità hardware comuni disponibili su un'ampia gamma di piattaforme; Sicuro: WebAssembly descrive un ambiente di esecuzione sandbox, sicuro per la memoria. Quando è incorporato nel Web, WebAssembly applica i criteri di sicurezza same-origin e di autorizzazione del browser; Open e Debuggable: WebAssembly è progettato per essere stampato in un formato testuale per il debug, il test, la sperimentazione, l'ottimizzazione, l'apprendimento, l'insegnamento e la scrittura di programmi. Il formato testuale è utilizzato inoltre quando si visualizza il sorgente dei moduli Wasm sul web; Parte della piattaforma open web: WebAssembly è progettato per mantenere la natura versionless, feature-tested e retrocompatibile del Web. I moduli WebAssembly saranno in grado di chiamare dentro e fuori dal contesto JavaScript e di accedere alle funzionalità del browser attraverso le stesse API Web accessibili da JavaScript. WebAssembly supporta anche incorporazioni non Web.
ll WebAssembly, all’interno di T.R.I.N.C.I., è il formato nel quale gli smart contract sono esportati. Essendo la produzione di questi una delle attività più frequenti e comuni all’interno di Affidaty (oltre ad essere il mezzo necessario alla community per sfruttare la blockchain T.R.I.N.C.I. nel prossimo futuro), abbiamo deciso di scegliere una tecnologia che fosse il più possibile versatile, di facile adozione per un utente più o meno esperto, e non vincolante nell’utilizzo di un linguaggio piuttosto che di un altro, poiché: Lo sviluppo degli smart contracts è una attività molto più quotidiana rispetto allo sviluppo del core. La tecnologia di base, una volta sviluppata, non viene alterata a meno di inserimento di grosse major release.
Combinando i moduli Rust sfruttati dai nodi della blockchain e il WebAssembly è possibile creare strumenti di simulazione e test che possano essere eseguiti agevolmente in contesti WebApp. Grazie a ciò un utente può: creare una transazione, verificare la sua validità, simulare la sua esecuzione, valutare il suo esito, infine una volta soddisfatto, l’utente ha la possibilità di sottomettere nella rete di produzione l'effettiva transazione, conoscendo già il suo esito.
Questo è solo un esempio delle possibili applicazioni degli strumenti a nostra disposizione, che combinati con le soluzioni da noi implementate, sinergicamente comportano lo sviluppo di un ecosistema completo e trasparente rispetto alla rete T.R.I.N.C.I. rendendo la blockchain, spesso complessa ad occhi esterni, un mezzo di facile accesso.
v2.2.5 Cross platform.
Cross device, subito testabile.
Nell’ambiente blockchain Metamask è un tool di riferimento, un plugin che permette l’utilizzo di wallet di Ethereum all’interno dei comuni browser. Sottolineiamo: è un plugin da installare, con tutte le eventuali difficoltà che ciò può comportare.
Molte persone, d’altro canto, non usano Metamask: quando un utente si trova all’interno di portali come OpenSea o altri, scopre in quel momento che serve un Metamask perché potrebbe avere i propri Ethereum su Binance o Coinbase o altri exchange.
Quando l’utente vorrà usare i propri Ethereum dovrà necessariamente installare un plugin.
Con T.R.I.N.C.I. abbiamo riscritto tutta la tecnologia in puro Javascript.
Quindi, per utilizzare la tecnologia client, usare il wallet, o la Identità Sovrana di T.R.I.N.C.I. (4RYA) non è necessario installare alcun plugin: è sufficiente usare un comune browser o una app mobile per poter usare un componente che abbiamo chiamato T2Lib per fruire di tutte le caratteristiche di produzione di transazioni, deleghe e tutte le caratteristiche che sono all’interno della tecnologia blockchain, direttamente dal browser.
L’utente, quindi, si trova a poter usare questa tecnologia con la stessa facilità d’uso di un popup o di una normale finestra html in cui interagisce, ma dietro c’è tutta una tecnologia di crittografia avanzata che permette: all’utente di usare il proprio wallet in totale sicurezza, perché persino chi integra questa tecnologia non sarà mai in grado di vedere, compromettere, corrompere la chiave privata per sottrarre informazioni; una trasparenza del codice di sviluppo in quanto l’applicazione è open source. La tecnica crittografica è quindi chiaramente dichiarata, mostrando che non sono stati usati sistemi basati su cookie o artifici diversi.
2.2.6 User Experience curata.
Il nostro team dedicato di UX lavora costantemente per ridurre la barriera di utilizzo di questa tecnologia, perché in molti non hanno ancora compreso cosa vuol dire avere a che fare con un wallet.
Da una parte c’è una linea di business che richiede costantemente di rendere più banale possibile l’utilizzo degli strumenti; mentre dall’altra parte ci siamo messi noi delle barriere da non superare, degli auto limiti che ci siamo imposti affinché gli strumenti che mettiamo a disposizione dell’utente vengano utilizzati con la corretta attenzione.
Al contempo abbiamo cercato di introdurre una fase di formazione sul campo, dove l’utente, mano a mano che utilizza gli strumenti di T.R.I.N.C.I. come la T2Lib, l’Authin, il Pay Component, viene informato durante lo sviluppo del processo.
Quindi, per esempio, durante la creazione di un wallet, informiamo l’utente di ciò che gradualmente sta accadendo sul suo schermo per dargli coscienza di ciò che sta facendo. Vogliamo dare agli utenti la percezione del valore che stanno ricevendo, senza ridurre tutto a dei semplici click.
Tramite processi di UX design specifici, mettiamo in condizione l’utente di ricevere informazioni in real time mentre compie azioni sui nostri portali; questo con l’obiettivo di portarlo ad una consapevolezza ed una confidenza crescenti mentre esplora l’ecosistema nel quale sta ponendo la propria fiducia.
Quindi: da una parte regaliamo tanti piccoli tips, che rendono lo sviluppatore confidente della tecnologia e subito in grado di vedere i risultati di ciò che sta programmando; dall’altra, per l’utente classico, portiamo la semplicità d’uso, senza vedere la complessità del sistema, raggiungendo l’obiettivo sul monitor (o su un qualsiasi altro device) con una fluida e semplice UX.