Fund Detail: Investment Management
Operations By Screen Group
The groups below use project-owner operating labels and list every operation required to move an entry forward.
Subscriptions
Incoming Request
| Button name | Underlying operation | Explanation |
|---|---|---|
| Accept | POST /auth/funds/{slug}/investments/{investment_id}/accept | Records the manager acceptance time and optional note. Accepting triggers the fund movement flow below: an approve transaction (1/2) followed by a send-to-vault transaction (2/2), which is what actually moves the funds from the holding wallet to the vault. |
Movement of investment Funds transaction after user hits "Accept" from above (onchain txs not UI)
| Button name | Underlying operation | Explanation |
|---|---|---|
| Approve spending (1/2) | USDC.approve(Vault, assets) | The Self-Custody Wallet owner grants the Treasury Wallet an exact allowance. No money moves. |
| Send to Vault (2/2) | Vault.requestDeposit(assets, investor, fundWallet) | The Self-Custody Wallet owner signs the request. The Treasury Wallet pulls the exact USDC amount with transferFrom and records the deposit as Pending. |
Pending Share Issuance (these transactions are in a single button not 2)
| Button name | Underlying operation | Explanation |
|---|---|---|
| Issue Shares | POST /auth/funds/{slug}/investments/{investment_id}/fulfill with pricePerShare | Opens the fulfillment popup. The fund manager sets the price per share (The price per share entered here should reflect the NAV effective for this specific investor's transaction, which may differ from the fund's most recently entered NAV and the following NAV this is not setting the Fund NAV but rather just that investments NAV), reviews the calculated share quantity, and submits the canonical fulfillment command. The backend stores price_per_share and amount of USDC or Fiat invested, calculates the exact share quantity, and prepares the fund-owned fulfillment operation. |
| Sign Vault fulfillment (onchain transaction button not UI unless we build in a native wallet for the Fund manager to use to sign txs) | Vault.fulfillDeposit(assets, shares, investor) | The Self-Custody Wallet owner signs the exact asset and share quantities prepared from the fulfillment price onchain. The deposit moves from Pending to Claimable. |
Claimable from Vault (Hidden from the manager UI but is visible to the investor)
| Button name | Underlying operation | Explanation |
|---|---|---|
| No manager button: Investor claims shares | Vault.deposit(assets, investor, investor) | The investor signs the claim. The Treasury Wallet issues the fulfilled shares to the investor; the fund manager only monitors this group. The investor simply hits claim but does not sign anything onchain since the blockchain side is abstracted away for them. |
Redemptions
Awaiting Vault Fulfillment
This is the current replacement for the screenshot's Awaiting Token Burn group.
| Button name | Underlying operation | Explanation |
|---|---|---|
| No manager button: Investor requests redemption | Vault.requestRedeem(shares, investor, investor) | Before the entry reaches this group, the investor signs the request. |
| Burn Tokens | After the investor hits "Request Redemption" the fund manaher sees a pending redemption order (tokens are not yet burned). The Treasury Wallet burns the shares and records a Pending redemption.When the fund manager hits "Burn Tokens" the tokens are burned and the redemption is moved to the next group (Pending Payout/Issue Payout) . | |
| Issue Payout | POST /auth/funds/{slug}/redemptions/{redemption_id}/fulfill | After the finalized NAV (The share price used here is for this specific investor's transaction, which may differ from the fund's most recently entered NAV) and liquidity are ready, the fund manager submits the canonical fulfillment command. The backend prepares the fund-owned Vault.fulfillRedeem operation. The Share price, Number of shares burned, and exact amount of USDC or Fiat to be paid out is calculated and stored in the database. |
| No current button: Sign redemption fulfillment | Vault.fulfillRedeem(shares, assets, investor) | The Self-Custody Wallet owner must sign the prepared operation. The redemption moves from Pending to Claimable; shares are not burned again. |
The current redemption group does not expose the follow-up owner-signing control after the backend prepares the operation. That missing UI handoff is a product integration gap.
Claimable from Vault
This is the current replacement for the screenshot's Pending Payout group. It is hidden from the manager UI but is visible to the investor.
| Button name | Underlying operation | Explanation |
|---|---|---|
| No manager button: Investor claims proceeds | Vault.redeem(shares, investor, investor) | The investor clicks the claim button and auto claim what is pending for them. The Treasury Wallet transfers the claimable USDC to their account (wallet). This should not require them to sign an onchain transaction since the blockchain side is abstracted away for them. |
Reporting
| Button name | Underlying operation | Explanation |
|---|---|---|
| Export Fund Investors | GET /auth/investors/export with the current fund filter | Downloads the fund-filtered investor CSV. This does not change wallet, subscription, or redemption state. |
Actors And Permissions
Authentication on the Vue route is not the authorization boundary. The fund-manager API enforces the permissions below for the current site and fund.
| Actor | Read the page | Accept investment | Sign Self-Custody Wallet operation | Fulfill deposit or redemption |
|---|---|---|---|---|
| Owner | funds.read | subscriptions.write | funds.write | funds.write |
| Admin | funds.read | subscriptions.write | funds.write | funds.write |
| Ops | funds.read | subscriptions.write | funds.write | funds.write |
| Auditor | funds.read | Not permitted | Not permitted | Not permitted |
| Investor | No manager access | Not applicable | Signs only investor-owned claim/request operations | Claims shares or proceeds in the investor fund page |
The Self-Custody Wallet owner receives the emailed code used for fund-owned signatures. A manager's page access does not make that manager the wallet owner.