Introduzione
Ho scritto questa pagina perchè, volendo investire un minimo dei miei risparmi in cryptovalute, mi sono posto il problema di capire cosa stavo per fare, non capendone nulla.
Mi occupo d'informatica e non di finanza, quindi, ciò che scrivo o penso è il risultato di considerazioni personali che però cerco di basare sui fatti osservati e sull'abbondante documentazione esistente in materia.
Sono dell'opinione che la logica e il buon senso se applicate, possono portare a delle conclusioni intelligenti, qualsiasi sia la materia trattata. Infatti patata+patata fa due patate, anche se di numeri non si tratta, insomma la logica e il buon senso sono principi universali. Insomma penso di poter scrivere qualcosa di interessante e di sensato.
Ed è cosí che invece che scrivere degli appunti privati, seguendo invece i trend del momento scrivo nel mio blog, magari qualcuno potrà commentare e correggere o migliorare le mie conclusioni.
Gianrico, 22 Marzo 2021
La bitcoin blockchain
Una blockchain raggruppa le informazioni in gruppi, chiamati blocks. Non appena un blocco si riempie di informazioni se ne genera uno nuovo e lo si aggancia al precedente formando una catena. Oggi blocco ha un timestamp ovvero una data di inserimento nella blockchain. Nel caso del bitcoin nella blockchain c'e' ogni singola transazione effettuata. La blockchain è distribuita in computer diversi cioè ogni computer ha una copia dell'intera blockchain. Se uno dei computer ha dei dati alterati un confronto con tutti gli altri nodi ne vincola il riallineamento quindi nessuno può alterare i dati della propria copia di blockchain con successo. Ci vorrebbe la modifica del 51% dei nodi per poter alterare una blockchain in modo permanente. La posizione di un blocco nella catena si chiama height. I dati presenti in una blockchain non possono essere editati ma aggiunti.
Seguendo l'esempio dei bitcoin ogni blocco è diviso in due parti: il merkle tree e il block header.
Un merkle tree è una struttura ad albero dove le foglie sono le transazioni e tutti i nodi genitore sono hash SHA dei nodi figli. Quindi la root e' una hash di hash di hash ... la hash della root rappresenta tutte le transazioni nell'albero.
Nel blockheader in particolare c'e': il timestamp, l'hash del blocco precedente a esso, il nonce e il target. Su questi due ci lavorano i miners. Il target è un numero a 256bit. Il nonce è a 32bit. Affinchè un blocco sia accettato dalla rete, l'hash calcolata del blockheader dev'essere minore del valore target.
Il lavoro del miner consiste nel generare un nuovo blocco è di farlo 'accettare' dalla blockchain. Per fare ciò ne crea uno in cui inserisce una transazione di 12.5 bitcoin che diventeranno suoi nel caso in cui riesca. Successivamente inserisce nel blockheader l'hash del blocco precedente. Poi ci sarà un valore di hash del merkle tree. Il valore che il miner può modificare e solo il campo nonce (32 bit). Questa modifica permetterà di ottenere valori di hash differenti e quindi di ricercare la soluzione del problema.
La soluzione del problema è un valore chiamato target determina la difficoltà del problema. Questo valore cambia in tutti i client della rete ogni 2016 blocchi che, secondo le specifiche della blockchain bitcoin, devono essere generati ogni due settimane.
Il valore target è legato ad un valore di tempo blocktime per risolvere il problema che è mantenuto a 10 minuti. Quindi se i miners sono più veloci la rete abbasserà il valore target in modo da aumentarne la difficoltà altrimenti farà il contrario. Come detto questo controllo viene fatto ogni 2016 nuovi blocchi (circa due settimane).
Quindi il miner deve creare un blockheader con un valore nonce in modo che l'hash ricalcolata del blocco sia < target. Quindi il miner aumenta il campo nonce da 1,2,3, etc. e prosegue il test. Il valore massimo è 2^32 circa 4 billion. Non è detto che la soluzione si trovi arrivando a 2^32. In tal caso si modifica il blocco aggiungendo un campo chiamato extraNonce al campo coinbase. Quindi si ricalcolano le hash dell'albero merkle e quindi avendo cambiato i numeri di hash si ricomincia con il processo di cui sopra. Più basso è il valore del campo target più difficile è il problema.
Se il miner trova la soluzione ovvero il giusto valore nonce/extraNonce il suo blocco sarà accettabile per la blockchain e se arriva per primo potrà inserirlo e otterrà possesso dei 12.5 bitcoin. Questo avviene perchè è lo stesso miner che aveva aggiunto la transazione di 12.5 bitcoin al blocco su cui lavorava.
Il motivo per cui il numero di bitcoin massimo è 21 milioni (Bitcoin halving event) è che il reward per il mining diminuisce del 50% ogni 210,000 blocks, circa ogni 4 anni.
Credit card crypto.com in cryptocurrency
La carta di credito Crypto.com è legata al possesso di un wallet di cryptovaluta su crypto.com. La carta di credito fa parte del circuito visa ed è una sorta di carta prepagata in quanto la si carica dal wallet quindi la propria cryptovaluta viene spostata nella carta di credito però in valuta FIAT. Di fatto la carta di credito si ricarica con cryptovaluta ma ha un saldo in valuta FIAT in questo momento Euro o British Pound sui quali non è possibile effettuare operazioni di cambio.
Cryptovalute: ICO
Una ICO è una Initial Coin Offering e si ha quando si deve introdurre una nuova cryptovaluta. Diciamo che mi invento una cryptovaluta e nasce il problema di renderla universalmente accettata e utilizzabile.
L'emettitore crea un progetto e cerca un gruppo di investitori che credono e appoggiano l'iniziativa. Nella ICO si distribuiscono token per raccogliere i fondi. Un token garantisce quindi l'accesso ad un servizio futuro di una azienda. I possibili usi di un determinato token saranno determinati dall’azienda che li emette.
La principale differenza una cryptovaluta e un token è che la prima ha una sua blockchain, mentre il token non ce l’ha, o non ce l’ha ancora.
Un esempio di token è il Basic Attention Token (BAT), che è utilizzabile con i browser web Brave. Se vuoi pubblicare un banner pubblicitario paghi l'editore in BAT, gli utenti che usano il browser ricevono BAT per visualizzare gli annunci degli inserzionisti (Brave rewards).
Con Metamask si possono anche gestire anche i token su Ethereum o Binance.
Per utilizzare Metamask su google chrome si installa l'estensione. Successivamente se hai già un wallet metamask ti chiede la chiave privata per importarlo altrimenti ti crea un nuovo wallet su Ethereum.
CRYPTO.COM e TOKEN
Sono diversi oggi gli exchange che gestiscono delle blockchain interne.
Crypto.com è un exchange di cryptovalute che ha deciso di lanciare una blockchain pubblica open-source. Cioè loro hanno lanciato una nuova blockchain di nome Crypto.org Chain e il cui token nativo sarà il Crypto.org coin (CRO) presente già nella piattaforma per uso interno ma non scambiabile su altri Exchange. I CRO Tokens sono utility token (ERC-20 compatible). Ecco l'annuncio: "We are excited to share that the Crypto.org Chain Mainnet is scheduled to go live on 25 March 2021."
"In data 25 Marzo 2021 vuole lanciare nel mainnet il token CRO. Poco prima di questa data l'azienda ha burned 70 miliardi di CRO per aumentare la decentralizzazione della rete"
Io ho comprato dei token CRO quando la loro blockchain era ancora in beta. Nel momento in cui l'hanno messa in esercizio mi scrivono: "...You can migrate your ERC20 CRO to native CRO...". Se capisco bene ho sempre dei token però sulla loro blockchain. Ma siccome qualcuno deve pagare Ethereum per ogni token preso loro me lo fanno quando faccio un withdraw.
Crypto.org prevede anche 2 token interni alla blockchain:
- MCO (fatto da crypto.org in passato quando si chiamava Monaco): che poggia sulla Blockchain di Ethereum ed è possibile conservarla su qualsiasi wallet che supporti token ERC-20.
- CRO: questo token viene accettato su tutti i più importanti Exchange del Mondo. Il suo ruolo su Crypto.com è molto importante poiché decreta, tra le altre cose, il tipo di carta che è possibile utilizzare. Infatti, più CRO si hanno a disposizione, più il livello di carta utilizzabile è importante"
Crypto.com ha minato 100 billion di coin di cui 25 sono in circolazione. Hanno fatto burning di 70 billion di coin non ancora distribuiti.
Ora ci sono 30 billion di token. 25 billion of those tokens are already in circulation, with the remaining 5 billion to be emitted in block rewards over the next decade (i validator).
In data 29 Marzo 2021 ecco la situazione:
CRO Coin Price: | $0.222642 |
CRO Market Cap: | $5,624,606,627 |
CRO Circulating Supply: | 25,263,013,692 CRO |
CRO Total Supply: | 30,263,013,692 CRO |
Un wallet è un software dove puoi vedere la tua cryptovaluta. Un non-custodial mobile wallet è quello dove la chiave privata la custodisci tu. Quando creiamo un wallet nel nostro PC il sistema prende una sequenza casuale di numeri e genera la private key dalla quale poi genera la public key. Un wallet riscrive la chiave privata in un formato leggibile creando la recovery phrase (seed phrase) che va custodita e non condivisa. Con la seed phrase potrai fare il restore del wallet in caso di problemi. Una recovery phrase è una chiave privata in forma leggibile. Non perderla in nessun caso! La public key equivale al numero IBAN di un conto in banca, ovvero lo si comunica a quelli con cui devi fare transazioni. Non si puó matematicamente risalire alla chiave privata conoscendo quella pubblica in quanto per generarla si utilizzano algoritmi a una crittografia asimmetrica. Il wallet recupera le nostre cryptovalute presenti nella blockchain, distribuita, corrispondenti alla chiave pubblica. La cryptovaluta nel nostro portafoglio la possiamo utilizzare avendo la chiave privata. Con un wallet custodial non abbiamo noi la chiave privata quindi per la rete i proprietari della valuta è chi gestisce il wallet. Quest'ultima cosa succede in molti public exchange.
Le chiavi private nell'app crypto.com sono memorizzate dentro il telefonino. Se perdi il telefono perdi la cryptovaluta. Allora devi installare una seconda app che forniscono ovvero il DeFi wallet che ti fornisce la chiave privata e nel quale puoi trasferire i fondi che hai nell'app crypto.com.
Cosa succede se mi installo un portafoglio su tanti PC diversi? Facendo l'import ovvero creando dei duplicati? Una blockchain contiene le informazioni sul proprietario di ogni coin. I wallet accedono alle blockchain e quindi puoi installarli in tutti i dispositivi che vuoi. Con la sola chiave pubblica possono mostrarti le tue cryptovalute ma se vuoi fare operazioni devi inserire la chiave privata. Qundi se duplichi il wallet duplichi la chiave privata e di fatto hai anche un backup.
DOGECOIN
Dogecoin è stato creato da Jackson Palmer e dal suo team di sviluppo.
Dogecoin è una cryptovaluta con inflazione (inflationary currency) nata nel 2013. Bitcoin invece è una valuta deflazionaria (deflationary currency). Dopo il 2040 non ci saranno piu’ nuovi Bitcoin (max 21 million). La differenza è che verranno sempre generati nuovi Dogecoin a differenza dei Bitcoin.
Inizialmente sono stati coniati 100 billion di dogecoin.
L’obiettivo è di tenere circa 100 billion di coin in circolazione. Per fare questo dopo il dogecoin numero 100 billion il reward per il mining sarà 10k per ogni nuovo blocco. Considerando che molte monete si perdono per varie cause (wallet perduti, etc.) i creatori della cryptovaluta ritengono che i nuovi dogecoin non necessariamente creeranno inflazione.
Bisogna anche considerare un tasso di inflazione dell’economia globale che tende a svalutare una moneta.
Oltretutto l’ammontare di nuova moneta è irrilevante se il mercato cresce per un valore superiore al 5%. Infatti il 5% di 100 billion è 5 billion e questo è l’ammontare di nuova moneta dogecoin che si inserisce ogni anno. Ovviamente tutte queste considerazioni sono oggetto di dibattito.
La blockchain consente ogni minuto di creare un nuovo blocco e in un anno ci sono 525600 minuti che x 10k fanno 5 billion and 256 million.
Questo renderebbe la valuta “utile” e pronta a sopravvivere per un lungo periodo di tempo per evitare i problemi del bitcoin. Infatti oramai la maggior parte degli utenti hanno frazioni di bitcoin e quindi è come se si creasse nuova moneta e il tutto crea solo problemi contabili. Quando non si potranno minare più bitcoin si pensa che la valuta perderà utilità e importanza.
Ecco l'indirizzo del dogecoin explorer per "vedere" la blockchain:
https://dogechain.info/
Con la blockchain di ethereum puoi:
- Fare una tua cryptovaluta utilizzando i token;
- Creare smart contract. Ad esempio crei un contatto e aggiungi i membri della tua organizzazione. Se riceve abbastanza voti si esegue automaticamente.
- Creare dApps
- Raccogliere fondi creando uno smartcontract con una deadline. Se non si raggiunge la soglia le donazioni possono essere rimborsate.
Gli smart-contract si mettono nella EVM che è la macchina virtuale distribuita di Ethereum e ogni transazione richiede un certo gas che dipende dal lavoro computazionale necessario per eseguire il task. Solidity (una specie di C++) è il linguaggio di programmazione riconosciuto da EVM (Solidity si compila creando un bytecode per la EVM). Uno smart-contract è un codice scritto in solidity compilato in JSON è inserito nella blockchain. Quindi verrà ricopiato in tutti i nodi della blockchain. Il costo dipende dalla quantità di codice. Nella blockchain ci sta il contratto compitato e non i sorgenti. Uno volta inserito nella blockchain il contratto sarà identificato da un indirizzo di 20byte che sarà possibile richiamare da chiunque per usare il contratto.
Ethereum è una rete permission-less. Ognuno può accedere a tutto. Quindi lo sviluppatore deve inserire nel suo smart-contract una forma di controllo dei permessi se necessario.
MEME COIN
Per "MEME COIN" si intendono dei token utilizzati come cryptovaluta. Ce ne sono tantissimi ma buona parte di loro sono delle autentiche truffe. Quindi bisogna stare molto attenti nel selezionare i token se si ha intenzione di acquistarne. In genere gli exchange DEX sono meno sicuri.
Esempio: hotdoge
Hotdoge è stata lanciata il 22 Aprile 2021 da un developer che ha lasciato il progetto nelle mani della comunità facendo il locking della liquidity per un anno con DXSale e rinunciando alla proprietà. Ad un certo punto i developer hanno deciso di dismettere la crypto valuta creandone una nuova versione con un messaggio quanto meno discutibile come questo:
V1 to V2 HotDoge Token Migration
🌭🌭🌭Great news! We have now opened up the wallet for v1 to v2 migration!
👉Please use the form provided and follow the instructions exactly. If you have any questions, please ask before you initiate the process. https://forms.gle/DSgxFRUqgJZUbgUVA
👉Your tokens will be pooled and used for the liquidity of the new HotDoge v2 token. This upgrade will give you access to:
🔥 Better holder reflection rewards, including VIP and Volunteer Rewards.
🔥Astro buy-back mechanism to hold and keep constant upward pressure on our market pricing.
🔥A marketing and development wallet so we can pay for increased marketing, burn tokens and hire professionals to increase utilities to make HotDoge a competitor on the Binance Smart Chain.
🔥Supply for liquidity so we can list on major exchanges faster!
🔥You will all receive approximately the same USD value of your tokens airdropped to the wallet you have sent your tokens from within five days of launch.
🔥 After we will presale at 2x the current price so please complete your migration as soon as possible.
❗❗❗We will not support the v1 token after this. Everything will operate on v2 contract. Thank you and we welcome you all to the future of HOTDOGE DeFi
What are the new Tokenomics? What is supply?Total Supply: 1,000,000,000,000,000 $HotDoge.
15 % tax per transaction split for these purposes:
– 2.5% Designated for liquidity in DEX/CEX listings.
– 3% Redistributed (shared) between every holder.
– 3.5% Designated for Marketing & Development.
– 3% For VIP perks and Volunteer compensation.
– 3% Astro Anti-Whale Buyback
Sostanzialmente chi ha acquistato degli Hotdoge spendendo soldi dopo qualche anno si ritrova con un token che non vale null
DXSale - un portale per progetti relativi al rilascio di token, ti aiuta. arilasciare e gestire i token. Uno dei servizi è il DxLock in cui si blocca una certa quantità di token per un certo periodo di tempo.
Esempio: little rabbit LTRBT
- Sulla Binance Smart Chain (BSC) che e' una blockchain che va in parallelo con la Binance Chain. A differenza della Binance BSC ha supporto per gli Smart Contract ed e' compatibile con EVM.
- Yield farming mechanism (Meccanismo di resa agricola) che si puo' gare grazie ai permissionless liquid protocols
- Gasless instant yield generation - hai un rendimento tenendo i soldi nel tuo portafoglio
E' uno strumento DEFI dove si usano le DAPPS per interagire in modo P2P.
FEATURES : 5% FEE AUTO ADD TO THE LIQUIDITY POOL TO LOCKED FOREVER WHEN SELLING, 5% FEE AUTO DISTRIBUTE TO ALL HOLDERS, CREATED A BLACK HOLE SO #BEE TOKEN WILL DEFLATE (Vai qui:
https://medium.com/dfohub/a-black-hole-in-uniswap-v2s-front-end-router-is-draining-the-value-of-tokens-26f5a459b5d7
)ITSELF IN SUPPLY WITH EVERY TRANSACTION MAX BUY/SELL 2% OF THE TOTAL SUPPLY/2,000,000,000,000,000,000,000 LTRBT
AMM
Un automated market makers (AMM) è un programma di computer che permette lo swap di crypto currencies. Funziona utilizzando i liquidity pools depositati su smart contracts.
BLACKHOLE PROTOCOL
Uniswap’s centralized front-end design is allowing vampiric arbitrage bots to drain the prices of certain tokens
================
Proof Of Work (PoW)
Una volta che ciò si verifica, i miner convalidano un blocco e lo aggiungo alla blockchain, previo consenso da parte dei nodi che devono verificare che l’hash trovato da questo computer sia effettivamente corretto.
Proof Of Stake (PoS)
La PoS funziona in maniera completamente diversa. Il risultato finale è sempre lo stesso: convalidare i blocchi e garantire che siano effettivamente corretti. Più monete di cryptovaluta hai e più sei ritenuto attendibile. Cioè non c'e' mining di valuta. C'è una commissione di transazione per coniare un blocco di una valuta che è già premined.
POSSO FARMI UN TOKEN DA ME?
I token ERC20 sono lo standard per i token sulla rete ETHEREUM
I token ERC20 soo implementati come SMART CONTRACTS ed eseguiti sulla Ethereum Virtual Machine (EVM). Gli smart contracts sono pezzi di codice.
I dati di cui sopra andranno nella blockchain.
"Blockchain storage is expensive and users of your contract will need to pay for, one way or another. Therefore you should always try to minimize storage size and writes into the bl
ESEMPI
Ecco come memorizzare l'indirizzo del "proprietario" dello smart contract. La funzine costructor viene eseguita una sola volta quando si genera il contratto.
function constructor()
{ owner_addr = msg.sender;} // owner_addr è un nome scelto da noi
Con la funzione "modifier" possiamo restringere del codice per il proprietario:
modifier onlyOwner {
if(msg.sender != owner_addr)
_;
}
In questo modo solo il proprietario puo' distruggere il contratto. Qui se il contratto si distrugge vengono trasferiti al proprietario:
function Selfdestructs (address addr) onlyOwner(){
selfdestruct(addr);
}
ESEMPI DI SOLIDITY (dal tutorial ethereum)
//
// Specifies the version of Solidity, using semantic versioning.
// Learn more: https://solidity.readthedocs.io/en/v0.5.10/layout-of-source-files.html#pragma
// HELLO WORLD
pragma solidity ^0.5.10;
// Defines a contract named `HelloWorld`.
// A contract is a collection of functions and data (its state).
// Once deployed, a contract resides at a specific address on the Ethereum blockchain.
// Learn more: https://solidity.readthedocs.io/en/v0.5.10/structure-of-a-contract.html
contract HelloWorld {
// Declares a state variable `message` of type `string`.
// State variables are variables whose values are permanently stored in contract storage.
// The keyword `public` makes variables accessible from outside a contract
// and creates a function that other contracts or clients can call to access the value.
string public message;
// Similar to many class-based object-oriented languages, a constructor is
// a special function that is only executed upon contract creation.
// Constructors are used to initialize the contract's data.
// Learn more: https://solidity.readthedocs.io/en/v0.5.10/contracts.html#constructors
constructor(string memory initMessage) public {
// Accepts a string argument `initMessage` and sets the value
// into the contract's `message` storage variable).
message = initMessage;
}
// A public function that accepts a string argument
// and updates the `message` storage variable.
function update(string memory newMessage) public
message = newMessage
}
}
// ESEMPIO CREAZIONE TOKEN
pragma solidity ^0.5.10;
contract Token {
// An `address` is comparable to an email address - it's used to identify an
// account on Ethereum.
// Addresses can represent a smart contract or an external (user) accounts.
// Learn more: https://solidity.readthedocs.io/en/v0.5.10/types.html#address
address public owner;
// A `mapping` is essentially a hash table data structure.
// This `mapping` assigns an unsigned integer (the token balance) to an address
// (the token holder).
// Learn more: https://solidity.readthedocs.io/en/v0.5.10/types.html#mapping-types
mapping (address => uint) public balances;
// Events allow for logging of activity on the blockchain.
// Ethereum clients can listen for events in order to react to contract state changes.
// Learn more: https://solidity.readthedocs.io/en/v0.5.10/contracts.html#events
event Transfer(address from, address to, uint amount);
// Initializes the contract's data, setting the `owner`
// to the address of the contract creator.
constructor() public {
// All smart contracts rely on external transactions to trigger its functions.
// `msg` is a global variable that includes relevant data on the given transaction,
// such as the address of the sender and the ETH value included in the transaction.
//
owner = msg.sender;
}
// Creates an amount of new tokens and sends them to an address.
// Quando ti crei un account su Binance o Ethereum fornisci una email
function mint(address receiver, uint amount) public {
// `require` is a control structure used to enforce certain conditions.
// If a `require` statement evaluates to `false`, an exception is triggered,
// which reverts all changes made to the state during the current call.
// Learn more:
// Only the contract owner can call this function
require(msg.sender == owner, "You are not the owner.");
// Ensures a maximum amount of tokens
require(amount < 1e60, "Maximum issuance succeeded");
// Increases the balance of `receiver` by `amount`
balances[receiver] += amount;
}
// Sends an amount of existing tokens from any caller to an address.
function transfer(address receiver, uint amount) public {
// The sender must have enough tokens to send
require(amount <= balances[msg.sender], "Insufficient balance.");
// Adjusts token balances of the two addresses
balances[msg.sender] -= amount;
balances[receiver] += amount;
// Emits the event defined earlier
emit Transfer(msg.sender, receiver, amount);
}
}
Questi esempi sono tratti da soliditylang dot org
Questo contratto permette a chiunque di memorizzare un dato che chiunque può successivamente prelevare.
// SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.4.16 <0.9.0; contract Salvadati { uint datomemorizzato; function set(uint x) public { datomemorizzato = x;
} function get() public view returns (uint) { return datomemorizzato;
} }
Questo contratto implementa una semplice forma di cryptovaluta:
https://docs.soliditylang.org/en/develop/introduction-to-smart-contracts.html#self-destruct
Questo esempio, preso da un articolo della Monash University, crea un contratto in cui ognuno mette 1 ether e quando si arriva a 10 si nomina un vincitore dei 10:
pragma solidity ˆ0.4.25;
contract Example {
address owneraddr;
address[] participators;
uint participatorID = 0;
function constructor(){
owner_addr=msg.sender;
}
function() payable {
if(msg.value!=1 Ether)
revert();
participators[participatorID]=msg.sender;
participatorID++;
if(this.balance == 10 Ether)
getWinner();
}
function getWinner() {
uint random=uint(block.blockhash(block.number)) % participants.length;
participators[random].transfer(9 Ether);
participatorID=0;
}
modifier onlyOwner {
if(msg.sender != owneraddr)
_;
}
function Selfdestructs(address addr) onlyOwner(){
selfdestruct(addr);
}
}
------------------------------------------------------
Commenti
Posta un commento