COMPAX

LA CARTERA DEL GRUPO

Dinero de un grupo
sin tesorero

Una cartera sin dueño. Cada miembro guarda su propia clave en su propio dispositivo, y el dinero se mueve cuando han firmado suficientes — dos de tres cualesquiera, cinco de nueve cualesquiera, lo que el grupo fijó al hacer la cartera.

Nada de lo que sigue es un invento nuestro. Cada cadena ya tiene una forma de que varias personas guarden una sola dirección, y aquí se usa esa forma: P2WSH en Bitcoin, Safe en las cadenas EVM, el sistema de permission de la propia cuenta en Tron, Squads V4 en Solana. Las direcciones de las páginas que siguen son los despliegues con los que habla esta aplicación.

CÓMO FUNCIONA

Cuatro pasos, y solo
el último ocurre en una cadena

Un pago es una conversación antes de ser una transacción. Aquí no es una metáfora: ocurre en el hilo, como mensajes, y la cadena lo ve solo cuando el grupo ya se ha puesto de acuerdo.

  1. 1

    El grupo fija la regla

    Quién firma, y cuántos hacen falta. Se escribe en la cartera en el momento de hacerla, y queda en la cadena, no en esta aplicación.

    La regla no se edita después aquí: otra regla es otra cartera, con su propia dirección que hay que fondear y a la que hay que mudarse. Algunas cadenas permitirían el cambio y esta aplicación no lo hace, así que la pantalla lo dice antes de pedir el segundo toque.

  2. 2

    Alguien propone un pago

    Llega a la conversación como un mensaje, de quien lo hizo, diciendo qué paga y a quién. Hasta que se firma es una petición y nada más.

    La propuesta viaja por el mismo grupo cifrado que usa el chat, así que el servidor la lleva sin leerla.

  3. 3

    Cada firmante firma en su propio dispositivo

    Lo lees, tocas una vez, y queda firmado con una clave que nunca ha salido del teléfono donde se hizo. Todos ven avanzar la cuenta.

    Ningún dispositivo guarda la clave de otra persona, así que no hay ningún dispositivo cuya pérdida entregue la cartera a nadie.

  4. 4

    Al llegar al umbral va a la cadena

    Las firmas se ensamblan y se difunden. A partir de ahí quien hace cumplir la regla es la cadena, no esta aplicación — que es justo el motivo de poner la regla ahí.

    Si esta aplicación desapareciera mañana, la cartera seguiría siendo una cartera y la regla seguiría en pie.

CINCO CADENAS

Una interfaz unificada

Cinco cadenas y, por debajo, cuatro mecanismos distintos: Bitcoin, Ethereum, BNB Smart Chain, Tron y Solana sostienen una dirección compartida cada una a su manera. Nada de eso llega a la pantalla: proponer un pago, firmarlo y enviarlo es igual en las cinco.

Bitcoin

P2WSH multisig · BIP 67 · PSBT

Un script testigo que se lee como «m de estas n claves», y una dirección que es su hash. Las claves van ordenadas lexicográficamente, así que todo el que arma el script a partir del mismo conjunto de claves llega a la misma dirección y no a n! direcciones distintas.

El pago viaja como un PSBT: un archivo que recorre a los firmantes recogiendo firmas, y se finaliza cuando ya tiene suficientes.

Script
OP_m <key>… OP_n OP_CHECKMULTISIG
Firmantes
hasta 15, con el umbral en cualquier punto intermedio
Datos de la cadena
un servidor Electrum

Ethereum

Safe · canonical deployment

El contrato donde ya está la mayor parte del dinero que los grupos guardan en Ethereum. La fábrica canónica hace un proxy que apunta al singleton canónico; los propietarios y el umbral se fijan en la misma llamada que lo crea.

Nada se bifurca y nada se vuelve a desplegar. La versión se lee del contrato en vez de darse por supuesta, porque un Safe hecho por otra persona es un Safe que esto puede abrir.

Singleton
0x41675C099F32341bf84BFc5382aF534df5C7461a
Fábrica
0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67
Agrupación
MultiSend — varios movimientos, una sola aprobación

BNB Smart Chain

Safe · the same addresses

Los mismos contratos en las mismas direcciones. Los despliegues de Safe son deterministas en todas las cadenas EVM, así que aquí no hay nada específico de la cadena que aprender, ni nada específico de la cadena en el código.

Es también la razón de que una cuenta en Ethereum sea la misma cuenta en BNB Smart Chain: un tipo de moneda, una clave, dos cadenas.

Contratos
idénticos a los de Ethereum, arriba
Tipo de moneda
60 — compartido con Ethereum

Tron

Account permissions · no contract

Tron trae la regla incorporada en las cuentas. Un permission lleva una lista de claves, un peso para cada una y un umbral, y se escribe en la cuenta misma — no hay contrato que desplegar ni contrato en el que confiar.

Los pesos hacen que la regla pueda ser algo más que contar cabezas: una clave que vale dos votos, tres claves que valen uno cada una.

Lo escribe
AccountPermissionUpdate
Regla
claves con peso, un umbral
Nota
la actualización sustituye la lista en vez de enmendarla

Solana

Squads Protocol V4

El programa de multifirma que usa la mayoría de las tesorerías de Solana. La propuesta es una cuenta en la cadena: los miembros la aprueban, y se ejecuta cuando las aprobaciones llegan al umbral.

El id del programa decide de dónde se deriva cada cuenta de la cartera, así que está fijado al despliegue publicado, y otro distinto se rechaza en vez de darse por bueno.

Programa
SQDS4ep65T869zMMBKyuUq6aD6EgTu8psMjkvj52pCf
Propuesta
en la cadena, se aprueba contra ella

POR QUÉ LOS ESTÁNDAR

Una cartera que solo se abre aquí
es una cartera de otro

Hay una forma más fácil de construir esto: un contrato propio en cada cadena, un formato propio, una aplicación que lo entienda. Sería menos código y sería peor, porque entonces el dinero del grupo dependería de que esta aplicación siguiera existiendo.

Qué da usar los estándar

Cada uno de estos puntos es consecuencia de esa elección, no una función que se añadió.

  • Auditados por más gente que nosotros. Safe y Squads guardan miles de millones entre los dos, y se los ha mirado en consecuencia. P2WSH y los permissions de Tron son reglas de consenso.
  • Legibles por otras herramientas. La dirección es un Safe corriente, una multifirma de Squads corriente, una dirección P2WSH corriente, un permission de Tron corriente: los exploradores de bloques y las interfaces de los propios protocolos los leen sin saber que esta aplicación existe.
  • Nada de lo que migrar. No hay un formato propietario en el que quedarse atrapado, así que tampoco hay un momento posterior en el que irse cueste algo.
  • La regla nos sobrevive. El umbral lo hace cumplir la cadena. Esta aplicación es donde el grupo habla del pago, no lo que lo permite.

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.

SI TRAES UNA FRASE

Veinticuatro palabras que
ya has usado en otro sitio

Una frase de recuperación no es un convenio, son varios, y discrepan justo en lo mismo: qué elemento de la ruta se mueve cuando pides «cuenta 2». Cada uno de ellos es correcto, y una frase leída con el convenio equivocado muestra saldo cero para un dinero que está exactamente a una línea de aritmética. Por eso el convenio aquí no se adivina: es un ajuste, uno por cadena, y ofrece una lista de aplicaciones en vez de una lista de especificaciones. El dinero que parece perdido es dinero en una ruta a la que esta aplicación no estaba mirando.

Bitcoin

Native SegWit por defecto

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

  • Electrum
  • BlueWallet
  • Sparrow
  • Exodus

Índice de dirección

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

  • Trust Wallet
  • Muun
  • Phoenix

Ethereum &amp; BNB Smart Chain

Índice de dirección por defecto

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

  • MetaMask
  • Rabby
  • Trust Wallet
  • Rainbow
  • Phantom

Cuenta endurecida

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

  • Ledger Live
  • Trezor Suite
  • Exodus

Cuatro elementos

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

  • MyEtherWallet (legacy)
  • Ledger (legacy)

Tron

Índice de dirección por defecto

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

  • TronLink
  • Trust Wallet

Cuenta endurecida

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

  • Ledger Live
  • Trezor Suite

Solana

Cuatro elementos por defecto

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

  • Phantom
  • Solflare
  • Backpack

Solo cuenta

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

  • Ledger Live
  • Solflare (hardware)

Heredado

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

  • Sollet (legacy)

Los esquemas legacy y anidado de Bitcoin faltan a propósito. El constructor de direcciones deriva native SegWit y nada más, así que un m/44'/0'/… aquí daría un bc1… donde cualquier otra cartera muestra un 1… o un 3… — una cadena de texto que parece correcta, pertenece a tu frase, y no es la dirección que cualquier otro lee en esa ruta. Una opción que por lo bajo significa algo distinto de lo que dice es peor que ninguna opción.

SI TRAES UNA CARTERA

Si vienes de otro sitio

Dos formas de entrar, y están en etapas distintas

Dicho sin rodeos, porque una página que describe lo planeado con la misma voz que lo construido es una página con la que no puedes decidir nada.

  • Tu frase de recuperación — ya está. Veinticuatro palabras, y la pregunta de en qué cartera las usaste. Cada dirección que describe la tabla de arriba se deriva en tu dispositivo a partir de la frase y no se guarda en ningún sitio; una cuenta EVM, una cuenta Tron y una cuenta Solana son la misma dirección en todas las redes de esa cadena.
  • Una multifirma que ya existe — todavía no. Leerla está hecho: la biblioteca que hay debajo abre un Safe por su dirección e informa de sus propietarios, umbral y versión; lee los miembros y el umbral de una multifirma de Squads, los firmantes y los pesos de un permission de Tron, y descodifica un script testigo de Bitcoin de vuelta a su dirección, umbral y claves. Lo que no está hecho es la pantalla que te lleva de la mano por todo eso y lo engancha a una conversación. Hasta que lo esté, esta página no va a fingir lo contrario.

Mientras tanto nada te detiene: un Safe o una multifirma de Squads que ya tengas siguen funcionando en la interfaz donde los hiciste, porque nunca fueron otra cosa que un Safe o una multifirma de Squads.

Nada en este sitio es asesoramiento financiero: los ejemplos son ejemplos, y el dinero — y el riesgo — son tuyos. Avisos.