Infinifi Shorttimelock - 25/10/2026 11:53 - MEDIUM
- Protocol: INFINIFI
- Contract: Infinifi Shorttimelock —
0x4B174afbeD7b98BA01F50E36109EEE5e6d327c32 - Chain: Mainnet (chain id 1)
- Risk: MEDIUM
- Model: claude-sonnet-5-5
- Time: 34.8s
Summary
Onboards a new RWA escrow route: whitelists USDC, mF-ONE, MFOneDepositVault and a TransparentUpgradeableProxy on RWAEscrowRouter (all previously false). Registers RWAEscrowRouterFarm as a MATURITY-type (type 2) farm in FarmRegistry, perpetual with a rolling 28-day notice period. Sets the RWAEscrowRateManager rate for RWAEscrowRouter to a raw 1070000000000000000 (previously 0), after an initial harvest. The rate's scale and meaning are not confirmed by the supplied context. Whitelisting lets the router interact with these targets, but this batch moves no funds itself. One target is an upgradeable proxy whose logic can change and whose role is not identified. All six calls simulated successfully.
Analysis
Overview
The batch brings a new RWA escrow route live through the Infinifi short timelock. It does three things: opens the 0x88026cd3A7f9Ea4232db0Bc77dAEeeDe3e79C927 (RWAEscrowRouter) whitelist to four targets, registers a farm in the registry, and sets a yield rate. All three setters are gated by the PROTOCOL_PARAMETERS core role. The batch moves no tokens itself, and all six calls simulated successfully.
Calls 1-4: router whitelist
setWhitelist writes whitelist[_target] = _enabled and emits an event. The natspec says the whitelist defines which addresses the router "is allowed to interact with". The setter itself only writes the flag. Where the router enforces it is not shown, so the exact interaction surface is not confirmed here. All four entries were false before the batch and become true:
0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48(USD Coin, 6 decimals) is the router'sassetToken(), so this one is expected.0x238a700eD6165261Cf8b2e544ba797BC11e466Ba(mF-ONE, 18 decimals) is the Midas Fasanara ONE token.0x41438435c20B1C2f1fcA702d387889F346A0C3DE(MFOneDepositVault) is the contract name suggesting the route for converting USDC into mF-ONE.0x44b0440e35c596e858cEA433D0d82F5a985fD19C(TransparentUpgradeableProxy) is a proxy whose role is not identified in the supplied context.
The first three form a coherent set: USDC in, a deposit vault, and the resulting mF-ONE token. The fourth is the one to note. A whitelisted upgradeable proxy can have its logic swapped by whoever holds its admin, so the effective counterparty behavior is not fixed by this transaction. If this proxy is a redemption vault or a related Midas component, that would be consistent with the route, but the context does not say.
Call 5: farm registration
0xF5f2718708f471e43968271956CC01aaA8c46119 (FarmRegistry) addFarms registers 0x92954E6BE8776e390eE365641F2a340BB449c368 (RWAEscrowRouterFarm) under type 2, which is MATURITY. Protocol Context confirms the farm is perpetual with a rolling 28-day notice period, so maturity() always returns now + 2,419,200 seconds. In practice, principal deployed here is not available instantly. Exit takes about four weeks of notice. Adding the farm to the registry makes it part of the protocol's recognized farm set and its accounting. The simulation confirms the FarmsAdded event with farm type 2.
Call 6: yield rate
0x11F6FAb3f4D8635880C3e80cbae8AEF8136D4189 (RWAEscrowRateManager) setRate takes the router and a raw rate of 1070000000000000000, replacing the previous value of 0. The function requires the rate to lie within MIN_RATE and MAX_RATE, and the simulation succeeded, so the value passed that bound check. It also calls harvest(_escrow) before writing, so any yield accrued under the old rate is settled first. With a prior rate of 0, that harvest should settle nothing meaningful.
At face value the number looks like 1.07 at 1e18 scale, which could mean a 7% multiplier or yield factor. The context does not define the scale or whether it is annualized, so this reading is unconfirmed. This rate is the key economic parameter of the batch. If it overstates the true return on the underlying mF-ONE position, the protocol would accrue yield faster than the assets earn it. That would be an accounting concern, not an immediate loss.
Asset flow and state changes
No tokens move in this batch. State changes are four whitelist flags false→true, one farm added to the registry, and the escrow rate 0→1070000000000000000. These changes prepare the route. Funds would only flow through later actions, such as deposits into the farm.
Risk assessment
MEDIUM is warranted for these reasons:
- Everything is permissioned, executed through the timelock, and simulated cleanly, which limits the risk of a mistake.
- The economic parameter, the rate, has an unconfirmed scale and was set from zero, so a wrong value would misstate yield once the route is funded.
- One whitelisted target is an upgradeable proxy of unidentified purpose, so the router's trust surface depends on a third party's admin.
- The farm's 28-day notice period constrains exit liquidity for any funds later routed here, which is by design but worth monitoring.
Nothing here indicates a malicious or erroneous configuration. The tag reflects the unverified proxy and the unconfirmed rate semantics rather than any observed fault.
Not verified
- The scale and meaning of the raw rate 1070000000000000000, and the
MIN_RATEandMAX_RATEbounds it was checked against. - The identity, purpose, implementation and admin of the whitelisted TransparentUpgradeableProxy.
- Where the router enforces its whitelist, and what interactions the four entries actually unlock.
- How much capital will be allocated to the new farm after this batch.
Call Flow
From: 0x4B174afbeD7b98BA01F50E36109EEE5e6d327c32 (Infinifi Short Timelock)
-
setWhitelist(address,bool)on0x88026cd3A7f9Ea4232db0Bc77dAEeeDe3e79C927(RWAEscrowRouter)address _target:0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48(USD Coin (USDC, 6 dec) — FiatTokenProxy)bool _enabled:True- Batch simulation: SUCCESS, gas 53,717 (run in batch order on the state left by the preceding calls)
-
setWhitelist(address,bool)on0x88026cd3A7f9Ea4232db0Bc77dAEeeDe3e79C927(RWAEscrowRouter)address _target:0x238a700eD6165261Cf8b2e544ba797BC11e466Ba(Midas Fasanara ONE (mF-ONE, 18 dec) — mFONE)bool _enabled:True- Batch simulation: SUCCESS, gas 53,717 (run in batch order on the state left by the preceding calls)
-
setWhitelist(address,bool)on0x88026cd3A7f9Ea4232db0Bc77dAEeeDe3e79C927(RWAEscrowRouter)address _target:0x41438435c20B1C2f1fcA702d387889F346A0C3DE(MFOneDepositVault)bool _enabled:True- Batch simulation: SUCCESS, gas 53,717 (run in batch order on the state left by the preceding calls)
-
setWhitelist(address,bool)on0x88026cd3A7f9Ea4232db0Bc77dAEeeDe3e79C927(RWAEscrowRouter)address _target:0x44b0440e35c596e858cEA433D0d82F5a985fD19C(TransparentUpgradeableProxy)bool _enabled:True- Batch simulation: SUCCESS, gas 53,717 (run in batch order on the state left by the preceding calls)
-
addFarms(uint256,address[])on0xF5f2718708f471e43968271956CC01aaA8c46119(FarmRegistry)uint256 _type:2address[] _list:0x92954E6BE8776e390eE365641F2a340BB449c368(RWAEscrowRouterFarm)
- Batch simulation: SUCCESS, gas 239,134 (run in batch order on the state left by the preceding calls)
-
setRate(address,uint256)on0x11F6FAb3f4D8635880C3e80cbae8AEF8136D4189(RWAEscrowRateManager)address _escrow:0x88026cd3A7f9Ea4232db0Bc77dAEeeDe3e79C927(RWAEscrowRouter)uint256 _rate:1,070,000,000,000,000,000- Batch simulation: SUCCESS, gas 54,329 (run in batch order on the state left by the preceding calls)
Current State
- On
0x88026cd3A7f9Ea4232db0Bc77dAEeeDe3e79C927(RWAEscrowRouter):whitelist(0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48(USD Coin (USDC, 6 dec) — FiatTokenProxy)) =False(mapping(address => bool))whitelist(0x238a700eD6165261Cf8b2e544ba797BC11e466Ba(Midas Fasanara ONE (mF-ONE, 18 dec) — mFONE)) =False(mapping(address => bool))whitelist(0x41438435c20B1C2f1fcA702d387889F346A0C3DE(MFOneDepositVault)) =False(mapping(address => bool))whitelist(0x44b0440e35c596e858cEA433D0d82F5a985fD19C(TransparentUpgradeableProxy)) =False(mapping(address => bool))
- On
0x11F6FAb3f4D8635880C3e80cbae8AEF8136D4189(RWAEscrowRateManager):rates(0x88026cd3A7f9Ea4232db0Bc77dAEeeDe3e79C927(RWAEscrowRouter)) =0(mapping(address => uint256))
Protocol Context
- Farm type 2:
FarmTypes.MATURITY— principal is available after the farm's maturity(): a fixed timestamp, or for a perpetual farm a rolling now + duration notice period (0xF5f2718708f471e43968271956CC01aaA8c46119(FarmRegistry)addFarms)- 0x92954E6BE8776e390eE365641F2a340BB449c368: perpetual, rolling 28-day notice period (maturity() = now + 2,419,200s)