> For the complete documentation index, see [llms.txt](https://docs.trover.tech/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.trover.tech/engineering/basket-vault.md).

# Robinhood Chain static basket vault specification

The v1 basket is a Robinhood-Chain-native static vault. It does not integrate Flap and has no active strategy logic. The vault is an ERC-20 share token, holds only operator-approved stock tokens, accepts proportional in-kind deposits, can use a separate USDG zap, and redeems pro rata in kind. A zap-out contract may convert redeemed assets to USDG but remains outside core accounting.

```solidity
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;

interface IRobinhoodStaticBasketVault {
    struct AssetAllocation { address asset; uint256 targetWeightBps; }
    event Deposited(address indexed caller, address indexed receiver, uint256 shares, uint256[] assetAmounts);
    event Redeemed(address indexed caller, address indexed receiver, address indexed owner, uint256 shares, uint256[] assetAmounts);
    event FeesClaimed(address indexed recipient, uint256 shares);
    event Paused(bool paused);

    function assets() external view returns (AssetAllocation[] memory);
    function previewDeposit(uint256[] calldata maxAssetAmounts) external view returns (uint256 shares, uint256[] memory requiredAmounts);
    function deposit(uint256[] calldata maxAssetAmounts, address receiver, uint256 minShares) external returns (uint256 shares);
    function previewRedeem(uint256 shares) external view returns (uint256[] memory assetAmounts);
    function redeem(uint256 shares, address receiver, address owner, uint256[] calldata minAssetAmounts) external returns (uint256[] memory assetAmounts);
    function claimableFeeShares(address recipient) external view returns (uint256);
    function claimFees(address recipient) external returns (uint256 shares);
}

interface IRobinhoodBasketZap {
    function depositUSDG(address vault, uint256 amountIn, address receiver, uint256 minShares, bytes[] calldata swapData) external returns (uint256 shares);
    function redeemToUSDG(address vault, uint256 shares, address receiver, uint256 minAmountOut, bytes[] calldata swapData) external returns (uint256 amountOut);
}
```

Core requirements:

* Immutable asset list and target weights for each static product.
* Pull-based deposits using `safeTransferFrom` and checks-effects-interactions ordering.
* Pro-rata redemption without external swaps in the core vault.
* ERC-4626-like preview semantics adapted to multiple assets.
* Claimable fee shares rather than push loops.
* Reentrancy protection, pause capability, bounded asset count, and no arbitrary delegate calls.
* Price feeds are for display and zap bounds; in-kind redemption does not depend on an oracle.
* Managed rebalancing, issuer redemption, KYC, and discretionary strategy execution are outside v1.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.trover.tech/engineering/basket-vault.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
