Jedno z najczęściej wracających do mnie pytań wiąże się z problemami związanymi z importem seeda metamask i “brakiem” wcześniejszych kont. Najczęściej taka sytuacja wynika z braku zrozumienia. Dlatego dzisiaj nad tym zrozumieniem popracujemy.
Metamask jest portfelem HD
Najczęściej wspominane wcześniej problemy dotyczą Metamaska. Dlatego, że jest on najpopularniejszym portfelem Ethereum. Ale standard jego działania w kontekście zarządzania adresami jest wykorzystywany w większości portfeli dla większości sieci.
Standard ten nazywa się Hierarchical Deterministic (HD) Wallet.
Standard ten powstał początkowo dla Bitcoina. Który przypomnijmy nie korzysta z modelu kont (accounts), jak Ethereum, tylko UTXO. Gdzie rekomendowane jest, ze względów na anonimowość i bezpieczeństwo, wykorzystywanie nowych adresów dla każdej transakcji. A aby było to możliwe, to portfel musi mieć umiejętność łatwego tworzenia taki adresów. Przy czym użytkownik po zmianie portfela musi mieć znowu dostęp do zarządzania środkami na tych wszystkich adresach.
I tutaj wchodzą całe na biało portfele deterministyczne. Które z otrzymanego bądź wygenerowanego seeda tworzą tak zwany master private key. Główny klucz prywatny, z którego następnie można właściwie w nieskończoność tworzyć kolejne klucze prywatne. A co za tym idzie, także adresy. Co jest super ważne, to deterministyczny charakter tego procesu. Kolejne klucze prywatne zawsze będą generowane w takiej samej kolejności.
Mamy już rozkminiony determinizm, teraz o co chodzi z tą hierarchicznością? Mianowicie portfele HD mają tą przewagę nad zwykłymi portfelami deterministycznymi, że nie potrzebują wygenerować wszystkich kluczy prywatnych, aby poznać adresy odpowiadających im kont. Tak jak generowany jest master private key, tak samo generowane jest master public key (główny klucz prywatny). Pozwala on na określenie listy wszystkich adresów kontrolowanych przez seeda, bez ujawnianie tego seeda czy którekolwiek z kluczy prywatnych. W Bitcoinie taki klucz publiczny nazywa się xpub. Jest on szczególnie przydatny, w kwestiach do odczytu. Np. gdy chcemy wszystkie swoje adresy Bitcoina monitorować jakimś narzedziem analitycznym czy też do rozliczeń podatkowych. Wtedy nie musimy ufać takiemu narzędzi podając mu nasze seedy. Tylko podajemy xpub, dzięki którego narzędzie poznaje nasze adresy, bez możliwości uzyskania dostępu do środków tam zgromadzonych. Co jest jeszcze ważne, to po samych adresach nie można stwierdzić, czy pochodzą one z tego samego seeda.
Jak Metamask importuje portfele z seeda?
Przyjrzymy się teraz procesowi, jaki się dzieje, gdy podajemy Metamaskowi swój seed do zaimportowania. Pozwoli nam to zrozumieć sporo sytuacji, w których w innym przypadku byśmy panikowali, że Metamask nam nie zaimportował adresu i straciliśmy środki.
W pierwszym kroku Metamask z seed tworzy sobie główny klucz prywatny. Następnie będzie po kolei generował z niego kolejne adresy, do momentu aż pierwszy napotkany adres będzie miał zerowe saldo ETH. Metamask uzna, że jest to adres nieużywany i najprawdopodobniej nigdy go nie utworzyłeś. Nie warto więc importować ani jego ani żadnego z kolejnych adresów. Tutaj zwróćmy uwagę, że Metamask sprawdza saldo ETH na Ethereum. Nie interesuje go, czy są tam może jakieś tokeny. Nie sprawdza też balansów na innych sieciach.
Tak więc MM kończy dodawanie adresów, kto napotka pierwszy adres, który uzna za nie używany. Będą to adresy na których nie ma ETH na sieci Ethereum. Nawet jeśli będą tam jakieś tokeny bądź korzystaliśmy z tego adresu na innych sieciach EVM.
Zdarzyć się mogą przypadki, gdy na liście naszych adresów adres uznawany za nie używany będzie przed kolejnymi używanymi. Wtedy te kolejne adresy, nawet z saldem ETH, nie zostaną automatycznie dodane. Jak rozwiązać taką sytuację?
Tutaj wracamy do determinizmu. Metamask z tego samego seed będzie tworzył takie same adresy w takiej samej kolejności. Dlatego po prostu korzystamy potrzebną ilość razy z opcji Dodaj konto (Create account)
W wyniku tego zaimportujemy też adresy znajdujące się także po tym, który został uznany, za nieużywany.
Portfele sprzętowe i zaimportowane konta
Miejmy świadomość, że zakładanie portfela i import nowego seeda pozwoli nam na dostęp jedynie do adresów pochodzących z tego seeda. Jeśli na poprzednim Metamasku korzystaliśmy również z portfela sprzętowego, to teraz musimy go na nowo połączyć (opcja nr 1 na powyższym screenie).
Podobnie jeśli importowaliśmy kolejne konta za pomocą klucza prywatnego bądź pliku JSON, to będziemy musieli zrobić to ponownie (opcja numer 2).
Adres zaimportowany, ale zniknęły moje tokeny
Jeżeli adres się zgadza, to wszystko jest w porządku. Możesz się upewnić co do tego, przeglądać swój adres w block explorerze. Najprawdopodobniej będziesz musiał ręcznie dodać tokeny do Metamask (szczególnie na innych sieciach niż Ethereum). Pomocne w tym będzie poniższe nagranie:
Zweryfikuj, czy import zadziała
W teorii wszystko powinno działać, w praktyce sporo w internecie lamentów, że to nie działa i ludzie tracą dostęp do swoich środków. Najcześciej jest to tylko wrażenie, wynikające z ich zrozumienia i niewiedzy. Ty już teraz wiesz i rozumiesz. To teraz sprawdź, czy to działa?
Zainstaluj sobie drugą przeglądarkę bądź stwórz kolejny profil użytkownika w Chrome. Następnie zainstaluj sobie tam Metamaska i zaimportuj swój seed. I korzystając z przedstawionej wiedzy, czy jesteś w stanie na nowym profilu mieć dostęp do tych samych adresów.
Co jeśli nie?
Po pierwsze primo jeszcze raz przeczytaj ten tekst i upewnij się:
- Czy metamask nie skończył dodawania adresów, na adresie który uznał za nieużywany. Spróbuj dodać nowe konto, aby dodawać kolejne adresy
- Czy nie panikujesz, bo MM nie pokazuje Ci pewnych assetów. Upewnji się na block explorerze o ich istnieniu. A następnie zaimportuj je do MM
- Przeanalizuj wszystkie punkty z artykułu supportu Metamask na temat problemów z importem
Jeśli mimo wszystko jesteś świadkiem sytuacji, że MM odtwarza tylko część adresów bądź adresy są w ogóle totalnie inne, to zabezpiecz się na dotychczasowym MM exportując klucze prywatne do adresów, których nie udało się zaimportować. Instrukcję jak to zrobić znajdziesz w pomocy Metamaska. Dzięki temu będziesz mógł ten adres potem zaimportować w innych portfelach ręcznie z klucza prywatnego.