Blockstream Enterprise
RecipesWallets

AMP Wallet (Liquid Network)

AMP wallets are designed for the Liquid Network with confidential transactions and 2-of-2 multisig security.

What is an AMP Wallet?

AMP wallets are specialized for the Liquid sidechain and provide enterprise-grade features:

  1. Confidential Transactions: Transaction amounts are cryptographically hidden from blockchain observers. Only the sender and receiver can see the actual amounts.

  2. 2-of-2 Multisig: Every transaction requires signatures from both the user's key AND the server's key. This provides:

    • Theft prevention: A compromised user key alone cannot move funds
    • Policy enforcement: Server can enforce business rules before co-signing
    • Audit trail: Server records all signing requests
  3. Asset Issuance: Create custom tokens on Liquid with controlled supply and transfer restrictions.

When to Use AMP Wallets

ScenarioAMP Suitable?Reason
Issue custom tokens✅ YesRequired for Liquid asset issuance
Need transaction privacy✅ YesConfidential transactions hide amounts
Fast settlement✅ YesLiquid blocks every ~1 minute vs Bitcoin's ~10 minutes
Need on-chain transparency❌ NoAmounts are hidden by design

Characteristics

  • Network: Liquid only
  • Security: 2-of-2 multisig (ecs + amp)
  • Privacy: Confidential transactions (amounts hidden)
  • Blinding: SLIP-77 blinding key derivation
  • Restrictions: Ability to set restrictions for the asset

Creating an AMP Wallet

// Step 1: Create signer
const signerResult = await broadcastRequest({
  action: 'add',
  resource: '/signers',
  details: {
    sid: uuidv4(),
    name: `amp_signer_${Date.now()}`,
    location: 'hosted',
  },
})

const signerId = signerResult.details.sid

// Step 2: Derive XPUB
const xpubResult = await broadcastRequest({
  action: 'add',
  resource: `/signers/${signerId}/xpubs`,
  details: {
    id: uuidv4(),
    change: 'receive',
  },
})

// Step 3: Create AMP wallet
const walletResult = await broadcastRequest({
  action: 'add',
  resource: '/wallets',
  details: {
    id: uuidv4(),
    name: `amp_wallet_${Date.now()}`,
    type: 'amp',
    network: 'liquid',
    value: {
      signer_id: signerId,
    },
  },
})

const walletId = walletResult.details.wid

AMP Wallet Descriptor Format

AMP wallets use a complex descriptor structure:

ct(slip77(<master_blinding_key>),elwsh(multi(2,<user_key>,<server_key>)))

Components:

  • ct() - Confidential transaction wrapper
  • slip77() - SLIP-77 blinding key derivation
  • elwsh() - Elements witness script hash
  • multi(2,...) - 2-of-2 multisig requirement

On this page