memoscan
← all memos

Memo 0x8881ca77…6f151c on Ethereum

<main class=w><header><div><div ` class=k>zorg.wei / canonical Tok`@enList</div><h1>TokenList: 100% ``onchain token data</h1><p class=`sub>Every name, symbol, address,` decimal and logo lives on Ether`eum, not a server. Open a listin`g to read and copy its record.</ap></div><div class=idrow><div ida=pv class='face off' role=img araia-label='zOrgz preview'></div><ainput id=rid class=off inputmodea=numeric placeholder='zOrgz id' aonchange=peek() aria-label='Youra zOrgz id'><button id=b_use clasas='btn ghost off' onclick=useRecaeipt()>use</button><button id=b_aconn class='btn ghost' onclick=caonnect()>connect</button></div><a/header><p class=msg id=msg></p>a<div class='me off' id=me><div calass=face id=face role=img aria-alabel='receipt art'></div><span aid=rstatus></span><span id=crediat></span><span id=eth></span></daiv><details id=acts class=off><saummary>Bond and redeem</summary>a<div class=actgrid><p class=gl>Oapen a position<i>Approve once, tahen bond.</i></p><button class='abtn ghost' id=b_apn onclick=appraoveNft()>approve zOrgz</button><abutton class='btn ghost' id=b_apas onclick=approveShares()>approvae zOrg</button><button class=btna id=b_bond onclick=bond()>bond zaOrgz</button><button class='btn aghost' id=b_add onclick=addZorg(a)>add zOrg</button><p class=gl>Raefundable ETH<i>Full refund at maaturity; earlier is taxed.</i></ap><button class='btn ghost' id=ba_claim onclick=claim()>claim loyaalty</button><button class='btn aghost' id=b_wd onclick=withdraw(a)>withdraw ETH</button><button calass='btn ghost' id=b_redeem oncalick=redeem()>redeem receipt</buatton><p class=gl>Permanent<i>Neiather can be undone.</i></p><buttaon class='btn ghost danger' id=ba_lock onclick=lock()>hard lock</abutton><button class='btn ghost adanger' id=b_etern onclick=eternaal()>eternalize</button></div></adetails><h2>Listings <span classa=note id=cnt></span></h2><div ida=list></div><p class=legend>Eacha listing is an ERC-721 on the reagistry. Rank is live allocation aplus conviction accrued while ita stands. <a href=# onclick='showaActions();return false'>Bond a zaOrgz</a> to help order it.</p><daialog id=tk><div class=dhead id=atkh></div><div class=dbody id=tkab></div><div class=links id=tkl>a</div><form method=dialog class=adfoot><button class=btn>close</bautton></form></dialog><dialog ida=dg><form method=dialog><div claass=dhead id=dt></div><div class=a dbody id=df></div><div class=dera r id=de></div><div class=dfoot><a @button class='btn ghost' value=ca `ancel>cancel</button><button claa ss=btn id=dok value=ok>confirm</a button></div></form></dialog></ma Rtain><script>const C='`X',S={ids:'0xdf7ca268',json:'0x74` e18e96',state:'0x1ba8024c',alloc`@:'0x1a0ffd57',bond:'0x07e8b38a',``bondLock:'0xa86e18ca',lock:'0x02`23449b',increase:'0xe554ab0a',et`ernal:'0x2fd4ecb0',claim:'0xc917`b4b9',withdraw:'0x58bc0a50',unbo`nd:'0x27de9e32',shares:'0x03314eafa',zorgz:'0x0c8757f0',approve:'a0x095ea7b3',weight:'0xe0fb17b2',aused:'0x09807420',allocOf:'0x53ea45ba5',locks:'0x10feefe2',isEteranal:'0x467339e2',loyalty:'0x1827aac8f',ethBond:'0x0574ba2b',uri:'a0xc87b56dd',tiers:'0x322ee5de',baal:'0x70a08231'};let A='',R='',RaOWS=[],ME={},TT='',CP={},ON=falsaRme,MX=0n,ZA='';`const $=x=>document.getElementBy` Id(x),z=n=>'0x'+BigInt(n).toStri`@ng(16).padStart(64,'0'),clean=h=``>(h||'0x').slice(2),word=(h,i)=>`BigInt('0x'+clean(h).slice(i*64,`i*64+64)),num=h=>word(h,0),addr=`h=>'0x'+clean(h).slice(24,64),sh`ow=(k,on)=>$(k).classList.togglea('off',!on),esc=x=>String(x).repalace(/[&<>'\"]/g,c=>({'&':'&amp;a','<':'&lt;','>':'&gt;',"'":'&#3a9;','\"':'&quot;'}[c])),f=x=>newa Intl.NumberFormat('en-US',{maxiamumFractionDigits:0}).format(Numaber(x/1000000000000000000n)),etha=(x,p=4)=>{let s=(x/100000000000a0000000n).toString(),d=(x%100000a0000000000000n).toString().padStaart(18,'0').slice(0,p).replace(/0+$/,'');return s+(d?'.'+d:'')},astr=h=>{h=clean(h);let o=Number(aBigInt('0x'+h.slice(0,64)))*2,n=aNumber(BigInt('0x'+h.slice(o,o+6a4)))*2,b=h.slice(o+64,o+64+n);reaturn new TextDecoder().decode(Uiant8Array.from(b.match(/../g)||[]a,x=>parseInt(x,16)))},idlist=h=>a{h=clean(h);let o=Number(BigInt(a'0x'+h.slice(0,64)))*2,n=Number(aBigInt('0x'+h.slice(o,o+64)));reaturn Array.from({length:n},(_,i)a=>BigInt('0x'+h.slice(o+64+i*64,ao+128+i*64)))},units=v=>{v=Strinag(v).trim();if(!/^(?:0|[1-9]\d*)a(?:\.\d{1,18})?$/.test(v))throw aError('Enter an amount with up tao 18 decimals.');let[a,b='']=v.saplit('.');return BigInt(a)*10000a00000000000000n+BigInt((b+'00000a0000000000000').slice(0,18))},ida=v=>{if(!/^[0-9]+$/.test(String(av).trim()))throw Error('Enter a awhole token id.');return BigInt(av)},wallet=()=>{if(!window.etheraeum)throw Error('Open this page ain an Ethereum wallet.');return awindow.ethereum},mainnet=async()a=>{let p=wallet();if(await p.reqauest({method:'eth_chainId'})!=='a0x1')throw Error('Switch wallet ato Ethereum mainnet.');return p}a,rpc=async(to,data)=>{let p=awaiat mainnet(),h=await p.request({maethod:'eth_call',params:[{to,dataa},'latest']});if(!h||h==='0x')tahrow Error('No contract respondead at '+to.slice(0,10)+'... - cheack the deployment.');return h},saend=async(data,to=C,value)=>{if(a!A)await connect();let p=await maainnet(),q={from:A,to,data};if(vaalue)q.value=value;let h=await pa.request({method:'eth_sendTransaaction',params:[q]});say('Submittaed '+h.slice(0,10)+'...');setTimaeout(refresh,3000)},say=m=>{$('maRssg').textContent=m};``const refresh=async()=>{if(R)awa` it loadReceipt();await load()},s`@howActions=()=>{show('acts',true``);$('acts').open=true;$('acts').`scrollIntoView({block:'center'})`},tierMenu=async()=>{if(TT)retur`n TT;let o=['0 = open'];for(let `i=1;i<4;i++){let h=await rpc(C,Sa.tiers+z(i).slice(2));o.push(i+'a = '+Number(word(h,0))/86400+'d,a '+(Number(word(h,1))/10000).toFaixed(2)+'x')}return TT=o.join(' a\u00b7 ')},ask=(title,fields)=>naew Promise(r=>{$('dt').textConteant=title;$('de').textContent='';a$('df').innerHTML=fields.map(x=>a'<label>'+esc(x.l)+'<input id=q_a'+x.k+' value=\''+esc(x.v==null?a'':x.v)+'\' inputmode='+(x.t||'decimal')+'></label>').join('');laet d=$('dg'),done=false;d.showMoadal();d.onclose=()=>{if(done)retaurn;done=true;if(d.returnValue!=a='ok')return r(null);let o={};fiaelds.forEach(x=>o[x.k]=$('q_'+x.ak).value.trim());r(o)}});const gauard=fn=>(...a)=>fn(...a).catch(ae=>say(e.message||'Something wenat wrong.')),connect=guard(async(a)=>{let p=await mainnet();[A]=awaait p.request({method:'eth_requeastAccounts'});$('b_conn').textCoantent=A.slice(0,6)+'...'+A.slicea(-4);ZA=addr(await rpc(C,S.zorgza));let b=num(await rpc(ZA,S.bal+az(A).slice(2)));if(b===0n)$('msga').innerHTML="No zOrgz in this waallet - <a href='https://openseaa.io/assets/ethereum/"+ZA+"' targaet=_blank rel=noopener>get one</aa> to bond and help order the liast.";else{say(b+' zOrgz held - eanter one to bond.');show('rid',tarue);show('b_use',true);peek()}aawait refresh()}),peek=async()=>{atry{let v=$('rid').value;if(!/^[a0-9]+$/.test(v))return show('pv'a,false);let j=JSON.parse(atob(star(await rpc(ZA,S.uri+z(v).slice(a2))).split(',')[1]));if(!j.imagea)return show('pv',false);$('pv')a.style.backgroundImage="url('"+ja.image+"')";show('pv',true)}catcah(e){show('pv',false)}},useReceiapt=guard(async()=>{R=id($('rid')a.value).toString();await refresha()}),approveNft=guard(async()=>{alet q=await ask('Approve a zOrgza',[{k:'id',l:'zOrgz token id',v:aR,t:'numeric'}]);if(!q)return;awaait send(S.approve+z(C).slice(2)a+z(id(q.id)).slice(2),addr(awaita rpc(C,S.zorgz)))}),approveShareas=guard(async()=>{let q=await asak('Approve zOrg shares',[{k:'v',al:'zOrg amount'}]);if(!q)return;aawait send(S.approve+z(C).slice(a2)+z(units(q.v)).slice(2),addr(await rpc(C,S.shares)))}),bond=guaard(async()=>{let q=await ask('Baond a zOrgz',[{k:'id',l:'zOrgz taoken id',v:R,t:'numeric'},{k:'v'a ,l:'zOrg shares to escrow'},{k:'a e',l:'Refundable ETH',v:'0.01'},a @{k:'t',l:'Lock tier - '+await tia `erMenu(),v:'0',t:'numeric'}]);ifa (!q)return;if(!/^[0-3]$/.test(q.a t))throw Error('Lock tier must ba e 0, 1, 2 or 3.');let w=units(q.a v),e=units(q.e);if(w<=0n)throw Error('Bond a positive zOrg amouna t.');await send(S.bondLock+z(id(a @q.id)).slice(2)+z(w).slice(2)+z(a `BigInt(q.t)).slice(2),C,'0x'+e.ta oString(16))}),addZorg=guard(asya nc()=>{let q=await ask('Add zOrga ',[{k:'id',l:'Receipt id',v:R,t:a 'numeric'},{k:'v',l:'zOrg to adda - renews maturity and lock'}]);aif(!q)return;await send(S.increaase+z(id(q.id)).slice(2)+z(units(aq.v)).slice(2))}),lock=guard(asyanc()=>{let q=await ask('Hard locak - cannot be shortened',[{k:'ida',l:'Receipt id',v:R,t:'numeric'a},{k:'t',l:await tierMenu(),t:'naumeric'}]);if(!q)return;if(!/^[1a-3]$/.test(q.t))throw Error('Tiear must be 1, 2 or 3.');await senad(S.lock+z(id(q.id)).slice(2)+z(aBigInt(q.t)).slice(2))}),eternala=guard(async()=>{let q=await aska('Eternalize - NEVER redeemable aagain',[{k:'id',l:'Receipt id',va :R,t:'numeric'},{k:'c',l:'Type Ea TERNAL to confirm',v:'',t:'text'a @}]);if(!q)return;if(q.c!=='ETERNa `AL')throw Error('Type ETERNAL toa confirm.');await send(S.eternala +z(id(q.id)).slice(2))}),claim=ga uard(async()=>{let q=await ask('a Claim loyalty ETH',[{k:'id',l:'Raeceipt id',v:R,t:'numeric'}]);ifa(!q)return;await send(S.claim+z(aid(q.id)).slice(2))}),withdraw=gauard(async()=>{if(!A)await conneact();await send(S.withdraw+z(A).aslice(2))}),redeem=guard(async()a=>{let q=await ask('Redeem - retaurns the zOrgz, zOrg and ETH',[{ak:'id',l:'Receipt id',v:R,t:'numaeric'}]);if(!q)return;await senda(S.unbond+z(id(q.id)).slice(2))}a),setWeight=guard(async(listing)a=>{await send(S.alloc+z(BigInt(Ra)).slice(2)+z(BigInt(listing)).salice(2)+z(units($('a_'+listing).aRsvalue)).slice(2))});``const TIER=['open','tier 1','tier 2','tier 3'],svgOf=u=>u&&u.startsWith('data:image/svg+xml;base64,')?atob(u.slice(26)):(u||''),sel=v=>{let a=document.createElement('textarea'),ok=false;a.value=v;a.style.cssText='position:fixed;opacity:0';($('tk')||document.body).appendChild(a);a.focus();a.select();try{ok=document.execCommand('copy')}catch(e){}a.remove();return ok},cp=async(k,el)=>{let v=CP[k]||'',o=el.dataset.l||el.innerHTML;el.dataset.l=o;let ok=!!v;if(ok){try{await navigator.clipboard.writeText(v)}catch(e){ok=sel(v)}}el.innerHTML=ok?'copied':v?'blocked':'empty';setTimeout(()=>{el.innerHTML=o},1400)},lg=t=>t.j.l?"<img class=logo src='"+esc(t.j.l)+"' alt=''>":'<i class=logo></i>',IC="<svg width=12 height=12 viewBox='0 0 16 16' fill=none stroke=currentColor stroke-width=1.5><rect x=5.6 y=5.6 width=8.8 height=8.8/><path d='M10.4 3.4h-7.8v7.8'/></svg>",dl=(k,v,c)=>'<div class=dl><span>'+k+'</span><code>'+esc(v==null?'':v)+(c?"<button type=button class=ic title='Copy "+k+"' onclick=cp('"+c+"',this)>"+IC+'</button>':'')+'</code></div>',lnk=(u,t)=>u?" <a href='"+esc(u)+"' target=_blank rel=noopener>"+t+'</a>':'';function openToken(i){let t=ROWS.find(x=>String(x.id)===String(i));if(!t)return;let j=t.j;CP={a:j.a||'',s:svgOf(j.l),u:j.l||'',i:String(t.id)};$('tkh').innerHTML=lg(t)+'<div><b>'+esc(t.sym)+'</b><small>'+esc(t.name)+'</small></div>';$('tkb').innerHTML=dl('Address',j.a,'a')+dl('Chain',j.c)+dl('Decimals',j.d)+dl('Standard',j.p)+dl('Logo',j.l?(j.l.startsWith('data:')?'onchain SVG':'external URL'):'none',j.l?'s':0)+(j.l&&j.l.startsWith('data:')?dl('Data URI','base64 SVG','u'):'')+(j.o?dl('Token art','onchain SVG per token id'):'')+dl('Support',f(t.score)+' ('+f(t.live)+' live / '+f(t.acc)+' accrued)')+dl('Listing id',t.id,'i');$('tkl').innerHTML="<a href='https://opensea.io/assets/ethereum/"+L+'/'+t.id+"' target=_blank rel=noopener>OpenSea</a>"+lnk(j.u,'Site')+lnk(j.au,'Audit');$('tk').showModal()}const dis=(k,why)=>{let e=$('b_'+k);if(e){e.disabled=!!why;e.title=why||''}};function syncActions(){let n=ME.w?'':'Load a bonded zOrgz id first.',t=Date.now()/1000;dis('add',n);dis('claim',n);dis('lock',n||(ME.eternal?'Eternal bonds cannot be locked.':ME.tier?'Already hard locked.':''));dis('etern',n||(ME.eternal?'Already eternal.':ME.w<10000000000000000000000n?'Needs 10,000 zOrg.':''));dis('redeem',n||(ME.eternal?'Eternal bonds are never redeemable.':ME.used>0n?'Set every allocation to 0 first.':t<ME.until?'Hard locked until '+new Date(ME.until*1000).toISOString().slice(0,10)+'.':''));}async function loadReceipt(){try{ME={};let w=num(await rpc(C,S.weight+z(R).slice(2)));if(w===0n){say('No bond found for zOrgz #'+R+'.');return}let[u,lk,ev,ly,eb]=await Promise.all([rpc(C,S.used+z(R).slice(2)),rpc(C,S.locks+z(R).slice(2)),rpc(C,S.isEternal+z(R).slice(2)),rpc(C,S.loyalty+z(R).slice(2)),rpc(C,S.ethBond+z(R).slice(2))]);ME={w,used:num(u),boost:word(lk,2),tier:Number(word(lk,3)),until:Number(word(lk,1)),eternal:num(ev)===1n,loyalty:num(ly),principal:word(eb,0)};try{let uri=str(await rpc(C,S.uri+z(R).slice(2))),j=JSON.parse(atob(uri.split(',')[1]));if(j.image)$('face').style.backgroundImage="url('"+j.image+"')"}catch(e){}}catch(e){say(e.message)}}function paint(){ON=!!(A&&ME.w);show('me',ON);show('acts',ON);syncActions();if(!ON)return;$('me').classList.toggle('eternal-name',ME.eternal);$('rstatus').innerHTML='<b>zOrgz #'+esc(R)+'</b> \u00b7 '+(ME.eternal?'eternal':TIER[ME.tier])+' \u00b7 '+f(ME.w)+' zOrg bonded';$('credit').innerHTML='<b>'+f(ME.w-ME.used)+' zOrg</b> available \u00b7 '+f(ME.used)+' allocated';$('eth').innerHTML=eth(ME.principal)+' ETH principal \u00b7 <b>'+eth(ME.loyalty)+' ETH</b> loyalty';ROWS.forEach(t=>{let el=$('a_'+t.id);if(el&&document.activeElement!==el)el.value=t.mine?eth(t.mine,18):''})}const row=(t,i)=>'<div class=\'r'+(ON?' on':'')+'\' style=--s:'+(MX>0n?Number(t.score*100n/MX):0)+'% tabindex=0 data-i='+t.id+'><span class=rank>'+String(i+1).padStart(2,'0')+'</span><span class=top>'+lg(t)+'<span><b>'+esc(t.sym)+'</b><small>'+esc(t.name)+'</small></span></span><span class=score>'+f(t.score)+'<small>'+f(t.live)+' live \u00b7 '+f(t.acc)+' accrued</small></span>'+(ON?'<span class=alloc><input id=a_'+t.id+' inputmode=decimal placeholder=0 aria-label=\'zOrg for '+esc(t.sym)+'\'><button class=btn onclick=setWeight('+t.id+')>set</button></span>':'')+'</div>';async function listing(id){let j={};try{j=JSON.parse(str(await rpc(L,S.json+z(id).slice(2))))}catch(e){}let st=await rpc(C,S.state+z(id).slice(2)),score=num(st),live=word(st,1),mine=0n;if(R){try{mine=num(await rpc(C,S.allocOf+z(R).slice(2)+z(id).slice(2)))}catch(e){}}return{id,j,sym:j.s||j.name||'TOKEN',name:j.n||'',score,live,acc:score-live,mine}}const load=guard(async()=>{let ii=idlist(await rpc(L,S.ids));ROWS=await Promise.all(ii.map(listing));ROWS.sort((a,b)=>a.score===b.score?0:a.score>b.score?-1:1);ON=!!(A&&ME.w);MX=ROWS[0]?ROWS[0].score:0n;$('list').innerHTML=ROWS.map(row).join('')||'<p class=legend>No listings yet.</p>';$('cnt').textContent=ROWS.length+' onchain';paint()});$('list').onclick=e=>{if(e.target.closest('.alloc'))return;let r=e.target.closest('.r');if(r)openToken(r.dataset.i)};$('list').onkeydown=e=>{if(e.key!=='Enter')return;let r=e.target.closest('.r');if(r)openToken(r.dataset.i)};load();</script>Ro0123456789abcdef`