Multisig Guide
Alephium is supporting m-of-n
multi-signature addresses.
You can find the related command for multisig at
http://127.0.0.1:12973/docs under the
Multi-signature
section. Make sure that your full node is running so
that you can access the Swagger UI.
Create a multisig address
Get all the public keys of the accounts for that multisig.
Public key can be retrieve with the wallet by calling:
response:
{
"address": "{address}",
"publicKey": "d1b70d2226308b46da297486adb6b4f1a8c1842cb159ac5ec04f384fe2d6f5da28"
}
For example, if you want to create a multisig address with 3 accounts that needs 2 signatures to unlock (2-of-3), you can do:
POST /multisig/address
{
"keys": [
"d1b70d2226308b46da297486adb6b4f1a8c1842cb159ac5ec04f384fe2d6f5da28",
"8c1842cb159ac5ec04f384fe2d6f5da2d1b70d2226308b46da297486adb6b41a8f",
"e4a8c1842cb159ac5ec0b70d2226308b46da297486adb6b4f14f384fe2d6f5da31"
],
"mrequired": 2
}
response:
Warning
Make sure to remember the order of the public keys, you'll need to provide the same order later.
Funds can now be send to that address.
To use the funds, you need to build a multisig transaction.
Pass the public keys that will sign the transaction, 2 in our example.
Make sure to have the same order as during the address creation:
POST /multisig/build
{
"fromAddress": "1AujpupFP4KWeZvqA7itsHY9cLJmx4qTzojVZrg8W9y9n",
"fromPublicKeys": [
"d1b70d2226308b46da297486adb6b4f1a8c1842cb159ac5ec04f384fe2d6f5da28",
"e4a8c1842cb159ac5ec0b70d2226308b46da297486adb6b4f14f384fe2d6f5da31"
],
"destinations": [
{
"address": "1jVZrg8W9y9AujpupFP4KWeZvqA7itsHY9cLJmTonx4zq",
"amount": "42 ALPH"
}
]
}
response:
{
"unsignedTx": "0ecd20654c2e2be708495853e8da35c664247040c00bd10b9b13",
"txId": "798e9e137aec7c2d59d9655b4ffa640f301f628bf7c365083bb255f6aa5f89ef",
"fromGroup": 2,
"toGroup": 1
}
You can now send the txId
to the people that need to sign the transaction.
Everyone can sign it using their wallet:
POST /wallets/{wallet_name}/sign
{
"data": "798e9e137aec7c2d59d9655b4ffa640f301f628bf7c365083bb255f6aa5f89ef"
}
response:
{
"signature": "9e1a35b2931bd04e6780d01c36e3e5337941aa80f173cfe4f4e249c44ab135272b834c1a639db9c89d673a8a30524042b0469672ca845458a5a0cf2cad53221b"
}
Collect the signatures, 2 in our example (because m=2
) and finally send the transaction:
Note
The signatures order needs to be the same as the public keys.
POST /multisig/submit
{
"unsignedTx": "0ecd20654c2e2be708495853e8da35c664247040c00bd10b9b13",
"signatures": [
"9e1a35b2931bd04e6780d01c36e3e5337941aa80f173cfe4f4e249c44ab135272b834c1a639db9c89d673a8a30524042b0469672ca845458a5a0cf2cad53221b",
"ab135272b834c1a639db9c89d673a8a30524042b0469672ca845458a5a0cf2cad53221b9e1a35b2931bd04e6780d01c36e3e5337941aa80f173cfe4f4e249c44"
]
}
response: