Monitoring, yield, and operational health
Vaults are contract-first systems. There is no required dashboard to operate them safely. The canonical source of truth is onchain state and events.
If you do nothing else, monitor the following.
Operational freshness
Is the strategy being actively reported?
- Check the
lastReport()timestamp on the strategy - Confirm
report()is being called at the expected cadence
Example:
cast call <STRATEGY_ADDRESS> "lastReport()(uint256)" --rpc-url $ETH_RPC_URL
If report() is not called, yield is not realized or donated, even if the underlying protocol is generating returns.
Yield routing
Is donated yield going where you expect?
- Track the donation address balance in vault shares
- Confirm those shares increase over time after reports
- If applicable, confirm the destination can redeem shares for the underlying asset
This verifies that yield is being routed correctly, independent of any UI.
Examples:
cast call <STRATEGY_ADDRESS> "dragonRouter()(address)" --rpc-url $ETH_RPC_URL
cast call <STRATEGY_ADDRESS> "balanceOf(address)(uint256)" <DONATION_ADDRESS> --rpc-url $ETH_RPC_URL
Event-level visibility
Are core lifecycle events behaving as expected?
At minimum, monitor:
Deposit(address,address,uint256,uint256)eventsWithdraw(address,address,address,uint256,uint256)eventsReported(uint256,uint256)events from the strategy
These events provide a reliable audit trail of capital movement and yield realization.
You can review them in the Events tab on Etherscan for the strategy address, or query them directly:
cast logs --address <STRATEGY_ADDRESS> --from-block <DEPLOYMENT_BLOCK> "Reported(uint256,uint256)" --rpc-url $ETH_RPC_URL
Useful event topic hashes:
Reported(uint256,uint256):0x6fea36bfb4b7c912613756951fb5bf8ddaedb74de1f256d0bef81533158cda54Deposit(address,address,uint256,uint256):0xdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7Withdraw(address,address,address,uint256,uint256):0xfbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db