Wprowadzenie do inteligentnych kontraktów
Ostatnia edycja: @wackerow(opens in a new tab), 22 kwietnia 2024
Czym jest inteligentny kontrakt?
„Inteligentny kontrakt" jest po prostu programem, który działa w blockchainie Ethereum. Jest to zbiór kodu (jego funkcje) i danych (jego stan), które znajdują się pod określonym adresem w blockchainie Ethereum.
Inteligentne kontrakty są rodzajem konta Ethereum. Oznacza to, że mają one saldo i mogą wysyłać transakcje przez sieć. Jednak nie są one kontrolowane przez użytkownika, zamiast tego są wdrażane do sieci i uruchamiane w sposób zaprogramowany. Konta użytkowników mogą następnie wchodzić w interakcję z inteligentnym kontraktem poprzez przesyłanie transakcji, które wykonują funkcję zdefiniowaną w inteligentnym kontrakcie. Inteligentne kontrakty mogą definiować reguły, tak jak zwykłe kontrakty, i automatycznie egzekwować je za pośrednictwem kodu.
Warunki wstępne
Upewnij się, że zapoznałeś się z kontami, transakcjami i
Cyfrowy automat do sprzedaży
Być może najlepszą metaforą dla inteligentnego kontraktu jest automat do sprzedaży opisany przez Nicka Szabo. Przy odpowiednich nakładach gwarantowany jest określony wynik.
Aby uzyskać przekąskę z automatu do sprzedaży:
1pieniądze + wybór przekąsek = przekąski wydane
Ta logika jest zaprogramowana w automacie sprzedającym.
Inteligentny kontrakt, jak automat sprzedający, ma zaprogramowaną logikę. Oto prosty przykład, jak taki automat może wyglądać jako inteligentny kontrakt:
1pragma solidity 0.6.11;23contract VendingMachine {45 // Deklaracja zmiennych stanu kontraktu6 address public owner;7 mapping (address => uint) public cupcakeBalances;89 // Kiedy kontrakt 'VendingMachine' jest wdrożony:10 // 1. ustawia adres podmiotu wdrażającego jako właściciela kontraktu11 // 2. ustawia bilans babeczek wdrożonego inteligentnego kontraktu na 10012 constructor() public {13 owner = msg.sender;14 cupcakeBalances[address(this)] = 100;15 }1617 // Umożliwia właścicielowi zwiększenie salda babeczek inteligentnego kontraktu18 function refill(uint amount) public {19 require(msg.sender == owner, "Only the owner can refill.");20 cupcakeBalances[address(this)] += amount;21 }2223 // Umożliwia każdemu zakup babeczek24 function purchase(uint amount) public payable {25 require(msg.value >= amount * 1 ether, "You must pay at least 1 ETH per cupcake");26 require(cupcakeBalances[address(this)] >= amount, "Not enough cupcakes in stock to complete this purchase");27 cupcakeBalances[address(this)] -= amount;28 cupcakeBalances[msg.sender] += amount;29 }30}Pokaż wszystkoKopiuj
Podobnie jak automat sprzedający eliminuje potrzebę zatrudniania pracownika sprzedawcy, inteligentne kontrakty mogą zastąpić pośredników w wielu branżach.
Nie wymaga pozwolenia
Każdy może napisać inteligentny kontrakt i wdrożyć go do sieci. Musisz tylko nauczyć się kodowania w języku inteligentnego kontraktu i mieć wystarczająco dużo ETH, aby go wdrożyć. Wdrożenie inteligentnego kontraktu jest transakcją techniczną, więc musisz zapłacić Koszty gazu związane z wdrożeniem kontraktów są jednak znacznie wyższe.
Ethereum ma przyjazne dla deweloperów języki do pisania inteligentnych kontraktów:
- Solidity
- Vyper
Muszą one jednak zostać skompilowane przed ich uruchomieniem, tak aby maszyna wirtualna Ethereum mogła zinterpretować i przechowywać kontrakt. Więcej na temat kompilacji
Kompozycyjność – o wzajemnej zależności komponentów
Inteligentne kontrakty są publiczne w Ethereum i można je uznać za otwarte API. Oznacza to, że możesz wywoływać inne inteligentne kontrakty w swoim własnym inteligentnym kontrakcie, aby znacznie rozszerzyć zakres możliwości. Kontrakty mogą nawet wdrażać inne kontrakty.
Dowiedz się więcej o kompozycyjności kontraktów inteligentnych.
Ograniczenia
Same inteligentne kontrakty nie mogą uzyskać informacji o zdarzeniach z „prawdziwego świata”, ponieważ nie mogą wysyłać żądań HTTP. Jest to celowe, ponieważ poleganie na informacjach z zewnątrz mogłoby zagrozić konsensusowi, który jest ważny dla bezpieczeństwa i decentralizacji.
Istnieją sposoby na obejście tego za pomocą wyroczni.
Zasoby inteligentnych kontraktów
Kontrakty OpenZeppelin – biblioteka do bezpiecznego tworzenia inteligentnych kontraktów.
- openzeppelin.com/contracts/(opens in a new tab)
- GitHub(opens in a new tab)
- Forum społeczności(opens in a new tab)
DappSys – bezpieczne, proste, elastyczne elementy konstrukcyjne do inteligentnych kontraktów.
Dalsza lektura
- Inteligentne kontrakty: technologia blockchain, która zastąpi prawników(opens in a new tab) – Blockgeeks
- Najlepsze praktyki opracowywania inteligentnych kontraktów(opens in a new tab) – 10 listopada 2019 r. – Yos Riady