Skip to main content

Generate a Multisig Account

Substrate provides a multisig dispatch function in its Utility pallet. This example generates the address that would correspond to a set of addresses and threshold.

import {
createKeyMulti,
encodeAddress,
sortAddresses
} from '@polkadot/util-crypto';

const SS58Prefix = 0;

// Input the addresses that will make up the multisig account.
const addresses = [
'1nUC7afqmo7zwRFWxDjrUQu9skk6fk99pafb4SiyGSRc8z3',
'1ZX2XntfLEHrBPy73DpfQp9rG7pbLyvrFjEpi7mNKQgyga5',
'14b1kB7CrqzRUeMsKc26FJ73f8FCpxAX6sNieu9gfYSfJuoL'
];

// The number of accounts that must approve. Must be greater than 0 and less than
// or equal to the total number of addresses.
const threshold = 2;

// The address (as index in `addresses`) that will submit a transaction.
const index = 0;

function main () {
// Address as a byte array.
const multiAddress = createKeyMulti(addresses, threshold);

// Convert byte array to SS58 encoding.
const Ss58Address = encodeAddress(multiAddress, SS58Prefix);

console.log(`\nMultisig Address: ${Ss58Address}`);

// Take addresses and remove the sender.
const otherSignatories = addresses.filter((who) => who !== addresses[index]);

// Sort them by public key.
const otherSignatoriesSorted = sortAddresses(otherSignatories, SS58Prefix);

console.log(`\nOther Signatories: ${otherSignatoriesSorted}\n`);

process.exit();
}

main();