Ethereum e Smart Contract
Francesco Santini
Dipartimento di Matematica e Informatica Università di Perugia
Ethereum
È definito come il “world computer”
Una infrastruttura decentralizzata di calcolo che esegue programmi, chiamati smart contract
La blockchain serve per memorizare e sincronizzare i cambiamenti di stato dovuti all’esecuzione
La criptovaluta (Ether, Ξ) serve a misurare e limitare i costi dovuti alla computazione
Comparato a Bitcoin
Molto in comune: è una blockchain, quindi rete P2P, un
algoritmo di consenso per sincronizzare lo stato, incentivi come PoW, l’uso funzioni criptografiche e di funzioni di hash, una criptovaluta
Differenze sostanziali
• Ethereum NON è pensato per pagamenti
• È una piattaforma di calcolo decentralizzato
• La criptovaluta serve solo per utilizzare la piattaforma di calcolo
• Valutazione vero/falso di condizione di spesa (Bitcoin) contro un linguaggio Turing completo (Ethereum)
Nascita e vita
Vitalik Buterin: fine 2013, quattro anni dopo Bitcoin (3/1/2009) Proposta come sostituzione di un overlay che implementava
smart contract sopra Bitcoin
Frontier
Luglio 2015 Ice Age Homestead
Marzo 2016 DAO
Tangerine Whistle Spurious
Dragon
Metropolis October 2017
Constanti nopole
Serenity October 2019 Feb 2019
Ethereum 2.0
Bianco contro giallo
Vitalik vs Satoshi
Prezzo
21 Marzo, 1 ether = 140 dollari
1385$ 13/1/18
Bitcoin e BlockChain, conosciamoli meglio
Testnet (MetaMask)
Bitcoin e BlockChain, conosciamoli meglio
1. Open-source 2. Pubblica
3. Globale
4. Decentralizzata
5. Resistente alle modifiche (immodificabile)
…piattaforma di calcolo
Caratteristiche blockchain
Bitcoin e BlockChain, conosciamoli meglio
Ogni 10-20 secondi
Node Node Node
Node
Node Node
1. Verifica le transazioni, eseguendo codice 2. Colleziona le transazioni in un blocco
3. Proof-of-work
4. Broadcast gli altri nodi della rete
Block 0 Block 1 Block n
...
Block-chain
miner
Bitcoin e BlockChain, conosciamoli meglio
Externally Owned Contracts (EOA): sono associati ad una chiave privata, con la quale è possibile accedere al conto
Contract Account: associati ad un contract code (che un EOA non può avere) e non ad una chiave privata. Sono
controllati esclusivamente dalla logica del programma a cui corrispondono.
Tipi di contratti
Contract account EOA esegui(fuzione1,dati)
+ commissione
Bitcoin e BlockChain, conosciamoli meglio
Basta una transazione ad all’indirizzo 0, ed il campo dati della transazione contiene il contratto
Caricare un contratto
Bitcoin e BlockChain, conosciamoli meglio
Bitcoin e BlockChain, conosciamoli meglio
Bitcoin e BlockChain, conosciamoli meglio
Serve a disaccoppiare le unità di Ether ed il suo valore di
mercato dall’unità per misurare l’uso computazionale (gas).
Una differenza rispetto l’attuale mercato energetico è che
colui che effettua una transazione imposta il prezzo di gas e il minatore può accettare o meno.
L’uso della rete si basa sul Gas che si paga in ETH
Gas Cost: quante unità di gas costa una operazione
Gas Limit: La quantità di Gas massima che siamo disposti a pagare Gas Price: quanto sono disposto a pagare il gas
La commissione è Gas Price * Gas Consumed
Gas
Bitcoin e BlockChain, conosciamoli meglio
Ethereum è Turing-complete: possono essere eseguiti anche contratti che non terminano
Turing ci dice che non è possibile calcolare se un programma termina oppure no
Il gas serve per proteggere la rete
Prevenire attacchi Denial of Service (DoS)
Perché il gas è importante
Bitcoin e BlockChain, conosciamoli meglio
Quanto costa un’op?
Bitcoin e BlockChain, conosciamoli meglio
Stato
Un indirizzo serve a trovare l’account nel World State
0xbfb2e296d9cf3e593e79981235aed29ab9984c0f
Codice
Nonce Stato
Bilancio
Account EOA o contract
clienti = 2 clienti = clienti + 1
1 eth 1
Bitcoin e BlockChain, conosciamoli meglio
The ima The
image part
World state
clientCount = 2
Balance[cliente1]= 10
clientCount = 3
Balance[cliente1] = 8
1. Iscrizione terzo cliente 2. Cliente 1 ritira 2 ether
Bitcoin e BlockChain, conosciamoli meglio
World state
Codice
Nonce Stato
Bilancio
Codice
Nonce Stato
Bilancio
Codice
Nonce Stato
Bilancio
. . .
Codice
Nonce Stato
Bilancio
0xbfb2e296d9cf3e593e79981235aed29ab9984c0f 0x89205A3A3b2A69De6Dbf7f01ED13B2108B2c43e7
0x0472ec0185ebb8202f3d4ddb0226998889663cf2
0x123f681646d4a755815f9cb19e1acc8565a0c2ac
Bitcoin e BlockChain, conosciamoli meglio
Coin e token
Un token è tipicamente un asset che viene ospitato da un’altra blockchain: un esempio sono i token erc20 ospitati dalla
blockchain di Ethereum
Attraverso Smart Contract ognuno può creare e scambiare il proprio token
Bitcoin e BlockChain, conosciamoli meglio
Una Initial Coin Offer non è nient'altro che una promessa, possibile tramite gli smart contract, di restituire i capitali raccolti tramite dei token. Io, azienda, rilascio
un whitepaper contente il mio business plan e chiedo di essere finanziato, in cambio del finanziamento rilascerò agli investitori dei tokens.
La parola dApp è un acronimo per indicare una applicazione decentralizzata: un software creato attraverso smart
contracts che collegano la blockchain di Ethereum - o di
qualsiasi altra piattaforma idonea - alla back-end di una app.
Social network o advertising su dApp?
ICO e dApp
Bitcoin e BlockChain, conosciamoli meglio
Videogame basato su blockchain: comprare, collezionare, allevare, vendere gatti virtuali
La sua popolarità ha congesitonato la rete Ethereum: picco per le commissioni e rallentamenti (Dicembre 2017)
Gatto venduto per 117 mila dollari…
Cryptokitties
Conclusioni
Bitcoin e BlockChain, conosciamoli meglio
Futuro di Bitcoin, verso reti di secondo livello, come Lightning
Buterin: scalabilità, privacy, e usabilità
Sharding (partizionamento delal blockchain)
Proof of Stake invece che Proof of Work (Casper)
Futuro
Bitcoin: tra 3 e 7 transazioni al secondo Ethereum: 15
Visa: 24K (~1700 in pratica)
Bitcoin e BlockChain, conosciamoli meglio
Grazie per l’attenzione
Contacts:
francesco.santini@unipg.it
Bitcoin e BlockChain, conosciamoli meglio
Gli smart contract sono scritti in linguaggi ad alto livello:
Serpent e Vyper (Python), Solidity (Javascript, C++, Java)
Solidity (0.5.x)
pragma solidity ^0.5.6;
contract MyContract { uint i = (10 + 2) * 2;
}
{ "linkReferences": {}, "object":
"60806040526018600055348015601457600080fd5b5060358060226000396000f3fe608060405 2600080fdfea165627a7a7230582026fcdfc358df94bc086b3be715b45b17eba5545e5c957776ba 553e21731913a80029", "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x18 PUSH1 0x0 SSTORE CALLVALUE DUP1 ISZERO PUSH1 0x14 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x35 DUP1 PUSH1 0x22 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG1 PUSH6 0x627A7A723058 KECCAK256 0x26 0xfc 0xdf 0xc3 PC 0xdf SWAP5 0xbc ADDMOD PUSH12 0x3BE715B45B17EBA5545E5C95 PUSH24
0x76BA553E21731913A8002900000000000000000000000000 ", "sourceMap": "24:50:0:-
;;;59:12;50:21;;24:50;8:9:-1;5:2;;;30:1;27;20:12;5:2;24:50:0;;;;;;;"}