Выводите 500 ETH за 5 секунд — или ждите 2 часа, если vault требует ручного одобрения. Для обменников и фондов с сотнями тысяч клиентов разница между автоматической и ручной кастодией — это десятки миллионов долларов операционных издержек в год. Anchorage Digital — первый федерально лицензированный криптобанк (OCC charter) — сочетает аппаратную изоляцию ключей в HSM с REST API, который позволяет управлять выводами, стейкингом и голосованием. Собственное кастодиальное решение обходится в 10–100 раз дороже и занимает 6–12 месяцев. Мы выполняем интеграцию под ключ: от настройки API до онбординга клиентов, и экономим до 90% бюджета на кастодии.
Что даёт интеграция
| Функция | Описание |
|---|---|
| Custody | Аппаратная изоляция ключей (HSM), не pure software |
| Transactions | Создание, подписание и вещание on-chain транзакций через кастодиальный pipeline |
| Staking | Делегирование для PoS активов (ETH, SOL, MATIC, ADA) с отчётностью |
| Trading | OTC trading desk интеграция |
| Governance | On-chain голосование от имени кастодированных активов |
API построен по REST принципам, аутентификация через JWT + API ключи. Sandbox среда доступна для разработки. Скорость подтверждения транзакции: от нескольких секунд (автоматическая политика) до 1–2 часов (ручное подписание).
Почему Anchorage Digital — правильный выбор?
Anchorage сочетает банковское регулирование с технологичностью. В отличие от большинства кастодиальных решений, он не просто хранит ключи — он обеспечивает on-chain верификацию транзакций, стейкинг и управление губернатором. Это особенно важно для фондов, которые хотят отчитываться перед инвесторами о голосовании или получать доход от стейкинга. Архитектура на базе HSM исключает даже теоретический доступ к seed-фразам — все операции подписываются в защищённой среде. Интеграция с Anchorage в 10–100 раз дешевле самостоятельной кастодии, а экономия может достигать 90%.
Как работает аутентификация в Anchorage?
Anchorage использует двухуровневую аутентификацию: API ключ + подпись запроса. Каждый запрос должен быть подписан приватным ключом, публичный аналог которого зарегистрирован в системе. Используется алгоритм ECDSA P-256.
import crypto from "crypto";
interface AnchorageRequestSigner {
apiKeyId: string;
privateKey: string; // PEM формат, ECDSA P-256
}
function signRequest(
signer: AnchorageRequestSigner,
method: string,
path: string,
body: object | null,
timestamp: number
): string {
const bodyString = body ? JSON.stringify(body) : "";
const payload = `${timestamp}${method}${path}${bodyString}`;
const sign = crypto.createSign("SHA256");
sign.update(payload);
const signature = sign.sign(signer.privateKey, "base64");
return `Signature keyId="${signer.apiKeyId}",algorithm="ecdsa-p256",signature="${signature}"`;
}
async function anchorageRequest(
signer: AnchorageRequestSigner,
method: string,
path: string,
body?: object
): Promise<Response> {
const timestamp = Math.floor(Date.now() / 1000);
const authHeader = signRequest(signer, method, path, body ?? null, timestamp);
return fetch(`https://api.anchorage.com${path}`, {
method,
headers: {
"Content-Type": "application/json",
"Api-Access-Key": signer.apiKeyId,
"Authorization": authHeader,
"X-Timestamp": String(timestamp),
},
body: body ? JSON.stringify(body) : undefined,
});
}
Что такое approval workflow?
Транзакции в Anchorage проходят через configurable approval workflow. Это не просто "отправить и забыть" — в зависимости от настроек vault транзакция может требовать подтверждения от нескольких операторов, мобильного приложения Anchorage (out-of-band approval), или автоматически исполняться при соблюдении policy rules. Ниже пример создания и отслеживания транзакции:
interface CreateTransactionRequest {
vaultId: string;
assetType: string; // "ETHEREUM", "BITCOIN", "SOLANA" и т.д.
destinationAddress: string;
amount: string; // в базовых единицах (wei для ETH)
note?: string;
externalTxId?: string; // ваш внутренний ID для идемпотентности
}
async function createWithdrawal(
signer: AnchorageRequestSigner,
request: CreateTransactionRequest
): Promise<{ transactionId: string; status: string }> {
const response = await anchorageRequest(
signer, "POST", "/v2/transactions", request
);
if (!response.ok) {
const error = await response.json();
throw new Error(`Anchorage API error: ${error.message}`);
}
return response.json();
}
// Polling статуса — транзакция проходит через PENDING_APPROVAL → APPROVED → BROADCASTING → DONE
async function waitForTransaction(
signer: AnchorageRequestSigner,
transactionId: string,
timeoutMs = 300_000
): Promise<string> {
const start = Date.now();
while (Date.now() - start < timeoutMs) {
const response = await anchorageRequest(
signer, "GET", `/v2/transactions/${transactionId}`
);
const tx = await response.json();
if (tx.status === "DONE") return tx.txHash;
if (["FAILED", "REJECTED"].includes(tx.status)) {
throw new Error(`Transaction ${tx.status}: ${tx.rejectionReason}`);
}
await new Promise(resolve => setTimeout(resolve, 5000));
}
throw new Error("Transaction polling timeout");
}
Типичные ошибки при интеграции: необработанные таймауты при polling (используйте exponential backoff), несовпадение формата amounts (всегда строки в базовых единицах), отсутствие обработки webhook на депозиты (настройте callback URL).
Работа с балансами и адресами
Anchorage организует активы в vaults (логические хранилища) и wallets (адреса конкретных активов внутри vault). Для каждого клиента обычно создаётся отдельный vault:
// Получить баланс конкретного актива в vault
async function getVaultBalance(
signer: AnchorageRequestSigner,
vaultId: string,
assetType: string
): Promise<{ available: string; total: string }> {
const response = await anchorageRequest(
signer, "GET", `/v2/vaults/${vaultId}/assets/${assetType}`
);
const asset = await response.json();
return {
available: asset.availableBalance,
total: asset.totalBalance,
};
}
// Получить deposit адрес для пополнения
async function getDepositAddress(
signer: AnchorageRequestSigner,
vaultId: string,
assetType: string
): Promise<string> {
const response = await anchorageRequest(
signer, "GET", `/v2/vaults/${vaultId}/assets/${assetType}/addresses`
);
const data = await response.json();
return data.addresses[0].address;
}
Типичные сценарии интеграции
| Сценарий | Описание |
|---|---|
| Exchange / торговая платформа | Кастодия средств пользователей в Anchorage vault, вывод через Transaction API с approval, депозиты через webhook |
| Fund administrator | Отдельный vault на каждый фонд, staking через Anchorage Earn, отчётность через Transaction history API |
| Corporate treasury | Управление казначейством в нескольких активах, авто-ребалансировки, аудит trail для compliance |
Что входит в работу
- Аудит текущей инфраструктуры и требований к кастодии.
- Проектирование архитектуры: vaults, approval policies, активы.
- Настройка аутентификации (генерация ключей, ротация).
- Разработка интеграции: депозиты, вывод, стейкинг, отчётность.
- Тестирование в sandbox-среде.
- Развёртывание production-политик и разграничение доступа.
- Документация по API и onboarding вашей команды.
- Поддержка на этапе запуска и Q&A.
Ограничения и что нужно знать
Anchorage — не самообслуживание. Интеграция начинается с enterprise sales процесса, KYB, подписания договора. Sandbox доступен после initial approval. Pricing — по договорённости, как правило basis points от AUM + фиксированная плата за транзакции.
Transaction finality зависит от approval policy: если настроен manual approval, время от создания до исполнения может составлять часы. Это нужно учитывать в UX — пользователь должен понимать, что вывод не мгновенный.
Поддерживаемые активы постоянно расширяются, но экзотические L2 токены могут отсутствовать. Проверяйте актуальный список через эндпоинт /v2/assets перед проектированием.
Наша команда имеет многолетний опыт в блокчейн-разработке и более 20 успешных интеграций с кастодиальными решениями. Чтобы обсудить интеграцию, свяжитесь с нами — мы оценим вашу архитектуру и предложим оптимальный подход. Получите консультацию по интеграции уже сегодня, и мы подготовим roadmap за неделю.







