Skip to content

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 nameUnderlying operationExplanation
AcceptPOST /auth/funds/{slug}/investments/{investment_id}/acceptRecords 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 nameUnderlying operationExplanation
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 nameUnderlying operationExplanation
Issue SharesPOST /auth/funds/{slug}/investments/{investment_id}/fulfill with pricePerShareOpens 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 nameUnderlying operationExplanation
No manager button: Investor claims sharesVault.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 nameUnderlying operationExplanation
No manager button: Investor requests redemptionVault.requestRedeem(shares, investor, investor)Before the entry reaches this group, the investor signs the request.
Burn TokensAfter 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 PayoutPOST /auth/funds/{slug}/redemptions/{redemption_id}/fulfillAfter 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 fulfillmentVault.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 nameUnderlying operationExplanation
No manager button: Investor claims proceedsVault.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 nameUnderlying operationExplanation
Export Fund InvestorsGET /auth/investors/export with the current fund filterDownloads 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.

ActorRead the pageAccept investmentSign Self-Custody Wallet operationFulfill deposit or redemption
Ownerfunds.readsubscriptions.writefunds.writefunds.write
Adminfunds.readsubscriptions.writefunds.writefunds.write
Opsfunds.readsubscriptions.writefunds.writefunds.write
Auditorfunds.readNot permittedNot permittedNot permitted
InvestorNo manager accessNot applicableSigns only investor-owned claim/request operationsClaims 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.

Tahoe project-owner operations documentation