Skip to content

KingsVault

The V2 shared-vault variants are synchronous KingsVaultV2 for Ethereum Network Lending and Aave GHO Saving, and KingsVaultV2Async for HLP. They are separate from per-user GHO Staking.

Before integration or administration, verify the listed signatures and permissions against the deployed implementation and its verified source. See Documentation scope and verification.

KingsVaultV2

Source: src/vaults/KingsVaultV2.sol

Constructor

constructor(
    string memory name,
    string memory symbol,
    address asset_,
    address owner_,
    address controller_
)

The constructor validates non-zero addresses, grants the owner admin and guardian roles, stores the immutable Controller address, calculates MIN_WITHDRAW, and pauses the vault by default.

Public And External Functions

Function Access Description
totalAssets() public view Returns idle assets plus Controller-reported strategy assets.
maxDeposit(address receiver) public view Returns uint256.max only if vault is active and receiver is Investor.
maxMint(address receiver) public view Same gating as maxDeposit.
maxWithdraw(address owner) public view Returns previewRedeem(maxRedeem(owner)) if active and owner is Investor.
maxRedeem(address owner) public view Returns share balance if active and owner is Investor.
shutdownTime() public view Returns shutdown timestamp, or 0 if active.
idleAssets() public view Returns asset balance held directly by vault.
pushFundOnlyForController(address strategy, uint256 amount) Controller only, not shutdown Transfers idle assets to strategy. Emits FundPushed.
mintFeeSharesOnlyForController(address recipient, uint256 shares) Controller only, not shutdown Mints performance fee shares when instructed by the Controller. The current performance fee rate for Ethereum Network Lending, AAVE GHO Saving, and Hyperliquidity Provider (HLP)—the V2 portals documented here—is 0%, so no fee shares are minted for those portals. Emits FeeSharesMintedForRecipient.
harvestOnlyForController(address token, address recipient) Controller only Sweeps allowed tokens to recipient. Emits VaultHarvested.
pause() Guardian Pauses deposits and withdrawals.
unpause() Guardian Unpauses deposits and withdrawals.
shutdown() Guardian, not shutdown Permanently shuts down the vault and invokes strategy exit procedures. Does not guarantee recovery of remote or unavailable assets. Emits VaultShutdown.
emergencyRedeem(address receiver) shutdown only Burns all caller shares and transfers pro-rata idle assets. Emits EmergencyRedeemed.

Overridden/Internal ERC-4626 Hooks

Function Access Description
_onlyController() private view Reverts unless caller is immutable CONTROLLER.
_whenNotShutdown() private view Reverts if _shutdownTime != 0.
_whenShutdown() private view Reverts if _shutdownTime == 0.
_convertToShares(uint256 assets, Math.Rounding rounding) internal view Applies dual pricing against Controller marked values.
_convertToAssets(uint256 shares, Math.Rounding rounding) internal view Applies dual pricing against Controller marked values.
_deposit(address caller, address receiver, uint256 assets, uint256 shares) internal Requires Investor role, not paused, not shutdown.
_withdraw(address caller, address receiver, address owner, uint256 assets, uint256) internal Requires Investor role, not paused, not shutdown, non-reentrant; uses liquidity waterfall.
_decimalsOffset() internal view Returns 18 - asset.decimals().
_emergencyRedeem(address receiver) internal Burns caller shares and pays pro-rata idle assets.

Inherited ERC-4626 user functions such as deposit, mint, withdraw, redeem, previewDeposit, previewMint, previewWithdraw, and previewRedeem use the above overrides.


KingsVaultV2Async

Source: src/vaults/KingsVaultV2Async.sol

Additional State

State Meaning
_execId Current execution round. Requests with lower execId are claimable.
_execSnapshots Per execution round assets/shares snapshot.
_pendingRedeemShares Shares escrowed but not executed.
_claimableShares Escrowed shares already executed and ready to burn on claim.
_claimableAssets Assets reserved for executed claims.
_requests[owner][receiver] Per owner/receiver redemption request.

Public And External Functions

Function Access Description
execId() public view Returns current execution round.
idleAssets() public view override Returns vault asset balance minus reserved claimable assets.
pendingRedeemShares() public view Returns total pending escrowed shares.
pendingRedeemAssets() public view Returns preview asset value of pending shares.
claimableShares() public view Returns executed shares ready for claim.
claimableAssets() public view Returns assets reserved for claims.
previewRedeemRequest(address owner, address receiver) public view Returns readiness and shares for one request.
totalSupply() public view override Returns super.totalSupply() - _claimableShares.
executeRedeem() Keeper Converts pending requests into claimable snapshots if idle assets are sufficient. Emits RedeemExecuted.
claim(address receiver) Investor, not paused, not shutdown Claims executed request. Emits Claimed.
emergencyRedeem(address receiver) shutdown only Claims executed request or returns pending escrowed shares, then base emergency redeem.

Internal Functions

Function Description
_withdraw(...) Escrows shares instead of sending assets immediately; emits RedeemRequested.
_claim(address owner, address receiver) Calculates claim assets from snapshot, burns escrowed shares, transfers assets.