COMPAX

DE PORTEMONNEE VAN DE GROEP

Groepsgeld zonder
penningmeester

Een portemonnee zonder eigenaar. Elk lid houdt zijn eigen sleutel op zijn eigen apparaat, en het geld beweegt zodra genoeg van hen hebben ondertekend — twee van de drie, vijf van de negen, wat de groep ook heeft vastgelegd toen ze de portemonnee maakte.

Niets hieronder is een verzinsel van ons. Elke keten heeft al een manier waarop meerdere mensen één adres houden, en precies die manier wordt hier gebruikt: P2WSH op Bitcoin, Safe op de EVM-ketens, het eigen permission-systeem van het account op Tron, Squads V4 op Solana. De adressen op de pagina’s hierna zijn de deployments waar deze applicatie mee praat.

HOE HET WERKT

Vier stappen, en alleen
de laatste staat op een keten

Een betaling is een gesprek voordat ze een transactie is. Dat is hier geen metafoor: het gebeurt in het gesprek, als berichten, en de keten ziet het pas als de groep het eens is geworden.

  1. 1

    De groep legt de regel vast

    Wie ondertekent, en hoeveel van hen ervoor nodig zijn. Het wordt in de portemonnee geschreven op het moment dat die wordt gemaakt, en het staat op de keten, niet in deze applicatie.

    De regel wordt hier achteraf niet bewerkt: een andere regel is een andere portemonnee, met een eigen adres dat gevuld moet worden en waarheen je moet verhuizen. Sommige ketens zouden de wijziging toestaan en deze applicatie voert hem niet uit — en het scherm zegt dat voordat het om de tweede tik vraagt.

  2. 2

    Iemand stelt een betaling voor

    Ze komt binnen in het gesprek als een bericht, van degene die haar maakte, met wat ze betaalt en aan wie. Zolang ze niet ondertekend is, is ze een verzoek en niets anders.

    Het voorstel wordt gedragen door dezelfde versleutelde groep als de chat, dus de server draagt het zonder het te lezen.

  3. 3

    Elke ondertekenaar tekent op zijn eigen apparaat

    Je leest het, tikt één keer, en het is ondertekend met een sleutel die de telefoon waarop hij ontstond nooit heeft verlaten. Iedereen ziet de teller lopen.

    Geen enkel apparaat houdt ooit de sleutel van een tweede persoon, dus er is geen apparaat waarvan het verlies iemand de portemonnee in handen geeft.

  4. 4

    Bij de drempel gaat het naar de keten

    De handtekeningen worden samengevoegd en uitgezonden. Vanaf daar handhaaft de keten de regel, niet deze applicatie — en dat is precies waarom de regel daar staat.

    Als deze applicatie morgen zou verdwijnen, bleef de portemonnee een portemonnee en de regel een regel.

VIJF KETENS

Één uniforme interface

Vijf ketens en daaronder vier verschillende mechanismen: Bitcoin, Ethereum, BNB Smart Chain, Tron en Solana houden een gedeeld adres elk op hun eigen manier. Daarvan bereikt niets het scherm: een betaling voorstellen, ondertekenen en versturen gaat op alle vijf hetzelfde.

Bitcoin

P2WSH multisig · BIP 67 · PSBT

Een witness-script dat leest als “m van deze n sleutels”, en een adres dat de hash ervan is. De sleutels zijn lexicografisch gesorteerd, zodat iedereen die het script uit dezelfde verzameling sleutels bouwt bij hetzelfde adres uitkomt en niet bij n! verschillende.

De betaling reist als een PSBT: één bestand dat langs de ondertekenaars gaat en handtekeningen verzamelt, en gefinaliseerd wordt zodra het er genoeg heeft.

Script
OP_m <key>… OP_n OP_CHECKMULTISIG
Ondertekenaars
tot 15, met de drempel er ergens tussenin
Ketengegevens
een Electrum-server

Ethereum

Safe · canonical deployment

Het contract waar het meeste geld dat groepen op Ethereum houden al in zit. Een proxy wordt gemaakt door de canonieke factory en wijst naar de canonieke singleton; de eigenaren en de drempel worden gezet in dezelfde aanroep die hem maakt.

Er wordt niets geforkt en niets opnieuw uitgerold. De versie wordt van het contract gelezen in plaats van aangenomen, want een Safe die iemand anders heeft gemaakt is een Safe die dit kan openen.

Singleton
0x41675C099F32341bf84BFc5382aF534df5C7461a
Factory
0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67
Bundelen
MultiSend — meerdere bewegingen, één goedkeuring

BNB Smart Chain

Safe · the same addresses

Dezelfde contracten op dezelfde adressen. De deployments van Safe zijn deterministisch over de EVM-ketens heen, dus er valt hier niets ketenspecifieks te leren en er staat ook niets ketenspecifieks in de code.

Het is ook de reden dat een account op Ethereum hetzelfde account is op BNB Smart Chain: één munttype, één sleutel, twee ketens.

Contracten
identiek aan die van Ethereum, hierboven
Munttype
60 — gedeeld met Ethereum

Tron

Account permissions · no contract

Bij Tron zit de regel in de accounts zelf. Een permission draagt een lijst sleutels, een gewicht voor elk en een drempel, en wordt naar het account zelf geschreven — er is geen contract om uit te rollen en geen contract om te vertrouwen.

Gewichten betekenen dat de regel iets anders kan zijn dan koppen tellen: één sleutel die twee stemmen waard is, drie sleutels die er elk één waard zijn.

Geschreven door
AccountPermissionUpdate
Regel
gewogen sleutels, één drempel
Opmerking
de update vervangt de lijst in plaats van hem aan te vullen

Solana

Squads Protocol V4

Het multisig-programma dat de meeste treasuries van Solana gebruiken. Het voorstel is een account op de keten: leden keuren het goed, en het wordt uitgevoerd zodra de goedkeuringen de drempel halen.

De program-id bepaalt waaruit elk account van de portemonnee wordt afgeleid, dus die is vastgepind op de gepubliceerde deployment, en een andere wordt geweigerd in plaats van geloofd.

Programma
SQDS4ep65T869zMMBKyuUq6aD6EgTu8psMjkvj52pCf
Voorstel
op de keten, er wordt tegen goedgekeurd

WAAROM DE STANDAARDEN

Een portemonnee die alleen hier opengaat
is een portemonnee van iemand anders

Er is een makkelijkere manier om dit te bouwen: een eigen contract op elke keten, een eigen formaat, één applicatie die het begrijpt. Het zou minder code zijn en het zou slechter zijn, want dan hing het geld van de groep ervan af of deze applicatie blijft bestaan.

Wat de standaarden opleveren

Elk van deze punten is een gevolg van die keuze, geen functie die is toegevoegd.

  • Gecontroleerd door meer mensen dan wij. Safe en Squads houden samen miljarden en zijn daarnaar bekeken. P2WSH en de permissions van Tron zijn consensusregels.
  • Leesbaar door andere gereedschappen. Het adres is een gewone Safe, een gewone Squads-multisig, een gewoon P2WSH-adres, een gewoon Tron-permission — blokverkenners en de eigen interfaces van de protocollen lezen ze zonder te weten dat deze applicatie bestaat.
  • Niets om vanaf te migreren. Er is geen eigen formaat om in vast te komen zitten, dus er is ook geen later moment waarop weggaan iets kost.
  • De regel overleeft ons. De drempel wordt gehandhaafd door de keten. Deze applicatie is waar de groep over de betaling praat, niet wat haar toestaat.

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.

Tron

Account permissions · consensus, not a contract

none

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.

ALS JE EEN ZIN MEEBRENGT

Vierentwintig woorden die je
ergens anders al hebt gebruikt

Een herstelzin is niet één afspraak, het zijn er meerdere, en ze zijn het over precies hetzelfde oneens: welk element van het pad beweegt als je om “account 2” vraagt. Elk ervan is juist, en een zin die onder de verkeerde wordt gelezen toont een saldo van nul voor geld dat precies één regel rekenwerk verderop ligt. Daarom wordt de afspraak hier niet geraden — het is een instelling, één per keten, en ze biedt een lijst van applicaties in plaats van een lijst van specificaties. Geld dat verdwenen lijkt, is geld op een pad waar deze app niet naar keek.

Bitcoin

Native SegWit standaard

m/84'/0'/{account}'/0/0

  • Electrum
  • BlueWallet
  • Sparrow
  • Exodus

Adresindex

m/84'/0'/0'/0/{account}

  • Trust Wallet
  • Muun
  • Phoenix

Ethereum &amp; BNB Smart Chain

Adresindex standaard

m/44'/60'/0'/0/{account}

  • MetaMask
  • Rabby
  • Trust Wallet
  • Rainbow
  • Phantom

Hardened account

m/44'/60'/{account}'/0/0

  • Ledger Live
  • Trezor Suite
  • Exodus

Vier elementen

m/44'/60'/0'/{account}

  • MyEtherWallet (legacy)
  • Ledger (legacy)

Tron

Adresindex standaard

m/44'/195'/0'/0/{account}

  • TronLink
  • Trust Wallet

Hardened account

m/44'/195'/{account}'/0/0

  • Ledger Live
  • Trezor Suite

Solana

Vier elementen standaard

m/44'/501'/{account}'/0'

  • Phantom
  • Solflare
  • Backpack

Alleen account

m/44'/501'/{account}'

  • Ledger Live
  • Solflare (hardware)

Legacy

m/501'/{account}'/0/0

  • Sollet (legacy)

De legacy- en geneste indelingen van Bitcoin ontbreken met opzet. De adresbouwer leidt native SegWit af en verder niets, dus een m/44'/0'/… zou hier een bc1… opleveren waar elke andere portemonnee een 1… of een 3… laat zien — een tekenreeks die er goed uitziet, bij jouw zin hoort, en niet het adres is dat ieder ander op dat pad afleest. Een keuze die stilletjes iets anders betekent dan ze zegt, is slechter dan geen keuze.

ALS JE EEN PORTEMONNEE MEEBRENGT

Als je ergens anders vandaan komt

Twee manieren naar binnen, en ze zijn niet even ver

Ronduit gezegd, want een pagina die het geplande met dezelfde stem beschrijft als het gebouwde, is een pagina waarmee je niets kunt beslissen.

  • Je herstelzin — nu al. Vierentwintig woorden, en de vraag in welke portemonnee je ze hebt gebruikt. Elk adres dat de tabel hierboven beschrijft wordt op jouw apparaat uit de zin afgeleid en nergens opgeslagen; een EVM-account, een Tron-account en een Solana-account zijn hetzelfde adres op elk netwerk van die keten.
  • Een multisig die al bestaat — nog niet. Lezen is af: de bibliotheek hieronder opent een Safe op adres en meldt de eigenaren, de drempel en de versie; ze leest de leden en de drempel van een Squads-multisig, de ondertekenaars en gewichten van een Tron-permission, en decodeert een Bitcoin-witness-script terug naar adres, drempel en sleutels. Wat niet is gebouwd, is het scherm dat je er doorheen loodst en het aan een gesprek hangt. Zolang dat er niet is, doet deze pagina niet alsof.

Intussen houdt niets je tegen: een Safe of een Squads-multisig die je al hebt blijft werken in de interface waarin je hem maakte, want hij is nooit iets anders geweest dan een Safe of een Squads-multisig.

Niets op deze site is financieel advies: de voorbeelden zijn voorbeelden, en het geld — en het risico — is van jou. Disclaimers.