Co to jest Smart Contract? Tajemnica zdecentralizowanych systemów?
Tajemnica, która stoi za milionami transakcji
Widziałeś kiedyś najprostszy token? Wystarczy wejść na stronę ethereum (https://solidity.readthedocs.io/en/v0.4.25/introduction-to-smart-contracts.html) i widzimy przykład własnej kryptowaluty.
pragma solidity ^0.4.21;
contract Coin {
// The keyword "public" makes those variables
// readable from outside.
address public minter;
mapping (address => uint) public balances;
// Events allow light clients to react on
// changes efficiently.
event Sent(address from, address to, uint amount);
// This is the constructor whose code is
// run only when the contract is created.
function Coin() public {
minter = msg.sender;
}
function mint(address receiver, uint amount) public {
if (msg.sender != minter) return;
balances[receiver] += amount;
}
function send(address receiver, uint amount) public {
if (balances[msg.sender] lt; amount) return;
balances[msg.sender] -= amount;
balances[receiver] += amount;
emit Sent(msg.sender, receiver, amount);
}
}
W zaledwie kilkanaście linii mamy własną kryptowalutę! W łatwy sposób każdy z nas może posiadać swoje tokeny i je rozdawać, tworzyć lub przesyłać. Możemy postawić na tym swój biznes lub użyć tego jako narzędzia do transakcji.
Co z tą tajemnicą?
Smart contract to zwykły program uruchomiony na serwerze. Ze względu na decentralizację ma trochę więcej zasad i reguł przy tworzeniu. Jednak co niezwykłe mamy tutaj też prostą bazę danych. Przyjrzyjmy się lepiej:
Gdzie widać cechy bazy danych?
address public minter;
mapping (address => uint) public balances;
To są dwie publiczne zmienne. Minter to Twój adres, który jest zapisywany podczas uruchomienia kontraktu:
// This is the constructor whose code is
// run only when the contract is created.
function Coin() public {
minter = msg.sender;
}
Pozwoli nam zarządzać kontraktem. Przypisujemy że to my jesteśmy jego właścicielem i możemy wysyłać mu komendy, które sami stworzymy. Następnie mamy balances która trzyma adresy i ilość naszych tokenów.
function mint(address receiver, uint amount) public {
if (msg.sender != minter) return;
balances[receiver] += amount;
}
To pierwsze polecenie. Ma do zmiennej balances dodać wybraną przez Ciebie ilość tokenów. Na początku sprawdzamy czy jesteś właścicielem. Jest to prosty sposób logowania/autoryzacji/zabezpieczenia. Wysyłamy nasz podpis, który jest unikalny i możemy go porównać z tym zapisanym w kontrakcie.
Kolejne polecenie służy do przesyłania tokenów między użytkownikami.
function send(address receiver, uint amount) public {
if (balances[msg.sender] < amount) return;
balances[msg.sender] -= amount;
balances[receiver] += amount;
emit Sent(msg.sender, receiver, amount);
}
Wyciągamy informacje z naszej bazy (zmiennej) o tym czy mamy wystarczającą ilość tokenów. Dalej odejmujemy sobie tą ilość a dodajemy osobie, której wysyłamy.
Tajemnica Smart Contract
Cały program zapisujemy w blockchain. Jest on uruchamiany na starcie a potem kiedy wyślemy do niego jakieś polecenie. Te polecenie może modyfikować i odczytywać zmienne, które są na stałe zapisane w programie.
Tak naprawdę to są często bardzo proste programy. Służą do manipulacji danych i przechowywania ich.
To bardzo fajny sposób na tworzenie aplikacji nie potrzebujących dużej ilości zapytań oraz pracy pod presją czasu (chociaż to już też ulega zmianie, przykładem jest tron który wykorzystuje solidity, czyli ten sam język co ethereum a jest o wiele szybszy: https://blog.patys.pl/2018/10/19/tron-prawie-jak-z-filmu/).
Zróbmy wszystko, nawet grę
Mamy bazę zapisaną w blockchain. Program, który modyfikuje dane tak jak nam się to podoba. Wystarczy napisać klienta, czyli stronę internetową lub aplikację na telefon aby reagowała na nasze polecenia. I polecenia innych. Komenda send może stać się attack i w prosty sposób mamy grę. Dodajmy jeszcze punkty doświadczenia, różne poziomy trudności walki i pojawiają się nowe możliwości.
Nasza postać zaczyna posiadać wartość zapisaną w historii wykonanych poleceń w blockchain. Każde wykonanie kodu odrobinę kosztuje, to 4 gr, to 10 gr. Może zrobisz misję za 1zł ale uda Ci się zdobyć o wiele więcej doświadczenia i postać będzie warta więcej?
To nie żart i takie projekty już istnieją https://www.cryptokitties.co/
Blockchain i smart contract to nowe technologie, które jeszcze nie do końca się przyjęły w codziennym życiu. Są często skomplikowana a wykorzystanie ich nieefektywne. To normalne przy młodej, ale szybko rozwijającej się dziedzinie. Wystarczy spojrzeć na ekosystem i usprawnienia jakie wprowadzają inne kryptowaluty. Przyjrzyjmy się ile firm powstaje i inwestuje w badania.
Dobry artykuł :)
Jedynie drobny błąd na początku - na Ethereum nie stworzymy swojej kryptowaluty, tylko token. Ale fajnie wytłumaczone zasady działania, także od technicznej strony.
Pozdrawiamy
Hejka, często upraszczam pojęcia w pierwszych akapitach żeby zaznajomić czytelnika z koncepcją a potem staram się przechodzić do poprawnych terminów. To zamierzone działanie mające ułatwić zrozumienie tekstu.
Często dla zwykłej osoby, która dopiero zaczyna nie ma różnicy między krytpowalutą a tokenem. Dlatego tego pojęcia używam dopiero później jak ktoś powinien załapać o co chodzi :D