Portfel bez właściciela. Każdy uczestnik trzyma swój klucz na swoim urządzeniu, a pieniądze ruszają wtedy, gdy podpisze ich wystarczająco wielu — dowolnych dwoje z trojga, dowolnych pięcioro z dziewięciorga, tak jak grupa ustaliła, kiedy zakładała portfel.
Nic poniżej nie jest naszym wymysłem. Każdy łańcuch ma już sposób, w jaki kilka osób trzyma jeden adres, i właśnie z tego sposobu korzystamy: P2WSH w Bitcoinie, Safe w łańcuchach EVM, własny system permission konta w Tronie, Squads V4 w Solanie. Adresy na kolejnych stronach to te wdrożenia, z którymi rozmawia ta aplikacja.
JAK TO DZIAŁA
Cztery kroki, i tylko ostatni dzieje się w łańcuchu
Płatność jest rozmową, zanim stanie się transakcją. I to nie metafora: dzieje się w wątku, w wiadomościach, a łańcuch widzi ją dopiero wtedy, gdy grupa się zgodziła.
1
Grupa ustala regułę
Kto podpisuje i ilu z nich potrzeba. Zapisuje się to w portfelu w chwili jego powstania — i zapisuje w łańcuchu, a nie w tej aplikacji.
Reguły się tu potem nie edytuje: inna reguła to inny portfel, z własnym adresem, który trzeba zasilić i na który trzeba się przenieść. Niektóre łańcuchy pozwoliłyby na taką zmianę, a ta aplikacja jej nie robi — i ekran mówi o tym, zanim poprosi o drugie dotknięcie.
2
Ktoś proponuje płatność
Przychodzi do rozmowy jako wiadomość, od tego, kto ją zrobił, i mówi, co płaci i komu. Dopóki nie jest podpisana, jest prośbą i niczym więcej.
Propozycję niesie ta sama zaszyfrowana grupa co rozmowę, więc serwer przenosi ją, nie czytając.
3
Każdy podpisujący podpisuje na swoim urządzeniu
Czytasz, dotykasz raz — i jest podpisane kluczem, który nigdy nie opuścił telefonu, na którym powstał. Licznik przesuwa się wszystkim na oczach.
Żadne urządzenie nie trzyma klucza drugiej osoby, więc nie ma urządzenia, którego utrata oddaje komuś portfel.
4
Na progu idzie do łańcucha
Podpisy są składane i rozsyłane. Dalej reguły pilnuje łańcuch, a nie ta aplikacja — po to właśnie regułę się tam umieszcza.
Gdyby ta aplikacja jutro zniknęła, portfel dalej byłby portfelem, a reguła dalej by obowiązywała.
PIĘĆ ŁAŃCUCHÓW
Zunifikowany interfejs
Pięć łańcuchów, a pod nimi cztery różne mechanizmy: Bitcoin, Ethereum, BNB Smart Chain, Tron i Solana trzymają wspólny adres każdy na swój sposób. Nic z tego nie dochodzi do ekranu: zaproponować płatność, podpisać ją i wysłać wygląda tak samo we wszystkich pięciu.
Bitcoin
P2WSH multisig · BIP 67 · PSBT
Skrypt świadka, który czyta się jako „m z tych n kluczy”, i adres, który jest jego skrótem. Klucze są posortowane leksykograficznie, więc każdy, kto zbuduje skrypt z tego samego zestawu kluczy, dojdzie do tego samego adresu, a nie do n! różnych.
Płatność jedzie jako PSBT: jeden plik, który obchodzi podpisujących, zbierając podpisy, i zostaje sfinalizowany, gdy ma ich dość.
Skrypt
OP_m <key>… OP_n OP_CHECKMULTISIG
Podpisujący
do 15, próg gdziekolwiek pomiędzy
Dane łańcucha
serwer Electrum
Ethereum
Safe · canonical deployment
Kontrakt, w którym już leży większość pieniędzy trzymanych przez grupy w Ethereum. Proxy tworzy kanoniczna fabryka i wskazuje ono na kanoniczny singleton; właściciele i próg są ustawiani w tym samym wywołaniu, które je tworzy.
Nic nie jest forkowane i nic nie jest wdrażane od nowa. Wersję odczytuje się z kontraktu, a nie zakłada, bo Safe zrobiony przez kogoś innego to Safe, który to otworzy.
Singleton
0x41675C099F32341bf84BFc5382aF534df5C7461a
Fabryka
0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67
Pakowanie
MultiSend — kilka przelewów, jedno zatwierdzenie
BNB Smart Chain
Safe · the same addresses
Te same kontrakty pod tymi samymi adresami. Wdrożenia Safe są deterministyczne we wszystkich łańcuchach EVM, więc nie ma tu niczego specyficznego dla łańcucha do nauczenia się ani niczego takiego w kodzie.
To także powód, dla którego konto w Ethereum jest tym samym kontem w BNB Smart Chain: jeden typ monety, jeden klucz, dwa łańcuchy.
Kontrakty
identyczne z tymi z Ethereum, wyżej
Typ monety
60 — wspólny z Ethereum
Tron
Account permissions · no contract
Tron ma regułę wbudowaną w konta. Permission niesie listę kluczy, wagę dla każdego i próg, i jest zapisywany w samym koncie — nie ma kontraktu do wdrożenia ani kontraktu, któremu trzeba ufać.
Wagi sprawiają, że reguła może być czymś więcej niż liczeniem głów: jeden klucz wart dwa głosy, trzy klucze warte po jednym.
Zapisuje
AccountPermissionUpdate
Reguła
klucze z wagami, jeden próg
Uwaga
aktualizacja zastępuje listę, a nie poprawia jej
Solana
Squads Protocol V4
Program do wielopodpisu, z którego korzysta większość skarbców Solany. Propozycja jest kontem w łańcuchu: uczestnicy głosują za nią, a wykonuje się ona, gdy głosy dojdą do progu.
Identyfikator programu decyduje, skąd wyprowadzane jest każde konto portfela, więc jest przybity do opublikowanego wdrożenia, a inny zostaje odrzucony, a nie przyjęty na wiarę.
Program
SQDS4ep65T869zMMBKyuUq6aD6EgTu8psMjkvj52pCf
Propozycja
w łańcuchu, głosuje się za nią
DLACZEGO STANDARDOWE
Portfel, który otwiera się tylko tutaj, to portfel należący do kogoś innego
Jest łatwiejsza droga: własny kontrakt w każdym łańcuchu, własny format, jedna aplikacja, która to rozumie. Kodu byłoby mniej, a wyszłoby gorzej, bo pieniądze grupy zależałyby wtedy od tego, czy ta aplikacja dalej istnieje.
Co daje używanie standardowych
Każdy z tych punktów jest następstwem tego wyboru, a nie dodaną funkcją.
Sprawdzone przez więcej ludzi niż my. Safe i Squads trzymają razem miliardy i były oglądane odpowiednio do tego. P2WSH i permissions w Tronie to reguły konsensusu.
Czytelne dla innych narzędzi. Adres to zwykły Safe, zwykły multisig Squads, zwykły adres P2WSH, zwykły permission w Tronie — eksploratory bloków i własne interfejsy tych protokołów czytają je, nie wiedząc, że ta aplikacja istnieje.
Nie ma z czego migrować. Nie ma własnego formatu, w którym można utknąć, więc nie ma też momentu w przyszłości, w którym odejście coś kosztuje.
Reguła nas przeżyje. Progu pilnuje łańcuch. Ta aplikacja jest miejscem, w którym grupa rozmawia o płatności, a nie tym, co ją dopuszcza.
AUDITS
Read by people who are not us
This is the argument for using each chain’s own multisig rather than writing one: the reports below exist, they were paid for by somebody else, and they are about exactly the contracts a wallet made here is made of. Every address and every program id on this page was checked against the projects’ own published deployment records while this section was written.
Safe
Ethereum · BNB Smart Chain
2 reports
The four contracts this application talks to are the canonical v1.4.1 deployments — singleton, proxy factory, fallback handler and MultiSend — each one matching the address in Safe’s own deployment registry.
Four reports, three firms and a formal verification. The program id this application pins is the one the program declares for itself in its own source.
There is nothing here for an auditor to be hired for, and that is the point: a multisig on Bitcoin is not a deployed program but a script the network’s own rules evaluate. What is worth reading instead is the specification.
The same again: the rule is a property of the account, enforced by the nodes rather than by code somebody deployed. There is no contract to audit because there is no contract.
Nothing to link, and that is the honest answer
An audit is a reading of a codebase at a commit, not a guarantee about the money in it — and none of these reports is about this application. They are about the contracts underneath it, which is exactly why they are worth more than a report we commissioned about ourselves would be.
KIEDY PRZYNOSISZ FRAZĘ
Dwadzieścia cztery słowa, których już gdzieś używałeś
Fraza odzyskiwania to nie jedna konwencja, tylko kilka, i różnią się dokładnie w jednym: który element ścieżki się przesuwa, gdy prosisz o „konto 2”. Każda z nich jest poprawna, a fraza odczytana według złej pokazuje zerowe saldo dla pieniędzy oddalonych dokładnie o jedną linijkę arytmetyki. Dlatego konwencji się tu nie zgaduje — to ustawienie, osobne dla każdego łańcucha, i proponuje listę aplikacji, a nie listę specyfikacji. Pieniądze, które wyglądają na zaginione, to pieniądze na ścieżce, na którą ta aplikacja nie patrzyła.
Bitcoin
Native SegWitdomyślnie
m/84'/0'/{account}'/0/0
Electrum
BlueWallet
Sparrow
Exodus
Indeks adresu
m/84'/0'/0'/0/{account}
Trust Wallet
Muun
Phoenix
Ethereum & BNB Smart Chain
Indeks adresudomyślnie
m/44'/60'/0'/0/{account}
MetaMask
Rabby
Trust Wallet
Rainbow
Phantom
Konto hardened
m/44'/60'/{account}'/0/0
Ledger Live
Trezor Suite
Exodus
Cztery elementy
m/44'/60'/0'/{account}
MyEtherWallet (legacy)
Ledger (legacy)
Tron
Indeks adresudomyślnie
m/44'/195'/0'/0/{account}
TronLink
Trust Wallet
Konto hardened
m/44'/195'/{account}'/0/0
Ledger Live
Trezor Suite
Solana
Cztery elementydomyślnie
m/44'/501'/{account}'/0'
Phantom
Solflare
Backpack
Tylko konto
m/44'/501'/{account}'
Ledger Live
Solflare (hardware)
Legacy
m/501'/{account}'/0/0
Sollet (legacy)
Układy legacy i zagnieżdżony Bitcoina są nieobecne celowo. Konstruktor adresów wyprowadza wyłącznie native SegWit, więc m/44'/0'/… dałoby tu bc1… tam, gdzie każdy inny portfel pokazuje 1… albo 3… — ciąg, który wygląda poprawnie, należy do twojej frazy i nie jest adresem, który ktokolwiek inny odczyta z tej ścieżki. Wybór, który po cichu znaczy co innego, niż mówi, jest gorszy niż brak wyboru.
KIEDY PRZYNOSISZ PORTFEL
Jeśli przychodzisz skądinąd
Dwie drogi do środka, i są na różnych etapach
Powiedziane wprost, bo strona, która opisuje zamierzone tym samym głosem co zrobione, to strona, na podstawie której nic nie da się zdecydować.
Twoja fraza odzyskiwania — już jest. Dwadzieścia cztery słowa i pytanie, w którym portfelu ich używałeś. Każdy adres, który opisuje tabela powyżej, wyprowadzany jest z frazy na twoim urządzeniu i nigdzie nie jest przechowywany; konto EVM, konto Tron i konto Solana to ten sam adres we wszystkich sieciach danego łańcucha.
Multisig, który już istnieje — jeszcze nie. Odczyt jest gotowy: biblioteka pod spodem otwiera Safe po adresie i podaje jego właścicieli, próg i wersję; czyta uczestników i próg multisiga Squads, podpisujących i wagi permissiona w Tronie oraz rozkłada skrypt świadka Bitcoina z powrotem na adres, próg i klucze. Czego nie ma, to ekranu, który przeprowadzi cię przez to i przypnie to do rozmowy. Dopóki go nie ma, ta strona nie będzie udawać, że jest.
W międzyczasie nic cię nie zatrzymuje: Safe albo multisig Squads, który już masz, dalej działa w tym interfejsie, w którym go zrobiłeś, bo nigdy nie był niczym innym niż Safe albo multisigiem Squads.
Nic na tej stronie nie jest poradą finansową: przykłady są przykładami, a pieniądze — i ryzyko — są twoje. Zastrzeżenia.