Blockstream Enterprise Custody SDK
Wallets

AMP Wallet

How to create an AMP wallet on Liquid and where to continue for tokenization-specific workflows.

Complete Setup and Installation first.

This guide assumes:

  • the shared wallet prerequisites are complete
  • you are working on Liquid
  • your application already has the request helper from Making Requests

AMP wallets are the wallet type used for Liquid tokenization workflows. They combine:

  • Liquid confidential transactions
  • 2-of-2 user and server co-signing
  • transfer-restriction support for issued assets

For the broader AMP model, start with Tokenization Overview. This page stays focused on wallet creation itself.

Create an AMP wallet

import { v4 as uuidv4 } from 'uuid'

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

const signerId = signerResult.details.sid

await broadcastRequest({
  action: 'add',
  resource: `/signers/${signerId}/xpubs`,
  details: {
    id: uuidv4(),
    change: 'receive',
  },
})

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

Descriptor model

AMP wallets use a confidential 2-of-2 descriptor:

ct(slip77(<master_blinding_key>),elwsh(multi(2,<user_key>,<server_key>)))
ComponentMeaning
ct()Confidential transaction wrapper
slip77()Blinding-key derivation
elwsh()Elements witness script hash
multi(2,...)Both the user and the server must co-sign

Where to go next

After the wallet exists, move into the AMP-specific workflows:

On this page