Fee model
Northstake vaults charge two separate fees:
- Lido protocol fees: paid to the Lido DAO treasury.
- Node-operator fees: paid to the staking provider running your validators.
They're tracked, settled, and authorized through different mechanisms.
Side-by-side
| Lido protocol fees | Node-operator fees | |
|---|---|---|
| Recipient | Lido DAO treasury | The vault's node operator |
| API field | vaultData.obligations.feesToSettle | vaultData.accruedFee |
| How it's computed | Vault hub against periodic vault reports | Continuous accrual based on the configured fee rate |
| Settlement call | POST /v1/lidov3/staking-vaults/{id}/settle-lido-fees | POST /v1/lidov3/staking-vaults/{id}/disburse-fee |
| Who authorizes | Vault owner / admin | Node operator |
| Configurable rate? | Set by Lido protocol governance | Yes: nodeOperatorFeeBP in basis points |
Both are claimable rather than auto-deducted. The vault accrues the obligation; an explicit on-chain call moves the ETH.
Lido protocol fees
The Lido vault hub publishes periodic reports for each vault. When a report increases the protocol-fee obligation, the new total appears in vaultData.obligations.feesToSettle. The vault owner (or any address holding the required role) settles by calling settle-lido-fees.
A non-zero feesToSettle is a soft obligation: the vault remains operational, but the obligation must eventually be cleared. The Vault page in SVM shows the outstanding amount on the Operations tab and warns when it's overdue.
If the report is stale at submission time, settle-lido-fees fails with a "vault report stale" error. The fix is to wait for the next report: you can't force a refresh from the SVM side. This is exactly what the report_update_available webhook event is for.
Node-operator fees
The vault accrues a fee for the node operator continuously, as a function of the configured rate. The accrued amount appears as vaultData.accruedFee. The node operator (or any address holding the appropriate role) disburses by calling disburse-fee.
Setting the rate
The fee rate is stored as nodeOperatorFeeBP: basis points (1 bp = 0.01%). Range: 0 to 10000 (0% to 100%). Pro accounts can change the rate via POST /v1/lidov3/staking-vaults/{id}/set-fee-rate. The new rate applies prospectively: already-accrued fees keep the rate that was in effect when they accrued.
Exempting specific stakes
If you want a particular ETH inflow not to be subject to the node-operator fee (e.g. a treasury reload, an internal rebalance) grant the depositing address NODE_OPERATOR_FEE_EXEMPT_ROLE before the deposit. The increase in stake that follows is exempted from accrual.
Operationally: who sees what
SVM. The vault owner sees only Lido protocol fees; the node operator settles operator fees on their own. The Settle Fees modal shows whichever single action the user is authorized to perform.
SVM Pro. The owner sees both flows. The Settle Fees modal lets them choose between:
settleLido: pay the outstanding Lido protocol obligationdisburseOperator: disburse the accrued node-operator fee
Pro accounts also see the Change Fee Rate flow on the Operations tab, which writes the new nodeOperatorFeeBP to the Dashboard contract.
Related
- Settle and disburse fees: end-to-end how-to
- Roles and permissions: including
NODE_OPERATOR_FEE_EXEMPT_ROLEsemantics - Subscribe to webhooks:
report_update_availableas a fee-readiness signal
Updated about 4 hours ago
