9.2 Monete Programmabili
9.2.1 Descrizione.
Una moneta programmabile è una moneta che ha regole e comportamenti custom, ovvero un asset che può essere costruito in modo affine ai comportamenti decisi da regole definite a monte.
9.2.2 Esempio
Con gli smart contract si può costruire una moneta che finisce sui conti corrente delle persone seguendo determinate regole:
- posso creare un conto corrente in cui posso inviare qualsiasi tipo di token, ma per il cui ritiro serva la firma del proprietario del conto stesso;
- posso, quindi, avere un mio conto corrente e programmare una moneta virtuale che si depositi su quel conto. Per ritirare la moneta dal conto e spostarla sul conto di un’altra persona è necessaria la mia firma, ovvero la mia volontà concreta di eseguire tale operazione.
Nelle banche questa cosa non è proprio così, poiché esse muovono dei soldi dal conto corrente senza l’autorizzazione dell’utente; a volte chiedono una prova per farlo (al fine di non essere accusate di aver mosso del denaro senza l’autorizzazione dell’utente).
Un esempio concreto è il caso in cui l’utente voglia fare un bonifico verso qualcuno: in quel caso l’utente sta chiedendo alla banca di fare quel bonifico e la banca successivamente lo esegue per l’utente. Questa è una cosa ben diversa dall’avere il possesso del proprio conto e mandare volontariamente del denaro a qualcuno. Se la banca non vuole effettuare quell’operazione (per qualsiasi motivo), non la esegue. Se la banca blocca il conto corrente dell’utente (per qualsiasi motivo) il denaro dell’utente rimane dentro quel conto, ma qualunque tentativo dell’utente di avere accesso al proprio denaro e di spostarlo, in quel caso, viene rifiutato.
Nel circuito T.R.I.N.C.I. è possibile costruire una moneta che se è di proprietà dell’utente, l’utente stesso può farne ciò che vuole. Non esiste al mondo nessun soggetto o istituzione (tantomeno Affidaty Blockchain Technology Provider) che possa entrare nei wallet e muovere le monete senza autorizzazione dell’utente.
Questo è il mondo delle monete programmabili. In T.R.I.N.C.I. ho quindi creato una moneta semplice, con la quale posso spostare il denaro quando voglio, ma posso creare anche monete più complesse.
- posso creare monete che si possano spostare solo se nel wallet (il conto) ci sia una quantità minima di moneta;
- potrei quindi mettere una soglia e dire “il wallet può raccogliere denaro, ma può spostare denaro solo se esso contiene almeno una soglia minima di 1.000 unità della moneta”;
- una volta creato, questo comportamento sarà indelebile, quindi nessuno potrà permettere lo spostamento di fondi se il wallet contiene meno di 1.000 unità della moneta;
- un esempio è lo staking: è possibile creare dei conti che raccolgono monete, ma che sono bloccati volontariamente dall’utente fino ad una certa data. In questo caso è lo smart contract stesso che, superata questa data, permetterà all’utente di muovere i suoi fondi, diversamente l’utente non potrà muoverli.
9.2.3 Per lo sviluppatore
Tutte queste caratteristiche sono implementabili dallo sviluppatore. Quest’ultimo, infatti, potrà costruirle in maniera molto semplice; non tramite una configurazione, ma tramite una programmazione vera e propria.
Successivamente, con l’ottenimento di maggiore esperienza, lo sviluppatore potrà costruire scenari più evoluti, come per esempio abbiamo fatto in T.R.I.N.C.I. con lo Advanced Asset (un modello di moneta programmabile che ha già tutte le caratteristiche necessarie per poter funzionare come la transfer, la pay, la gestione delle fees, la gestione delle witness, eccetera..), inizializzando la sua propria configurazione con i relativi parametri di configurazione come per esempio:
- per determinare quale sia il beneficiario delle fees,
- il comportamento da eseguire in caso di uno staking piuttosto che di un’altro,
- eccetera..
Una volta che una moneta viene inserita in un account, eredita i comportamente dell’advanced asset e li specializza con la configurazione che gli viene data dallo sviluppatore.
Ecco che gli scenari di programmazione che vengono aperti dalla tecnologia T.R.I.N.C.I. fanno da banco da lavoro a vantaggio dei programmatori che avranno una piattaforma di lavoro per espandere competenze ed applicazioni di esse al mondo business: ampliare la creazione di funzionalità aggiuntive per l’Advanced Asset; creare una moneta da zero prendendo magari ispirazione dall’Advanced Asset; creazione di moneta per lo sblocco di dispositivi IoT (esempio: un contatore elettrico smart che ti eroga la corrente solo se paghi il contatore..).
9.2.4 Per l’ azienda
Le aziende hanno un vantaggio in questa circostanza: l’Advanced Asset, da solo, copre probabilmente il 90% delle esigenze necessarie per una azienda che decide di entrare in blockchain.
Qualora ci fossero esigenze aggiuntive, l’Advanced Asset permette addirittura l'estensione di queste caratteristiche, senza necessità di riprogrammarsi esso stesso, come per esempio:
- gli hook, cioè gli “uncini”, sono 2: “after transfer” e “before transfer”. Sono delle chiamate remote che lo smart contract stesso esegue verso un account per notificargli che gli sono arrivati dei soldi;
- questi uncini funzionano in maniera molto efficace: potrei avere un comportamento particolare di un token solo in uno specifico wallet. Potrei dire, per esempio, che se ricevo quel token specifico lo invio direttamente a qualcun altro, ciò che in gergo viene definito “Proxy Wallet”.
- Per fare ciò io non avrò la necessità di riprogrammare tutto l’Advanced Asset, ma mi sarà sufficiente riprogrammare solo il wallet, aggiungendo una funzione che si chiama “After Transfer”, cioè un uncino che verrà richiamato in automatico dall’ Advanced Asset ogni qualvolta riceverò un pagamento;
- ecco che posso estendere le funzionalità dell’Advanced Asset anche senza modificare il comportamento del wallet.