Perché gli indirizzi multisig su Solana sono difficili

·7 min di lettura·Di SSP Editorial Team
Copertina del marchio SSP per un articolo sugli indirizzi multisig di Solana, con icone di QR code, chiave, database e chip

Un indirizzo di wallet sembra una cosa semplice: una stringa che copi, incolli e a cui invii denaro. Su Bitcoin è quasi così semplice. Su Solana, mettere un wallet condiviso — un multisig — dietro un indirizzo è sorprendentemente difficile. Questo articolo spiega perché e imposta la domanda a cui risponde il resto di questa serie.

Cosa deve promettere un indirizzo multisig

Un wallet multisig è controllato da diverse chiavi, di cui un numero fisso deve essere d'accordo prima che il denaro si muova. Un multisig "2 di 3", per esempio, ha tre chiavi e richiede che due qualsiasi approvino un pagamento. Lo scopo è eliminare i singoli punti di guasto: perdi una chiave, o una chiave viene rubata, e i tuoi fondi sono comunque al sicuro.

Perché ciò sia utile, l'indirizzo deve mantenere due promesse. Primo, deve essere conoscibile in anticipo — vuoi consegnare a qualcuno un indirizzo di deposito prima di aver finito di configurare qualsiasi cosa. Secondo, deve essere onesto: chi invia denaro a quell'indirizzo deve poter confidare che solo il gruppo di chiavi concordato, secondo la regola concordata, potrà mai spendere da esso. Tieni a mente queste due promesse. Sono il filo conduttore di tutto ciò che segue.

Su Bitcoin, l'indirizzo è la regola

Bitcoin fa sembrare tutto facile. Un multisig Bitcoin è descritto da un piccolo script: l'elenco delle chiavi pubbliche più la regola "M di N". Per ottenere l'indirizzo, prendi quello script e ne fai l'hash. L'indirizzo (un indirizzo P2WSH) è letteralmente l'hash delle regole di spesa.

Questo ha una conseguenza silenziosamente potente. Chiunque può calcolare l'indirizzo offline, su un portatile senza internet, prima che venga trasmessa una sola transazione. Non c'è alcun passaggio di "creazione del wallet" — il wallet non ha bisogno di esistere sulla rete per ricevere denaro. Lo script viene rivelato solo più tardi, quando i fondi vengono spesi, e la rete verifica che lo script rivelato corrisponda all'indirizzo e che ci siano abbastanza firme valide. Indirizzo conoscibile in anticipo: sì. Onesto: sì — perché l'indirizzo deriva dalla regola stessa, un insieme di chiavi diverso produce un indirizzo diverso.

Su Solana, un indirizzo è un account che deve essere creato

Solana funziona diversamente. Su Solana, tutto è un account — uno spazio di archiviazione on-chain con un proprietario. I tuoi fondi vivono in account, i programmi vivono in account, e anche la configurazione di un multisig vive in un account. Fondamentale: gli account non nascono gratis. Un account deve essere creato e pagato esplicitamente: qualcuno lo finanzia con una piccola quantità di SOL chiamata "affitto" affinché la rete ne memorizzi i dati.

Un multisig su Solana non è quindi solo un indirizzo — è un account controllato da un programma che contiene l'elenco dei membri e la soglia. E quell'account deve essere creato da una transazione prima che il multisig possa fare qualsiasi cosa. Questa è la radice della difficoltà: un wallet condiviso su Solana ha un passaggio di configurazione che Bitcoin semplicemente non ha.

PDA: indirizzi senza chiave privata

Solana ha sì uno strumento elegante per questo, chiamato Program Derived Address, o PDA. Un normale indirizzo Solana ha una chiave privata corrispondente — chi possiede la chiave controlla l'indirizzo. Una PDA è costruita deliberatamente per stare fuori dalla curva: è un indirizzo dall'aspetto valido per cui non esiste alcuna chiave privata e nessuna può esistere. Nessuno può firmare personalmente per essa.

Invece, una PDA viene derivata in modo deterministico. Prendi alcuni valori di input — chiamati "seed" — più l'ID di un programma, li fai passare attraverso una funzione unidirezionale e ne esce l'indirizzo. Gli stessi seed e lo stesso programma producono sempre la stessa PDA, quindi chiunque può riprodurla. E poiché non c'è chiave privata, solo il programma proprietario può autorizzare azioni per quell'indirizzo, cosa che fa tramite un meccanismo chiamato invocazione tra programmi con invoke_signed: il programma presenta i seed al runtime di Solana, e il runtime gli concede l'autorità di firma per la PDA. Non viene mai prodotta una firma crittografica — il diritto di agire deriva dal conoscere i seed, non dal possedere una chiave.

Una PDA è esattamente la casa giusta per un multisig: un indirizzo controllato dalla logica di un programma anziché da una singola persona. Fin qui tutto bene. La parte difficile è cosa scegliere come seed.

Il problema di finanziare prima di creare

È qui che i multisig dominanti di Solana incontrano un ostacolo. A differenza del modello deterministico di Bitcoin, i multisig più usati di Solana — Squads V4 è l'esempio di punta, maturo e ampiamente verificato — derivano l'indirizzo del multisig da un valore casuale appena generato e scelto al momento della creazione, non dall'insieme dei membri. In Squads V4 quel valore si chiama create_key, una chiave effimera prodotta quando un creatore esegue la transazione di creazione.

Derivare l'indirizzo da un create_key casuale è una scelta di design deliberata e ragionevole — aggira un caso limite scomodo in cui due gruppi diversi vogliono esattamente la stessa composizione di membri. Ma ha due conseguenze che vale la pena capire con chiarezza:

  • Non puoi conoscere l'indirizzo in anticipo. Il seed non esiste finché qualcuno non esegue la transazione di creazione, quindi nemmeno l'indirizzo. Non c'è modo di stampare un indirizzo di deposito e finanziarlo prima della configurazione — il problema di finanziare prima di creare. La prima promessa si rompe.
  • Il creatore è un singolo punto di fiducia in fase di configurazione. Un account specifico deve eseguire quella transazione di creazione e scegliere quel valore casuale. Per la breve finestra della configurazione, ti fidi che quella parte lo faccia correttamente.

Niente di tutto ciò rende Squads V4 insicuro — è il multisig più collaudato di Solana e custodisce somme molto ingenti. È semplicemente una forma di fiducia diversa da quella di Bitcoin. L'indirizzo non è più "l'hash della regola"; è "qualunque cosa abbia prodotto la transazione di creazione".

Ethereum ha trovato una via di mezzo

Ethereum ha affrontato un problema simile e vi ha risposto con una funzionalità chiamata CREATE2. Permette di calcolare l'indirizzo di uno smart contract prima che il contratto venga distribuito, a partire da input fissi. Wallet come Safe lo usano per darti un cosiddetto indirizzo controfattuale: un indirizzo reale e finanziabile che puoi condividere e su cui ricevere denaro, mentre il contratto vero e proprio viene distribuito in modo pigro — solo quando i fondi devono muoversi per la prima volta. Lo standard più recente di astrazione degli account, ERC-4337, formalizza la stessa idea. Ethereum recupera così la promessa di "conoscibile in anticipo" anche se, come Solana, ha alla fine bisogno che un oggetto on-chain esista.

La domanda a cui risponde questa serie

Metti i tre modelli fianco a fianco. Bitcoin: l'indirizzo è l'hash della regola — conoscibile offline, onesto per costruzione, nessun passaggio di creazione. Ethereum: un indirizzo controfattuale — conoscibile in anticipo, con la distribuzione differita. I multisig generici di Solana: l'indirizzo proviene da casualità del momento della creazione — non conoscibile in anticipo, con un creatore di cui fidarsi in fase di configurazione.

Ecco quindi la domanda. Solana ha bisogno di account, e gli account vanno creati — questo non cambierà. Ma un multisig di Solana deve rinunciare alla proprietà di Bitcoin? L'indirizzo potrebbe invece essere derivato puramente dall'insieme dei membri e dalla soglia — la regola stessa — così da essere conoscibile offline, finanziabile prima della configurazione e onesto perché un gruppo di chiavi diverso produce un indirizzo diverso?

È esattamente la proprietà che il team SSP ha integrato nel proprio programma multisig per Solana. Il prossimo articolo mostra come: un indirizzo che è l'insieme dei membri, un caveau che puoi finanziare prima che qualsiasi cosa sia registrata on-chain e un passaggio di registrazione che non richiede alcun creatore. Il design è stato rilasciato insieme al supporto per Solana in SSP Wallet — vedi l'annuncio della versione — e, in linea con il modo in cui SSP tratta la sicurezza, il programma è attualmente solo su devnet e in attesa di un audit esterno prima della mainnet. Se il multisig in sé è ancora nuovo per te, parti da cos'è un multisig e perché è importante; altrimenti, continua a leggere.

Condividi questo articolo

Articoli correlati