Skip to content

IGP-139: Increase Foundation monthly grant from $250,000 to $350,000 - #178

Open
thrilok209 wants to merge 4 commits into
mainfrom
igp-138-foundation-grant
Open

IGP-139: Increase Foundation monthly grant from $250,000 to $350,000#178
thrilok209 wants to merge 4 commits into
mainfrom
igp-138-foundation-grant

Conversation

@thrilok209

@thrilok209 thrilok209 commented Aug 6, 2026

Copy link
Copy Markdown
Member

Raises the Fluid Foundation's monthly grant from $250,000 to $350,000 per the forum proposal, and executes the first disbursement at the new rate.

The $250,000/month grant approved in February (Snapshot) was never drawn — IGP-124 expired without execution while the treasury absorbed Resolv-incident costs. This tranche is funded in stETH from the Fluid Reserve rather than the Treasury fGHO route IGP-124 used.

Action 1: Transfer the monthly grant to the Fluid Foundation

Source Fluid Reserve 0x264786EF916af64a1DB19F513F24a3681734ce92
Method withdrawFunds([stETH], [187e18], FLUID_FOUNDATION, "FOUNDATION GRANT")
Token stETH 0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84
Amount 187 stETH — ~$350,000 at the 7-day average ETH price of $1,872.43
Recipient Fluid Foundation 0xde0377eF25aD02dBcFbc87D632E46bf1972A0Dc3

Mirrors IGP-134 Action 4, which withdrew a fixed stETH amount from the Reserve through the same V2 withdrawFunds entrypoint. The only deltas are the amount (148 → 187 stETH), the recipient (Team Multisig → Foundation), and the event reason string.

Numbering

Governor proposalCount is 137 (read at block 25,697,915), so this payload lands on 138.

Important

#176 currently also claims id 138. Only one payload can be 138, and PayloadIGPMain.propose() reverts with PROPOSAL_IS_NOT_SAME on a mismatch. This grant is intended to go out first, so #176 needs to be renumbered to 139 before it is proposed.

Pre-deploy checks

  • npx hardhat compile — clean, only the repo-wide benign _PROPOSAL_ID "can be restricted to pure" warning
  • igp-validator --id=138 — passed
  • Payload audit (verify-payload) — PASS_WITH_NOTES, no blockers
  • Timelock authorization verified on-chain: the Reserve's owner() is the Timelock and withdrawFunds is onlyMultisig, which accepts the owner. The owner branch bypasses the Treasury/Buyback recipient allowlist, so the Foundation is a valid destination.
  • IFluidReserveContractV2 is the correct interface — the deployed implementation exposes only the 4-arg signature (0x3ee1f1ea)
  • Tenderly simulation — run 31181589246 passed the full lifecycle through execution
  • Re-check Reserve stETH balance immediately before execution (see below)

Execution note

The Reserve holds 194.635 stETH against the 187 required — about 4% headroom. withdrawFunds moves a fixed amount and does no balance check of its own, so if the balance dips below 187 stETH at execution the Lido transfer fails and the whole proposal reverts. stETH rebases positively so the balance should drift upward, but any other stETH egress between queueing and execution would eat the margin. simulation/setup.ts asserts this precondition and fails loudly rather than pre-funding.

Queued IGP-137 withdraws FLUID from the Treasury and touches neither the Reserve nor stETH, so there is no ordering dependency.

For proposer confirmation

  • Nothing on-chain encodes a rate or schedule. This payload is a single one-time transfer; each subsequent monthly tranche needs its own proposal. The increase and the recurrence are policy commitments, not enforced here.
  • The amount is fixed in token terms, so the USD value actually delivered drifts with ETH between proposal creation and execution.

IGP Actions

// Action 1: Transfer the monthly grant to the Fluid Foundation.

…tranche

Raises the Fluid Foundation grant from $250,000 to $350,000/month per the
forum proposal and executes the first disbursement at the new rate.

Action 1 withdraws 187 stETH (~$350,000 at the 7-day average ETH price of
$1,872.43) from the Fluid Reserve to the Foundation. The February grant was
never drawn because IGP-124 expired unexecuted while the treasury absorbed
Resolv-incident costs, so this is the first payment under the program. It is
funded in stETH from the Reserve rather than the Treasury fGHO route IGP-124
used, mirroring the fixed-amount Reserve withdrawal in IGP-134 Action 4.
The pull_request 'opened' event for #178 never dispatched a workflow run
(no run record and no check-runs on 6d02106), so this fires 'synchronize'.
@github-actions

github-actions Bot commented Aug 7, 2026

Copy link
Copy Markdown

Governance Simulation Completed - IGP-138

Payload Contract: PayloadIGP138

Proposal Actions

  • Action 1: Transfer the monthly grant to the Fluid Foundation.

📊 Transaction Summary

Step Status Transaction
deployment ✅ Success View
setExecutable ✅ Success View
delegation ✅ Success View
proposalCreation ✅ Success View
proposalCreation ✅ Success View
voting ✅ Success View
voting ✅ Success View
voting ✅ Success View
voting ✅ Success View
voting ✅ Success View
voting ✅ Success View
voting ✅ Success View
queueing ✅ Success View
execution ✅ Success View

Proposal Creation Transaction

Transaction Hash: 0xc072cba0ad73771d41647934e9dd24d27886df1cc7b10d1c7abe615317babb06

Tenderly Dashboard: View Transaction

Raw Transaction Data
From: 0xA45f7bD6A5Ff45D31aaCE6bCD3d426D9328cea01
To: 0xb7846261Ebe3770CB593519DA663D1A498302Fb8
Data: 0xaa98df3900000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000bce2320496e63726561736520466f756e646174696f6e204d6f6e74686c79204772616e742066726f6d20243235302c30303020746f20243335302c3030300a0a23232053756d6d6172790a0a546869732070726f706f73616c207261697365732074686520466c75696420466f756e646174696f6e2773206d6f6e74686c79206772616e742066726f6d202a2a243235302c3030302a2a20746f202a2a243335302c3030302a2a20706572206d6f6e74682c2065666665637469766520696d6d6564696174656c792075706f6e20617070726f76616c2070657220746865205b666f72756d2070726f706f73616c5d2868747470733a2f2f676f762e666c7569642e696f2f742f696e6372656173652d666f756e646174696f6e2d6d6f6e74686c792d6772616e742d66726f6d2d3235302d3030302d746f2d3335302d3030302f31373837292c20616e64206578656375746573207468652066697273742064697362757273656d656e7420617420746865206e657720726174652e0a0a54686520243235302c3030302f6d6f6e7468206772616e7420617070726f76656420696e20466562727561727920285b536e617073686f745d2868747470733a2f2f736e617073686f742e6f72672f232f733a696e737461646170702d676f762e6574682f70726f706f73616c2f307864653064353530353065663934356433643735363231396139656532636632396566393763336635363235623130376136356539666433393933376436633565292920776173206e6576657220647261776e3a204947502d3132342c20746865207061796c6f6164207468617420776f756c642068617665207472616e7366657272656420746865206669727374207472616e6368652c206578706972656420776974686f757420657865637574696f6e207768696c652074686520747265617375727920776173206162736f7262696e67205265736f6c762d696e636964656e7420636f7374732e0a0a232320436f6465204368616e6765730a0a23232320416374696f6e20313a205472616e7366657220746865204d6f6e74686c79204772616e7420746f2074686520466c75696420466f756e646174696f6e0a0a2d202a2a536f757263652a2a3a20466c756964205265736572766520286030783236343738364546393136616636346131444231394635313346323461333638313733346365393260290a2d202a2a4d6574686f642a2a3a2060776974686472617746756e6473285b73744554485d2c205b3138373030303030303030303030303030303030305d2c20464c5549445f464f554e444154494f4e2c2022464f554e444154494f4e204752414e542229600a2d202a2a546f6b656e2a2a3a20737445544820286030786165376162393635323044453341313845356531313142354561416230393533313244376645383460290a2d202a2a416d6f756e742a2a3a20603138372073744554486020e28094207e243335302c3030302061742074686520372d646179206176657261676520455448207072696365206f662024312c3837322e34330a2d202a2a526563697069656e742a2a3a20466c75696420466f756e646174696f6e20286030786465303337376546323561443032644263466263383744363332453436626631393732413044633360290a0a2323204465736372697074696f6e0a0a496e204665627275617279207468652044414f20617070726f766564206120243235302c3030302f6d6f6e7468206772616e7420746f2074686520466c75696420466f756e646174696f6e2c2066756e64696e672070726f746f636f6c206f7065726174696f6e732c20646576656c6f706d656e742c20616e642067726f7774682e2054686520466f756e646174696f6e20646964206e6f742064726177206974207768696c652074686520747265617375727920776173206162736f7262696e6720636f7374732066726f6d20746865205265736f6c7620696e636964656e7420616e64206f74686572207072696f7269746965732e0a0a53696e63652046656272756172792074686520466f756e646174696f6e27732073636f70652068617320657870616e646564206d6174657269616c6c792e2054686520696e63726561736564206772616e7420636f766572733a0a0a2d20436f6e74696e7565642053756920646576656c6f706d656e7420616e6420696e746567726174696f6e20776f726b2e0a2d20457870616e73696f6e206f662041474933206d61726b65747320616e64206173736f63696174656420696e6672617374727563747572652e0a2d204164646974696f6e616c207365637572697479207265766965777320616e642070726f746f636f6c206175646974732e0a2d20537472656e677468656e696e67207468652070726f746f636f6c2773206f66662d636861696e2073656375726974792073797374656d732e0a2d20436f6d6d756e697479206576656e747320616e642065636f73797374656d20696e6974696174697665732e0a2d2050617274696369706174696f6e20696e20696e64757374727920636f6e666572656e63657320696e636c7564696e6720446576636f6e6e65637420616e6420546f6b656e323034392e0a2d204c6567616c20657870656e646974757265732e0a2d20506f74656e7469616c20657870616e73696f6e20746f206164646974696f6e616c20626c6f636b636861696e2065636f73797374656d7320616e6420696e746567726174696f6e732e0a2d204164646974696f6e616c20656e67696e656572696e6720616e6420646576656c6f706572207265736f757263657320666f72206e65772070726f647563747320616e642070726f746f636f6c2066656174757265732e0a2d204f6e676f696e67206f7065726174696f6e616c20616e642065636f73797374656d2067726f77746820657870656e7365732e0a0a546869732070726f706f73616c206578656375746573207468652066697273742064697362757273656d656e7420617420746865206e657720243335302c30303020726174652e205472616e7366657273207265637572206d6f6e74686c7920756e74696c20746865206e65787420676f7665726e616e636520726576696577206379636c652c20617420776869636820706f696e742074686520636f6d6d756e697479206d61792072656173736573732074686520616d6f756e742c2073636f70652c206f7220636f6e74696e756174696f6e206f6620746865206772616e742e0a0a2323205265666572656e6365730a0a2d20466f72756d3a2068747470733a2f2f676f762e666c7569642e696f2f742f696e6372656173652d666f756e646174696f6e2d6d6f6e74686c792d6772616e742d66726f6d2d3235302d3030302d746f2d3335302d3030302f313738370a2d204f726967696e616c20466f756e646174696f6e2070726f706f73616c3a2068747470733a2f2f676f762e666c7569642e696f2f742f70726f706f73616c2d65737461626c6973682d666c7569642d666f756e646174696f6e2f313736380a2d20466562727561727920536e617073686f743a2068747470733a2f2f736e617073686f742e6f72672f232f733a696e737461646170702d676f762e6574682f70726f706f73616c2f3078646530643535303530656639343564336437353632313961396565326366323965663937633366353632356231303761363565396664333939333764366335650a0a232320436f6e636c7573696f6e0a0a4947502d31333820696e637265617365732074686520466c75696420466f756e646174696f6e2773206d6f6e74686c79206772616e742066726f6d20243235302c30303020746f20243335302c3030302065666665637469766520696d6d6564696174656c7920616e64207472616e7366657273203138372073744554482066726f6d2074686520466c756964205265736572766520746f2074686520466c75696420466f756e646174696f6e206173207468652066697273742064697362757273656d656e742e2053756273657175656e74206d6f6e74686c79207472616e736665727320636f6e74696e756520756e74696c20746865206e65787420676f7665726e616e6365207265766965772e0a000000000000000000000000000000000000
Value: 0x0
Gas Limit: 0x9896800
Gas Price: 0x0

Links

Proposal id 138 is taken by the borrow-caps / DEX-ranges payload (PR #176),
which is submitted to governance first. `PayloadIGPMain.propose()` enforces
`proposedId == _PROPOSAL_ID()`, so the hard-coded id has to match the id this
payload actually lands on. Governor proposalCount is 137, so with the
borrow-caps payload taking 138 the grant lands on 139.

The simulation's TARGET_PROPOSAL_COUNT moves 137 -> 138, so pre-setup now
creates one placeholder proposal to consume id 138 before the grant is
proposed. Action logic and the grant amount are unchanged.
@thrilok209 thrilok209 changed the title IGP-138: Increase Foundation monthly grant from $250,000 to $350,000 IGP-139: Increase Foundation monthly grant from $250,000 to $350,000 Aug 14, 2026
@github-actions

Copy link
Copy Markdown

IGP Validation Failed - IGP-138

The IGP structure does not meet the required standards for automated simulation.

Validation Errors

1. IGP sequence validation failed:
- Current IGP: 138
- Latest IGP in system: 139
- Expected next IGP: 140
- New IGP must be exactly +1 from the latest IGP
2. IGP directory not found. Expected one of:
- /home/runner/work/fluid-governance/fluid-governance/contracts/payloads/IGP138
- /home/runner/work/fluid-governance/fluid-governance/contracts/payloads/igp-138

Required Structure

Mandatory Requirements:

  1. IGP Sequence: Must be exactly +1 from the latest IGP in the system
  2. Contract Location: contracts/payloads/IGP138/PayloadIGP138.sol
  3. Contract Name: Must be PayloadIGP138
  4. Contract Inheritance: Must inherit from PayloadIGPMain
  5. Execute Function: Must have function execute() public virtual override
  6. Minimum Actions: At least 3 numbered actions in execute() function
    • Format: // Action 1: Description followed by action1();
  7. Compilation: Must compile successfully with npx hardhat compile

Optional but Recommended:

  • contracts/payloads/IGP138/description.md - Proposal description
  • ignition/modules/PayloadIGP138.ts - Ignition deployment module
  • contracts/payloads/IGP138/simulation/setup.ts - Pre-simulation setup script

Next Steps

  1. Review and fix the validation errors listed above
  2. Ensure your IGP number follows the sequence
  3. Verify the contract name and structure match requirements
  4. Push changes to re-trigger validation and simulation

Automated IGP validation via GitHub Actions

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

2 participants