Portfele w Ethereum

Piotr Nazimek
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

23 kwiecień

Chatbot w e-commerce: Jak stworzyć narzędzie, które rozumie klientów?

Odkryj, jak chatboty AI rewolucjonizują e-commerce, wspierając zakupy i komunikację z klientami dzięki zaawansowanym algorytmom i int...

Ikona kalendarza

18 kwiecień

400 mln złotych na dostępność uczelni: Jak skorzystać ze środków FERS?

Uczelnie w Polsce mogą uzyskać do 97% wsparcia finansowego z Funduszy Europejskich dla Rozwoju Społecznego, eliminując bariery dla os...

Ikona kalendarza

28 marzec

Akcja RABATKA - Poznaj wiosenną promocję!

Trwa tegoroczna wiosenna promocja: Akcja RABATKA, dzięki której możesz zaoszczędzić na szkoleniach otwartych z naszej autorskiej ofer...