memoscan
← all memos

Memo 0x45f043ad…0bfe77 on Ethereum

0x5ba199a9…7ba9·#25,619,942·view on Etherscan
st Oa=new Map,gn=new Map;let ks=null;function hf(){if(ks=null,!gn.size)return;const t=[...gn.keys()],e=t.map(r=>gn.get(r));gn.clear(),yd(t).then(r=>{t.forEach((a,s)=>{const i=r[a]??null;vf(a,i),e[s].forEach(l=>l(i))})}).catch(()=>t.forEach((r,a)=>e[a].forEach(s=>s(null))))}function tl(t,e){const r=gn.get(t)??new Set;r.add(e),gn.set(t,r),clearTimeout(ks),ks=setTimeout(hf,df)}function pf(){return zn||(zn=new IntersectionObserver(t=>{for(const e of t){if(!e.isIntersecting)continue;const r=Oa.get(e.target);r&&(zn.unobserve(e.target),Oa.delete(e.target),tl(r.id,r.deliver))}},{rootMargin:uf}),zn)}function _f(t,e,r){if(en.has(e))return r(en.get(e)),()=>{};if(typeof IntersectionObserver>"u")return tl(e,r),()=>{};const a=pf();return Oa.set(t,{id:e,deliver:r}),a.observe(t),()=>{Oa.delete(t),a.unobserve(t)}}var wf=x('<img class="art svelte-m95sb2"/>'),mf=x('<span class="art art--empty svelte-m95sb2"> </span>');function zs(t,e){Ge(e,!0);let r=dr(e,"size",3,128),a=dr(e,"fluid",3,!1),s=dr(e,"src",3,null),i=A(null),l=A(null),c=A("loading…"),u=null;ue(()=>{const y=s()??"#"+e.id;if(y===u)return;if(s()){u=y,m(l,s());return}if(!n(i))return;u=y;let I=!0;m(l,null),m(c,"loading…");const k=_f(n(i),e.id,R=>{if(I){if(R){m(l,R,!0);return}zo(BigInt(e.id)).then(Y=>{I&&m(l,JSON.parse(atob(Y.slice(Y.indexOf(",")+1))).image,!0)}).catch(()=>{I&&m(c,"no art")})}});return()=>{I=!1,k()}});const f=X(()=>a()?"width:100%;aspect-ratio:1":`width:${r()}px;height:${r()}px`);var b=Er(),p=lt(b);{var w=y=>{var I=wf();E(()=>{Gt(I,"src",n(l)),Gt(I,"alt","Rock #"+e.id),La(I,n(f))}),h(y,I)},v=y=>{var I=mf(),k=o(I);Aa(I,R=>m(i,R),()=>n(i)),E(()=>{La(I,n(f)),g(k,n(c))}),h(y,I)};S(p,y=>{n(l)?y(w):y(v,-1)})}h(t,b),Ze()}var bf=x('<span class="tag svelte-3ie79d">private</span>'),gf=x('<button type="button" class="primary buy svelte-3ie79d"> </button>'),yf=x('<div class="card svelte-3ie79d"><a class="art svelte-3ie79d"><!></a> <div class="meta svelte-3ie79d"><a class="id svelte-3ie79d"> </a> <!></div> <div class="row svelte-3ie79d"><span class="price svelte-3ie79d"> </span> <!></div> <div class="row sub2 svelte-3ie79d"><span> </span> <span> </span></div></div>');function el(t,e){Ge(e,!0);let r=dr(e,"buy",3,null);const a=X(()=>!!(e.row.listing&&e.row.listing.price>0n)),s=X(()=>!!(e.row.listing&&!jt(e.row.listing.onlyTo))),i=X(()=>C.account?Oo(e.row.listing,C.account):"Connect a wallet to buy.");let l=A(!1);async function c(){if(!(n(l)||!r())){m(l,!0);try{await r()(e.row.id)}finally{m(l,!1)}}}var u=yf(),f=o(u),b=o(f);zs(b,{get id(){return e.row.id},fluid:!0});var p=d(f,2),w=o(p),v=o(w),y=d(w,2);{var I=U=>{var yt=bf();h(U,yt)};S(y,U=>{n(s)&&U(I)})}var k=d(p,2),R=o(k),Y=o(R),G=d(R,2);{var D=U=>{var yt=gf(),mt=o(yt);E(()=>{yt.disabled=!!n(i)||n(l),Gt(yt,"title",n(i)??""),g(mt,n(l)?"buying…":"Buy")}),ct("click",yt,c),h(U,yt)};S(G,U=>{n(a)&&r()&&U(D)})}var nt=d(k,2),B=o(nt),F=o(B),Z=d(B,2),_t=o(Z);E((U,yt,mt)=>{Gt(f,"href","#/rock/"+e.row.id),Gt(f,"aria-label","Rock #"+e.row.id),Gt(w,"href","#/rock/"+e.row.id),g(v,`#${e.row.id??""}`),g(Y,U),g(F,yt),g(_t,mt)},[()=>n(a)?_.formatEther(e.row.listing.price)+" ETH":"–",()=>e.row.bid&&e.row.bid.amount>0n?"bid "+_.formatEther(e.row.bid.amount)+" ETH":"",()=>n(a)?"exp "+nd(e.row.listing.expiry):""]),h(t,u),Ze()}Yr(["click"]);var kf=x('<span class="info svelte-kuwzzo"><button type="button" class="mark svelte-kuwzzo">i</button> <span role="tooltip"> </span></span>');function rl(t,e){Ge(e,!0);let r=dr(e,"label",3,"More information"),a=dr(e,"align",3,"left"),s,i=A(0);function l(){if(!s)return;const w=s.getBoundingClientRect(),v=w.left-n(i),y=w.right-n(i),I=document.documentElement.clientWidth,k=8;let R=0;v<k?R=Math.round(k-v):y>I-k&&(R=Math.round(I-k-y)),R!==n(i)&&m(i,R,!0)}ue(()=>{e.text,a(),l(),addEventListener("resize",l);const w=new ResizeObserver(l);return w.observe(document.body),()=>{removeEventListener("resize",l),w.disconnect()}});var c=kf(),u=o(c),f=d(u,2);let b;var p=o(f);Aa(f,w=>s=w,()=>s),E(()=>{Gt(u,"aria-label",r()),b=Ur(f,1,"bubble svelte-kuwzzo",null,b,{right:a()==="right"}),La(f,n(i)?`translate: ${n(i)}px`:""),g(p,e.text)}),yo("pointerenter",c,l),ct("focusin",c,l),h(t,c),Ze()}Yr(["focusin"]);class xf{#t=A(!1);get on(){return n(this.#t)}set on(e){m(this.#t,e,!0)}seconds=15}const wn=new xf;var Ef=x('<span class="refresh svelte-1kspdzn"><label class="check svelte-1kspdzn"><input type="checkbox" class="svelte-1kspdzn"/> Auto-refresh</label> <!> <span class="said svelte-1kspdzn" role="status"> </span> <button type="button"> </button></span>');function js(t,e){Ge(e,!0);let r=dr(e,"autoRun",19,()=>e.run),a=dr(e,"label",3,"Refresh"),s=A(!1),i=A(!1),l;function c(){m(i,!0),clearTimeout(l),l=setTimeout(()=>m(i,!1),2e3)}async function u(){m(s,!0),m(i,!1);try{await e.run(),c()}finally{m(s,!1)}}const f="Updates this page every "+wn.seconds+" seconds, so new bids and sales show up without you reloading.";ue(()=>{if(!wn.on)return;let Y=!0,G,D=0,nt=null;async function B(){if(!Y)return;let F=wn.seconds*1e3;try{if((C.current||ut.rpcUrl)&&document.visibilityState==="visible"&&!n(s)){const _t=await Gr("eth_blockNumber",[]);_t!==nt&&(nt=_t,await r()(),c())}D=0}catch{D+=1,F=Math.min(F*2**D,12e4)}Y&&(G=setTimeout(B,F))}return G=setTimeout(B,wn.seconds*1e3),()=>{Y=!1,clearTimeout(G)}});var b=Ef(),p=o(b),w=o(p),v=d(p,2);rl(v,{get text(){return f},label:"What auto-refresh does",align:"right"});var y=d(v,2),I=o(y),k=d(y,2),R=o(k);E(()=>{g(I,n(i)?"Updated":""),k.disabled=n(s),g(R,n(s)?"Refreshing…":a())}),To(w,()=>wn.on,Y=>wn.on=Y),ct("click",k,u),h(t,b),Ze()}Yr(["click"]);var Sf=x('<p class="muted"> </p>'),Tf=x('<p class="failed"> </p>'),If=x('<p class="muted">Loading…</p>'),Lf=x('No rocks wrapped yet. <a href="#/wrap">Wrap one →</a>',1),Af=x('<p class="muted"><!></p>'),Cf=x('<div class="pager"><button type="button">← Prev</button> <span class="where"> </span> <button type="button">Next →</button></div>'),Of=x('<div class="rock-grid"></div> <!>',1),Rf=x('<div class="statbar svelte-1r6myry"><div class="stat svelte-1r6myry"><span class="v svelte-1r6myry"> </span><span class="eyebrow">For sale</span></div> <div class="stat svelte-1r6myry"><span class="v svelte-1r6myry"> <em class="svelte-1r6myry"> </em></span><span class="eyebrow">Floor</span></div> <div class="stat svelte-1r6myry"><span class="v svelte-1r6myry"> </span><span class="eyebrow">Supply</span></div> <div class="stat svelte-1r6myry"><span class="v svelte-1r6myry"> <em class="svelte-1r6myry"> </em></span><span class="eyebrow">Volume</span></div></div> <!> <div class="tabs svelte-1r6myry"><button type="button"> </button> <button type="button"> </button> <button type="button"> </button></div> <!>',1),Nf=x('<div class="head"><h1>Market</h1> <div class="controls"><form class="jump svelte-1r6myry"><label class="eyebrow svelte-1r6myry">Go to rock <input type="number" min="0" placeholder="1234" size="6" class="svelte-1r6myry"/></label> <button type="submit" class="svelte-1r6myry">Open</button></form> <label class="eyebrow">Sort <select><option>Id</option><option>Price</option></select></label> <!></div></div> <!>',1);function Bf(t,e){Ge(e,!0);let r=A(zt([])),a=A(zt([])),s=A(zt([])),i=A(zt({})),l=A(null),c=A(null),u=A(null),f=A(null),b=A(!1),p=A("all"),w=A("id"),v=A(0),y=A(zt([])),I=A("");const k=48;ue(()=>{C.current,R()});async function R(){m(b,!0),m(f,null),$o();try{const[N,P,J,Kt,ce]=await Promise.all([xd(),Uo(),Vo(),kd().catch(()=>null),Sd().catch(()=>null)]);m(r,N,!0),m(a,P,!0),m(s,J,!0),m(l,Kt,!0),m(c,ce,!0);const te=P.length?await Fs(P):[],Ne={};P.forEach((qt,me)=>Ne[qt]=te[me]),m(i,Ne,!0);const de=te.map(qt=>qt.price).filter(qt=>qt>0n);m(u,de.length?de.reduce((qt,me)=>me<qt?me:qt):null,!0),m(v,0)}catch(N){m(f,N.message,!0)}finally{m(b,!1)}}const Y=X(()=>n(p)==="sale"?n(a):n(p)==="bids"?n(s):n(r)),G=X(()=>{const N=[...n(Y)];if(n(w)==="price"){const P=J=>n(i)[J]&&n(i)[J].price>0n?n(i)[J].price:2n**200n;N.sort((J,Kt)=>{const ce=P(J),te=P(Kt);return ce<te?-1:ce>te?1:J-Kt})}else N.sort((P,J)=>P-J);return N}),D=X(()=>Math.max(1,Math.ceil(n(G).length/k))),nt=X(()=>n(G).slice(n(v)*k,(n(v)+1)*k));ue(()=>{const N=n(nt);let P=!0;if(!N.length){m(y,[],!0);return}return Zo(N).then(J=>{P&&m(y,J,!0)}).catch(()=>{}),()=>{P=!1}});function B(N){m(p,N,!0),m(v,0)}function F(N){N.preventDefault();const P=String(n(I)).trim();P!==""&&(Ou("/rock/"+Number(P)),m(I,""))}let Z=A(null);async function _t(N){m(Z,null);try{await Qo(BigInt(N)),await R()}catch(P){m(Z,"#"+N+": "+pe(P))}}var U=Nf(),yt=lt(U),mt=d(o(yt),2),St=o(mt),Lt=o(St),se=d(o(Lt)),tt=d(St,2),H=d(o(tt)),ft=o(H);ft.value=ft.__value="id";var wt=d(ft);wt.value=wt.__value="price";var oe=d(tt,2);js(oe,{run:R});var le=d(yt,2);{var Cr=N=>{var P=Sf(),J=o(P);E(Kt=>g(J,Kt),[()=>Ro(n(f),{connected:!!C.account,endpoint:ut.rpcUrl})]),h(N,P)},$t=N=>{var P=Rf(),J=lt(P),Kt=o(J),ce=o(Kt),te=o(ce),Ne=d(Kt,2),de=o(Ne),qt=o(de),me=d(qt),Zr=o(me),Or=d(Ne,2),Kr=o(Or),Rr=o(Kr),hr=d(Or,2),Nr=o(hr),Ke=o(Nr),Br=d(Ke),Mr=o(Br),pr=d(J,2);{var sr=j=>{var V=Tf(),at=o(V);E(()=>g(at,n(Z))),h(j,V)};S(pr,j=>{n(Z)&&j(sr)})}var Hr=d(pr,2),Te=o(Hr);let Pr;var Xr=o(Te),ir=d(Te,2);let _r;var T=o(ir),K=d(ir,2);let gt;var M=o(K),$=d(Hr,2);{var bt=j=>{var V=If();h(j,V)},Mt=j=>{var V=Af(),at=o(V);{var Tt=xt=>{var Nt=he("Nothing is listed right now.");h(xt,Nt)},Et=xt=>{var Nt=he("No standing bids right now.");h(xt,Nt)},Rt=xt=>{var Nt=Lf();h(xt,Nt)};S(at,xt=>{n(p)==="sale"?xt(Tt):n(p)==="bids"?xt(Et,1):xt(Rt,-1)})}h(j,V)},Ht=j=>{var V=Of(),at=lt(V);Tr(at,21,()=>n(y),Rt=>Rt.id,(Rt,xt)=>{el(Rt,{get row(){return n(xt)},buy:_t})});var Tt=d(at,2);{var Et=Rt=>{var xt=Cf(),Nt=o(xt),Ut=d(Nt,2),be=o(Ut),fe=d(Ut,2);E(()=>{Nt.disabled=n(v)===0,g(be,`Page ${n(v)+1} of ${n(D)??""} · ${n(G).length??""} rocks`),fe.disabled=n(v)>=n(D)-1}),ct("click",Nt,()=>m(v,Math.max(0,n(v)-1),!0)),ct("click",fe,()=>m(v,Math.min(n(D)-1,n(v)+1),!0)),h(Rt,xt)};S(Tt,Rt=>{n(D)>1&&Rt(Et)})}h(j,V)};S($,j=>{n(b)&&!n(r).length?j(bt):n(G).length?j(Ht,-1):j(Mt,1)})}E((j,V)=>{g(te,n(a).length),g(qt,j),g(Zr,n(u)!=null?" ETH":""),g(Rr,n(l)??"–"),g(Ke,V),g(Mr,n(c)!=null?" ETH":""),Pr=Ur(Te,1,"svelte-1r6myry",null,Pr,{active:n(p)==="all"}),g(Xr,`All (${n(r).length??""})`),_r=Ur(ir,1,"svelte-1r6myry",null,_r,{active:n(p)==="sale"}),g(T,`For sale (${n(a).length??""})`),gt=Ur(K,1,"svelte-1r6myry",null,gt,{active:n(p)==="bids"}),g(M,`With bids (${n(s).length??""})`)},[()=>n(u)!=null?_.formatEther(n(u)):"–",()=>n(c)!=null?_.formatEther(n(c)):"–"]),ct("click",Te,()=>B("all")),ct("click",ir,()=>B("sale")),ct("click",K,()=>B("bids")),h(N,P)};S(le,N=>{n(f)?N(Cr):N($t,-1)})}yo("submit",St,F),Ce(se,()=>n(I),N=>m(I,N)),Bs(H,()=>n(w),N=>m(w,N)),h(t,U),Ze()}Yr(["click"]);var Ai=x('<span class="raw svelte-xraaj5"> </span>'),Mf=x('<span class="named you svelte-xraaj5"><span class="nm svelte-xraaj5">you</span> <!></span>'),Hf=x('<span class="named svelte-xraaj5"><span class="nm svelte-xraaj5"> </span> <!></span>'),Pf=x('<span class="raw only svelte-xraaj5"> </span>');function cs(t,e){Ge(e,!0);let r=dr(e,"stacked",3,!1),a=dr(e,"you",3,!0),s=A(null);const i=X(()=>a()&&!!e.address&&!!C.account&&e.address.toLowerCase()===C.account.toLowerCase());ue(()=>{let p=!0;m(s,null);const w=e.address;return w&&qo(w).then(v=>{p&&m(s,v,!0)}).catch(()=>{}),()=>{p=!1}});var l=Er(),c=lt(l);{var u=p=>{var w=Mf(),v=d(o(w),2);{var y=I=>{var k=Ai(),R=o(k);E(()=>g(R,e.address)),h(I,k)};S(v,I=>{r()&&I(y)})}E(()=>Gt(w,"title",n(s)??e.address)),h(p,w)},f=p=>{var w=Hf(),v=o(w),y=o(v),I=d(v,2);{var k=R=>{var Y=Ai(),G=o(Y);E(()=>g(G,e.address)),h(R,Y)};S(I,R=>{r()&&R(k)})}E(()=>{Gt(w,"title",e.address),g(y,n(s))}),h(p,w)},b=p=>{var w=Pf(),v=o(w);E(()=>{Gt(w,"title",e.address),g(v,e.address)}),h(p,w)};S(c,p=>{n(i)?p(u):n(s)?p(f,1):p(b,-1)})}h(t,l),Ze()}var Wf=x('<p class="muted"> </p>'),Ci=x('<p class="muted">loading…</p>'),Df=x(`<p class="svelte-2mvwa1"><strong> </strong></p> <p class="muted svelte-2mvwa1">Rocks above id 9999 can't be wrapped. They can only be absorbed into a rock you own, adding +1 Dust to it.</p> <p class="svelte-2mvwa1"><a class="cta svelte-2mvwa1" href="#/wrap">Go to wrap →</a></p>`,1),Ff=x(`<p class="muted svelte-2mvwa1">You just merged it into <a> </a>. Its mass and dust are there now, and this id can never be wrapped again.</p> <p class="svelte-2mvwa1"><a class="cta svelte-2mvwa1"> </a></p>`,1),zf=x('<p class="muted svelte-2mvwa1">Its mass and dust went to a lower id. This id can never be wrapped again.</p> <p class="svelte-2mvwa1"><a class="cta svelte-2mvwa1" href="#/market">Browse the market →</a></p>',1),jf=x('<p class="svelte-2mvwa1"><strong> </strong></p> <!>',1),qf=x(`<p class="svelte-2mvwa1"><strong> </strong></p> <p class="muted svelte-2mvwa1">Someone holds the raw 2017 rock right now. Wrapping it again brings back this exact rock, with the same art, mass and dust.</p> <p class="svelte-2mvwa1"><a class="cta svelte-2mvwa1" href="#/wrap">Wrap a rock →</a></p>`,1),Uf=x(`<p class="svelte-2mvwa1"><strong> </strong></p> <p class="muted svelte-2mvwa1">There's no token for this id yet, so it can't be bought or bid on. If you hold the raw 2017 rock, wrap it and it becomes tradeable here.</p> <p class="svelte-2mvwa1"><a class="cta svelte-2mvwa1" href="#/wrap">Wrap a rock →</a></p>`,1),Vf=x('<div class="unwrapped svelte-2mvwa1"><!></div>'),Yf=x("<span> </span>"),Gf=x('<span class="swatch svelte-2mvwa1"></span><span class="mono"> </span>',1),Zf=x('<dt> </dt> <dd class="svelte-2mvwa1"><!></dd>',1),Kf=x('<dt>Status</dt><dd class="svelte-2mvwa1"><span> </span></dd> <dt>Mass</dt><dd class="svelte-2mvwa1"> </dd> <dt>Dust</dt><dd class="svelte-2mvwa1"> </dd>',1),Xf=x('<strong class="svelte-2mvwa1"> </strong> <!>',1),Oi=x('<strong class="svelte-2mvwa1"> </strong> ',1),Qf=x("<p><em>Connect a wallet to trade.</em></p>"),Jr=x('<p class="note bad"> </p>'),$e=x('<p class="failed"> </p>'),Jf=x('<div class="action-card"><p class="note"> </p> <div class="row"><div class="actions"><button type="button" class="primary"> </button></div></div> <!> <!></div>'),$f=x("<strong> </strong> ",1),tv=x("<strong> </strong>"),ev=x('<div class="fields"><label>Bid <input type="text" placeholder="0.5" size="8"/> ETH</label></div>'),rv=x('<button type="button" class="primary"> </button>'),Ri=x('<button type="button"> </button>'),nv=x('<p class="note">Costs you <strong> </strong> </p>'),av=x('<p class="note">Locks up the full <strong> </strong>.</p>'),sv=x(`<p class="note">Locks up <strong> </strong> until the owner accepts it or you take it back.</p>`),iv=x(`<div class="action-card"><p class="note">Locks up ETH as a bid. If the owner accepts it the rock is yours, and if not you can take your ETH back at any time. Enter the <strong>total</strong> you want your bid to be. <!></p> <div class="row"><!> <div class="actions"><!> <!></div></div> <!> <!></div>`),ov=x('<label>Sell only to <input type="text" placeholder="0x… or name.gwei" size="20"/></label>'),Ni=x('<p class="note">Resolving name…</p>'),lv=x('<p class="note">Lists to <span class="mono"> </span></p>'),Bi=x('<p class="note bad">No address is registered for that name. Check the spelling, or enter an address.</p>'),cv=x('<div class="action-card"><p class="note"> <!>. <!></p> <div class="row"><div class="actions"><button type="button" class="primary"> </button></div></div> <!></div>'),uv=x('<p class="note"> <!></p>'),dv=x("It is listed, so the transfer cancels that listing too<!>.",1),fv=x('<p class="note">Sends to <span class="mono"> </span></p>'),vv=x(`<div class="action-card"><p class="note">Puts this rock up for sale at a price you set. Anyone can buy it until the listing expires, or just one address if you make it a private sale. Listing again updates the current listing. <!></p> <div class="row"><div class="fields"><label>List at <input type="text" placeholder="1.5" size="8"/> ETH for <input type="number" min="1" size="4"/> days</label> <div class="private svelte-2mvwa1"><label class="check svelte-2mvwa1"><input type="checkbox" class="svelte-2mvwa1"/> Private sale (one address only)</label> <!></div></div> <div class="actions"><button type="button" class="primary"> </button> <!></div></div> <!> <!> <!> <!> <!></div> <!> <h3 class="svelte-2mvwa1">Consolidate</h3> <div class="action-card"><p class="note">Combines two rocks you own into one. The lower id survives with both rocks' mass and dust, and the higher id is burned. You pick which art it keeps.</p> <div class="row"><div class="fields"><label>Merge with #<input type="number" min="0" size="6"/></label> <label>keep <select><option>this rock's look</option><option>the other's look</option><option>reroll</option></select></label></div> <div class="actions"><button type="button" class="primary"> </button></div></div> <!> <!></div> <div class="action-card"><p class="note">Burns rocks above id 9999 that you own, each one adding +1 Dust to this rock. Type the ids, or a range like <span class="mono">10001-10005</span> </p> <div class="row"><div class="fields"><label>Absorb dust <input type="text" size="20" placeholder="10001, 10004-10006"/></label></div> <div class="actions"><button type="button" class="primary"> </button></div></div> <!> <!></div> <h3 class="svelte-2mvwa1">Unwrap</h3> <div class="action-card"><p class="note">Turns this token back into the raw 2017 rock.</p> <div class="row"><div class="actions"><button type="button" class="primary"> </button></div></div> <!></div> <h3 class="svelte-2mvwa1">Transfer</h3> <div class="action-card"><p class="note">Gifts this rock to an address or .gwei name. <!></p> <div class="row"><div class="fields"><label>Send to <input type="text" placeholder="0x… or name.gwei" size="20"/></label></div> <div class="actions"><button type="button" class="primary"> </button></div></div> <!> <!> <!></div>`,1),hv=x('<h2 class="svelte-2mvwa1">Actions</h2> <!> <!> <!> <div class="action-card"><p class="note">Removes a listing that can no longer be bought, like an expired one.</p> <div class="row"><div class="actions"><button type="button" class="primary"> </button></div></div> <!></div>',1),pv=x('<tr class="svelte-2mvwa1"><td class="svelte-2mvwa1"> </td><td class="svelte-2mvwa1"> </td><td class="svelte-2mvwa1"> </td><td class="addr svelte-2mvwa1"><!></td><td class="addr svelte-2mvwa1"><!></td></tr>'),_v=x('<div class="ledger-wrap svelte-2mvwa1"><table class="ledger svelte-2mvwa1"><thead><tr><th class="svelte-2mvwa1">Block</th><th class="svelte-2mvwa1">Price</th><th class="svelte-2mvwa1">Kind</th><th class="svelte-2mvwa1">Seller</th><th class="svelte-2mvwa1">Buyer</th></tr></thead><tbody class="svelte-2mvwa1"></tbody></table></div>'),wv=x('<p class="muted">No sales yet.</p>'),mv=x('<div class="detail-head svelte-2mvwa1"><div class="artwrap svelte-2mvwa1"><!></div> <div class="facts svelte-2mvwa1"><h2 class="svelte-2mvwa1">Traits</h2> <dl class="svelte-2mvwa1"><!> <dt>Owner</dt><dd class="svelte-2mvwa1"><!></dd></dl></div></div> <h2 class="svelte-2mvwa1">Orders</h2> <div class="orders svelte-2mvwa1"><p class="svelte-2mvwa1"><span class="ok svelte-2mvwa1">Listing</span> <!></p> <p class="svelte-2mvwa1"><span class="ok svelte-2mvwa1">Top bid</span> <!></p> <p class="svelte-2mvwa1"><span class="ok svelte-2mvwa1">Last sale</span> <!></p></div> <!> <h2 class="svelte-2mvwa1">Price history <!></h2> <p><button type="button">Load history</button></p> <!> <!>',1),bv=x('<p class="backrow svelte-2mvwa1"><a class="back svelte-2mvwa1" href="#/market"><svg viewBox="0 0 16 16" width="13" height="13" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="square" stroke-linejoin="miter" class="svelte-2mvwa1"><path d="M10 3 L5 8 L10 13"></path></svg> Market</a></p> <div class="head"><h1> </h1> <div class="controls"><!></div></div> <!>',1);function gv(t,e){Ge(e,!0);let r=A(null),a=A(null),s=A(!1),i=A(!1),l=A(null),c=A(""),u=A(""),f=A("30"),b=A(!1),p=A(""),w=A(null),v=A(!1),y=A(""),I=A(null),k=A(!1),R=A(""),Y=A("0"),G=A("");ue(()=>{C.current,C.account,e.id,D(),nt()});async function D(){m(a,null);try{const T=BigInt(e.id),[K,gt,M,$,bt,Mt,Ht,j]=await Promise.all([Kn(T),wd(T),md(T),Ws(T),is(T),jo(T),gd(T).catch(()=>null),bd(T).catch(()=>!1)]);m(r,{owner:K,mass:gt,dust:M,listing:$,bid:bt,sale:Mt,meta:Ht,rolled:j},!0),C.account&&m(s,await Ps(C.account).catch(()=>!1),!0)}catch(T){m(a,T.message,!0)}}async function nt(){m(i,C.account?await Hs():!1,!0)}const B=X(()=>n(r)&&n(r).owner&&C.account&&n(r).owner.toLowerCase()===C.account.toLowerCase()),F=X(()=>n(r)&&n(r).listing&&!jt(n(r).listing.seller)),Z=X(()=>n(r)&&n(r).bid&&n(r).bid.amount>0n),_t=X(()=>n(Z)&&C.account&&n(r).bid.bidder.toLowerCase()===C.account.toLowerCase());let U=A(null);const yt=X(()=>n(F)&&!n(B)?Oo(n(r).listing,C.account):null),mt=X(()=>{if(!ke(n(c)))return null;let T=null;try{T=_.parseEther(n(c).trim())}catch{T=null}return ki(T,n(Z)?n(r).bid.amount:0n,!!n(_t))});let St=A(!1);async function Lt(){if(tt.bid=null,n(mt)?.issue){tt.bid=n(mt).issue;return}m(St,!0);try{const T=_.parseEther(n(c).trim()),K=await is(wt()),gt=K.amount>0n?K.amount:0n,M=gt>0n&&!!C.account&&K.bidder.toLowerCase()===C.account.toLowerCase(),$=ki(T,gt,M);if($.issue){tt.bid=$.issue,await D();return}await qd(wt(),$.send),m(c,""),await D()}catch(T){tt.bid=pe(T)}finally{m(St,!1)}}async function se(){await ft("accept",async()=>{const T=n(r).bid.amount,K=await is(wt());if(K.amount<T)throw await D(),new Error(K.amount===0n?"That bid has been withdrawn.":`The bid dropped to ${_.formatEther(K.amount)} ETH. Accept again if you still want it.`);await Gd(wt(),T)})}const tt=zt({}),H=zt({});async function ft(T,K){if(!H[T]){tt[T]=null,H[T]=!0;try{await K(),await D()}catch(gt){tt[T]=pe(gt)}finally{H[T]=!1}}}const wt=()=>BigInt(e.id),oe=T=>!!C.account&&!!T&&T.toLowerCase()===C.account.toLowerCase(),le=X(()=>ya(n(R))??(ke(n(R))&&Number(n(R))===Number(e.id)?"A rock can't merge with itself.":null)),Cr=X(()=>ke(n(R))&&!n(le)),$t=X(()=>rd(n(G))),N=X(()=>n($t).ids.length>0&&!n($t).issue);ue(()=>{const T=n(p).trim();if(m(w,null),m(v,!1),!n(b)||!T||Fr(T))return;let K=!0;m(v,!0);const gt=setTimeout(async()=>{const M=await Si(T).catch(()=>null);K&&(m(w,M?{name:T,address:M}:null,!0),m(v,!1))},350);return()=>{K=!1,clearTimeout(gt)}});const P=X(()=>n(b)?Fr(n(p).trim())?n(p).trim():n(w)?.address??null:null),J=X(()=>{if(!n(b))return null;const T=n(p).trim();return ke(T)?!Fr(T)&&(n(v)||!n(w))?null:n(P)&&oe(n(P))?"That's your own address. Name someone else, or turn off private sale.":null:"Enter the address or .gwei name allowed to buy, or turn off private sale."}),Kt=(1n<<96n)-1n,ce=X(()=>{const T=n(u).trim();if(!T)return null;try{return _.parseEther(T)}catch{return null}}),te=X(()=>ke(n(u))?n(ce)==null?"Enter a price in ETH, like 1.5.":n(ce)===0n?"A listing needs a price above 0 ETH. You can't give a rock away by listing at 0; that sale would fail.":n(ce)>Kt?"That price is larger than a listing can hold.":null:null);async function Ne(){!ke(n(u))||n(te)||n(J)||n(b)&&!n(P)||await ft("list",async()=>{const{time:T}=await Wo(),K=T+Number(n(f)||"30")*86400,gt=n(b)?n(P):null;await Yd(wt(),n(ce),K,gt)})}ue(()=>{const T=n(y).trim();if(m(I,null),m(k,!1),!T||Fr(T))return;let K=!0;m(k,!0);const gt=setTimeout(async()=>{const M=await Si(T).catch(()=>null);K&&(m(I,M?{name:T,address:M}:null,!0),m(k,!1))},350);return()=>{K=!1,clearTimeout(gt)}});const de=X(()=>Fr(n(y).trim())?n(y).trim():n(I)?.address??null),qt=X(()=>{const T=n(y).trim();return!ke(T)||!Fr(T)&&(n(k)||!n(I))?null:n(de)&&oe(n(de))?"That's your own address. A transfer sends the rock to someone else.":null});async function me(){n(qt)||!n(de)||await ft("transfer",async()=>{await Pd(wt(),n(de)),m(y,"")})}async function Zr(T){const K=(C.account||"").toLowerCase(),[gt,M]=await Promise.all([Kn(wt()),Kn(T)]);return M?M.toLowerCase()!==K?`You don't own rock #${T}. A merge needs both rocks in one wallet.`:!gt||gt.toLowerCase()!==K?`You no longer own rock #${e.id}.`:(T>wt()?T:wt())<100n?`#${e.id} and #${T} are both under 100,