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. |