Czym jest Blockchain?
- Rozproszona struktura danych - organizująca "transakcję"/zdarzenia - rejestr
- Algorytm Konsensusu - aby zdecydować kto może tę strukturę modyfikować
- Trochę kryptografi - żeby to było bezpieczne/odporne na modyfikacje (tamperproof)
- Zachęty (Incentives) - żeby mogło działać bez nadzoru i zaufania
Spróbujmy zbudować bezpieczny rejestr transakcji
- Razem ze znajomymi rozliczamy się ile i kto jest komu winien.
- Każdy może dodać nową transakcję
- Rozliczamy się pod koniec miesiąca
Rejestr
- Alicja płaci Bolkowi $100
- Bolek płaci Cyrylowi $10
- Daniel płaci Alicji $70
Czy możesz ufać swoim przyjaciołom?
- Alicja płaci Bolkowi $100
- Bolek płaci Cyrylowi $10
- Daniel płaci Alicji $70
- Alicja płaci Bolkowi $1000
- Cyryl płaci Bolkowi $1000
- Daniel płaci Bolkowi $1000
Jak zabezpieczyć sie przed oszustwem?
Podpisy cyfrowe
- Każda osoba generuje swój klucz prywatny i odpowiadający mu klucz publiczny
- Każda transakcja musi być podpisana przez nadawcę
- Uczestnicy identyfikowani są przez klucz publiczny
Podpisy cyfrowe
-
SIGN(Message, SK) -> Signature RECOVER(Signature, Message) -> PK
- Sygnatury nie mogą być skopiowane bo zależą od wiadomości
- Nie można "podrobić" podpisu - bezpieczna kryptografia
- Alicja płaci Bolkowi $100
+ Sygnatura Alicji - Bolek płaci Cyrylowi $10
+ Sygnatura Bolka - Daniel płaci Alicji $70
+ Sygnatura Daniela
Jak wygląda rejestr?
Co jeżeli skopiujemy całą transakcję?
- Alicja płaci Bolkowi $100
+ Sygnatura Alicji - Bolek płaci Cyrylowi $10
+ Sygnatura Bolka - Daniel płaci Alicji $70
+ Sygnatura Daniela - Alicja płaci Bolkowi $100
+ Sygnatura Alicji - Alicja płaci Bolkowi $100
+ Sygnatura Alicji
Jak się przed tym zabezpieczyć?
Replay protection
- Ponumerujmy wszystkie transakcje
- Sygnatura dodatkowo musi uwzględniać numer transakcji
- 1. Alicja płaci Bolkowi $100
+ Sygnatura Alicji - 2. Bolek płaci Cyrylowi $10
+ Sygnatura Bolka - 3. Daniel płaci Alicji $70
+ Sygnatura Daniela
Jak wygląda rejestr?
Czy widzicie jeszcze jakiś problem?
Kolejne problemy
- Transakcje można wymienić
- Jeżeli transakcje będą powstawać równolegle możemy mieć konflikt
- Najlepiej byłoby gdyby sygnatura każdej transakcji zawierała cały rejestr
- Co oczywiście jest niepraktyczne na dłuższą metę
- 1. Alicja płaci Bolkowi $100
+ Sygnatura Alicji - 2. Bolek płaci Cyrylowi $10
+ Sygnatura Bolka - 3. Daniel płaci Alicji $70
+ Sygnatura Daniela
TransactionChain
Alicja płaci Bolkowi $100+ Sygnatura Alicji
Bolek płaci Cyrylowi $10 + Sygnatura Bolka
Daniel płaci Alicji $70 + Sygnatura Daniela
Grupowanie transakcji
- Pojedyncze transakcje są niepraktyczne
- Lepiej pogrupować transakcje razem w "blok"
- Jak często powinien powstawać blok?
- Kto ten blok stworzy?
BlockChain
1. Alicja płaci Bolkowi $100+ Sygnatura Alicji
1. Bolek płaci Cyrylowi $10 + Sygnatura Bolka
1. Daniel płaci Alicji $70 + Sygnatura Daniela
Lista zmian
Lista zmian
Lista zmian
Metadane/ poprzedni stan
Metadane/ poprzedni stan
Metadane/ poprzedni stan
Genesis State
Blockchain
Niemutowalna struktura danych zawierająca wszystkie zmiany który zostały zaplikowane do danego punktu w czasie
Blockchain
Hashes - prevent tampering (e.g. KECCAK256)
Signatures - authorize the actions (e.g. ECDSA)
Parent = hash(B0) Timestamp = 150..000 Number = 1
Hash = hash(B1)
transfer(A, B, 5)
sig(A)
transfer(C, B, 1)
sig(C)
Parent = hash(B2) Timestamp = 150..000 Number = 2
Hash = hash(B1)
transfer(B, A, 5)
sig(B)
Kto tworzy nowe bloki?
I dlaczego?
Musimy to ustalić przed startem sieci.
Może warto te osoby wynagrodzić?
(zachęty = incentives)
Algorytm Konsensusu
Kto może tworzyć nowe bloki?
sig(Authority1)
hash(B0)
hash(B1)
sig(Authority2)
hash(B2)
sig(Authority1)
Proof of Authority
Akceptujemy bloki tylko podpisane przez pre-definiowaną listę adresów.
Bloki muszą być podpisywane na przemian, maksymalnie jeden blok na 3 s.
Algorytm Konsensusu
Kto może tworzyć nowe bloki?
Difficulty=2 Sol.=0b001.. SolvedBy=A
hash(B0)
hash(B1)
hash(B2)
Proof of Work
Akceptujemy tylko bloki, które zawierają rozwiązanie matematycznej zagadki.
Trudność zagadki dopasowuje się do szybkości rozwiązań, tak żeby mieć stabilny czas bloku.
Difficulty=4 Sol.=0b00001.. SolvedBy=B
Difficulty=3 Sol.=0b0001.. SolvedBy=A
Jak to działa?
(Boot) Node 1
Node 2
New Node
Hey! Could you give me all your peers?
Jak to działa?
(Boot) Node 1
Node 2
New Node
Hey! Send me all them blocks, will ya?
Block 5
Block 4
Block 0
Jak to działa?
(Boot) Node 1
Node 2
New Node
Hey! I've got a transaction to include in block.
Block 5
Block 5
Block 5
transfer(N, B, 5)
sig(N)
Jak to działa?
(Boot) Node 1
Node 2
New Node
Block 5
Block 5
Block 5
transfer(N, B, 5)
sig(N)
transfer(N, B, 5)
sig(N)
Cool, I'm mining and will include the tx for a small fee.
Jak to działa?
(Boot) Node 1
Node 2
New Node
Block 6
Block 5
Block 5
transfer(N, B, 5)
sig(N)
transfer(N, B, 5)
sig(N)
Block 6
Managed to mine new block, here it is guys!
Jak to działa?
(Boot) Node 1
Node 2
New Node
Block 6
Block 6
Block 6
Lista zmian
Lista zmian
Lista zmian
Metadane/ poprzedni stan
Metadane/ poprzedni stan
Metadane/ poprzedni stan
Genesis State
Blockchain
Niemutowalna struktura danych zawierająca wszystkie zmiany który zostały zaplikowane do danego punktu w czasie
Łańcuch kanoniczny
Co jeżeli powstaną dwa bloki z tym samym hashem rodzica?
Który powinienem wybrać?
Block 1
Block 2
Block 3
Block 3
"Fork"
Łańcuch kanoniczny
Wybieramy "najdłuższy" łańcuch.
Ethereum wybiera łańcuch z największą trudnością.
Block 1
Block 2
Block 3
Block 3
Block 4
Do zapamiętania: najnowszy stan może się zmieniać, to co widzisz może zostać odwrócone - czekaj na potwierdzenia
Czym jest Bitcoin?
Bitcoin to pierwszy publiczny Blockchain.
Block Time | 10 minutes |
Consensus | Proof of Work - hashcash |
State | Account Balances of BTC / UTXO* |
Transactions | Value Transfers* |
Launched | 2009 |
Block Reward | 12BTC (halving) ~ 21M total coins |
Czym jest Ethereum?
Ethereum to "The World Computer"
Block Time | 14 seconds |
Consensus | Proof of Work - ethash* |
State | Arbitrary |
Transactions | Turing-complete / programmable |
Launched | 2015 |
Block Reward | 3.75ETH (+uncles) ~ Unlimited coins |
Pytania?
Blockchain pozwala na transakcje pomiędzy wieloma stronami, które nie muszą sobie ufać.
DM-Blockchain 1
By Tomasz Drwięga
DM-Blockchain 1
Workshop
- 792