Fee Claiming
StakeWise Vaults can charge a fee on the rewards they earn, set by the Vault admin as a percentage at creation time. That fee is directed to a single address called the fee recipient.
A Fee Splitter is a smart contract that can take the place of that fee recipient. Instead of fees flowing to one address, the Vault routes them into the Splitter, which divides them among a predefined list of shareholders — each holding a predefined share assigned by the admin.
Fee claiming distributes those accrued shares to each shareholder's wallet. Shareholders can claim manually, or the Vault admin can assign the Vault fee claimer role to the wallet attached to the Operator Service, which then automates claiming on a schedule.
Step 1: Add Shareholders
- Go to your Vault page and click Settings
- Select the Vault fee tab
- Click Add shareholder, enter their address and set percentage allocation
- Verify total equals 100% before proceeding
- Click Save
Under the Hood
Saving runs three on-chain actions, each requiring a separate wallet confirmation:
- Create reward splitter — deploys the Fee Splitter ↗ contract for your Vault.
- Apply new settings — points the Vault's fee recipient at the Splitter so future fees flow into it.
- Update fee splitter — registers shareholders and their shares on the Splitter.
If you have only one shareholder, clicking Save does nothing. To still enable automated claiming, open the Roles tab, click the Vault fee claimer card, and then click Setup the fee splitter — it deploys the Splitter, registers the shareholder, and updates the Vault's fee recipient. Then continue with the remaining steps below to finish enabling automated claiming.
You can modify your Fee Splitter anytime — add or remove shareholders, adjust percentage allocations, or split evenly across all recipients. Modifications are batched into a single transaction and only affect future fee distributions.
Upgrading the Fee Splitter
When StakeWise releases a new Fee Splitter contract version, an Upgrade banner appears at the top of the Vault fee tab. The banner is only visible to the Vault admin, and only the Vault admin can execute the upgrade. Clicking it deploys a new Splitter, migrates your existing shareholders to it, and re-points the Vault's fee recipient at the new contract.
Step 2: Set the Vault Fee Claimer
Only the Vault admin can set this role. Open the Roles tab and enter the wallet address attached to the Operator Service in the Vault fee claimer field. The address must match the Operator Service's wallet exactly — otherwise the claim will fail, as the Operator won't have permission on the Splitter to execute the claim on behalf of shareholders. Click Save and Confirm the transaction in your wallet.
Assigning this role is what authorizes the Operator to call enterExitQueueOnBehalf (queueing each shareholder's share for withdrawal) and claimExitedAssetsOnBehalf (sending exited assets to each shareholder) on the Splitter. The Operator Service is not able to route the rewards to any other address; the rewards are always distributed to the shareholder addresses.
Step 3: Automate Fee Claiming
Add the --claim-fee-splitter flag when starting the Operator Service:
./operator start \
--vault=0x3320a...10aD9 \
--consensus-endpoints=http://localhost:5052 \
--execution-endpoints=http://localhost:8545 \
--claim-fee-splitter
On each cycle, the Operator combines multiple operations into a single multicall transaction:
- Update the Vault's state using the latest Keeper-attested harvest params, so shareholders' accrued balances are up to date.
- Enter the exit queue on behalf of each shareholder — their share is queued for withdrawal.
- Claim exited assets on behalf of each shareholder (assets go directly to shareholder addresses) for any exit requests whose delay has elapsed.
The process can be configured using environment variables:
FEE_SPLITTER_INTERVAL— How often fee claiming runs in seconds (default: 86400 = 24 hours)FEE_SPLITTER_MIN_ASSETS— Minimum amount of unclaimed rewards accrued across all shareholders (in Wei) before the state update and exit-queue steps run, to avoid unnecessary gas fees (default: 1000000000000000 = 0.001 ETH). Claiming already-exited assets runs independently of this threshold whenever there are claimable exit requests.