deviant/scripts/sim-anthemus-fx-shared.mjs

117 lines
8.5 KiB
JavaScript
Raw Permalink Normal View History

chore: sweep in-flight work across all domains Snapshot commit rolling up ~255 files of coherent-but-multi-domain in-flight work that had accumulated on this branch. Split by area: Contracts + covenants - New: AsmFxSwap, DeviantOpenMintNBA, DeviantTieredMintOracleFT, TermCouponVault, UniformReserve, UniformReserveAggregate. - Verify-artifact refresh (src/verify/artifacts/*.json + canonical.ts). Wallet + shell (shells/app + src/wallet) - App.tsx, MainScreen, ArtemisionScreen, AssetDetail, AgoraScreen, SettingsScreen, Unlock, TokenImportModal, UniformFiat/DepositPanel, KatalogosPanel (renamed from PinaxPanel), shell.css. - src/wallet: wallet.ts, runtime.ts, index.ts. Core registry/chipnetFile. - Deleted stale hook: useAllDevBalances.ts. Cross-chain + correspondent (services/correspondent + scripts) - Correspondent server/bch/config updates for PYUSD Solana, EURC Sepolia, aggregate reserve flows. - New scripts: PYUSD roundtrip, EURC onboarding, GMX game loop / genesis / mint sanity, tiered mint fee, aggregate reserve, product2 shares dividends, product3 t-bond, uniform fiat cell tests. Telegram order-book (P2PExchange bot) - db.ts, index.ts, en/ru locales — updates upstream from the extracted standalone repo at D:/Dev/P2PExchange. Docs — Parameters (specs), wiki, snapshots, design mockups - Parameters: FIATm/MBA_Shares/Potidaea/Anthemus refinements + ASM_CrossChain/DebitCredit + UniformFiat + Anthemus DEX MVP prompt + Artemision + Athenae Politeia + Philosophy + SSHkeyServer runbook + new dApp/{Artemision,Katalogos,Pinax,Pari_escrow,SURFACES}. - wiki: cross-chain, games-tote, glossary, governance/voting-systems, infra, wallet, wallet-ui-design, decisions (ADR log). - snapshots: catch-up entries and INDEX regeneration. - design: mockups refreshed (agora, asset-detail, assets-tab, potidaea) + Potidaea assets + tote deploy notes. Housekeeping - .gitignore: exclude the new root test/session state files (.sol-vault-keys.json, .football-tote-state.json, .tote-platform-state.json, .redeem-roundtrip-state.json, .eurc-onboard-state.json — some contain oracle privkeys / vault secretKeyBase58; NEVER commit) + the .usdm-historical-chart.html chart output + MS Office `~$*` lock files + scripts/bundle-surfaces `build/` output. Also add scripts/bundle-surfaces.mjs. - CLAUDE.md, WALLET-COORDINATION.md, snapshots/INDEX.md, design/README.md refreshed. - package.json / package-lock.json bumps. Verified: sensitive files at repo root confirmed ignored (git check-ignore each). No `.env`, no raw WIF/xprv/mnemonic/secretKey/oraclePriv strings in the staged diff. MS Word autosave file (`Parameters/Philosophy/~$*.docx`) excluded and gitignored. The WizardConnect responder work landed separately in the previous commit (6987591); this is everything else that had accumulated alongside it. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-07-29 01:14:33 +02:00
#!/usr/bin/env node
/**
* sim-anthemus-fx-shared.mjs — the 3-way risk split (desk 40 / swapper 30 / withdrawer 30) and
* the competitive-fee thesis: even the WORST-case shared fee is smaller than a single Ethereum
* transaction, so users migrate TO Bitcoin Cash and STAY.
*
* Answers directly: a $100 covenant swap, rate moves 5%, imbalance capped at 10% of the pool, the
* withdrawer share spread pro-rata across the 90% base. What does the swapper pay? the withdrawer?
*
* Real-world fee benchmarks are approximate/illustrative (2026); the point is the ORDER OF MAGNITUDE.
* Run: node scripts/sim-anthemus-fx-shared.mjs
*/
const $=(n)=>(n<0?'-':'')+'$'+Math.abs(Math.round(n*10000)/10000).toLocaleString('en-US',{minimumFractionDigits:2,maximumFractionDigits:4});
const pct=(n)=>(n*100).toFixed(3)+'%';
const div=(c='=')=>console.log(c.repeat(94));
const head=(t)=>{console.log('\n');div();console.log(t);div();};
// ---- the split (pinned by the user) ----
const SPLIT={desk:0.40, swapper:0.30, withdrawer:0.30};
// ════════════════════════════════════════════════════════════════════════════
head('PART 1 — the exact calculation: $100 swap, 5% rate move, 40/30/30 split.');
{
const swap=100, move=0.05;
const pool=1000; // $100 swap = 10% of pool (the imbalance cap)
const baseFrac=0.90; // 90% reserve base the withdrawer share is spread over
const drift=swap*move; // FX drift on the swapped notional
const dDesk=drift*SPLIT.desk, dSwap=drift*SPLIT.swapper, dWith=drift*SPLIT.withdrawer;
const withdrawBase=pool*baseFrac;
const withdrawFeeRate=dWith/withdrawBase;
console.log(` $${swap} covenant swap (oracle mid, NO market spread). Rate moves ${pct(move)} adversely.`);
console.log(` Total FX drift on the position = $${swap} × ${pct(move)} = ${$(drift)}. Split 40/30/30:\n`);
console.log(` DESK bears 40% = ${$(dDesk)} (${pct(dDesk/pool)} of the $${pool} pool — mostly paper, bounded)`);
console.log(` SWAPPER bears 30% = ${$(dSwap)} = ${pct(dSwap/swap)} of their $${swap} swap <-- the swapper's fee`);
console.log(` WITHDRAWERS bear 30% = ${$(dWith)} spread across 90% base ($${withdrawBase})`);
console.log(` => withdrawal fee = ${pct(withdrawFeeRate)} = ${$(100*withdrawFeeRate)} on a $100 withdrawal\n`);
console.log(` ANSWER:`);
console.log(` • Swapper's loss/fee : ${$(dSwap)} (${pct(dSwap/swap)}) — and ONLY in a 5% adverse move; ~0 normally.`);
console.log(` • Withdrawer's loss : ${pct(withdrawFeeRate)} of their withdrawal (${$(100*withdrawFeeRate)} per $100) — "just a withdrawal fee".`);
console.log(` • Desk's cost : ${$(dDesk)} (${pct(dDesk/pool)} of pool) — and usually paper, not realized (report-6).`);
console.log(`\n Note: the withdrawer need not know the fee's origin (FX rebalancing) — it is simply a small,`);
console.log(` bounded withdrawal fee, socialized across the large stable base exactly like any payment network.`);
}
// ════════════════════════════════════════════════════════════════════════════
head('PART 2 — sensitivity: the fees stay small even in big moves (band caps exposure).');
{
const swap=100, pool=1000, baseFrac=0.90;
console.log(['rate move','drift on $100','swapper fee','withdrawer fee','desk % of pool'].map(s=>s.padStart(18)).join(''));
div('-');
for(const move of [0.01,0.05,0.10,0.20]){
const drift=swap*move;
const dSwap=drift*SPLIT.swapper, dWith=drift*SPLIT.withdrawer, dDesk=drift*SPLIT.desk;
const wf=dWith/(pool*baseFrac);
console.log([pct(move), $(drift), pct(dSwap/swap), pct(wf), pct(dDesk/pool)].map(s=>String(s).padStart(18)).join(''));
}
console.log('\n Even a 20% FX crash (the full 2022 parity move) → swapper 6%, withdrawer 0.67%, desk 0.8% of pool.');
console.log(' And these are the TAIL. In the normal two-way regime the drift is ~0, so all three fees are ~0.');
}
// ════════════════════════════════════════════════════════════════════════════
head('PART 3 — the migration thesis: BCH fees vs the alternatives (a $100 cross-currency move).');
{
const rows=[
['Ethereum USDC→EURC (DEX)', 'gas ~$3–20 + DEX 0.1–0.3% + slippage', '~3%–20%+ on $100'],
['Bank / card FX', 'FX markup 1–3% + fixed fees', '~2%–4%'],
['Wire / remittance', 'flat $15–40 + 1–2% FX', '~15%+ on $100'],
['CEX (deposit→trade→withdraw)', 'trade 0.1% + withdraw $1–25 + KYC', '~1%–25%'],
['— — —', '', ''],
['BCH Anthemus — NORMAL', 'swap ~0% + withdraw ~0% + tx <$0.001', '≈ $0.00'],
['BCH Anthemus — 5% STRESS', 'swapper 1.5% + withdraw 0.167% + tx <$0.001', '~$1.67 all-in'],
['BCH Anthemus — 20% CRASH', 'swapper 6% + withdraw 0.67% + tx <$0.001', '~$6.67 all-in'],
];
for(const [venue,fees,allin] of rows){
if(venue.startsWith('—')){ console.log(' '+'-'.repeat(88)); continue; }
console.log(' '+venue.padEnd(30)+fees.padEnd(44)+allin);
}
console.log('\n => For SMALL/MEDIUM payments the Ethereum GAS ALONE ($3–20) often exceeds our entire STRESS-case');
console.log(' all-in fee. On BCH the base tx is <$0.001, and even the tail risk-share fee undercuts a bank.');
console.log(' In the normal regime the cost is effectively zero. There is no cheaper cross-currency rail.');
}
// ════════════════════════════════════════════════════════════════════════════
head('PART 4 — why 40/30/30 is a genuine balance, and the "stay, don\'t leave" flywheel.');
console.log(`
THE BALANCE (why sharing beats concentrating):
• Desk 40% — small enough that the desk's worst exposure = 40% × band(10%) × maxMove(20%) = 0.8% of
the reserve. Trivial capital; the desk can offer a NEAR-HARD peg without a big buffer or premium.
• Swapper 30% — partial "polluter pays": the user who created the position bears some of its drift,
which aligns incentives and needs only a tiny buffer (30% of a few-% drift). Not full de-risking,
but for a payments user who just wants to spend, retaining a sliver of FX is a non-issue.
• Withdrawer 30% — socialized as a tiny withdrawal fee across the 90% base. Universal in payments;
the user need not know its origin. Bounded by the band; ~0 in the normal regime.
No single party carries a dangerous share; the peg is "effectively hard" (worst withdrawer haircut
~0.17% at 5%, ~0.67% at 20%) — smaller than any competitor's baseline fee.
THE REFRAME (you are right): "hard vs soft peg" is the wrong axis for a PAYMENTS product. Every
payment network charges fees — often 2–3%. A peg that costs a BOUNDED, TRANSPARENT, sub-1% fee only
in a stress tail is not "soft" in any way a user cares about; it is simply the cheapest withdrawal
fee they will find. Call it a withdrawal fee, disclose the cap, move on.
THE FLYWHEEL — migrate IN, and STAY:
• One uniform rail for 100+ fragmented stablecoins (USDT/USDC/EURC/… across Tron/ETH/BSC/Sol),
all tradeable against each other on a chain with <$0.001 fees and offline-receivable settlement.
• Leaving (withdrawing to a home chain) costs the small risk-share fee + that chain's gas; STAYING
costs ~nothing and unlocks the whole hub (spend, swap, receive, the DEX, the ecosystem).
• So the fee structure itself is a GRAVITY WELL: the rational move is to bring value ONTO BCH and
keep it there, because every capability lives here and every exit pays the foreign chain's toll.
The 90%-stays-on-chain assumption (report-6) is not just an accounting fact — it is the product's
core incentive, and the risk-share fees are calibrated to reinforce it.
HONEST CAVEATS: the swapper/withdrawer shares are VARIABLE (state-dependent), unlike a fixed payment
fee — bounded + on-chain-transparent, but not constant; disclose the cap. The swapper retains 30% of
FX direction (fine for payments, not for a hedger). Fee benchmarks are illustrative 2026 orders of
magnitude. Real path stress numbers from the 2021-23 sims; directional, not a forecast.
`);