Off-Exchange Settlement: Deallocate Assets from Partners
Deallocate assets from a partner to unlock them at BitGo. See the Guide.
-
You request a signing payload from BitGo for the deallocation. This payload will be used to sign the deallocation request and ensure its authenticity. This step is required before creating the deallocation request.
-
You deallocate assets from a connected partner to your Go Network account. Deallocating assets unlocks them at BitGo, making them available for other actions like rebalancing or withdrawing. Deallocations occur synchronously.
Prerequisites: You must first connect to a partner and allocate assets.
// 1. Get Deallocation Payload
export ENTERPRISE_ID="<YOUR_ENTERPRISE_ID>"
export CONNECTION_ID="<YOUR_CONNECTION_ID>"
export ACCESS_TOKEN="<YOUR_ACCESS_TOKEN>"
curl -X POST \
https://app.bitgo-test.com/api/network/v1/enterprises/$ENTERPRISE_ID/clients/connections/$CONNECTION_ID/deallocations/signing \
-H 'Content-Type: application/json' \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-d '{
"amount": {
"currency": "string",
"quantity": "string"
},
"clientExternalId": "string",
"nonce": "string",
"notes": "string"
}'
// 2. Create Deallocation Request
export ENTERPRISE_ID="<YOUR_ENTERPRISE_ID>"
export CONNECTION_ID="<YOUR_CONNECTION_ID>"
export ACCESS_TOKEN="<YOUR_ACCESS_TOKEN>"
curl -X POST \
https://app.bitgo-test.com/api/network/v1/enterprises/$ENTERPRISE_ID/clients/connections/$CONNECTION_ID/deallocations \
-H 'Content-Type: application/json' \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-d '{
"amount": {
"currency": "string",
"quantity": "string"
},
"clientExternalId": "string",
"payload": "string",
"signature": "string",
"nonce": "string",
"notes": "string"
}'
// 1. Get Deallocation Payload
// Use the JavaScript SDK for signing (see JavaScript tab - prepareAllocation handles this)
// 2. Create Deallocation Request
import { BitGoAPI } from '@bitgo/sdk-api';
import { v4 as uuidV4 } from 'uuid';
import crypto from 'crypto';
import { TradingAccount } from '@bitgo/sdk-core/dist/src/bitgo/trading/trading';
import * as dotenv from 'dotenv';
const accessToken = process.env.ACCESS_TOKEN;
const walletId = process.env.WALLET_ID;
const enterpriseId = process.env.ENTERPRISE_ID;
const walletPassphrase = process.env.WALLET_PASSPHRASE;
const connectionId = process.env.CONNECTION_ID;
const bitgo = new BitGoAPI({
accessToken: accessToken,
env: 'test',
customRootURI: 'https://app.bitgo-test.com',
});
const coin = 'ofc';
bitgo.register(coin, coins.Ofc.createInstance);
async function createDeallocation() {
try {
console.log(`Fetching wallet: ${walletId}...`);
const wallet = await bitgo.coin(coin).wallets().get({ id: walletId });
const tradingAccount = new TradingAccount(enterpriseId, wallet, bitgo);
const network = tradingAccount.toNetwork();
console.log('Preparing deallocation using the allocation helper...');
const deallocationParams = await network.prepareAllocation({
walletPassphrase,
connectionId,
amount: {
currency: 'ofctbtc',
quantity: '50000',
},
notes: 'Deallocation for Project Phoenix',
});
console.log('Creating deallocation...');
const deallocation = await network.createDeallocation(deallocationParams);
console.log('Deallocation created successfully:');
console.dir(deallocation, { depth: null });
} catch (error) {
console.error('Failed to create deallocation:', error);
}
}
createDeallocation();
Response
// 1. Get Deallocation Payload Response
{
"payload": "string"
}
// 2. Create Deallocation Request Response
{
"deallocation": {
"status": "cleared",
"id": "string",
"amount": {
"currency": "string",
"quantity": "string"
},
"connectionId": "string",
"clientExternalId": "string",
"partnerExternalId": "string",
"initiatedBy": "string",
"notes": "string",
"createdAt": "2019-08-24",
"updatedAt": "2019-08-24"
}
}