Portfele w Ethereum

Piotr Nazimek
Partner, Head of Training
Ikona kalendarza
19 września 2017

Poznaliśmy już niektóre możliwości inteligentnych kontraktów w blockchain Ethereum. W tym wpisie dokładniej przedstawię jedno z ich zastosowań jakim jest portfel (ang. wallet), którego zadaniem jest przechowywanie i zarządzanie Etherami. Portfel jest kontraktem, który może na przykład pilnować dziennego limitu transferu środków, mieć kilku właścicieli oraz wymagać zatwierdzania transakcji przez określoną liczbę z nich. Utworzymy dwa rodzaje portfela, zarówno z jednym jak i z wieloma właścicielami.

Pilnowanie wydatków

Jednym z popularnych portfeli jest Ethereum Wallet. Z kodem kontraktu można zapoznać się przeglądając plik Wallet.sol z repozytorium pod tym adresem. Jego instancję utworzymy za pomocą klienta Mist, którego używałem w poprzednich wpisach. Po uruchomieniu węzła oraz procesu kopania w prywatnym blockchain możemy włączyć aplikację kliencką Mist i utworzyć konta Agnieszki, Grzegorza i Piotra, które posłużą do obserwacji działania portfela.

mist-wallet-1.webp

Po uruchomieniu procesu kopania i uzyskanych dzięki temu Etherów możemy zasilić konto Agnieszki. Wykorzystamy je do utworzenia portfela z jednym właścicielem. W sekcji Wallet contracts wybieramy Add wallet contract. Pojawi się okno, w którym możemy zdefiniować nazwę tworzonego portfela, jego głównego właściciela (czyli konto, z którego zostanie utworzony kontrakt) oraz typ portfela. Wybieramy konto z jednym właścicielem i tworzymy kontrakt.

mist-wallet-2.webp

Kiedy kontrakt zostanie utworzony na ekranie zobaczymy wygenerowany adres z informacją, żeby zachować go w bezpiecznym miejscu. Utrata adresu to w pewnym sensie zgubienie portfela w gąszczu innych kontraktów, dlatego warto zastosować się do wyświetlonej rady.

mist-wallet-3.webp

Utworzony portfel widoczny jest w sekcji Wallet contracts. Wyświetlenie jego szczegółów pozwala na zapoznanie się z informacjami takimi jak aktualne saldo czy adres właściciela portfela.

mist-wallet-4.webp

Zasilmy portfel Agnieszki z jej prywatnego konta przelewając na przykład 50 Etherów na adres kontraktu. Od tej pory będziemy mogli przelewać Ethery z kontraktu, natomiast opłata za wykonanie transakcji będzie pobierana z konta, z którego ją zlecimy. Pozwala to na czytelne rozdzielenie kosztów transakcji od ich wartości. Klikając na zakładce portfela w przycisk Show contrcat info możemy zobaczyć funkcje jakie udostępnia kontrakt. Jedną z nich jest Set Daily Limit. Pozwala ona na ustalenie limitu dziennych wydatków. Kwotę podajemy w wei. Zatem ustalając limit na 10 Etherów musimy wpisać 10000000000000000000 (10 i osiemnaście zer).

mist-wallet-5.webp

Pozostałe funkcje tego kontraktu umożliwiają:

  • Change Owner - zmianę jednego z właścicieli na innego,
  • Remove Owner - usunięcie jednego z właścicieli portfela,
  • Is Owner - sprawdzenie czy dany adres jest właścicielem,
  • Reset Spent Today - reset licznika wydanych Etherów,
  • Add Owner - dodanie współwłaściciela,
  • Confirm - zatwierdzenie transakcji (jeśli wymaga zatwierdzenia przez kilku właścicieli, argumentem będzie adres zleconej transakcji),
  • Execute - zlecenie transakcji,
  • Revoke - usunięcie potwierdzenia transakcji (argumentem jest identyfikator transakcji potwierdzenia),
  • Change Requirement - zmiana liczby wymaganych potwierdzeń transakcji,
  • Kill - usunięcie portfela, Ethery zostaną przelane do jednego z właścicieli.

Większość z funkcji stosowanych dla portfela z wieloma właścicielami będzie wymagało zgody wydanej przez ustaloną, minimalną ich liczbę.

Po ustaleniu limitu na 10 Etherów spróbujmy wykonać przelew z konta kontraktu. Możemy wykonać go na dwa sposoby: poprzez wywołanie funkcji Execute oraz poprzez Transfer Ethers and Tokens. Druga z metod jest graficzną nakładką dla metody Execute i wykonywana jest zawsze z konta właściciela kontraktu. Po zleceniu przelewu o wartości 6-ciu Etherów z portfela Agnieszki na adres konta Piotra w zakładce portfela zobaczymy informacje o pozostałym limicie wypłat. Warto spróbować go przekroczyć. Limit ten zostanie zresetowany następnego dnia.

mist-wallet-6.webp

Współdzielony portfel

Podczas tworzenia współdzielonego portfela podajemy liczbę właścicieli, dzienny limit wypłat niewymagający potwierdzeń oraz minimalną liczbę właścicieli do zatwierdzania transakcji powyżej ustalonego limitu. Zlecenia do wartości limitu może zlecać każdy właściciel portfela. Zlecenia się sumują, jeżeli limit zostanie przekroczony wymagana będzie akceptacja przez co najmniej jednego (w naszym przykładzie) z pozostałych właścicieli.

mist-wallet-7.webp

Wyświetlając informacje o utworzonym Funduszu możemy zobaczyć aktualny dzienny limit, liczbę wymaganych potwierdzeń oraz informacje o właścicielach portfela.

mist-wallet-8.webp

Zlecając transakcję o wartości przekraczającej limit tuż po jej wykopaniu pojawi się notyfikacja kierująca do funkcji Confirm lub Revoke, odpowiednio zatwierdzającej lub odwołującej zatwierdzenie transakcji.

mist-wallet-9.webp

Zachęcam do eksperymentów z różnymi metodami kontraktu portfela zarówno na jego instancji z jednym jak i wieloma właścicielami. W prywatnym blockchain transakcje możemy zlecać do woli nie przejmując się zakupem Etherów.

Podsumowanie

Omówiony kontrakt to nie jedyna implementacja portfela w Ethereum. Każdy może zaimplementować własny, dostępne są również inne popularne portfele. Jeden z nich, wbudowany w aplikację Parity, stał się w lipcu obiektem ataku. O tym jakie były jego przyczyny i skutki napiszę w kolejnym odcinku.

Przeczytaj także

Ikona kalendarza

29 marzec

To be or not to be a multi cloud company? Przewodnik dla kadry kierowniczej, doradców ds. chmury i architektów IT. (część 2)

Po przeczytaniu pierwszej części poradnika zauważymy, że strategie organizacji są różne. Część firm oparło swój biznes wyłącznie na j...

Ikona kalendarza

27 wrzesień

Sages wdraża system Omega-PSIR oraz System Oceny Pracowniczej w SGH

Wdrożenie Omega-PSIR i Systemu Oceny Pracowniczej w SGH. Sprawdź, jak nasze rozwiązania wspierają zarządzanie uczelnią i potencjałem ...

Ikona kalendarza

12 wrzesień

Playwright vs Cypress vs Selenium - czy warto postawić na nowe?

Playwright, Selenium czy Cypress? Odkryj kluczowe różnice i zalety każdego z tych narzędzi do automatyzacji testów aplikacji internet...