Skip to content

AUM Fee Parameterization: Global Governance Params and Per-Vault Bips Management #180

@coderabbitai

Description

@coderabbitai

Overview

This issue tracks follow-up items from PR #178 (AUM fee schedule taken from principal). The goal is to migrate AUM fee configurations into a formal Params structure and introduce granular control over fee rates (bips) at both the global and per-vault levels.

  1. Global Module Parameters (Singleton): Introduce a Params structure governed by on-chain governance to define the global Tech Fee Address and the Default AUM Fee Bips.
    • The tech_fee_address is the single authorized address for the entire module that receives fees and can manage per-vault bips.
  2. Per-Vault Bips Configurability: Only the AUM fee rate (bips) is configurable per vault.
    • New vaults inherit the default_aum_fee_bips from the global module parameters at the time of creation.
    • The global tech_fee_address has the unique authority to update the bips for any specific vault.
  3. Finalize Hardcoded ProvLabs Fee Address: Replace the current placeholder logic and/or the chain-ID-switching logic in GetProvLabsFeeAddress with the confirmed mainnet (pio-mainnet-1) and testnet (pio-testnet-1) ProvLabs fee collection addresses as the genesis defaults.
  4. Authorization Model:
    • Governance: Updates global Params (the tech fee address itself and the default bips for new vaults).
    • Tech Fee Address: Updates the specific bips amount for an individual vault.

Acceptance Criteria

1. State & Schema Updates

  • Global Params: Add a Params message to proto/provlabs/vault/v1/genesis.proto:
    • tech_fee_address: The singleton address where all AUM fees are collected and which holds the authority to update per-vault bips.
    • default_aum_fee_bips: The default fee rate (in basis points) applied to new vaults upon creation.
  • Vault State: Update VaultAccount in proto/provlabs/vault/v1/vault.proto:
    • Add aum_fee_bips (uint32) to store the fee rate for this specific vault.
  • Genesis: Update InitGenesis and ExportGenesis to handle the new Params structure and ensure VaultAccount.aum_fee_bips is persisted.

2. Message Implementation

  • MsgUpdateParams:
    • Implemented to update the module-wide Params (the singleton tech_fee_address and default_aum_fee_bips).
    • Restriction: Must be gated by the authority (governance module account).
  • MsgUpdateVaultAUMFeeBips:
    • Implemented to allow updating the aum_fee_bips for a specific vault.
    • Restriction: This message MUST be authorized ONLY for the current global tech_fee_address. The vault admin does NOT have permission to change this.

3. Logic & Integration

  • Vault Creation: CreateVault must fetch the default_aum_fee_bips from the module params and initialize the new vault with that value.
  • Fee Calculation: The AUM fee collection logic must use the aum_fee_bips stored on the VaultAccount and send collected fees to the global tech_fee_address.
  • Migration: Provide a migration to:
    • Move the existing standalone AUMFeeAddressKeyPrefix value into Params.tech_fee_address.
    • Initialize all existing vaults' aum_fee_bips field.

4. Finalized Defaults

  • Hardcoded Addresses: Replace the current placeholder byte array AUMFeeAddress and/or the chain-ID-switching logic in GetProvLabsFeeAddress with the confirmed mainnet (pio-mainnet-1) and testnet (pio-testnet-1) ProvLabs fee collection addresses.
  • Retirement: GetProvLabsFeeAddress and the ProvLabsMainnetFeeAddress/ProvLabsTestnetFeeAddress string constants are retired once the Params approach lands.

Context

Metadata

Metadata

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions