Bankrbot vault deposits
userUSDG deposits into HISS vaults via Bankrbot: the three modes, the deposit pack, depositWithAcks ack hashes, and the onchain completion rule.
Overview
The Bankrbot vault deposit rail (Rail A, rail_a_vault_deposit) prepares and verifies on-chain USDG deposits into registered HISS vaults on Robinhood Chain (4663). HISS builds the deposit intent — exact vault address, calldata, amounts, and required acknowledgment hashes — and verifies the on-chain receipt. The depositor’s own wallet, or a Bankr flow the depositor authorized, sends the transaction. hissExecutesDeposit is hard-typed false in every pack. The only registered vault today is HISS Vault (hVAULT); unknown vaults fail closed with VAULT_UNKNOWN.
The three modes
- Mode A — command pack. The API compiles a
BankrbotVaultDepositPackwith everything an agent or wallet needs, plus a copy-pasteable@bankrbotsocial command. Bankrbot’s ability to execute arbitrary contract deposits from a social command is unverified — always present Mode C alongside it. - Mode B — operator wallet (gated). A server-side submission path that is valid only when the HISS operator’s Bankr wallet is itself the depositor. Triple gated:
BANKRBOT_DEPOSIT_EXECUTION_ENABLED,OWNER_APPROVED_BANKR_WALLET_DEPOSIT, and a server-onlyBANKR_API_KEY, plus an exactconfirmPlanHash. Never a user-deposit path — refusals are honest (MODE_B_DISABLED,OWNER_APPROVAL_REQUIRED,BANKR_KEY_MISSING,RECEIVER_NOT_BANKR_WALLET). - Mode C — app link (guaranteed). The deposit widget at
/app/vaults/hiss-vaultwith the amount prefilled. This path always works and is the recommended fallback whenever Mode A execution is uncertain.
Endpoints
| Method | Path | Mode | Description |
|---|---|---|---|
| POST | /api/bankrbot/vault-deposit/prepare-command | live | { vaultId?, amountUsdg, receiver, expiresInSeconds?, nowIso? } → { pack, bankrbotSocialCommand, depositLinkUrl, modes, hissExecutesDeposit: false }. |
| POST | /api/bankrbot/vault-deposit/submit-intent | live | Mode B (gated, operator-wallet-only): { confirmPlanHash, amountUsdg, receiver, … } → { job, verification, complete }. |
| GET | /api/bankrbot/vault-deposit/status/[jobId] | live | Job id (bvd_…) or raw deposit tx hash → { verification, complete }. Re-verifies on chain on every read. |
| POST | /api/vaults/[slug]/deposit-bankrbot-intent | live | Mode A pinned to one registered vault. |
| GET | /api/vaults/[slug]/deposit-link | live | Mode C: vault identity, required ack texts + keccak256 hashes, deposit URL, and (with ?amount=&receiver=) a full pack. |
Shared behavior: 256 KB body cap, 30 requests / 5 minutes per client per tool, credential-looking fields rejected and never echoed, and every response carries notInvestmentAdvice: true and liveOrderSent: false.
The pack
{
"packVersion": "bankrbot-vault-deposit-1.0.0",
"mode": "A",
"vaultSlug": "hiss-vault",
"vaultAddress": "0x6d962604df1c6c5ef4b59d88863600fe71bb63e6",
"chain": "robinhood", "chainId": 4663,
"asset": "USDG", "assetDecimals": 6,
"amount": "250", "amountUnits": "250000000", "maxAmount": "250",
"spender": "0x6d96…63e6", // always the vault itself
"approvalRequired": true,
"approveCalldata": "0x…", // approve(vault, amountUnits)
"depositCalldata": "0x…", // depositWithAcks(units, receiver, riskAck, jurisdictionAck)
"receiver": "0xYOUR_WALLET",
"receiverMustBeDepositor": true,
"ackHashes": { "risk": "0x1104…84cd", "jurisdiction": "0x0150…ff31" },
"generatedAt": "…", "expiresAt": "…", // default TTL 900 s
"planHash": "0x…", // the Mode B confirmation token
"hissExecutesDeposit": false,
"bankrbotSocialCommand": "@bankrbot deposit 250 USDG into the HISS Vault at 0x6d96… …",
"depositLinkUrl": "https://www.hiss.finance/app/vaults/hiss-vault?amount=250"
}- Amounts are decimal strings, ≤ 6 dp, bounded at 10,000 USDG per pack.
- The
receivermust be the depositor — never the vault, the USDG token, or the zero address. - Packs expire (
expiresAt); regenerate stale packs instead of reusing them.
Ack hashes — depositWithAcks only
Deposits call depositWithAcks(assets, receiver, riskAckHash, jurisdictionAckHash) carrying keccak256 of the two canonical acknowledgment texts (hiss-vault-depositor-risk-ack-v1 and hiss-vault-source-disclosure-ack-v1). A plain ERC-4626 deposit() reverts. The pack builder recomputes both hashes from the canonical texts and refuses to build if they do not match the vault’s pinned on-chain values — a mismatched pack would only produce a reverting transaction.
Completion truth
curl -s https://www.hiss.finance/api/bankrbot/vault-deposit/status/0xDEPOSIT_TX_HASH
// → { kind: "tx-reconcile", verification: { found, txStatus, confirmedVaultDeposit, … },
// complete: verification.confirmedVaultDeposit === true }curl -s https://www.hiss.finance/api/bankrbot/vault-deposit/prepare-command \
-H "content-type: application/json" \
-d '{"vaultId": "hiss-vault", "amountUsdg": "250", "receiver": "0xYOUR_WALLET"}'Agent surfaces
MCP tools: hiss_prepare_bankrbot_vault_deposit, hiss_generate_bankrbot_deposit_command, hiss_reconcile_bankrbot_deposit_receipt. Skill pack: hiss-bankrbot-vault-deposit. Workflow index: GET /api/agents/schema. Wizard: /app/tools/bankrbot-vault-deposit. Depositor risk disclosures: vault depositor risks — depositors share profits and losses, and there is no guaranteed yield of any kind.