Blockstream Enterprise
RecipesWallets

K-of-N Multisig Wallet (Bitcoin/Liquid)

K-of-N multisig wallets require multiple signatures to authorize transactions, providing enhanced security and governance.

Characteristics

  • Networks: Bitcoin or Liquid
  • Security: Configurable threshold (K signatures required out of N total)
  • Use Cases: Corporate treasury, shared custody, governance

Creating a K-of-N Multisig Wallet

// Step 1: Create multiple signers (one per participant)
const signer1Result = await broadcastRequest({
  action: 'add',
  resource: '/signers',
  details: {
    sid: uuidv4(),
    name: 'multisig_signer_1',
    location: 'hosted',
  },
})

const signer2Result = await broadcastRequest({
  action: 'add',
  resource: '/signers',
  details: {
    sid: uuidv4(),
    name: 'multisig_signer_2',
    location: 'hosted',
  },
})

const signer3Result = await broadcastRequest({
  action: 'add',
  resource: '/signers',
  details: {
    sid: uuidv4(),
    name: 'multisig_signer_3',
    location: 'hosted',
  },
})

// Step 2: Derive XPUBs for each signer
const xpub1 = await broadcastRequest({
  action: 'add',
  resource: `/signers/${signer1Result.details.sid}/xpubs`,
  details: { id: uuidv4(), change: 'receive' },
})

const xpub2 = await broadcastRequest({
  action: 'add',
  resource: `/signers/${signer2Result.details.sid}/xpubs`,
  details: { id: uuidv4(), change: 'receive' },
})

const xpub3 = await broadcastRequest({
  action: 'add',
  resource: `/signers/${signer3Result.details.sid}/xpubs`,
  details: { id: uuidv4(), change: 'receive' },
})

// Step 3: Create K-of-N multisig wallet (2-of-3 example)
const walletResult = await broadcastRequest({
  action: 'add',
  resource: '/wallets',
  details: {
    id: uuidv4(),
    name: `multisig_2of3_wallet_${Date.now()}`,
    type: 'kofn_multisig',
    network: 'bitcoin', // or 'liquid'
    value: {
      threshold: 2, // K = number of required signatures
      signers: [
        { signer_id: signer1Result.details.sid },
        { signer_id: signer2Result.details.sid },
        { signer_id: signer3Result.details.sid },
      ],
    },
  },
})

const walletId = walletResult.details.wid

On this page