Aller au contenu

Guide Multisig

Alephium prend en charge les adresses multi-signatures de type m-de-n.

Vous pouvez trouver la commande relative au multisig à http://127.0.0.1:12973/docs dans la section Multi-signature. Assurez-vous que votre nœud complet est en fonction afin que vous puissiez accéder à l'interface utilisateur de Swagger.

Créer une adresse multisig

Obtenez toutes les clés publiques des comptes pour ce multisig.

La clé publique peut être récupérée avec le portefeuille en appelant:

Text Only
GET /wallets/{wallet_name}/addresses/{address}

réponse:

JSON
{
  "address": "{address}",
  "publicKey": "d1b70d2226308b46da297486adb6b4f1a8c1842cb159ac5ec04f384fe2d6f5da28"
}

Par exemple, si vous souhaitez créer une adresse multisig avec 3 comptes nécessitant 2 signatures pour être déverrouillée (2-de-3), vous pouvez faire:

Text Only
POST /multisig/address
{
  "keys": [
    "d1b70d2226308b46da297486adb6b4f1a8c1842cb159ac5ec04f384fe2d6f5da28",
    "8c1842cb159ac5ec04f384fe2d6f5da2d1b70d2226308b46da297486adb6b41a8f",
    "e4a8c1842cb159ac5ec0b70d2226308b46da297486adb6b4f14f384fe2d6f5da31"
  ],
  "mrequired": 2
}

réponse:

JSON
{
  "address": "1AujpupFP4KWeZvqA7itsHY9cLJmx4qTzojVZrg8W9y9n"
}

Avertissement

Assurez-vous de retenir l'ordre des clés publiques, vous devrez fournir le même ordre plus tard.

Les fonds peuvent maintenant être envoyés à cette adresse.

Pour utiliser les fonds, vous devez construire une transaction multisig. Passez les clés publiques qui signeront la transaction, 2 dans notre exemple. Assurez-vous d'avoir le même ordre que lors de la création de l'adresse:

Text Only
POST /multisig/build
{
  "fromAddress": "1AujpupFP4KWeZvqA7itsHY9cLJmx4qTzojVZrg8W9y9n",
  "fromPublicKeys": [
    "d1b70d2226308b46da297486adb6b4f1a8c1842cb159ac5ec04f384fe2d6f5da28",
    "e4a8c1842cb159ac5ec0b70d2226308b46da297486adb6b4f14f384fe2d6f5da31"
  ],
  "destinations": [
    {
      "address": "1jVZrg8W9y9AujpupFP4KWeZvqA7itsHY9cLJmTonx4zq",
      "amount": "42 ALPH"
    }
  ]
}

réponse:

JSON
{
  "unsignedTx": "0ecd20654c2e2be708495853e8da35c664247040c00bd10b9b13",
  "txId": "798e9e137aec7c2d59d9655b4ffa640f301f628bf7c365083bb255f6aa5f89ef",
  "fromGroup": 2,
  "toGroup": 1
}

Vous pouvez maintenant envoyer le txId aux personnes qui doivent signer la transaction. Chacun peut signer en utilisant son portefeuille:

Text Only
POST /wallets/{wallet_name}/sign
{
  "data": "798e9e137aec7c2d59d9655b4ffa640f301f628bf7c365083bb255f6aa5f89ef"
}

réponse:

JSON
{
  "signature": "9e1a35b2931bd04e6780d01c36e3e5337941aa80f173cfe4f4e249c44ab135272b834c1a639db9c89d673a8a30524042b0469672ca845458a5a0cf2cad53221b"
}

Collectez les signatures, 2 dans notre exemple (car m=2) et enfin envoyez la transaction:

Note

L'ordre des signatures doit être le même que celui des clés publiques.

Text Only
POST /multisig/submit
{
   "unsignedTx": "0ecd20654c2e2be708495853e8da35c664247040c00bd10b9b13",
   "signatures": [
   "9e1a35b2931bd04e6780d01c36e3e5337941aa80f173cfe4f4e249c44ab135272b834c1a639db9c89d673a8a30524042b0469672ca845458a5a0cf2cad53221b",
   "ab135272b834c1a639db9c89d673a8a30524042b0469672ca845458a5a0cf2cad53221b9e1a35b2931bd04e6780d01c36e3e5337941aa80f173cfe4f4e249c44"
   ]
}

réponse:

JSON
{
  "txId": "503bfb16230888af4924aa8f8250d7d348b862e267d75d3147f1998050b6da69",
  "fromGroup": 2,
  "toGroup": 1
}