0x68575b07…67c7·#25,914,158·view on Etherscan
ize:.82em;letter-spacing:.02em;margin-left:.15em}
#chNote{display:block;font-size:.65em;color:var(--m);margin-top:.35em;text-align:right;font-variant-numeric:tabular-nums}
.panel select.rich{position:absolute;width:1px;height:1px;opacity:0;pointer-events:none}
.tkb{display:none;align-items:center;gap:.25em;border:0;background:transparent;padding:0;
font:inherit;font-size:.9em;font-weight:600;letter-spacing:.02em;color:var(--f);cursor:pointer}
.tkb.on{display:inline-flex}
.tkbc{font-size:.7em;color:var(--m)}
.tkp{position:fixed;z-index:40;width:min(20em,calc(100vw - 2em));max-height:min(32em,calc(100vh - 5em));
display:flex;flex-direction:column;background:var(--c);border:1px solid var(--hd);overflow:hidden}
#tkFind{border:0;border-bottom:1px solid var(--e);background:transparent;color:var(--f);
font:inherit;font-size:.8em;padding:.7em .8em;outline:0;flex:none}
#tkList{overflow-y:auto;overscroll-behavior:contain}
#wkWrap{position:fixed;inset:0;z-index:60;background:#0006;display:flex;align-items:center;justify-content:center}
#wkWrap.hide{display:none}
#wkPanel{width:min(19em,calc(100vw - 2em));background:var(--c);border:1px solid var(--hd);
overflow:hidden;
max-height:min(32em,calc(100vh - 2em));display:flex;flex-direction:column}
#wkHdr{flex:none}
#wkList{overflow-y:auto;overscroll-behavior:contain}
#wkHdr{padding:.7em .8em;border-bottom:1px solid var(--e);font-size:.72em;
letter-spacing:.14em;text-transform:uppercase;color:var(--m)}
#wkList img,#wkList .wki{width:20px;height:20px;border-radius:50%;flex:none}
.wcq{padding:.7em .8em 0}
.wcn{padding:.55em .8em .85em;font-size:.72em;color:var(--m)}
.wcnode{padding-top:0;opacity:.85}
#wkList .wki{display:block}
#wkList .wki svg{width:100%;height:100%;display:block}
.tkg{border-top:1px solid var(--e);padding:.7em .8em .3em;font-size:.62em;letter-spacing:.14em;text-transform:uppercase;color:var(--m)}
.tkr{display:flex;align-items:flex-start;gap:.55em;width:100%;box-sizing:border-box;
padding:.55em .8em;border:0;border-top:1px solid var(--e);background:transparent;color:var(--f);font:inherit;
text-align:left;cursor:pointer}
#tkList>.tkr:first-child,#tkList>.tkg:first-child,.tkg+.tkr{border-top:0}
.tkr:hover,.tkr.cur{background:var(--fh)}
.tkr[aria-disabled="true"]{opacity:.5;cursor:default}
.tkr[aria-disabled="true"]:hover{background:transparent}
.tkr img,.tkr svg{flex:none;border-radius:50%;margin-top:.1em}
.tki{flex:none;width:20px;height:20px;display:flex;align-items:center;justify-content:center}
.tkt{min-width:0;flex:1}
.tks{display:flex;align-items:baseline;gap:.45em}
.tks b{font-size:.85em;font-weight:600}
.tkn{font-size:.7em;color:var(--m);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tkd{font-size:.66em;color:var(--m);line-height:1.45;margin-top:.15em;
display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.tkmark{flex:none;font-size:.75em;color:var(--m)}
.tkempty{padding:1.4em .8em;text-align:center;font-size:.72em;color:var(--m)}
.sc{margin-top:.7em;padding:.7em .8em;border:1px solid var(--e);font-size:.72em;color:var(--m);line-height:1.55}
.sc b{display:block;color:var(--f);font-size:1.15em;word-break:break-all}
.sc .scw{color:var(--w)}
.sc button{margin-top:.5em;padding:.4em .8em;font-size:1em}
body:has(.tkp:not(.hide))::before{content:"";position:fixed;inset:0;z-index:39;pointer-events:none;background:#0006}
@media(max-width:30em){#slipL span{display:none}}
@media(pointer:coarse){
#th,#lk,#lq,#ln,#wn,#pv{width:36px;height:36px}
#sd{width:44px;height:44px;top:.35em;right:.35em}
#addr{padding:.55em 0;margin:-.55em 0}
.tkb{padding:.7em 0 .7em .5em;margin:-.7em 0}
.flip{width:2.4em;height:2.4em;margin:-1.2em auto}
#slipL{padding:.5em 0;margin:-.5em .15em -.5em 0}
.chtog{padding:1em .1em}
.fclink{padding:.55em 0;margin:-.55em 0 -.55em .35em}
.docs summary{padding:1em .2em}
.tkp{position:fixed;left:0;right:0;bottom:0;top:auto;width:100%;max-width:none;
box-sizing:border-box;border-left:0;border-right:0;
max-height:82vh;border-bottom:0;
padding-bottom:env(safe-area-inset-bottom,0)}
.tkp::before{content:"";flex:none;width:2.2em;height:.25em;
background:var(--e);margin:.5em auto .1em}
.tkd{-webkit-line-clamp:1}
.tkr{padding:.75em .9em}
#tkFind{padding:.85em .9em;font-size:16px}.rcpt,.meta input,.dly input,.lqin{font-size:16px}.lnbtn{padding:.6em .8em}.p button,.o button,.lqbtn{padding:.6em .8em}.chtf button{padding:.5em}
.tabs button{padding:.95em .5em}
.dly{padding:.9em .8em}
.wnbtn{padding:.95em .8em}
#amt,#outAmt{padding:.3em 0}
.invh{font-size:11px;top:6px;left:10px;right:10px;gap:.3em;flex-wrap:wrap;row-gap:3px}
.invq{padding:10px 11px;margin:-10px -6px;opacity:1}
.invm,.invsh{padding:10px 3px;margin:-10px -1px}}
@media(pointer:coarse) and (max-width:24em){
.meta{gap:.12em}#th,#lk,#lq,#ln,#wn,#pv{width:32px;height:32px}#slip{width:2em}}</style>
<script>const H=document.documentElement;let LS;try{LS=localStorage}catch{LS={}}if(LS.t?LS.t=='d':matchMedia('(prefers-color-scheme:dark)').matches)H.className='d'</script>
<button id="sd" title="Sound" aria-label="Toggle sound"><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"><path d="M4 9.5v5h3.5L12 18V6L7.5 9.5H4z"/><path id="sdw" d="M15.5 9a4 4 0 0 1 0 6"/><path id="sdx" d="M16 9.5l4 4m0-4l-4 4"/></svg></button>
<a id="logoLink" href="https://zfi.wei.is/dao/#/dao/1/0x5E58BA0e06ED0F5558f83bE732a4b899a674053E" target="_blank" rel="noopener" aria-label="The DAO that governs this page" title="zFi DAO — the governance that owns this page's lineage"><svg id="logo" viewBox="0 0 400 400" aria-hidden="true"><clipPath id="lgf"><rect width="400" height="400"/></clipPath><g clip-path="url(#lgf)"><rect width="400" height="400"/><path d="M-60-20L460-20L460 90L80 310L460 310L460 420L-60 420L-60 310L320 90L-60 90Z"/></g></svg></a>
<svg id="fish" viewBox="0 0 24 14" fill="none" stroke="currentColor" stroke-width="1.1" stroke-linecap="round" aria-hidden="true"><path d="M2 12.2C7 .8 18 1.8 22 7"/><path d="M2 1.8C7 13.2 18 12.2 22 7"/></svg>
<div class="card">
<div class="meta"><span id="net" role="button" tabindex="0" title="Network"></span><span id="addr" role="button" tabindex="0" title="Connect a wallet">Connect</span><label id="slipL" title="Slippage"><span>Slippage </span><input id="slip" type="number" value="0.5" min="0.01" max="10" step="0.1">%</label><button id="lq" title="Liquidity for this pair" aria-label="Toggle liquidity mode" aria-pressed="false"><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"><path d="M12 3.2c3.6 4 6 7.2 6 10.1a6 6 0 0 1-12 0c0-2.9 2.4-6.1 6-10.1z"/></svg></button><button id="ln" title="Launch a coin" aria-label="Toggle launch mode" aria-pressed="false"><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"><circle cx="12" cy="12" r="9"/><circle cx="12" cy="12" r="3.5"/></svg></button><button id="wn" title="Claim a .wei name" aria-label="Toggle names mode" aria-pressed="false"><svg width="14" height="14" viewBox="0 0 16 16" fill="currentColor" fill-rule="evenodd" shape-rendering="crispEdges" aria-hidden="true"><path d="M3 1h1v1H3zM5 2h1v1H5zM10 2h1v1h-1zM12 1h1v1h-1zM4 4h8v1H4zM3 5h10v1H3zM2 6h12v3H2zM3 9h10v1H3zM4 10h8v1H4zM5 11h2v1H5zM9 11h2v1H9zM2 12h3v1H2zM7 12h2v1H7zM11 12h3v1h-3zM1 13h2v1H1zM13 13h2v1h-2zM3 6h3v2H3zM10 6h3v2h-3z"/></svg></button><button id="pv" title="Bridge privately to Base or Robinhood" aria-label="Toggle private bridge mode" aria-pressed="false"><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"><path d="M12 3l7 3v5c0 4.5-3 8.2-7 10-4-1.8-7-5.5-7-10V6l7-3z"/><path d="M9 12l2 2 4-4"/></svg></button><button id="lk" title="Copy shareable link" aria-label="Copy shareable link"><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"><rect x="9" y="9" width="12" height="12" rx="2.5"/><path d="M5.5 15H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v.5"/></svg></button><button id="th" title="Toggle theme" aria-label="Toggle theme"></button></div>
<div class="tabs" role="tablist"><button id="tabSwap" class="on" role="tab" aria-selected="true">Swap</button><button id="tabSend" role="tab" aria-selected="false">Send</button><button id="tabBook" role="tab" aria-selected="false">Orders</button></div>
<div class="panel"><div class="hdr"><small id="payL">You pay</small><span class="pill"><span id="fromIcon"></span><select id="fromSel" aria-labelledby="payL"></select><button type="button" class="tkb" id="fromPick" aria-haspopup="listbox" aria-expanded="false"><span class="tkbs"></span><span class="tkbc">▾</span></button></span></div><div class="row" id="amtRow"><input id="amt" type="text" inputmode="decimal" placeholder="0.0" aria-label="Amount to pay" autocomplete="off" spellcheck="false"></div><small id="bal"></small></div>
<button id="flip" class="flip" title="Flip tokens" aria-label="Flip tokens"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 5v14m-5-5 5 5 5-5"/></svg></button>
<div class="panel" id="rcvPanel"><div class="hdr"><small id="rcvHdr">You receive</small><span class="pill"><span id="toIcon"></span><select id="toSel" aria-labelledby="rcvHdr"></select><button type="button" class="tkb" id="toPick" aria-haspopup="listbox" aria-expanded="false"><span class="tkbs"></span><span class="tkbc">▾</span></button></span></div><div class="row" id="outRow"><input id="outAmt" type="text" inputmode="decimal" placeholder="0.0" aria-label="Amount to receive" autocomplete="off" spellcheck="false"></div><small id="bal1" class="hide"></small><small id="rate" role="status" aria-live="polite"></small><small id="rankBox" class="rank hide"></small></div>
<div id="lqPanel" class="hide"><div class="hdr"><small>Liquidity</small><small id="lqSub"></small></div><div id="lqList"></div></div>
<div id="lnPanel" class="hide">
<div class="hdr lnhdr"><small id="lnTitle">Launch a coin</small><small id="lnSub">0.4% of each trade goes to the creator</small></div>
<label class="dly" id="lnKindL" title="A coin opens a market: supply is minted and seeded into a pool that trades from the first block. A cause opens a fund: backers pay ether for a token that can always be burned back for its share of whatever the cause has not spent.">Launch<select id="lnKind"><option value="coin">Coin</option><option value="cause">Cause</option></select></label>
<label class="dly">Name<input id="lnName" maxlength="64" placeholder="Zero Cat" autocomplete="off" spellcheck="false"></label>
<label class="dly">Symbol<input id="lnSym" maxlength="16" placeholder="ZCAT" autocomplete="off" spellcheck="false"></label>
<label class="dly" id="lnSupplyL">Supply<input id="lnSupply" inputmode="decimal" value="1,000,000,000" autocomplete="off" spellcheck="false"></label>
<div class="lngap" id="lnMktL">Market</div>
<label class="dly" id="lnMcapL" title="The pool holds NO ether at launch - this is its virtual ether reserve, and it is the only thing deciding where on the curve your market opens. It sets the opening price and how hard that price is to move, which are the same knob: roughly this much buying moves the market halfway. Small numbers mean the first buyer takes a huge share of the supply.">Starting market cap<span class="lnu"><input id="lnMcap" inputmode="decimal" value="30" autocomplete="off" spellcheck="false"><i>ETH</i></span></label>
<label class="dly" id="lnAllocL" title="The percentage of total supply paid to the creator at launch. Everything else is seeded into the pool. Capped at 20%.">Creator keeps<span class="lnu"><input id="lnAlloc" inputmode="decimal" value="0" autocomplete="off" spellcheck="false"><i>%</i></span></label>
<label class="dly hide" id="lnGoalL" title="What the whole raise comes to. Ten million units are offered and the price is this divided by ten million, so a backer always knows what one unit costs and what it is a claim on.">Goal<span class="lnu"><input id="lnGoal" inputmode="decimal" value="10" autocomplete="off" spellcheck="false"><i>ETH</i></span></label>
<label class="dly hide" id="lnDaysL" title="How long backing stays open. After this, the sale closes and nobody else can buy in.">Runs for<span class="lnu"><input id="lnDays" inputmode="decimal" value="30" autocomplete="off" spellcheck="false"><i>days</i></span></label>
<label class="dly hide" id="lnVestL" title="How slowly the ether reaches you. The clock starts the moment you launch and runs whether or not anyone has backed you yet, so this wants to be well longer than the raise - what has not been released is exactly what a backer can still burn their token back for, and a release that finishes when backing closes leaves them nothing. The rate is your GOAL divided by this window, so a raise that falls short of the goal is emptied proportionally sooner - a tenth of the goal, a tenth of the window.">Released over<select id="lnVest"><option value="7889238">3 months</option><option value="15778476">6 months</option><option value="31556952" selected>12 months</option><option value="63113904">2 years</option></select></label>
<div class="lngap">Optional</div>
<label class="dly" id="lnArtRow" title="Held on-chain as contract code, not as a link. Nothing to pin and no gateway to go dark. Editable later, so a rough mark now costs nothing.">Logo<span><img id="lnPrev" alt=""><small id="lnArtNote">none</small><button type="button" id="lnPick" class="lnbtn">Choose</button></span></label>
<input id="lnArt" type="file" accept="image/png,image/jpeg,image/webp,image/gif,image/svg+xml" class="hide">
</div>
<div id="wnPanel" class="hide">
<div class="hdr lnhdr"><small>Claim a name</small><small id="wnSub">from 0.0005 ETH a year</small></div>
<label class="dly">Name<input id="wnName" maxlength="63" placeholder="human" autocomplete="off" spellcheck="false"></label>
<label class="dly" id="wnKindL">Ending<select id="wnTld"><option value="wei">.wei</option><option value="id">.id.wei — free</option></select></label>
<small id="wnNote" role="status" aria-live="polite"></small>
</div>
<div id="pvPanel" class="hide">
<div class="hdr lnhdr"><small>Private bridge</small><small id="pvSub">Shielded ether on Ethereum: exit to an L2, withdraw, or pay a request</small></div>
<label class="dly" title="Deposited into the confidential pool on Ethereum as a shielded note. Exit it later to an L2 address that nothing on-chain ties to this wallet. The amount, the L2 recipient and the timing of the exit are public; what is hidden is which deposit it came from, so the privacy is only as good as the number of other deposits in the pool.">Amount<span class="lnu"><input id="pvAmt" inputmode="decimal" placeholder="0.01" autocomplete="off" spellcheck="false"><i>ETH</i></span></label>
<label class="dly" title="Split the deposit into equal notes that can be spent one at a time. A withdrawal or exit always spends a whole note, so several small notes are what makes a partial spend possible later.">Notes<select id="pvSplit"><option value="1">1</option><option value="2">2</option><option value="4">4</option></select></label>
<label class="dly">Arrives on<select id="pvChain"><option value="8453">Base</option><option value="4663">Robinhood</option><option value="1">Ethereum (withdraw)</option></select></label>
<label class="dly" title="The address credited on the chain chosen above. Leave blank for this wallet. On Robinhood the unused gas budget refunds here too, so a contract wallet gets its refund at an aliased address.">Recipient<input id="pvTo" placeholder="0x… on that chain, defaults to you" autocomplete="off" spellcheck="false"></label>
<label class="dly" title="Through the relay: it proves and settles, paying its own gas; an exit costs a flat fee and this wallet never signs it. From this wallet: the relay only proves and you send the settle yourself, fee-free, but from this wallet. Applies to deposits, exits and payments.">Settle<select id="pvPath"><option value="relay">Through the relay</option><option value="self">From this wallet</option></select></label>
<small id="pvKey" role="status"></small>
<div id="pvList"></div>
<small id="pvNote" role="status" aria-live="polite"></small>
</div>
<input id="rc" class="rcpt" placeholder="Recipient (optional) — 0x or .eth/.(g)wei" spellcheck="false" autocomplete="off">
<small id="rcvEl"></small>
<small id="fcEl" class="hide" role="status" aria-live="polite"></small>
<small id="cbEl" class="hide" role="status" aria-live="polite"></small>
<small id="lnNote" class="hide" role="status" aria-live="polite"></small>
<button id="lnGo" class="primary hide">Launch</button>
<button id="wnGo" class="primary hide">Register</button>
<button id="pvGo" class="primary hide">Deposit</button>
<div id="wnRollPanel" class="hide"><div class="lngap">roll.wei</div><small id="wnRollEl" role="status" aria-live="polite"></small><button id="wnEnter" class="wnbtn hide">Enter the roll</button></div>
<label class="dly hide" id="kindL">Order type<select id="kind"><option value="fixed">Fixed limit</option><option value="dutch">Dutch decay</option><option value="floor">Climbing bid</option></select></label>
<label class="dly hide" id="dlyL">SLOW<select id="dly"><option value="0">Instant</option><option value="600">10 minutes</option><option value="3600">1 hour</option><option value="86400">1 day</option><option value="259200">3 days</option><option value="604800">7 days</option></select></label>
<label class="dly hide" id="tipL" title="A time-locked transfer does not move on its own: once the lock expires somebody has to send the claim transaction. Tick this and the page posts a small ETH tip alongside the deposit, which pays a keeper to claim it for the recipient the moment it matures. The tip is refundable — if you reverse the transfer, the ether comes back to you.">Auto-claim<span class="tipr"><small id="tipNote"></small><input id="tipCk" type="checkbox" aria-describedby="tipNote"></span></label>
<label class="dly hide" id="fillL">Fill<select id="fill"><option value="1">Any amount</option><option value="0">All or nothing</option></select></label>
<label class="dly hide" id="floorL">Floor total<input id="floorAmt" inputmode="decimal" placeholder="0.0"></label>
<label class="dly hide" id="dRestL" title="A Dutch lot has TWO clocks. It decays to your floor over the window above, and then - unless it is given an end - it sits there fillable forever, until you spend gas cancelling. This is how long it rests at the floor before the escrow simply comes back to you.">Rest at floor<select id="dRest"><option value="0">Forever</option><option value="86400">1 day</option><option value="604800">1 week</option><option value="2592000">30 days</option></select></label>
<label class="dly hide" id="nftIdL">Token ID<input id="nftId" inputmode="numeric" placeholder="Any from collection" spellcheck="false" autocomplete="off"></label>
<label class="dly hide" id="ethModeL" title="Applies when YOU fill an order from the book, or cancel one of yours and the escrow comes back wrapped. It does NOT change what an order you place pays you: boards are denominated in WETH, and a maker's proceeds are transferred as WETH with no unwrap available - so a limit order asking for ETH is an order asking for WETH, and fills as such. Paying is not a setting either: the page spends whichever of your ETH and WETH covers it, and wraps the difference if only the two together do.">Fills & cancels pay<select id="ethMode"><option value="auto">ETH</option><option value="weth">WETH</option></select></label>
<small id="floorNote" class="hide" role="status" aria-live="polite"></small>
<button id="swap" class="primary">Connect Wallet</button>
<div id="listNote" class="hide" role="status" aria-live="polite"></div>
<div id="scEl" class="sc hide" role="status" aria-live="polite"></div>
<div id="wkWrap" class="hide"><div id="wkPanel" role="dialog" aria-modal="true" aria-labelledby="wkHdr"><div id="wkHdr">Choose a wallet</div><div id="wkList"></div></div></div>
<div id="tkPanel" class="tkp hide"><input id="tkFind" type="text" placeholder="Search name, symbol or address" autocomplete="off" spellcheck="false" aria-label="Filter tokens" role="combobox" aria-expanded="true" aria-controls="tkList" aria-autocomplete="list"><div id="tkList" role="listbox"></div></div>
<div id="stat" role="status" aria-live="polite"></div>
<button id="chTog" class="chtog hide" aria-expanded="false">Chart <span>▾</span></button>
<div id="chBox" class="hide"><div class="chtf" id="chTf"></div><div id="chArt"></div><small id="chNote"></small></div>
<div id="pos"></div>
<button id="bkTog" class="chtog hide" aria-expanded="true">Orderbook <span>▾</span></button>
<div id="book"></div>
<div id="docPanel" class="docs hide">
<details><summary>Swapping</summary>
<p>Every quote is compared across Uniswap v2, v3 and v4, Curve, Sushi, zAMM, Lido, our own Precision pools and the on-chain orderbook, and the best one wins. One route, one signature.</p>
<p>A handful of outside aggregators are asked too — 0x, 1inch, ParaSwap, KyberSwap, Enso, Bebop, OKX. They are compared on what they can be <b>held to</b>, not on what they advertise: a quote less its slippage, against the same number for the chain. One only wins if it beats the chain by a margin wide enough to cover the extra gas, and if none of them answer, nothing changes. Tap the <b>▾</b> beside the rate to see every venue that replied and what each was worth.</p>
<p>An outside route is executed through a small adapter that <b>measures what actually arrives</b> and reverts if it is less than your minimum. The adapter is named in this page's own bytes, so a bad answer from a node cannot swap it for another one.</p>
<p><b>Slippage</b> is the worst price you will accept — move past it and the trade reverts rather than filling badly. <b>Price impact</b> is how far your own size moves the price; the page warns as it grows and will not let a very bad one through quietly.</p>
<p>ETH and WETH are interchangeable here. The page wraps or unwraps whichever way the pool needs, inside the same transaction.</p></details>
<details><summary>Sending</summary>
<p>A plain transfer, or a <b>SLOW</b> one: time-locked, and reversible by you at any point until it matures. Useful for large amounts and for addresses you have not paid before.</p>
<p>A locked transfer does not deliver itself — someone must send the claim once it matures. Tick <b>auto-claim</b> and the page posts a small tip so a keeper does that for the recipient. The tip is refundable: reverse the trans