4 sposoby na interakcję z blockchain Ethereum w zdecentralizowanej aplikacji

czwartek, 26.12.19
Przeczytasz w 6 min

W celu zaprezentowania sposobów na interakcję napisałem prostą aplikację w której możesz przetestować funkcję dodawania wiadomości do kontraktu.

Aplikacja oparta jest na testowym blockchain Ethereum w sieci “Rinkeby”.

Aplikacja pozwala na dodanie prostego tekstu do kontraktu z wykorzystaniem funkcji addMessage(). Kontrakt w swojej strukturze zapisuje adres nadawcy oraz wiadomość. Pełna lista wiadomości dodanych do kontraktu wyświetlona jest w tabeli na stronie głównej aplikacji.

Przejdź do aplikacji.

Przejdź do szczegółów kontraktu na którym oparta jest aplikacja.

MetaMask

Wymagany jest od użytkownika zainstalowany plugin MetaMask wraz ze skonfigurowanym w nim portfelem Ethereum. Plugin MetaMask dostępny jest na większość przeglądarek. Powstało mnóstwo artykułów z instrukcjami jak założyć portfel Ethereum w MetaMask więc pomijam ten krok. Jeśli natomiast chciałbyś aby taka instrukcja znalazła się na blogu napisz o tym w komentarzu bądź na maila (ikona koperty w stopce).

Plugin MetaMask

Zalety:

  • Łatwa programistycznie konfiguracja aplikacji
  • Możliwość użycia MetaMask w innych aplikacjach opartych o blockchain Ethereum

Wady:

  • Użytkownik musi wiedzieć jak zainstalować plugin oraz jak skonfigurować portfel Ethereum
  • Samodzielna obsługa kosztu transakcji – w zależności od zaawansowania użytkownika to może być zaleta lub wada

Brave

Sposób bardzo przypomina poprzedni, oparty o MetaMask. Zmienia się tylko narzędzie, którym obsługujemy portfel Ethereum. W przeglądarce Brave jest on wbudowany, między innymi po to, aby trzymać na nim tokeny Brave. Wygląd i obsługa portfela jest identyczna. Brave zachowuje się jakby miał wbudowany domyślnie plugin MetaMask.

Przeglądarka Brave

Krótka instrukcja:

  1. Ściągnij i zainstaluj przeglądarkę Brave
  2. Zezwól na ‘crypto wallets’ w przeglądarce
  3. Skonfiguruj portfel ethereum w Brave
  4. Zaloguj się na portfel i dodaj wiadomość w aplikacji

Zalety:

  • Brak dodatkowych instalacji, ponieważ rozwiązanie jest wbudowane w przeglądarkę
  • Łatwa programistycznie konfiguracja aplikacji

Wady:

  • Użytkownik musi wiedzieć w jaki sposób skonfigurować portfel Ethereum w Brave
  • Samodzielna obsługa kosztu transakcji

Backend

Transakcja jest podpisana przez portfel blockchain Ethereum, którego dane są umieszczone w kodzie aplikacji. Sposób odbywa się bez interakcji z portfelem użytkownika. Jest to najlepsza opcja jeśli chcemy udostępnić zalety zdecentralizowanej aplikacji lecz nie zależy nam na tym aby użytkownik wiedział, że z takowej korzysta. Z punktu widzenia kreatora aplikacji, jeśli zależy nam na identyfikacji kto wykonał transakcję, musimy do tego celu znaleźć wyjście poza blockchain – konta w aplikacji, pole z pseudonimem itd.

Pomysł inspirowany artykułem How to setup your dapps to not use metamask plugin but sign the transaction backend

Zalety:

  • Najmniejsza bariera wejścia dla użytkownika – brak dodatkowych pluginów, brak konfiguracji portfela
  • Brak kosztów transakcji po stronie użytkownika

Wady:

  • Koszty transakcji po stronie dostawcy aplikacji
  • Brak powiązania pomiędzy transakcją a portfelem użytkownika

Podpis kluczem prywatnym

Użytkownik we własnym zakresie podpisuje transakcje kluczem prywatnym. W formularzu możemy umieścić pola odpowiedzialne za szczegóły transakcji, np. określić jej koszt. W celu zachowania prostoty w przykładzie pominąłem dodawanie szczegółów transakcji. Decydując się na tą opcję musimy zapewnić bezpieczeństwo, które przykładowo MetaMask dostarcza w standardzie.

Zalety:

  • Brak potrzeby instalacji zewnętrznych pluginów lub aplikacji
  • Możliwość zaprojektowania kompletnej ścieżki interakcji użytkownika z kontraktem

Wady:

  • Udostępnianie klucza prywatnego jest ryzykiem dla właściciela portfela
  • Konieczność zapewnienia wysokiego poziomu bezpieczeństwa interakcji użytkownika z aplikacją

Konta użytkowników w bazie danych

Rozwiązanie, które informacje na temat użytkowników trzyma w bazie danych. Zrezygnowałem z przedstawienia go z prostego powodu. Jeśli trzymamy informacje dotyczące użytkowników w bazie danych a wraz z nimi ich klucze prywatne to aplikacja przestaje być zdecentralizowaną. Możemy zapewnić użytkowników, że nigdy nie udostępniamy tych danych, nie użyjemy ich i nawet nie wyświetlimy we własnym zakresie. Nie zmienia to jednak faktu, że dane te znajdują się na odległym serwerze i użytkownik nie ma nad nimi pełnej kontroli.

Moglibyśmy natomiast połączyć konta użytkowników z powyższymi sposobami aby stworzyć hybrydę aplikacji zdecentralizowanej z centralną bazą użytkowników. W bazie danych przechowywane byłyby tylko te informacje na temat użytkownika, które nie dają nam w żadnym wypadku kontroli nad jego portfelem.

Podsumowanie

Żadne z powyższych rozwiązań nie jest idealne. Pomysły na aplikacje Ethereum wciąż ewoluują. Będą sposoby lepsze niż powyższe. Możliwe, że już istnieją i nie dane mi było ich zobaczyć. Jeśli znasz przykłady proszę napisz o nich w komentarzu.

Niewątpliwie aby aplikacje zdecentralizowane zaczęły być powszechnie używane potrzebują one intuicyjnego interfejsu, który nie będzie się kolidował z przyzwyczajeniami użytkowników.

Jeśli chciałbyś poznać bliżej któryś z powyższych sposobów proszę o informację. Polecam zerknąć również do kodu przykładowej aplikacji, który jest dostępny publicznie.

Repozytorium kodu

Jeśli są jakiekolwiek problemy z działaniem aplikacji proszę daj mi o tym znać! Dzięki i pozdrawiam.