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.widDescriptor model
AMP wallets use a confidential 2-of-2 descriptor:
ct(slip77(<master_blinding_key>),elwsh(multi(2,<user_key>,<server_key>)))| Component | Meaning |
|---|---|
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: