The Wall Index
Wherever rules make the official dollar hard to get, a second dollar appears at its own price. The Wall Index is that phenomenon as one number: the average dollar premium across every country HWAN reads, kept in a single account on Solana. When the index rises, the world's walls are getting more expensive to stand behind; when it falls, official rates and street rates are drifting back together.
The live value is on hwan.io/rates, and the account is readable by any Solana program.
The number
Each member country has a dollar premium feed: the price of one USDT on that country's own exchanges over the official rate of one dollar, published every 15 minutes. The index is the plain average of the members' latest premiums:
index_ppm = (premium_KRW + premium_ARS + premium_INR + premium_VES + premium_BOB
+ premium_PKR + premium_EGP + premium_NGN + premium_LYD + premium_MZN) / 10
Every country weighs the same, whatever its size. That choice is deliberate: any weighting would need a source of weights, and a number this political should have nothing in it that cannot be recomputed from public prices alone.
How it can be trusted
The index account cannot be written with a value. The only way to update it is the refresh_index instruction, which takes the member feed accounts, recomputes the average inside the program, and stores the result. The caller signs nothing and chooses nothing; they only pay the transaction fee. Anyone may send it at any time, and whoever sends it, the index can only ever equal the average of the feeds behind it.
Two rules keep the number honest over time:
- The membership is fixed in the account. A refresh must pass exactly those feeds, in order, or it is refused.
- A member whose latest reading is more than a day old stalls the whole index rather than being dropped. The index never changes meaning by quietly averaging fewer countries; it would rather go stale, and its
oldest_member_atfield always says how fresh the weakest member is.
HWAN's own publisher sends a refresh with every 15-minute publishing round, so in practice the index moves with the feeds.
The account
One account, at the program derived address with seeds ["index"]:
| Field | Type | Meaning |
|---|---|---|
authority | Pubkey | the program's upgrade authority, which created it |
count | u8 | how many members, 10 today |
codes | [[u8; 3]; 16] | the member currencies, in the order a refresh passes their feeds |
latest | { at: i64, premium_ppm: i64 } | the average, in millionths: +5.40% is 54_000 |
oldest_member_at | i64 | the oldest member reading the latest value rests on |
hourly | [Sample; 24] | one value per UTC hour, the last refresh of the hour winning |
updates | u64 | how many refreshes ever |
| Address | |
|---|---|
| Program | EedLwkDq8nucUKu1QJpZEnLwcuUDDz3KkXa6kFvQJ12t |
| Index | 4VB52isyxdLVNYvgVXqvfVtvGkQvQe37s8pMAhxdzTCJ |
Reading it
From a Solana program, deserialize the account and check freshness, exactly as with a feed:
let index = Index::try_deserialize(&mut &account.data.borrow()[..])?;
require!(Clock::get()?.unix_timestamp - index.latest.at < 1_800, MyError::StaleIndex);
let wall_ppm = index.latest.premium_ppm; // +5.40% is 54_000
Off chain, GET /api/rates returns the index next to the feeds:
{
"index": { "address": "4VB5...zTCJ", "at": 1762725273, "premiumPpm": 54025, "oldestMemberAt": 1762725273, "members": 8 }
}
The hourly ring in both the account and the API gives the last 24 hours, so a reader can plot the day or average it without any history service.
Trading it: the world series
The index is also a market. World series expire Fridays at 18:00 UTC on hwan.io/app: the same fully collateralized dated future as every other HWAN series, with a band centred on the live index, one contract moving $10.00 per point of premium, and both sides' whole payout locked in the vault from the moment they match.
What sets a world series apart is how it settles. Every other series settles through a bonded report that anyone can challenge and arbiters can overrule. A world series needs none of that machinery: after expiry, anyone sends a single instruction naming the index account, and the program averages the account's hourly readings over the settlement day itself, inside that transaction, and stores the result. The caller signs nothing but the fee, posts no bond, and can choose nothing; whoever presses the button, the series can only settle on what the index says. It is a market that settles itself from its own oracle, with no reporter anywhere in the path.
Two safety rails hold even here. A settlement day with fewer than 18 hourly readings is refused rather than averaged thin. And if no index settlement lands within six hours of expiry, the bonded report path the other series use opens for this one too, so collateral can never be stuck behind a quiet feed.