UpshiftDocs
Curators

Smart Contract Interface

Every vault contract function that touches curator workflows, grouped by job, with the role that calls it.

Every function on the vault contract that touches curator workflows, grouped by job, with the role that calls it.

Admin functions are gated to the owner multisig or operator; attempting them from a curator-managed address reverts.

Capital Movement (Vault ↔ Subaccount)

FunctionCallerPurpose and notes
depositToSubaccount(uint256 amount, address subAccountAddr)OperatorTransfers vault assets to a whitelisted subaccount. This is the only road capital takes toward the curator's strategy.
withdrawFromSubaccount(uint256 amount, address subAccountAddr)OperatorPulls assets from the subaccount back into the vault — used to refill the buffer and fund epoch settlements.
FunctionCallerPurpose and notes
updateTotalAssets(uint256 externalAssetsAmount)OperatorSyncs the vault's internal accounting with the externally calculated value of deployed positions. This is what moves the share price. Bounded by the max-percentage-change guardrail (see Risk Framework & Emergency).
updateMaxChangePercent(uint256 newValue)OwnerSets the ceiling/floor on share-price movement per update cycle (NAV volatility protection).
totalAssets(), totalSupply()Anyone (view)Current accounting state; share price = totalAssets / totalSupply.

Redemption Processing

FunctionCallerPurpose and notes
processAllClaimsByDate(uint256 year, uint256 month, uint256 day, uint256 maxLimit)AnyoneBatch-settles all scheduled redemptions for a given epoch date.
updateTimelockDuration(uint256 newDuration)OwnerChanges the lag between requestRedeem and claim. Subject to the 24h timelock on withdrawal-period changes.
getWithdrawalEpoch()Anyone (view)Current epoch boundaries — poll this to plan unwinds.

Fee Management

FunctionCallerPurpose and notes
chargeManagementFee()OperatorTriggers fee accrual against TVL. Emits ManagementFeeCharged(uint256).
collectFees()OperatorSweeps accrued fees to the fee collector address.
updateManagementFee(uint256 newManagementFeePercent)OwnerChanges the management fee. Fee changes sit behind a 24h timelock.
updateWithdrawalFee(uint256 newWithdrawalFee)OwnerStandard withdrawal fee percentage.
updateInstantRedemptionFee(uint256 newFee)OwnerFee charged on the instantRedeem path.
updateFeeCollector(address newFeeCollectorAddr)OwnerWhere collected fees land.

Limits, Pausing, and Emergency

FunctionCallerPurpose and notes
updateIssuanceLimits(uint256 maxDeposit, uint256 maxWithdrawal, uint256 maxSupply)OwnerCaps on deposits, withdrawals, and total share supply — the lever for capacity management.
pauseDepositsAndWithdrawals(bool bPauseDeposits, bool bPauseWithdrawals)OwnerPause/resume either side independently. Emits DepositWithdrawalStatusChanged.
emergencyWithdraw(IERC20 token, address destinationAddr)OwnerEmergency sweep of tokens to a safe destination.

User-facing Functions

Curators rarely call these, but depositor behavior drives liquidity planning, so the flows must be understood:

FunctionCallerPurpose and notes
deposit(uint256 assets, address receiver)User/custodianDeposit underlying assets; returns shares minted.
requestRedeem(uint256 shares, address receiverAddr, address holderAddr)User/custodianStarts the epoch redemption flow; returns assets owed and the claimable epoch.
claim(uint256 year, uint256 month, uint256 day, address receiverAddr)Anyone (for the registered receiver)Completes a matured redemption; returns assetsClaimed and sharesBurned.
instantRedeem(uint256 shares, address receiverAddr, address holderAddr)User/custodianImmediate exit, fee applies, served from the buffer.
previewDeposit, previewRedeem, previewInstantRedemptionAnyone (view)Simulation surfaces for frontends and reconciliation.