Two HyperFX users on Base are owed protocol fees back. This document is the call they need, verified against live Nexus state and live Base receipts, plus what has to happen to get it whitelisted.
| Beneficiary | Token | Amount | What it was |
|---|---|---|---|
0x2009c64589dFB42bc26bf9E29bb61F28a79275aA |
USDC | 18.277 | 5 bps taken at placement on three orders that expired unfilled |
0x8d11E9AA67863d555332207F7F5eC296b63aD066 |
cNGN | 40,023.228375 | the protocol's 60% share of fill surplus on one order |
Both are on Base, StateMachine::Evm(8453), against gateway 0xAe041F7B0CB581876832830baeB6a2Aa2a3C9716.
At the rate the orders themselves imply, about 1,368 cNGN per USDC, the cNGN leg is roughly $29 and the whole refund is roughly $48.
0x8d11E9AA…aD066One output, cNGN 0x46C85152bFe9f96829aA94755D9f915F9B10EF5F (6 decimals), 40023228375 units.
The gateway takes protocolFeeBps off the input at placement, before anything is filled, and emits DustCollected. Base is configured at 5 bps, read live from IntentsCoprocessor::Gateways(Evm(8453)). Cancelling returns the escrow, which is already net of that fee, so an order that never fills still pays.
All three orders were same chain on Base, USDC in and cNGN out, placed by 0x2009c645…75aA on 2026-09-05 with deadlines about 56 blocks after placement. Every one expired without a fill and was refunded.
| Order | Placed at | Nonce | Gross in (USDC) | Fee taken (USDC) | Escrow refunded (USDC) | Refund block |
|---|---|---|---|---|---|---|
0x9be5c5e8… |
50,918,752 | 752 | 22,194.000000 | 11.097000 | 22,182.903000 | 50,918,813 |
0xdd3a86dd… |
50,918,980 | 754 | 12,183.000000 | 6.091500 | 12,176.908500 | 50,919,053 |
0xee2fda0e… |
50,919,606 | 760 | 2,177.000000 | 1.088500 | 2,175.911500 | 50,919,668 |
| 36,554.000000 | 18.277000 |
Every fee figure is the gateway's own DustCollected(address,uint256) log in the placement transaction, topic 0x51eb5aa877b3d80e186f9a323c6dce052491963271d09ee40615d0bb182359d5. Each one is exactly 5 bps of the gross input to the last unit. All three orders read REFUNDED in the Nexus indexer and each has an EscrowRefunded returning the full escrow.
The refund is 18.277 USDC, not 18.268. The three figures shown in the HyperFX history, 22,183 and 12,177 and 2,176, are the amounts that came back from escrow, which are already net of the fee. Taking 5 bps of those undercounts by 0.009 USDC. The number above is the sum of the three DustCollected logs, which is what the gateway actually holds.
Different mechanism. This order filled, so the input fee on it was earned normally. What is being returned is the surplus share.
0x8d11E9AA…aD066 placed order nonce 799 on 2026-09-07 at Base block 51,001,709: 97,451.25 USDC escrowed for a minimum output of 133,344,055.869375 cNGN. It was filled at block 51,001,726 in 0x0eb1a814….
The filler delivered more cNGN than the minimum, and the gateway split the difference:
| cNGN | |
|---|---|
| Gross output the filler paid in | 133,410,761.250000 |
| Order minimum | 133,344,055.869375 |
| Surplus | 66,705.380625 |
| To the user, 40% | 26,682.152250 |
| To the protocol, 60% | 40,023.228375 |
surplus_share_bps reads 6000 in Gateways(Evm(8453)).params, and 60% of the surplus is 40,023.228375 to the unit. The protocol's share went to the gateway as a DustCollected on cNGN in the same transaction, and the user received 133,370,738.021625, the minimum plus their 40%.
Note that the input side of this order also paid 48.75 USDC at placement, 5 bps of a gross 97,500. That order filled, so that fee stays. Only the surplus share is in this batch.
Nexus read live at block 11,806,215, Base read live at block 51,035,241.
| Fact | Value | Source |
|---|---|---|
Gateway for Evm(8453) |
0xAe041F7B0CB581876832830baeB6a2Aa2a3C9716 |
IntentsCoprocessor::Gateways(Evm(8453)) |
Same address is to on all four transactions |
yes | Base receipts |
| Gateway's ISMP host | 0x620128E2B19193d6Bd244a3AC8D3bBa0541B19c3 |
Gateways(…) and gateway.host() agree |
protocol_fee_bps on Base |
5 |
Gateways(…).params |
surplus_share_bps on Base |
6000 |
Gateways(…).params |
| USDC decimals / gateway balance | 6 / 893.508506 USDC | decimals(), balanceOf(gateway) |
| cNGN decimals / gateway balance | 6 / 1,709,245.055321 cNGN | decimals(), balanceOf(gateway) |
| USDC sweep as share of balance | 2.05% | |
| cNGN sweep as share of balance | 2.34% | |
| Call already whitelisted | no | Whitelist::WhitelistedCall |
| Technical Collective members | 4 | TechnicalCollective::Members |
| Open Technical Collective proposals | none, ProposalCount is 56 |
TechnicalCollective::Proposals |
| Next referendum index | 71 | Referenda::ReferendumCount |
After both sweeps the gateway keeps 875.231506 USDC and 1,669,221.826946 cNGN.