Custody Starter Architecture: Set Up Deposit/Withdraw Wallet (MPC)

Create an MPC deposit/withdraw wallet for daily operations. See the Guide.

  1. Generate a self-custody MPC wallet using BitGo Express or the SDK. You configure this wallet without restrictive policies to enable rapid customer transactions. The deposit/withdraw wallet is a self-custody wallet used for day-to-day customer operations. This wallet holds the smallest amount of funds and has no restrictive policies, allowing spenders to freely process customer deposits and withdrawals.

    This response contains critical key material. Save the backup keychain in a secure place. Save the wallet ID and backup keychain from the response. You need the wallet ID to configure whitelist policies with the standby wallet.

    API Reference

// 1. Create Deposit/Withdraw Wallet
export BITGO_EXPRESS_HOST="<YOUR_LOCAL_HOST>"
export COIN="<ASSET_ID>"
export ACCESS_TOKEN="<YOUR_ACCESS_TOKEN>"
export ENTERPRISE_ID="<YOUR_ENTERPRISE_ID>"
export WALLET_PASSPHRASE="<YOUR_WALLET_PASSPHRASE>"
export LABEL="<YOUR_DESIRED_WALLET_NAME>"

curl -X POST \
  http://$BITGO_EXPRESS_HOST/api/v2/$COIN/wallet/generate?includeKeychains=true \
  -H 'Content-Type: application/json' \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -d '{
    "enterprise": "'"$ENTERPRISE_ID"'",
    "passphrase": "'"$WALLET_PASSPHRASE"'",
    "label": "'"$LABEL"'",
    "type": "hot",
    "multisigType": "tss",
    "walletVersion": 5
}'
Response
// 1. Create Deposit/Withdraw Wallet Response
{
  "wallet": {
    "id": "765e33f768f9b4b1cc2ca87a6b87cdfb",
    "users": [
      {
        "user": "660d7c9fa6fbf0d00b415146cf70405a",
        "permissions": ["admin", "spend", "view"]
      }
    ],
    "coin": "eth",
    "label": "Deposit-Withdraw Wallet - Hot",
    "m": 2,
    "n": 3,
    "keys": [
      "765e33f6fcf87cac817eb3b2ed964042",
      "765e33f6e7331ba062e62c48c6ccaf98",
      "765e33f6fcf87cac817eb3b01c6b4c36"
    ],
    "enterprise": "66325011d4b1ff58feae3b311d669aae",
    "approvalsRequired": 1,
    "isCold": false,
    "type": "hot",
    "multisigType": "tss",
    "receiveAddress": {
      "address": "0x2b63c81e819f5bfd9e93371bb146c4e72f62ef95"
    }
  },
  "userKeychain": {
    "id": "765e33f6fcf87cac817eb3b2ed964042",
    "source": "user",
    "type": "tss",
    "encryptedPrv": "{...}"
  },
  "backupKeychain": {
    "id": "765e33f6e7331ba062e62c48c6ccaf98",
    "source": "backup",
    "type": "tss",
    "encryptedPrv": "{...}"
  },
  "bitgoKeychain": {
    "id": "765e33f6fcf87cac817eb3b01c6b4c36",
    "source": "bitgo",
    "type": "tss",
    "isBitGo": true
  }
}