{
  "tool_id": "art-610-erc4626-vault-share-math",
  "kernel_id": "art-610-erc4626-vault-share-math",
  "display_name": "ERC-4626 Vault Share Math",
  "tool_version": "1.0.0",
  "mandate_type": "payment_policy",
  "purpose": "Recomputes ERC-4626 tokenized-vault share and asset conversions from caller-declared vault state (total_assets, total_supply, optional virtual-amounts offset), applying the rounding direction the standard mandates for each function and reporting which direction produced each result alongside what the opposite direction would have produced. ERC-4626 (Final, Created 2021-12-22, CC0-1.0) fixes those directions per function: convertToShares and convertToAssets round down towards 0, previewDeposit returns no more than the shares a deposit would mint and previewRedeem no more than the assets a redeem would withdraw (both round down), while previewMint returns no fewer than the assets a mint would deposit and previewWithdraw no fewer than the shares a withdraw would burn (both round up). Getting one direction backwards is how a vault leaks value, so each is checked separately. Also computes a deposit-then-redeem round-trip loss bound against the post-deposit state, a signed exchange-rate drift between two declared snapshots, and a declared fee application. All arithmetic is exact uint256 integer math with no floating point. This node never reads any chain: it cannot know whether the declared totals match a deployed vault, whether that vault applies these directions, or whether a rate change came from yield, loss, a donation, or an attack.",
  "control_description": "Recomputes ERC-4626 tokenized-vault share and asset conversions from caller-declared vault state (total_assets, total_supply, optional virtual-amounts offset), applying the rounding direction the standard mandates for each function and reporting which direction produced each result alongside what the opposite direction would have produced. ERC-4626 (Final, Created 2021-12-22, CC0-1.0) fixes those directions per function: convertToShares and convertToAssets round down towards 0, previewDeposit returns no more than the shares a deposit would mint and previewRedeem no more than the assets a redeem would withdraw (both round down), while previewMint returns no fewer than the assets a mint would deposit and previewWithdraw no fewer than the shares a withdraw would burn (both round up). Getting one direction backwards is how a vault leaks value, so each is checked separately. Also computes a deposit-then-redeem round-trip loss bound against the post-deposit state, a signed exchange-rate drift between two declared snapshots, and a declared fee application. All arithmetic is exact uint256 integer math with no floating point. This node never reads any chain: it cannot know whether the declared totals match a deployed vault, whether that vault applies these directions, or whether a rate change came from yield, loss, a donation, or an attack.",
  "declared_inputs": [],
  "declared_outputs": [],
  "kernel_digest": "sha256:b112b2136dc497e69f632232e47a9a70fa63d7dbc3d67c313cf89edb1fb97f33",
  "trust_label": "independently verified: zkVM execution proof (risc0/groth16-bn254)",
  "data_vintage": "2026-08-12",
  "last_validated": "2026-08-12",
  "conformance_fixtures_vendored": true,
  "compute_proof_ready": "ready",
  "wave": 99,
  "source_url": "https://ainumbers.co/chaingraph/art-610-erc4626-vault-share-math.html",
  "generated_at": "2026-08-15T11:12:17.704Z"
}
