w , dowiedziałeś się, czym są inteligentne kontrakty, różne języki inteligentnych kontraktów i jak skonfigurować środowisko tworzenia inteligentnych kontraktów. Z tego artykułu dowiesz się, jak zbudować swój pierwszy inteligentny kontrakt. Będę używaćRemix IDE do tworzenia i testowania inteligentnych kontraktów.
Poniższe tematy są omówione w tym samouczku dotyczącym tworzenia inteligentnych kontraktów:
Budowanie inteligentnego kontraktu
W ramach tej serii blogów zostanie opracowana prosta inteligentna umowa zakupu. Wraz z rozwojem tej serii i wprowadzaniem nowych koncepcji języka programowania solidności, inteligentny kontrakt zamówienia będzie ewoluował i poprawiał się.
Struktura Smart Contract
Solidny inteligentny kontrakt to w istocie zbiór naśladowania
- dane - który utrzymuje aktualny stan zamówienia
- funkcjonować - które stosują logikę do zmiany stanu umowy
Inteligentne kontrakty solidności mają standardową strukturę. Każda inteligentna umowa zaczyna się od następującego oświadczenia
Dyrektywa Pragmy
Słowo kluczowe „pragma” może służyć do włączania pewnych funkcji lub kontroli kompilatora. Poniższa instrukcja definiuje, że plik źródłowy (kontrakt smart) nie będzie się kompilował z kompilatorem wcześniejszym niż 0.4.0 i wersją kompilatora po 0.6.0. Ta deklaracja zapewnia, że po wprowadzeniu nowej wersji kompilatora nie zostanie wprowadzone żadne niezamierzone zachowanie.
solidność pragmy> = 0,4,0<=0.6.0
Oświadczenie o umowie
Umowa jest deklarowana przy użyciu słowa kluczowego „umowa”. To deklaruje pusty kontrakt, który jest oznaczony nazwą „Zamówienie zakupu”.
Zamówienie zakupu umowy {}
Przechowywanie odpowiednich danych do umowy
Każda umowa lub ogólnie każdy program może wymagać przechowywania pewnych danych. Dodanie danych do programu zapewnia pewien poziom elastyczności. Ważną cechą jest odejście od wartości zakodowanych na stałe w programie na rzecz wartości podanych przez użytkownika. Zmienne umożliwiają przechowywanie danych, etykietowanie danych, pobieranie danych i manipulowanie nimi.
Rozwój inteligentnych umów: wprowadzanie zmiennych
W solidności zmienne są dwojakiego rodzaju
- Typ wartości: Zmienne tego typu są przekazywane przez wartość, tj. Są zawsze kopiowane, gdy są używane jako argumenty funkcji lub w przypisaniach. Na przykład: liczby całkowite, adresy logiczne itp.
- Typy referencyjne: Tego typu zmienne są złożonymi typami i są przekazywane przez odwołanie, te zmienne nie pasują do 256-bitowych i muszą być ostrożnie zarządzane, ponieważ ich kopiowanie jest kosztowne.
Dodawanie danych do Smart Contract
Dodajmy do umowy pewną zmienną danych. Do każdego zamówienia musi być przypisana pewna ilość produktu. Dodajmy zmienną product_quantity, która będzie typu integer lub number.
jak zaimplementować metodę abstrakcyjną w java
Zmienna, którą teraz wprowadzamy, jest liczbą całkowitą bez znaku i jest reprezentowana przez uint256, gdzie 256 oznacza pamięć 256 bitów.
- U - niepodpisany (co oznacza, że ten typ może reprezentować tylko dodatnie liczby całkowite, a nie dodatnie i ujemne liczby całkowite)
- INT - liczba całkowita
- Rozmiar 256-256 bitów
- minimalna wartość uint256, jaką można przypisać, to 0
- maksymalna wartość uint256, jaką można przypisać, to 2 ^ 256-1 [bardzo duża liczba]
Ilość produktu jest tylko wartością dodatnią, a obecne założenie jest takie, że zamierzamy zaspokoić bardzo dużą wartość ilości produktu.
Zadeklarowana zmienna „product_quantity” jest częścią stanu kontraktu, a zatem jest utrwalana lub przechowywana w obszarze kontraktu. Obecnie ta zmienna będzie miała wartość 0.
Zamówienie zakupu umowy {uint256 product_quantity}
Definiowanie konstruktora
Konstruktor jest wywoływany podczas wdrażania kontraktu. Konstruktor inicjuje kontrakt z pewnymi wartościami. W obecnym scenariuszu ilość produktu jest ustawiona na 100, gdy kontrakt jest wdrażany. Konstruktor sparametryzowany można również utworzyć, przekazując zmienną i inicjując product_quantity przy użyciu przekazanej wartości.
Kluczową kwestią, na którą należy tutaj zwrócić uwagę, jest modyfikator dostępu „public” powiązany z konstruktorem. Słowo kluczowe public określa, że każdy może uzyskać dostęp do tej funkcji, nie jest to funkcja ograniczona.
konstruktor () public {product_quantity = 100}
Dodawanie funkcji
Dodajmy teraz funkcję, aby nasz program był interaktywny. Funkcje to kontrolowane możliwości, które można dodać do programu. Każda funkcja jest poprzedzona słowem kluczowym function. Ogólnie tak wygląda deklaracja funkcji' funkcjonować ”.
Uzyskaj funkcję
Jednym z najczęstszych wymagań każdego programu jest odczyt wartości przechowywanej. W poniższej umowie będziemy musieli odczytać wartość „product_quantity”. Aby zapewnić tę możliwość, dodawana jest funkcja odczytu lub funkcja pobierania. W tej funkcji nie wykonujemy żadnej operacji na przechowywanej wartości, po prostu pobieramy przechowywaną wartość.
Podzielmy teraz naszą funkcję get (get_quantity)
Nie. | Słowo kluczowe | Wartość |
jeden | get_quantity (){nie przekazano żadnych parametrów} | |
2 | publiczny{każdy może uzyskać dostęp do funkcji} | |
3 | widok{oznacza, że funkcja tylko czyta stan kontraktu, nie zmienia stanu kontraktu, stąd widok} | |
4 | zwraca zmienną typu uint256 {zdefiniowano, co jest zwracane przez funkcję} |
funkcja get_quantity () zwraca widok publiczny (uint256) {return product_quantity}
Funkcje ustawiające
Odczyt danych jest konieczny i dokonaliśmy tego w ostatniej sekcji, ale większość scenariusza wymaga również możliwości zapisu / aktualizacji danych. Ta konkretna możliwość jest zapewniana przez dodanie funkcji ustawiającej. Ta funkcja pobiera wartość od użytkownika w postaci parametru wejściowego. Wykorzystując wartość przekazaną funkcji przez użytkownika, wartość zmiennej „product_quantity” jest zapisywana / aktualizowana.
Przeanalizujmy teraz naszą funkcję set (update_quantity)
najnowsza technologia w sztucznej inteligencji
Dodanie funkcji aktualizacji wartości ilości produktu
Nie. | Słowo kluczowe | Wartość |
jeden | update_quantity (wartość uint256){przekazano wartość parametru typu uint256} | |
2 | publiczny{każdy może uzyskać dostęp do funkcji} | |
3 | Nie jest wymagane, ponieważ stan jest aktualizowany przez funkcje | |
4 | zwraca zmienną typu uint256 (zdefiniowano, co jest zwracane przez funkcję) |
function update_quantity (wartość uint256) public {product_quantity = product_quantity + value}
Łącząc to wszystko razem, tak powinna wyglądać cała umowa.
solidność pragmy> = 0,4,0<=0.6.0 contract PurchaseOrder{ uint256 product_quantity //state variable /*Called with the contract is deployed and initializes the value*/ constructor() public{ product_quantity = 100 } // Get Function function get_quantity() public view returns(uint256){ return product_quantity } // Set Function function update_quantity(uint256 value) public { product_quantity = product_quantity + value } }
Wdrażanie Smart Contract
Czas przetestować inteligentny kontrakt. Aby przetestować ten inteligentny kontrakt, użyjemy Remiksuj Online IDE .
Remix to internetowy plac zabaw dla inteligentny kontrakt ethereum . Remiks jest całkowicie oparty na przeglądarce. Remix zapewnia internetowe IDE (zintegrowane środowisko programistyczne), w którym można pisać inteligentne kontrakty. Remix zapewnia możliwość kompilacji solidności online. Inteligentny kontrakt w Remix IDE można bezproblemowo skompilować przy użyciu określonej wersji kompilatora.
Remiks zapewnia również możliwość szybkiego przetestowania inteligentnego kontraktu.
Remix zapewnia kompletny zestaw narzędzi do rozpoczęcia opracowywania inteligentnego kontraktu i testowania inteligentnego kontraktu jednostkowego bez wykonywania jakiejkolwiek instalacji na komputerze lokalnym. Jest to niezwykle przydatne na początku z solidnością, ponieważ programiści muszą po prostu skupić się na napisaniu inteligentnego kontraktu, a raczej martwić się o infrastrukturę.
Dzięki Remix IDE wszystko, czego potrzebujesz, to przeglądarka i połączenie internetowe, aby rozpocząć tworzenie inteligentnych umów. Szybki rozwój, testowanie i walidacja pomysłu na inteligentny kontrakt.
Remix niedawno zaktualizował swój interfejs użytkownika.
java zmień podwójnie na int
Kliknij ikonę pliku, jak zaznaczono na powyższym obrazku, otworzy się eksplorator plików.
- Klikając ikonę plusa, można utworzyć nowy plik, nazwij plik PurchaseOrder.sol
- Spowoduje to utworzenie pustego pliku o nazwie PurchaseOrder.sol, kliknij i otwórz ten plik.
- Skopiujmy wklej cały kontrakt w PurchaseOrder.sol.
- Kliknij drugą ikonę, w lewym menu tuż pod ikoną pliku powinna pojawić się opcja kompilatora solidity.
- Pod etykietą Kompilator wybierz wersję kompilatora. Aktualnie wybrana wersja to 0.5.8.
- Po wyborze wersji kompilatora kliknij „Compile PurchaseOrder.sol”. Spowoduje to skompilowanie inteligentnego kontraktu.
7. Po pomyślnym skompilowaniu kontraktu inteligentnego kliknij przycisk „Szczegóły kompilacji”, aby wyświetlić następujące szczegóły. Po kompilacji udostępniane są dwie kluczowe informacje
- ABI - binarny interfejs aplikacji. To jest plik json, który zawiera szczegółowe informacje o wszystkich metodach ujawnionych w kontrakcie inteligentnym wraz z metadanymi metod. Więcej na ten temat zostanie omówione w kolejnych blogach.
- Kod bajtowy- Kod operacji EVM (maszyna wirtualna Ethereum), logika kontraktu Smart jest konwertowana na kod bajtowy podczas kompilacji.
8. Aby przetestować inteligentny kontrakt, należy go wdrożyć. Aby wdrożyć inteligentny kontrakt, kliknij następną ikonę w menu po lewej stronie, poniżej ikony kompilacji. Pojawi się następujący ekran. Aby przetestować inteligentny kontrakt, należy go wdrożyć. Aby wdrożyć inteligentny kontrakt, kliknij następną ikonę w menu po lewej stronie, poniżej ikony kompilacji. Pojawi się następujący ekran.
Opcja wdrożenia
Ekran rozmieszczenia zapewnia kilka opcji, przyjrzyjmy się im jeden po drugim.
- Środowisko: Można to pomyśleć o opcji podobnej do wyboru zakupu laptopa od Amazon, Flipkart, Newegg (wszystkie z nich są sprzedawcami internetowymi). Podobnie w przypadku Remiksu mamy opcję gdzie wdrożyć smart kontrakt i przetestować smart kontrakt. Lista rozwijana obok etykiety środowiska zawiera trzy opcje
- JavaScript VM - lokalny pojedynczy węzeł Ethereum jest uruchamiany w pamięci przeglądarki i zapewnia 5 wstępnie opłaconych kont testowych, które można wykorzystać do transakcji (wdrożenie, wywołanie funkcji)
- Wstrzyknięty Web3 Provide - opiera się na MetaMask. Metamask jest jak broker lub pośrednik, który umożliwia aplikacjom internetowym interakcję z inteligentnym kontraktem. Metamask umożliwia zarządzanie tożsamościami, a także podpisywanie transakcji, które mają być wysłane do sieci Ethereum. Ten pośrednik lub 3r & Dparty zapewnia pomoc w określeniu sieci blockchain, w której zostanie wdrożony inteligentny kontrakt.
- Dostawca Web3 - jeśli używasz lokalnego węzła Ethereum i punktu końcowego RPC jest dostępny, możesz użyć tej opcji. Inteligentny kontrakt zostanie wdrożony w lokalnym węźle Ethereum.
- Konta: te informacje są wypełniane na podstawie wybranego środowiska. Na przykład. Maszyna wirtualna z JavaScriptem udostępnia 5 kont testowych z prefinansowaniem. W przypadku dostawcy Web3 i Injected Web3 nie zapewniają wstępnie opłaconych kont testowych.
- Limit gazu: określa maksymalną ilość gazu, jaką inicjator jest skłonny wydać na każdą transakcję. Jest to miejsce, w którym można zabezpieczyć się przed nieskończoną pętlą i wyczerpaniem wszystkich środków na koncie w przypadku stanu nieskończonej pętli.
- Wartość: wartość, która może być wymagana do przesłania podczas wdrażania kontraktu inteligentnego. To jest wartość opcjonalna.
Aby wdrożyć kontrakt, wybierz opcję JavaScript VM, wybierz pierwsze konto z listy rozwijanej kont, zanotuj saldo konta (100 ether).
Upewnij się, że pojawiająca się nazwa kontraktu inteligentnego to PurchaseOrder, kliknij Wdróż. Kluczowe działania, które się wydarzy
- Saldo konta zmieni się ze 100 eter na 99,9999999 eteru, odliczona kwota to koszt transakcji wdrożenia inteligentnej umowy.
- W ramach wdrożonej umowy pojawi się nowy kafelek dla inteligentnego kontraktu, który będzie również zawierał adres nowego inteligentnego kontraktu, podobny do tego (0x692a70d2e424a56d2c6c27aa97d1a86395877b3a)
- W oknie konsoli pojawią się następujące informacje
- Skrót transakcji - jednoznacznie identyfikuje wdrożenie kontraktu
- Koszt transakcji
- Adres umowy
Interakcja z wdrożoną umową
- W ramach wdrożonej umowy dostępne są dwie metody interakcji update_quantity i get_quantity.
- Obie te metody interakcji są metodami publicznymi zdefiniowanymi w umowie „Zamówienie zakupu”.
- Metoda aktualizacji ilości „update_quantity” wymaga parametru wejściowego, stąd pole wprowadzania.
- Get quantity Metoda „get_quantity” pobiera wartość product_quantity.
- Sprawdźmy, co się dzieje, gdy wywoływana jest funkcja get_quantity, zwracana jest wartość 100, która została zainicjowana w konstruktorze. Nie powoduje to transakcji
- Wywołajmy update_quantity i podajmy 30 jako dane wejściowe. To powoduje, że dochodzi do transakcji
W skrócie, każda operacja powodująca operację zapisu stanu kontraktu (tj. Zmiana zmiennych kontraktu) zakończy się transakcją.
Żadna operacja, która tylko odczytuje stan kontraktu, nie powoduje transakcji.
Zakończenie rozwoju inteligentnego kontraktu
W ten sposób stworzyliśmy nasz pierwszy inteligentny kontrakt, po prostu zarysowując powierzchnię solidności. Właśnie widzieliśmy, czego potrzeba, aby przetestować inteligentny kontrakt od samego wdrożenia inteligentnego kontraktu do zainicjowania transakcji.
Na następnym blogu, który jest kontynuacją serii rozwoju inteligentnych kontraktów, będziemy głębiej zagłębiać się w podstawy solidności, zagłębiając się w wdrażanie inteligentnych kontraktów.
Na tym kończę to Inteligentny kontrakt blog rozwojowy. Mam nadzieję, że lektura tego bloga przypadła Ci do gustu i okazała się przydatna.
jaJeśli chcesz nauczyć się Smart Contracts, zbudować karierę w domenie Blockchain i zdobyć doświadczenie w programowaniu Ethereum, zarejestruj się na żywo online tutaj, który zapewnia wsparcie 24 * 7, które poprowadzi Cię przez cały okres nauki.
Masz do nas pytanie? Wspomnij o tym w sekcji komentarzy w sekcji „Opracowanie inteligentnych kontraktów”, a my skontaktujemy się z Tobą jak najszybciejśw.