0x68575b07…67c7·#25,913,368·view on Etherscan
is minted, your allocation is paid to you immediately, and <b>everything else is seeded into a fresh ETH pool</b> — one-sided, so the pool opens holding only your token.</p>
<p><b>Starting market cap</b> is the pool's virtual ether reserve. It sets the opening price and how hard that price is to move, which are the same dial: roughly that much buying moves the market halfway. Small numbers mean the first buyer takes a large share of the supply, which is why the form says what one ether would buy.</p>
<p><b>Creator keeps</b> is a share of the token SUPPLY, minted straight to you when the coin launches — tokens, not ether, and not a fee on trading. Keep 10% of a billion and 100,000,000 land in your wallet at once, unlocked, with nothing vesting.</p>
<p>Whatever you keep does not go into the pool, and selling it later pulls ether back out of that pool — so a modest-looking percentage can be a claim on most of what early buyers put in. Anyone deciding whether to buy your coin can work that out too.</p>
<p>A <b>logo</b> is stored as contract code on Ethereum — no IPFS, no pinning service, nothing to go dark. Upload anything; the page compresses it and shows the size before you sign. You can replace it later.</p></details>
<details><summary>Launching a cause <em><svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="9"/><circle cx="12" cy="12" r="3.5"/></svg></em></summary>
<p>The other half of the launcher, and a different thing entirely: no pool, no market, no trading. Ten million units are offered at a fixed price in ether — your <b>goal</b> divided by ten million — and what backers pay accumulates in a treasury that belongs to the cause, not to you.</p>
<p>Two clocks, and they are deliberately different lengths. <b>Runs for</b> is how long backing stays open. <b>Released over</b> sets a fixed <b>rate</b>, not a fixed fraction: the tap pays out your <em>goal</em> divided by that window, every second, whatever was actually raised. Ten ether released over a year is under three hundredths of an ether a day.</p>
<p><b>So a cause that raises less than its goal empties faster than the window suggests.</b> Raise a tenth of the goal and the treasury is drained in a tenth of the time — a tenth of a year, not a year. Since what has not been released is exactly what a backer can still burn back for, an under-subscribed cause can leave its backers with nothing well before the release window is over. Set the window long enough that a partial raise still leaves something behind, and read the daily figure below as the speed at full funding.</p>
<p>The release clock starts the moment you launch and runs whether or not anyone has backed you yet, which is why it wants to be much longer than the raise. Release over the same thirty days you raise for and the whole treasury is yours the day backing closes — and somebody who backed you on the last day gets nothing back, because there is nothing left unreleased.</p>
<p>That is what makes the token worth something on its own: <b>whatever has not been released yet can be burned back for</b>. A backer who changes their mind, or who watches a cause go quiet, redeems their share of the untouched treasury and takes their ether home. Nobody has to agree and nothing has to be voted on.</p>
<p><b>The creator can close that exit, but not quietly and not quickly.</b> Burning calls <code>ragequit</code>, which the DAO can disable — and since the creator holds the only share, they alone can propose it and carry the vote. What they cannot do is act on it at once: the change has to go through the DAO, which queues it on chain and then waits out a <b>three-day timelock</b> before it can be executed. That queue is public from the moment it is entered, and burning back stays open the whole time. So the protection is not that nobody can take the exit away; it is that taking it away is visible, and slower than leaving.</p>
<p>Backers hold <b>loot</b>, which carries that claim and no vote. You keep a single share and the vote that comes with it, and you buy that share at the same price everyone else pays — so your claim on the treasury is the same shape as theirs.</p>
<p>Paste a cause’s token into the swap and the page prices the burn for you, against the treasury rather than against a market. It is the only price such a token has, and it is the honest one.</p></details>
<details><summary>Fees</summary>
<p>A launched market charges <b>1%</b> per swap. Half of that stays in the pool as reserves, which raises the floor for every holder. The other half is collectable, and splits <b>80% creator, 10% protocol, 10% tithe</b>.</p>
<p>The <b>tithe</b> is burned to Ethereum itself. The ether goes to the BETH burner, which destroys it and mints a BETH receipt recording that it happened. Nobody can spend it and it cannot be redeemed — the ether no longer exists. What it buys is a smaller ether supply, which accrues to everyone holding ether rather than to us.</p>
<p>The token side of collected fees is burned outright too — a launched coin's supply only ever falls.</p></details>
<details><summary>What this page is</summary>
<p>There is no server. This page is served from a contract, executes only its own bytes, and needs nothing but an Ethereum node to quote and swap. Those bytes cannot be changed by anyone, us included — a new version is a new address, not an edit. The token list is a contract too, artwork included; so are the node list, the solver roster, and the adapter an outside route settles through. It talks to your wallet, to Ethereum, and — when you ask for a quote — to the aggregators listed under Swapping. Which ones those are is itself recorded on chain and curated there, not decided by this page or by whoever answers a request; any of them can be switched off in a single transaction. They are asked for a price on a pair and a size, and <b>they are not told who is asking</b>: the address they are given is the shared adapter, the same one in every other person’s request. They never see a key, and they cannot move anything, because what they return is bounded on chain before it settles. Pin <b>On-chain</b> in the venue list to skip them entirely. WalletConnect is the other outside party: reaching your phone needs its relay. Reads go through a public node you can point anywhere you like.</p>
<p>Your keys never leave your wallet. Nothing here custodies your funds; every trade settles from your address to a contract you can read.</p>
<p>The token list is <b>zList</b>, ranked on chain by conviction staking. Anything not on it can still be traded by pasting its address.</p></details>
<div class="docsmore">Longer notes at <a href="https://docs.zswap.wei.limo" target="_blank" rel="noopener">docs.zswap.wei.limo</a></div>
</div>
<footer id="foot"><span id="footV"></span><span id="footAddr"></span><span id="footBurn"></span><span>· <a id="footDoc" href="#" role="button">how it works</a></span><span>· <a id="footList" target="_blank" rel="noopener" title="Token order here comes from zList, ranked by onchain conviction staking. Stake to move a token up the list - or to get one listed at all.">token list</a></span></footer>
</div>
<script>const IC0='<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">',
ICMOON=IC0+'<path d="M20.5 14.6A8.6 8.6 0 0 1 9.4 3.5a8.6 8.6 0 1 0 11.1 11.1z"/></svg>',
ICSUN=IC0+'<circle cx="12" cy="12" r="4.2"/><path d="M12 2v2m0 16v2M4.2 4.2l1.5 1.5m12.6 12.6 1.5 1.5M2 12h2m16 0h2M4.2 19.8l1.5-1.5M18.3 5.7l1.5-1.5"/></svg>';
const ic=()=>{const d=H.className=='d';th.innerHTML=d?ICSUN:ICMOON;tc.content=d?'#0a0a0a':'#fff'};ic();
const ZSWAP_VERSION="0.3";
const ZSWAP_SELF="";
const ZSWAP_PREVIOUS="0xe686952842627A2cf81DF42CCaD54ef98046DB8D";
const ZLIST_URL="https://0x0000006d936ba3653b8854490e16e782cd32a9a8.w4eth.io/";
const selfFromUrl=()=>{
const h=(location.hostname||"").split(".");
if(!/^0x[0-9a-fA-F]{40}$/.test(h[0]||""))return "";
if(/^\d+$/.test(h[1]||"")&&h[1]!=="1")return "";
return h[0];
};
const short=a=>a.slice(0,6)+"\u2026"+a.slice(-4);
(()=>{
const self=selfFromUrl()||ZSWAP_SELF;
footV.textContent=`zSwap v${ZSWAP_VERSION}`;
footList.href=ZLIST_URL;
if(self){
footAddr.innerHTML=`\u00b7 <a href="https://etherscan.io/address/${self}#code" target="_blank" rel="noopener" `
+`title="This exact build, on chain. Its bytes cannot change; a newer version is a different address.">${short(self)}</a>`;
if(ZSWAP_PREVIOUS)footAddr.innerHTML+=` \u00b7 <a href="https://etherscan.io/address/${ZSWAP_PREVIOUS}#code" `
+`target="_blank" rel="noopener" title="The version this one succeeded. It still serves its own page, unchanged.">prev</a>`;
}
})();
th.onclick=()=>{H.classList.toggle('d');LS.t=H.className=='d'?'d':'l';ic()};
const ZQUOTER="0x000000bd2db80567c23e353ca95a251c573cbf9b";
const WNS="0x0000000000696760E15f265e828DB644A0c242EB";
const GNS="0x9D51D507BC7264d4fE8Ad1cf7Fe191933A0a81d6";
const ENSREG="0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e";
const WREG="0x53745292f0d30d68204a63002C17bDa16C772bf7";
const WROLL="0x0000C82AA4D72871568eF3859D2b0E7CF37e45f2";
const IDWEI="cea9efa56b7c8a673303d04b917a7119a2a68f8c4803d8e6fd1c3a1f0d2e4ebe";
const ZROUTER="0x000000000000FB114709235f1ccBFfb925F600e4";
const PFACTORY="0x000000Eb27B557aB426d9E99cFd54EC455799e81";
const PLQLENS="0x000000956bf20A41C54BaE4a4b6F5C8A166DAB4E";
const PPLENS="0x000000Bad3a2fa57ed74fa06000573ccddF6B7fB";
const PI_WORDS=19,PI_POOL=0,PI_LIQ=9,PI_HOOK=10,PI_SL=3,PI_SH=4,
PI_FEE=5,PI_R0=6,PI_R1=7,PI_PX=8,PI_CBPS=12;
let CHAIN_ID=1;
const CHAIN_ICON_BASE=`<svg viewBox="0 0 32 32" width="20" height="20" aria-hidden="true"><rect width="32" height="32" fill="#0052FF"/><path d="M16 5.4A10.6 10.6 0 0 0 5.5 14.7h13.9v2.6H5.5A10.6 10.6 0 1 0 16 5.4Z" fill="#fff" transform="rotate(180 16 16)"/></svg>`;
const CHAIN_ICON_RH=`<svg viewBox="0 0 32 32" width="20" height="20" aria-hidden="true"><rect width="32" height="32" fill="#CCFF00"/><g transform="translate(4 4)" fill="#110E08"><path d="M2.84 24h.53c.096 0 .192-.048.224-.128C7.591 13.696 11.94 8.656 14.67 5.638c.112-.128.064-.225-.096-.225h-4.88a.55.55 0 0 0-.45.225L5.746 9.972c-.514.642-.642 1.236-.642 2.086v4.43c-1.14 3.194-1.862 5.361-2.392 7.32-.032.125.016.192.129.192M20.447.646c-.754-.802-4.157-.834-5.73-.224a3 3 0 0 0-.786.465 41 41 0 0 0-3.323 3.178c-.112.113-.064.225.097.225h5.409c.497 0 .786.289.786.786v6.1c0 .16.128.208.225.064l3.258-4.254c.53-.69.69-.898.835-1.861.192-1.413.08-3.58-.77-4.479m-6.982 16.18 2.231-3.676a.7.7 0 0 0 .064-.29V6.73c0-.16-.112-.225-.224-.097-3.355 3.74-5.971 7.672-8.395 12.407-.06.12.016.225.16.177l5.009-1.54c.565-.174.882-.402 1.155-.852"/></g></svg>`;
const CHAINS={
1:{name:"Ethereum",short:"ETH",slow:true,sweep4:true,curve:5,fill:"0x7A2f21e476cA2ADde027BC868c5a083338EEfE54",exec:"0x4f6633342045C80Efa6c8CAc41b9bdc6145168C4",slvId:"1",slvSlug:"ethereum",sources:["UniV2","Sushi","zAMM","UniV3","UniV4","Curve","Lido","Wrap","Precision"],v4port:"0x000000dfb53Fa7f1c486470034741d5BCBE14BE9",v4lens:"0x000000c3aE1692983941495162A4AAB40660E65F",tokenlist:"0x0000006013dF75A31678B786061C2B54bf531524",
wrapped:"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",explorer:"https://etherscan.io",
rpcs:["https://ethereum-rpc.publicnode.com","https://eth-mainnet.public.blastapi.io"]},
8453:{name:"Base",short:"BASE",sweep4:false,curve:-1,fill:"0x03d95ecAF7B2Ab6027b8541b19Cb0Ce5CEd9bC74",exec:"0x1434A2579DE1009aA12b7064A161E53a5be2C030",slvId:"8453",slvSlug:"base",sources:["UniV2","Aero","zAMM","UniV3","UniV4","AeroCL","Wrap","","Precision"],v4port:"0x508ad1b0ae31FaF295c5af8C5c2bE9e33E0D19C4",v4lens:"0x0000000000000000000000000000000000000000",tokenlist:"0x0000006013dF75A31678B786061C2B54bf531524",
wrapped:"0x4200000000000000000000000000000000000006",explorer:"https://basescan.org",
icon:CHAIN_ICON_BASE,rpcs:["https://mainnet.base.org","https://base-rpc.publicnode.com"]},
4663:{name:"Robinhood",short:"RH",sweep4:false,curve:5,fill:"0x03d95ecAF7B2Ab6027b8541b19Cb0Ce5CEd9bC74",exec:"0x1434A2579DE1009aA12b7064A161E53a5be2C030",slvId:"4663",slvSlug:"robinhood",sources:["UniV2","Sushi","zAMM","UniV3","UniV4","Curve","Lido","Wrap","Precision"],v4port:"0x508ad1b0ae31FaF295c5af8C5c2bE9e33E0D19C4",v4lens:"0x0000000000000000000000000000000000000000",tokenlist:"0x0000006013dF75A31678B786061C2B54bf531524",
wrapped:"0x0bd7d308f8e1639fab988df18a8011f41eacad73",explorer:"https://robinscan.io",
rpcs:["https://rpc.mainnet.chain.robinhood.com"]},
};
CHAINS[4663].icon=CHAIN_ICON_RH;
const MB={sb:"0x000000dA7bb4B2A9E3e80e9A4D4157E26CA6189b",s1:"0x000000fF3D7A2d373615141d7489Ca66683DbecF",sw:"0x00000087A6dc5071779Ed1F8274A39230768B976",du:"0x000000a213b430D14Bae6062c176289B05e04489",ob:"0x000000e6c7a12C80525ee74e7434aAb919447D95",fl:"0x00000080198137F790DA4C52bb902cf87c276748",pr:"0x0000007Be74558A1F8c9045301c6F44C8eD0c9eB",la:"0x0000002fC8E77585A008Aa45d78A71ad36293aEe"};
const L2B={sb:"0x0000001330435808A906432449D233d482Bc9b60",sw:"0x00000032100E634903378DAEED6bA448f35F541a",du:"0x000000fa42d555173395323b2956e9c42EFaEFf2",ob:"0x0000007a1c93d42dD739E8d6cA9Dabf330934970",fl:"0x000000AC7d32e802B003a31F790eb28Ed3294Bac",pr:"0x000000D14E24e5FC8965bcDE58f21f704C944999"};
const chainCfg=()=>CHAINS[CHAIN_ID]||CHAINS[1];
const L1_RPCS=["https://ethereum-rpc.publicnode.com","https://eth-mainnet.public.blastapi.io"];
let l1i=0;
const l1Read=async(method,params)=>{
for(let k=0;k<L1_RPCS.length*2;k++){
const u=L1_RPCS[l1i%L1_RPCS.length];
try{return await httpRead(u,method,params)}catch(e){l1i++}
}
throw Error("no mainnet read node");
};
const cfgRead=(method,params)=>CHAIN_ID===1?rpc(method,params):l1Read(method,params);
const SHARE_HOST="new.zswap.wei.limo";
const ZERO="0x0000000000000000000000000000000000000000";
let WETH="0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2";
let TOKENLIST="0x0000006013dF75A31678B786061C2B54bf531524";
const ZLISTLENS="0x000000cEa3AB048d59473F3fb116A8D7F1abd247";
const SEL_RANKEDIDS="df7ca268";
const SEL_JSON="74e18e96";
const SEL_CID="fb021939",SEL_RES="4f896d4f",SEL_REV="9af8b7aa";
const SCOREM="0x57Fae63f7c63732fc4B77247F0255b11b9458AE1",SEL_SCLAIM="5cc2f461";
const SEL_WAVAIL="8f8dc386",SEL_WFEE="fcee45f4",SEL_WPREM="1bf1fffb",SEL_WCOMMIT="f14fcbc8",SEL_WCOMMITS="839df945",SEL_WREVEAL="ea9384fa",SEL_WSUB="a00fd3c8";
const SEL_RSTATE="c19d93fb",SEL_RWEIGHT="0767d178",SEL_RTICKET="673b4784",SEL_RENTER="23972aef",SEL_WOWNER="6352211e";
const WN_KEY="zswap:wns",WN_MIN=60,WN_MAX=86400;
const SEL_RSLV="0178b8bf",SEL_EADDR="3b3b57de",SEL_ENAME="691f3431";
const SEL_ERESOLVE="9061b923";
const NAME_OFFCHAIN="That name keeps its records off chain, and this page reads only on-chain state.";
const SEL_ALLOWANCE="dd62ed3e";
const SEL_LATEST="52bfe789",SEL_PREV="247dfaa8",SEL_SUCCAT="451aae60";
const MATURITY=259200;
const SEL_DS="3644e515",SEL_NONCES="7ecebe00",SEL_NAME="06fdde03",SEL_PERMIT_TH="30adf81f";
const TH_2612="6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9";
const SEL_RPERMIT="7ac2ff7b",SEL_MULTICALL="ac9650d8",SEL_SWEEP="cb019b84";
const PERMIT2="0x000000000022D473030F116dDEE9F6B43aC78BA3";
const SEL_P2TF="09d31579";
const EIP712DOM="EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)";
const SEL_APPROVE="095ea7b3";
const SEL_BALANCEOF="70a08231";
let V4PORT="0x000000dfb53Fa7f1c486470034741d5BCBE14BE9";
let V4LENS="0x000000c3aE1692983941495162A4AAB40660E65F";
const SEL_V4QUOTE="d500463c",SEL_V4SWAP="48e6f730";
const V4POOL_KEY="0x95a932c205571d4d1ca72715c642a2eca21dde79ffc28ff11509681f9383385f";
const C="eth_call",S="eth_sendTransaction",L="latest",I="eth_chainId";
let SOURCES=["UniV2","Sushi","zAMM","UniV3","UniV4","Curve","Lido","Wrap","Precision"];
const SRC_PRECISION=8;
let SRC_CURVE=5;
const ETH_ICON=`<svg width="20" height="20" viewBox="0 0 32 32"><g fill="none" fill-rule="evenodd"><circle cx="16" cy="16" r="16" fill="#627EEA"/><g fill="#FFF" fill-rule="nonzero"><path fill-opacity=".602" d="M16.498 4v8.87l7.497 3.35z"/><path d="M16.498 4L9 16.22l7.498-3.35z"/><path fill-opacity=".602" d="M16.498 21.968v6.027L24 17.616z"/><path d="M16.498 27.995v-6.028L9 17.616z"/><path fill-opacity=".2" d="M16.498 20.573l7.497-4.353-7.497-3.348z"/><path fill-opacity=".602" d="M9 16.22l7.498 4.353v-7.701z"/></g></g></svg>`;
const USDC_ICON=`<svg width="20" height="20" viewBox="0 0 32 32"><g fill="none"><circle fill="#2775CA" cx="16" cy="16" r="16"/><g fill="#FFF"><path d="M20.022 18.124c0-2.124-1.28-2.852-3.84-3.156-1.828-.243-2.193-.728-2.193-1.578 0-.85.61-1.396 1.828-1.396 1.097 0 1.707.364 2.011 1.275a.458.458 0 00.427.303h.975a.416.416 0 00.427-.425v-.06a3.04 3.04 0 00-2.743-2.489V9.142c0-.243-.183-.425-.487-.486h-.915c-.243 0-.426.182-.487.486v1.396c-1.829.242-2.986 1.456-2.986 2.974 0 2.002 1.218 2.791 3.778 3.095 1.707.303 2.255.668 2.255 1.639 0 .97-.853 1.638-2.011 1.638-1.585 0-2.133-.667-2.316-1.578-.06-.242-.244-.364-.427-.364h-1.036a.416.416 0 00-.426.425v.06c.243 1.518 1.219 2.61 3.23 2.914v1.457c0 .242.183.425.487.485h.915c.243 0 .426-.182.487-.485V21.34c1.829-.303 3.047-1.578 3.047-3.217z"/><path d="M12.892 24.497c-4.754-1.7-7.192-6.98-5.424-11.653.914-2.55 2.925-4.491 5.424-5.402.244-.121.365-.303.365-.607v-.85c0-.242-.121-.424-.365-.485-.061 0-.183 0-.244.06a10.895 10.895 0 00-7.13 13.717c1.096 3.4 3.717 6.01 7.13 7.102.244.121.488 0 .548-.243.061-.06.061-.122.061-.243v-.85c0-.182-.182-.424-.365-.546zm6.46-18.936c-.244-.122-.488 0-.548.242-.061.061-.061.122-.061.243v.85c0 .243.182.485.365.607 4.754 1.7 7.192 6.98 5.424 11.653-.914 2.55-2.925 4.491-5.424 5.402-.244.121-.365.303-.365.607v.85c0 .242.121.424.365.485.061 0 .183 0 .244-.06a10.895 10.895 0 007.13-13.717c-1.096-3.46-3.778-6.07-7.13-7.162z"/></g></g></svg>`;
const USDT_ICON=`<svg width="20" height="20" viewBox="0 0 32 32"><g fill="none" fill-rule="evenodd"><circle cx="16" cy="16" r="16" fill="#26A17B"/><path fill="#FFF" d="M17.922 17.383v-.002c-.11.008-.677.042-1.942.042-1.01 0-1.721-.03-1.971-.042v.003c-3.888-.171-6.79-.848-6.79-1.658 0-.809 2.902-1.486 6.79-1.66v2.644c.254.018.982.061 1.988.061 1.207 0 1.812-.05 1.925-.06v-2.643c3.88.173 6.775.85 6.775 1.658 0 .81-2.895 1.485-6.775 1.657m0-3.59v-2.366h5.414V7.819H8.595v3.608h5.414v2.365c-4.4.202-7.709 1.074-7.709 2.118 0 1.044 3.309 1.915 7.709 2.118v7.582h3.913v-7.584c4.393-.202 7.694-1.073 7.694-2.116 0-1.043-3.301-1.914-7.694-2.117"/></g></svg>`;
const WBTC_ICON=`<svg width="20" height="20" viewBox="0 0 32 32"><g fill="none" fill-rule="evenodd"><circle cx="16" cy="16" r="16" fill="#F7931A"/><path fill="#FFF" fill-rule="nonzero" d="M23.189 14.02c.314-2.096-1.283-3.223-3.465-3.975l.708-2.84-1.728-.43-.69 2.765c-.454-.114-.92-.22-1.385-.326l.695-2.783L15.596 6l-.708 2.839c-.376-.086-.746-.17-1.104-.26l.002-.009-2.384-.595-.46 1.846s1.283.294 1.256.312c.7.175.826.638.805 1.006l-.806 3.235c.048.012.11.03.18.057l-.183-.045-1.13 4.532c-.086.212-.303.531-.793.41.018.025-1.256-.313-1.256-.313l-.858 1.978 2.25.561c.418.105.828.215 1.231.318l-.715 2.872 1.727.43.708-2.84c.472.127.93.245 1.378.357l-.706 2.828 1.728.43.715-2.866c2.948.558 5.164.333 6.097-2.333.752-2.146-.037-3.385-1.588-4.192 1.13-.26 1.98-1.003 2.207-2.538zm-3.95 5.538c-.533 2.147-4.148.986-5.32.695l.95-3.805c1.172.293 4.929.872 4.37 3.11zm.535-5.569c-.487 1.953-3.495.96-4.47.717l.86-3.45c.975.243 4.118.696 3.61 2.733z"/></g></svg>`;
const WSTETH_ICON=`<svg width="20" height="20" viewBox="0 0 32 32"><g fill="none"><circle fill="#00A3FF" cx="16" cy="16" r="16"/><path d="M9.437 14.864l-.181.275c-2.048 3.097-1.603 7.253 1.034 9.824 1.561 1.521 3.622 2.353 5.683 2.353 0 0 0 0-6.536-12.452z" fill="#FFF"/><path opacity=".6" d="M15.997 18.611l-6.56-3.747c6.56 12.452 6.56 12.452 6.56 12.452 0-2.683 0-5.623 0-8.705z" fill="#FFF"/><path opacity=".6" d="M22.563 14.864l.181.275c2.048 3.097 1.603 7.253-1.034 9.824-1.561 1.521-3.622 2.353-5.683 2.353 0 0 0 0 6.536-12.452z" fill="#FFF"/><path opacity=".2" d="M16.003 18.611l6.56-3.747c-6.56 12.452-6.56 12.452-6.56 12.452 0-2.683 0-5.623 0-8.705z" fill="#FFF"/><path opacity=".2" d="M16.004 10.239v6.459l5.654-3.23-5.654-3.229z" fill="#FFF"/><path opacity=".6" d="M16.005 10.239l-5.655 3.229 5.655 3.23v-6.46z" fill="#FFF"/><path d="M16.005 4.805l-5.655 8.668 5.655-3.233V4.805z" fill="#FFF"/><path opacity=".6" d="M16.004 10.238l5.658 3.23-5.658-8.674v5.444z" fill="#FFF"/></g></svg>`;
const RETH_ICON=`<svg width="20" height="20" viewBox="0 0 32 32"><circle cx="16" cy="16" r="16" fill="#ED5A37"/><path d="M16 5.75L9.89 15.85 16 19.45l6.08-3.6z" fill="#FFF"/><path d="M16 20.6l-6.11-3.59L16 25.58l6.08-8.57z" fill="#FFF"/></svg>`;
const BOLD_ICON=`<svg width="20" height="20" viewBox="0 0 32 32" fill="none"><circle cx="16" cy="16" r="16" fill="#63D77D"/><path fill-rule="evenodd" clip-rule="evenodd" d="M12.1719 4.56641H8.58203V26.1016H15.7617V25.2422C16.8398 25.793 18.0586 26.1055 19.3555 26.1055C23.7148 26.1055 27.25 22.5703 27.25 18.207C27.25 13.8438 23.7148 10.3086 19.3555 10.3086C18.0586 10.3086 16.8398 10.6211 15.7617 11.1719V4.56641H12.1719ZM15.7617 11.1719C13.207 12.4805 11.457 15.1406 11.457 18.207C11.457 21.2734 13.207 23.9336 15.7617 25.2422V11.1719Z" fill="#1C1D4F"/></svg>`;
let TOKENS=[
{sym:"ETH", addr:ZERO, dec:18, icon:ETH_ICON},
{sym:"wstETH",addr:"0x7f39c581f595b53c5cb19bd0b3f8da6c935e2ca0",dec:18,icon:WSTETH_ICON},
{sym:"WETH", addr:WETH, dec:18, icon:ETH_ICON},
{sym:"rETH", addr:"0xae78736cd615f374d3085123a210448e74fc6393",dec:18,icon:RETH_ICON},
{sym:"WBTC", addr:"0x2260fac5e5542a773aa44fbcfedf7c193bc2c599",dec:8, icon:WBTC_ICON},
{sym:"USDC", addr:"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",dec:6, icon:USDC_ICON},
{sym:"USDT", addr:"0xdac17f958d2ee523a2206206994597c13d831ec7",dec:6, icon:USDT_ICON},
{sym:"BOLD", addr:"0x6440f144b7e50d6a8439336510312d2f54beb01d",dec:18,icon:BOLD_ICON},
];
let BUILTIN=TOKENS.slice();
CHAINS[1].tokens=TOKENS.slice();
CHAINS[8453].tokens=[
{sym:"ETH",addr:ZERO,dec:18,icon:ETH_ICON},
{sym:"WETH",addr:"0x4200000000000000000000000000000000000006",dec:18,icon:ETH_ICON},
{sym:"USDC",addr:"0x833589fcd6edb6e08f4c7c32d4f71b54bda02913",dec:6,icon:USDC_ICON},
{sym:"cbBTC",addr:"0xcbb7c0000ab88b473b1f5afd9ef808440eed33bf",dec:8},
{sym:"DAI",addr:"0x50c5725949a6f0c72e6c4a641f24049a917db0cb",dec:18},
{sym:"AERO",addr:"0x940181a94a35a4569e4529a3cdfb74e38fd98631",dec:18},
];
CHAINS[4663].tokens=[
{sym:"ETH",addr:ZERO,dec:18,icon:ETH_ICON},
{sym:"WETH",addr:"0x0bd7d308f8e1639fab988df18a8011f41eacad73",dec:18,icon:ETH_ICON},
{sym:"USDG",addr:"0x5fc5360d0400a0fd4f2af552add042d716f1d168",dec:6},
{sym:"NVDA",addr:"0xd0601ce157db5bdc3162bbac2a2c8af5320d9eec",dec:18},
{sym:"DEEP",addr:"0x1da24f6bb623b9d1afeae3f3146659a2662d6d27",dec:18},
];
const CHAIN_STORE="zswap:chain";
function setChain(id){
id=+id;
const c=CHAINS[id];
if(!c)return false;
if(id===CHAIN_ID)return true;
CHAIN_ID=id;
WETH=c.wrapped;
TOKENLIST=c.tokenlist;
V4LENS=c.v4lens||ZERO;
V4PORT=c.v4port||ZERO;
const b=id===1?MB:L2B;
SB2=b.sb||ZERO;SB1=b.s1||ZERO;SWAPBOL=b.sw||ZERO;DUTCH=b.du||ZERO;ORDERBOL=b.ob||ZERO;FLOOR=b.fl||ZERO;PROUTE=b.pr||ZERO;PLAUNCH=b.la||ZERO;
floorReady=null;listLive=false;listJob=null;
try{SOLVER_FILL_PIN=c.fill||ZERO;SOLVER_EXEC_PIN=c.exec||ZERO}catch{}
try{if(c.sources)SOURCES=c.sources.slice();SRC_CURVE=(c.curve===undefined?5:c.curve)}catch{}
if(c.tokens){TOKENS=c.tokens.slice();BUILTIN=TOKENS.slice();restoreCustom()}
try{if(c.rpcs&&c.rpcs.length){rpcPool=[...new Set(c.rpcs)];rpcPi=0;curated=0;curatedTry=0}}catch{}
try{localStorage[CHAIN_STORE]=String(id)}catch{}
try{chainUi()}catch{}
return true;
}
function parseV4Pools(extras,tokenAddr){
if(!Array.isArray(extras)||!/^0x[0-9a-f]{40}$/i.test(tokenAddr||""))return[];
const row=extras.find(x=>x&&typeof x.v==="string"&&String(x.k).toLowerCase()===V4POOL_KEY);
if(!row)return[];
const out=[];
for(const spec of row.v.split(";")){
const p=spec.trim().spli