[Whitelisted Caller] Dispatch whitelisted call to Retune phantom order cadence and refund protocol fees for failed swaps on Base

Summary

This proposal dispatches a single Utility.batch_all from Root containing four
IntentsCoprocessor calls:

  1. Shorten the phantom order bid acceptance window to 90 seconds (15 blocks).
  2. Shorten the phantom order generation interval to 5.5 minutes (55 blocks).
  3. Sweep 99,500 cNGN of accumulated dust from the Intent Gateway on Base to
    0x4301a30ab2A9C040a8cBEc7fBBde9A6Af0C5F9ac.
  4. Sweep 343,914 cNGN of accumulated dust from the same gateway to
    0x694a54cf68fd4d656bcd4788949dc86d924befe4, as three transfers of
    86,000 + 86,000 + 171,914.

Preimage hash: 0x065edf039fc405c57a2f716734d26f28fdf9ef78a49408141f86047379bc7820
Encoded length: 410 bytes. Nexus block time is 6 seconds.

Motivation

Phantom order cadence (calls 1 and 2)

Phantom orders are the protocol's price discovery mechanism: the coprocessor
periodically publishes a bundle of synthetic orders, fillers bid on them, and the
resulting quotes become the exchange rate snapshots the indexer serves. The
cadence of that loop sets how fresh those published rates are.

Today the generator runs every 300 blocks (30 minutes) and accepts bids for the
first 25 blocks (2.5 minutes) of each round — 25 being the runtime default, as
PhantomBidWindow has never been set. A rate can therefore be up to half an hour
stale before it is refreshed.

This proposal moves generation to every 55 blocks (5.5 minutes) and narrows the
bid window to 15 blocks (90 seconds), roughly a 5.5x increase in refresh
frequency. The window is narrowed alongside the interval because the pallet
requires the bid window to close strictly before the next generation — otherwise a
batch would be replaced on the same block its window closes, and the exhaustion
events would race the replacement. 15 < 55 preserves that invariant with margin.

[Fill in: the operational reason this cadence was chosen — e.g. observed rate
staleness, filler response latency measurements, or a downstream consumer
requirement. Note any expected increase in filler bidding load.]

cNGN dust sweep (calls 3 and 4)

The Intent Gateway at 0xae041f7b0cb581876832830baeb6a2aa2a3c9716 on Base has
accumulated cNGN that is not attributable to any open order. At the time of
drafting it holds 3,144,882.28 cNGN; this proposal sweeps 443,414 cNGN
(14.1%) of that to the two addresses above, leaving 2,701,468.28 cNGN in place.

[Fill in: what these balances are — protocol fees, rounding residue, an
over-collateralised fill — and who the two beneficiary addresses belong to.]

The calls in detail

All four calls target the IntentsCoprocessor pallet (index 94) and require Root.

1 — set_phantom_bid_window(window: 15)  ·  0x5e090f000000

Sets PhantomBidWindow to 15 blocks. The pallet checks the new window against the
current interval, which is 300 at enactment, so 15 passes comfortably.

Both calls guard the same invariant — the bid window must be strictly shorter than
the generation interval — and each checks it against whatever the other value is at
the time it runs. In this order: 15 < 300, then 15 < 55. In the opposite order the
config call would be checked against the current effective window of 25 (25 < 55),
then the window call against the new interval (15 < 55). Either order is valid here;
this one is used because it never leaves the window wider than the interval, even
transiently within the batch.

2 — set_phantom_order_config({ chains, interval_blocks: 55 })

interval_blocks is shared by every configured chain, and the only way to change it
is through this call, which rejects an empty chains map. The map has merge
semantics: a chain absent from it keeps whatever it already had. Rather than
resubmit all eight configured chains (53 token pairs, ~3.9 KB), this proposal passes
the single smallest entry — Polkadot Asset Hub (EVM-420420419 / DOT0, one token
pair)
— with its pairs copied byte-for-byte from current chain state.

That entry is therefore a no-op present only to satisfy the non-empty rule. The
configurations for Ethereum, Optimism, BSC, Gnosis, Polygon, Base and Arbitrum are
not touched, and neither is Asset Hub's own pair list.

Side effect voters should be aware of: this call unconditionally clears
CurrentPhantomOrder and LastPhantomGeneration. The in-flight phantom order is
dropped for all configured chains and generation restarts on the following block.
Any bids already placed against the current bundle are discarded. This is inherent to
the call, not to the single-chain map.

3 and 4 — sweep_dust(EVM-8453, ...)

Each dispatches a cross-chain SweepDust request to the Base gateway, which
transfers each listed output to the beneficiary via safeTransfer. Token
0x46C85152bFe9f96829aA94755D9f915F9B10EF5F is cNGN on Base, 6 decimals, so the
raw amounts are 99,500,000,000 and 86,000,000,000 / 86,000,000,000 /
171,914,000,000.

The three amounts for the second beneficiary are kept as three separate outputs,
each its own transfer, rather than collapsed into one — this is cosmetic and the net
effect is identical to a single 343,914 cNGN transfer.

batch_all is used rather than batch so that a failure in any call reverts the
whole dispatch. A partial application that set the window without the interval, or
vice versa, would leave the two parameters inconsistent.

Verification

Decode the preimage in the Polkadot.js Apps Extrinsics → Decode tab against the
nexus runtime and confirm it matches the four calls above. To independently confirm
the Asset Hub pairs in call 2 are unchanged, read IntentsCoprocessor.phantomOrderConfig
for { Evm: 420420419 } / DOT0 and compare against the call's embedded bytes. The
Base gateway's cNGN balance can be checked with balanceOf on
0x46C85152bFe9f96829aA94755D9f915F9B10EF5F for
0xae041f7b0cb581876832830baeb6a2aa2a3c9716.

Edited
Reply
Up
Share
Status
Decision1d
Confirmation
1hr
Attempts
1
Tally
100%Aye
50.0%Threshold
0%Nay
Aye
≈349.48MBRIDGE
Nay
0BRIDGE
  • 5.00%
  • 0.0%

    Threshold

  • 0.0%
Support
57.4%
≈349.48MBRIDGE
Issuance
≈608.85MBRIDGE
Votes
Nested
Flattened
Actions
Check how referenda works here.
Call
Metadata
Timeline6
Votes Bubble
Curves
Statistics
Comments

Status
Decision1d
Confirmation
1hr
Attempts
1
Tally
100%Aye
50.0%Threshold
0%Nay
Aye
≈349.48MBRIDGE
Nay
0BRIDGE
  • 5.00%
  • 0.0%

    Threshold

  • 0.0%
Support
57.4%
≈349.48MBRIDGE
Issuance
≈608.85MBRIDGE
Votes
Nested
Flattened
Actions
Check how referenda works here.