For the complete documentation index, see llms.txt. This page is also available as Markdown.

Subscriptions

The request-based deposit flow — from an investor's request to operator-settled, newly minted shares.

A subscription is a user's request to enter the fund by depositing an approved asset (for example USDC) in exchange for newly minted shares priced against the current NAV.

Subscription flow: an investor requests a subscription, assets are escrowed, the operator settles at a price, and shares are minted while assets move to the Portfolio Safe.
The subscription lifecycle.

Lifecycle

1

Request. After approving the asset, the investor calls requestSubscription(assetsIn, minSharesOut, subscriptionAsset, receiver). The deposited assets are pulled into escrow inside the kpkShares contract, a PENDING request is recorded, and a SubscriptionRequest event is emitted with the request id. minSharesOut is slippage protection — the actual shares are computed at settlement time. receiver may differ from the investor.

2

Settlement. An operator calls processRequests(approveIds, rejectIds, asset, sharesPrice). For each approved subscription it computes shares = assetsToShares(assetAmount, sharesPrice, asset), checks shares ≥ minSharesOut, mints the shares to the receiver, and transfers the escrowed assets to the Portfolio Safe (portfolio). The request becomes PROCESSED and SubscriptionApproval is emitted.

3

Or rejection / expiry. An operator can reject a request (SubscriptionDenial), returning the escrowed assets to the investor. Any request older than its 7-day lifetime is skipped during processing and auto-rejected (SubscriptionRequestExpired), also returning the assets.

4

Or cancellation. While still PENDING, the investor or receiver can cancel after the request's TTL has elapsed (cancelSubscription(id)), recovering the escrowed assets. See Cancel a request.

A request moves through exactly one terminal state: PROCESSED, REJECTED, or CANCELLED.

The request event

cancelableFrom is when the investor may cancel; expiryAt is when the request can no longer be approved. See Subscription request for integration code, and Fees for the management/performance fees charged during settlement.

Last updated