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