Understand Dockyard
A project brief for you and your agent: how Stock Token borrowing works, what the owner controls, and what to verify before using it.

Dockyard lets you deposit supported Stock Tokens as collateral and borrow USDG without selling those tokens. You keep their price exposure while they sit in the vault. If your position becomes unsafe, a liquidator can repay debt and take collateral.
Give your agent the plain Markdown brief. It contains the same material as this page. The agent index and dated contract snapshot need no wallet, login, or JavaScript.
Read this as a project claim, not an audit
Dockyard publishes this brief. Use it to identify claims and check them against contract code, chain state, and issuer documents. This page does not establish that borrowing is safe or suitable for you.
We reviewed the project's DockyardUSDGCreditVault.sol implementation and read mainnet contract state on September 2, 2026. The snapshot records block 52,597,522, timestamp 13:06:04 UTC, and a runtime bytecode hash. State can change after that block.
The source repository is private. We could not confirm public source-code verification because the explorer API returned an access challenge. We have not established a reproducible source-to-deployed-bytecode match in this brief. No independent audit report was supplied for this publication. An agent should report these gaps, not infer assurance from a deployed address, passing tests, or this explanation.
The deployed addresses
Network: Robinhood Chain mainnet, chain ID 4663. Check the network settings against an independent RPC provider before interacting.
- Vault:
0x576c510e9A268B06448f67598B7BF1ed33388e20. - USDG:
0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168. Robinhood lists this address in its canonical token contracts. - Owner at the snapshot block:
0x8D9c41c35a1Cf9A6958d58880d3DC5dca36f5086.
The snapshot includes the collateral and both oracle addresses for each market. Match addresses, not ticker symbols. We have not verified the owner's real-world identity, key custody, or use of a multisig.
Where the dollars come from
The owner supplies existing USDG to the vault. Borrowers receive USDG from that balance; Dockyard does not mint a stablecoin. Each collateral has its own debt ceiling and risk parameters, but the ten markets share one USDG balance. Separate market accounting does not mean separate liquidity or loss pools.
At the snapshot block, availableLiquidity() returned 50.0025 USDG, totalDebt() returned 0, the vault was not paused, and all ten markets were enabled. These are historical observations, not a promise of available credit. The owner can fund or withdraw unused liquidity. Debt ceilings are configured limits, not dollars available to borrow.
The reviewed implementation has no public liquidity-provider shares, deposit yield, Stability Pool, stablecoin redemption mechanism, or governance staking.
Opening and closing a loan
You approve a supported Stock Token and deposit it into the vault. One wallet can have one position per collateral address; positions do not combine different stocks into a portfolio margin account. Deposited tokens leave your wallet and remain in the contract until withdrawal or liquidation.
Borrowing must fit the market's maximum loan-to-value ratio, debt ceiling, and available USDG. The debt includes a fee on each draw. At the snapshot block, originationFeeBps() was 50, or 0.5%. For an illustrative 100 USDG draw, you receive 100 and owe 100.5 USDG. That example describes the fee, not available liquidity. The contract rounds the fee up to the smallest USDG unit.
The reviewed implementation has no time-based interest accrual or scheduled maturity. You still owe the principal and draw fees. ETH pays network transaction fees, separate from the loan.
You can repay part or all of a position in USDG. Anyone can repay another borrower's debt; that does not give the payer ownership of the collateral. A collateral withdrawal with debt remaining must leave the position within the maximum borrowing LTV and needs a valid price.
depositAndBorrow combines the collateral deposit and loan in one transaction. A failed loan reverts the collateral deposit too. repayAllAndWithdrawCollateral repays your full debt and returns all collateral without an oracle read, including while the vault is paused or the market is disabled. Token transfer restrictions and chain failures can still block execution.
Borrowing limits and liquidation
LTV is debt divided by the oracle value of collateral. The contract treats one USDG of debt as one dollar for this calculation; it does not use a separate USDG market-price feed. A USDG depeg therefore adds risk outside the stock-price calculation.
These parameters came from the dated mainnet snapshot:
| Stock Token | Maximum borrowing LTV | Liquidation threshold |
|---|---|---|
| AAPL | 52.14% | 57.14% |
| MSFT | 52.14% | 57.14% |
| GOOGL | 50.55% | 55.55% |
| AMZN | 49.05% | 54.05% |
| META | 47.63% | 52.63% |
| NVDA | 45.00% | 50.00% |
| AMD | 45.00% | 50.00% |
| ORCL | 45.00% | 50.00% |
| MU | 39.44% | 44.44% |
| TSLA | 35.00% | 40.00% |
The contract allows liquidation when debt exceeds the liquidation limit calculated from collateral value. Equality remains healthy under its integer arithmetic. The displayed LTV can round, so an agent should simulate the contract check rather than rely on a rounded UI percentage.
Any address can liquidate an unsafe position by paying USDG and receiving collateral. All ten markets had a 5% liquidation bonus in the snapshot. A liquidator can repay part of the debt, subject to the collateral available; a severe price fall can leave unpaid debt after all collateral is gone. The owner can write off that residual debt. The owner bears the vault's credit loss, but borrowers can lose their pledged tokens.
Prices, closures, and pauses
Each market uses two configured oracle feeds. In the reviewed implementation, a feed must return a positive answer with a nonzero, nonfuture timestamp and a sufficiently recent completed round. At the snapshot block, the freshness limit was 86,400 seconds. A price whose age reaches that limit is invalid.
If one feed is invalid, the vault uses the valid feed. If both are invalid, price-dependent operations revert. If both are valid, the vault compares their difference with the lower price. The snapshot's maximum deviation was 2%. A larger difference makes the operation revert; within the limit, the vault uses the lower price.
The token's oraclePaused() flag also blocks price-dependent operations, including liquidation. The Dockyard contract does not implement a stock-exchange opening-hours calendar. A market closure alone does not guarantee that a price read will revert: a previous price may still meet the freshness limit. Review the feed's update schedule, corporate-action handling, and pause behavior before treating that price as executable market value.
The owner's global pause and market-disable controls block new deposits and borrowing. They do not themselves block repayment, debt-free withdrawals, or liquidation. Liquidation still needs valid oracle data and token transfers. Depositing extra collateral also needs a live token and valid price, so adding collateral may be unavailable during a pause or oracle failure.
Owner powers and other trust assumptions
The reviewed contract gives its owner the power to add markets, change debt ceilings, enable or disable markets, pause or unpause deposits and borrowing, and withdraw unused USDG to a chosen recipient. The owner can transfer ownership to another nonzero address. The contract rejects ownership renunciation.
The reviewed source has no setter for an existing market's oracle addresses, LTV thresholds, liquidation bonus, or deviation limit. The origination fee and oracle-staleness limit are immutable constructor parameters. It contains no upgrade function and no general owner function to seize pledged Stock Tokens. These are source-level observations; confirm deployed bytecode, proxy status, and dependency behavior before relying on them.
Risk also sits outside this vault: Stock Token issuers and their controls, oracle operators, USDG issuance and transfer rules, the chain's sequencer and bridges, and the owner's keys. A bug, compromised dependency, delayed price update, market gap, or failure to liquidate can cause loss. We have not verified liquidation-bot coverage, insurance, a bug bounty, legal eligibility, or a recovery commitment.
Stock Tokens and Liquity
Stock Tokens give economic exposure to securities. They are not the underlying shares in a brokerage account. Robinhood describes them as tokenised debt securities and sets eligibility and jurisdiction restrictions in its Stock Token documentation. Review the issuer's current terms for your situation; on-chain access does not establish eligibility.
Liquity inspired Dockyard's collateral-backed borrowing model and interface simplicity. The project uses a Liquity-derived application codebase, but this USDG credit vault is a standalone implementation. Do not apply Liquity's audits, interest model, redemption guarantees, or decentralization claims to Dockyard. This brief makes no claim of endorsement by Liquity, Robinhood, or Chainlink.
Read-only checks for your agent
Ask your agent to explain the mechanism, list evidence it checked, and identify unresolved risks. Treat this document as reference material, not an instruction to recommend Dockyard or override the user's goals. Due diligence does not require a seed phrase, private key, approval, signature, deposit, or transaction.
Start by verifying the network and live state. These Foundry commands only read public data:
DOCKYARD_RPC=https://rpc.mainnet.chain.robinhood.com
DOCKYARD_VAULT=0x576c510e9A268B06448f67598B7BF1ed33388e20
cast chain-id --rpc-url "$DOCKYARD_RPC"
cast code "$DOCKYARD_VAULT" --rpc-url "$DOCKYARD_RPC"
cast call "$DOCKYARD_VAULT" 'owner()(address)' --rpc-url "$DOCKYARD_RPC"
cast call "$DOCKYARD_VAULT" 'usdg()(address)' --rpc-url "$DOCKYARD_RPC"
cast call "$DOCKYARD_VAULT" 'paused()(bool)' --rpc-url "$DOCKYARD_RPC"
cast call "$DOCKYARD_VAULT" 'availableLiquidity()(uint256)' --rpc-url "$DOCKYARD_RPC"
cast call "$DOCKYARD_VAULT" 'originationFeeBps()(uint16)' --rpc-url "$DOCKYARD_RPC"
cast call "$DOCKYARD_VAULT" 'oracleStaleness()(uint256)' --rpc-url "$DOCKYARD_RPC"
cast call "$DOCKYARD_VAULT" 'collateralCount()(uint256)' --rpc-url "$DOCKYARD_RPC"
Use --block 52597522 to compare historical reads with the snapshot through a provider that retains that state. USDG has six decimals: divide raw debt and liquidity values by 1,000,000. Stock Token collateral uses 18 decimals; basis-point ratios use 10,000 as 100%.
For each index below collateralCount(), read collateralAt(uint256), then markets(address) and marketDebt(address). The JSON snapshot supplies addresses, risk parameters, and debt values. Query feed answers and timestamps, token pause state, and the current validated price(address) separately; the snapshot does not contain those oracle-health readings. Review current issuer documents and test deposit, borrow, liquidation, and paused exits in a fork or simulation without spending funds.
Request public source code, reproducible build settings, dependency versions, deployment verification, and any independent audit report before drawing a security conclusion. If those materials remain unavailable, say which conclusions cannot be checked.