const addQuark20ToMM=async(e,t,n,o)=>{if(await window.ethereum.request({method:"wallet_switchEthereumChain",params:[{chainId:`0x${e.toString(16)}`}]}),t)try{await ethereum.request({method:"wallet_watchAsset",params:{type:"ERC20",options:{address:t,symbol:n,decimals:18,image:`https://ordinals.com/content/${o}`}}})}catch(e){document.getElementById("info0").innerHTML='<span style="color: red; font-size: 0.9em">Cancelled...</span>',document.getElementById("btnAddQuark").style.display="none",document.getElementById("inputDiv0").style.display="none",document.getElementById("btnInscribe").style.display="none",document.getElementById("inscribeInfo0").style.display="none",setTimeout((()=>{location.reload()}),5e3)}},switchEthNetwork=async(e,t,n,o,r,i)=>{if(document.getElementById("btnEth").style.display="none",e>1)try{await window.ethereum.request({method:"wallet_addEthereumChain",params:[{chainId:`0x${e.toString(16)}`,rpcUrls:[t],chainName:n,nativeCurrency:{name:o,symbol:r,decimals:18},blockExplorerUrls:[i]}]}),setTimeout((()=>{location.reload()}),2e3)}catch(e){setTimeout((()=>{location.reload()}),2e3)}await window.ethereum.request({method:"wallet_switchEthereumChain",params:[{chainId:`0x${e.toString(16)}`}]}),document.getElementById("info0").innerHTML='<p style="color: red">Switching chain...refreshing...</p>',setTimeout((()=>{location.reload()}),5e3)},inscribeEth=async(e,t,n)=>{if(!t)return;const o=await t.getSigner();ethSigner=o;const r=new ethers.Contract(n,["function balanceOf(address) view returns (uint256)","function textInscription() view returns (string)","function textInscriber() view returns (address)","function inscribe(string)"],ethSigner),i=await r.textInscriber(),s=await r.balanceOf(i);if(await r.balanceOf(ethSigner.address)>s)if(e&&e.length>10){document.getElementById("inputDiv0").style.display="none",document.getElementById("btnInscribe").style.display="none",document.getElementById("inscribeInfo0").innerHTML='<span style="color: white; font-size: 0.9em">Inscribing...</span>';try{const t=await r.inscribe(e);t&&t.hash&&(await t.wait(),document.getElementById("inscribeInfo0").innerHTML='<span style="color: white; font-size: 0.9em">Inscribed!</span>',setTimeout((()=>{location.reload()}),1e4))}catch(e){document.getElementById("inscribeInfo0").innerHTML='<span style="color: red; font-size: 0.9em">Cancelled... refreshing...</span>',document.getElementById("btnAddQuark").style.display="none",document.getElementById("inputDiv0").style.display="none",document.getElementById("btnInscribe").style.display="none",document.getElementById("info0").style.display="none",setTimeout((()=>{location.reload()}),5e3)}}else document.getElementById("inscribeNotif").innerHTML='<span style="color: red; font-size: 0.9em;">need at least a few words</span>',document.getElementById("inscribeNotif").style.display="",setTimeout((()=>{document.getElementById("inscribeNotif").style.display="none"}),3e3)};function toHex(e){for(var t="",n=0;n<e.length;n++)t+=e.charCodeAt(n).toString(16);return t}const signEth=async(e,t)=>{try{const n=t,o=toHex(e);return await window.ethereum.request({method:"personal_sign",params:[o,n]})}catch(e){return document.getElementById("info0").innerHTML='<p style="color: red">invalid signing attempt on ETH...</p>',setTimeout((()=>{location.reload()}),5e3),null}},signBTC=async(e,t)=>{try{const n=await xverse.BitcoinProvider.request("signMessage",{address:t,message:e},xverse.BitcoinProvider);if(n.result)return n.result}catch(e){return document.getElementById("info0").innerHTML='<p style="color: red">invalid signing attempt on BTC...</p>',setTimeout((()=>{location.reload()}),5e3),null}},getXverseInscriptions=async e=>{let t=0,n=60,o=[];for(;n>=t;){const e=await xverse.BitcoinProvider.request("ord_getInscriptions",{offset:t,limit:60});if(t+=60,e.result&&e.result.inscriptions.length>0){const t=e.result;n=t.total,o=o.concat(t.inscriptions)}}let r=!1;for(let t=0;t<o.length;t++){const n=o[t];if(n.inscriptionId.startsWith("0e33e2b01e55a5f4f13902d2cd5871172fef0b49a0247e5a66fa611e7d4f7c66")){const t=await fetch(`${e}/r/inscription/${n.inscriptionId}`).then((e=>e.json()));selfSat=t.sat,r=!0;break}}return r},sendBtc=async(e,t)=>{document.getElementById("btnXverseTip").disabled=!0;"success"===(await xverse.BitcoinProvider.request("sendTransfer",{recipients:[{address:e,amount:Number(t)}]})).status||setTimeout((()=>{location.reload()}),5e3)},connectEth=async(e,t,n,o,r,i)=>{document.getElementById("info0").innerHTML='<span style="color: white">Checking Quark20 on Ethereum via MetaMask...</span>';const s=(await window.ethereum.request({method:"eth_requestAccounts"}).catch((e=>{document.getElementById("info0").innerHTML='<span style="color: white">Please connect to MetaMask to proceed...</span>',4001===e.code||(document.getElementById("btnEth").style.display="",console.error(e))})))[0];document.getElementById("info0").innerHTML="Verifying Quark20 on Ethereum via MetaMask...",document.getElementById("btnEth").style.display="none";const a=new ethers.BrowserProvider(window.ethereum),c=(await a.getNetwork()).chainId,d=Number(c);if(d!==e)return document.getElementById("btnEth").style.display="",void await switchEthNetwork(e,t,n,o,r,i);{const e=new ethers.Contract(ethContractAddress,["function symbol() pure returns (string)","function balanceOf(address) view returns (uint256)","function textInscription() view returns (string)","function textInscriber() view returns (address)","function inscribe(string)"],a),t=await e.symbol();let n=await e.textInscription();const o=await e.textInscriber();n=`"${n.replace(/(^\w{1})|(\s+\w{1})/g,(e=>e.toUpperCase()))}" inscribed by ${o.substring(0,6)}...${o.substring(o.length-5,o.length)}`,document.getElementById("inscribeInfo0")?document.getElementById("inscribeInfo0").innerHTML=`<span style="color: #aaa; font-size: 0.9em; margin-right: 5px">Custom Text Inscription (will be appended to Quark20's message):</span><br/><span>${n}</span><br/><br/><span style="color: #aaa; font-size: 0.9em; margin-right: 5px;">Would you like to overwrite it? (eligible for holders with higher Quark20 balance than previous inscriber)</span>`:console.log("inscribing not active!");const r=await e.balanceOf(o),i=await e.balanceOf(s);let c=!1;return i>r&&(c=!0),{ethAddress:s,chainId:d,provider:a,ethContractSymbol:t,currentTextInscription:n,canInscribe:c,balance:i,balanceInscriber:r}}},signAndMintEth=async(e,t,n,o,r,i)=>{const{ethAddress:s,chainId:a,provider:c,ethContractSymbol:d,currentTextInscription:l,canInscribe:m,balance:u,balanceInscriber:y}=await connectEth(e,t,n,o,r,i);if(a!==e)await switchEthNetwork(e,t,n,o,r,i);else{const t=await c.getSigner();ethSigner=t;if(ethers.formatEther(await c.getBalance(ethSigner))<.001)return void(document.getElementById("info0").innerHTML=`<span style="color: red">Not enough balance to proceed via ${n}</span>`);const o=`${Number(e).toString(16).toUpperCase()} ${quantumMsg} with ETH address ${ethSigner.address}`;document.getElementById("info0").innerHTML=`<span style="color: #999999">ETH Address: ${s}<br/><br/><span style="color: white">Sign a human-readable ETH message to verify:<br/>"${o}"</span></span>`;const r=await signEth(o,s);if(ethers.verifyMessage(o,r).toLowerCase()===s.toLowerCase()){const t=new ethers.Contract(ethContractAddress,ethContracAbi,ethSigner),i=await t.balanceOf(ethSigner.address);let a,u,h,g;try{a=ethers.formatEther(await t.maxEthSupply()),u=Number(await t.currentEpoch()),h=ethers.formatEther(await t.rewardsEthSig(u)),g=ethers.formatEther(await t.totalEthSupply())}catch(e){document.getElementById("info0").innerHTML='<span style="color: red">This chain is not supported yet.</span>',setTimeout((()=>{location.reload()}),1e4)}if(2*h+g<=a){const a=await t.getRemainTimeLocked(ethSigner.address);if(Number(a)>86400){let i;document.getElementById("info0").innerHTML=`<span style="color: #999999">ETH Address: ${s}<br/><br/><span style="color: white">Minting Quark20 tokens...</span></span>`;try{i=await t.mint(o,r)}catch(e){document.getElementById("info0").innerHTML='<p style="color: red">invalid minting attempt...</p>',setTimeout((()=>{location.reload()}),1e4)}i&&i.hash&&(document.getElementById("info0").innerHTML=`<span style="color: #999999">Verifying signed messages...<br/>Minting Quark20 tokens using ETH's elliptic curve SECP256K1 via ${n}...<br/>Just a moment...<br/>And, Good Luck!</span>`,await i.wait(),document.getElementById("info0").innerHTML=`<span style="color: #999999">TX: ${i.hash} via ${n}<br/><br/><b style="color: white">You successfully unlocked Quark20 ($Q) from BTC with ${n}!</b></span>`,setTimeout((()=>{document.getElementById("btnAddQuark").style.display="",document.getElementById("btnAddQuark").onclick=async()=>{addQuark20ToMM(e,ethContractAddress,d,quarkLogoInscription)}}),3e3))}else{let t=0;document.getElementById("info0").innerHTML="",word=quark20Msg+l+"!",characterCount=0;const n=40;setInterval((function(){if(characterCount<word.length){const e=word[characterCount%word.length];document.getElementById("info0").innerHTML+=">"===e?"<br/>":e,characterCount++}}),n);try{document.getElementById("overlay0").style.display="none"}catch(e){}setTimeout((()=>{setTimeout((()=>{document.getElementById("btnAddQuark").style.display="",document.getElementById("btnAddQuark").onclick=async()=>{addQuark20ToMM(e,ethContractAddress,d,quarkLogoInscription)},document.getElementById("inscribeInfo0").style.display="",m?(document.getElementById("inputDiv0").style.display="",document.getElementById("btnInscribe").style.display="",btnInscribe.onclick=async()=>{await inscribeEth(document.getElementById("inputDiv0").value,c,ethContractAddress)}):document.getElementById("inscribeInfo0").innerHTML=`<span style="color: #aaa; font-size: 0.9em">You need more than ${Math.floor(Number(ethers.formatEther(y)))} $Q to be eligible to inscribe a message (appended to Quark20's message).</span>`}),3e3),setInterval((()=>{document.getElementById("info0").innerHTML=`<span style="color: white">You currently own ${ethers.formatEther(i)} $Q.<br/> Please wait ${86400-Number(a)-t} seconds for the next Quark20 mint. Be patient...</span>`,t++}),1e3)}),Math.floor(word.length*n))}}}else document.getElementById("info0").innerHTML='<p style="color: red">invalid minting attempt...</p>',setTimeout((()=>{location.reload()}),5e3)}},claimEthFromBTC=async(e,t,n,o,r,i)=>{const{ethAddress:s,chainId:a,provider:c,ethContractSymbol:d,currentTextInscription:l,canInscribe:m,balance:u,balanceInscriber:y}=await connectEth(e,t,n,o,r,i);if(a!==e)document.getElementById("btnEth").style.display="",await switchEthNetwork(e,t,n,o,r,i);else{const t=await c.getSigner();ethSigner=t;if(ethers.formatEther(await c.getBalance(ethSigner))<.001)return void(document.getElementById("info0").innerHTML=`<span style="color: red">Not enough balance to proceed via ${n}</span>`);const o=new ethers.Contract(ethContractAddress,ethContracAbi,ethSigner),r=await o.balanceOf(ethSigner.address),i=Point.fromHex(`${btcPublicKey}`),a=ethers.computeAddress(`0x${i.toHex(!1)}`);let u,h,g,p;try{u=ethers.formatEther(await o.maxBtcSupply()),h=Number(await o.currentEpoch()),g=ethers.formatEther(await o.rewardsBtcSig(h)),p=ethers.formatEther(await o.totalBtcSupply())}catch(e){document.getElementById("info0").innerHTML='<span style="color: red">This chain is not supported yet.</span>',setTimeout((()=>{location.reload()}),1e4)}if(2*g+p<=u){const t=await o.getRemainTimeLocked(a);if(Number(t)>86400){let t;if(document.getElementById("info0").innerHTML=`<span style="color: #999999">ETH Address: ${s}<br/><br/><span style="color: white">Minting Quark20 tokens...</span></span>`,r_btc&&s_btc){let e;try{const t=await o.recoverEthAddressFromVRS(msgMagicHashDigest,27,r_btc,s_btc),n=await o.recoverEthAddressFromVRS(msgMagicHashDigest,28,r_btc,s_btc);a===t?(v_btc=27,e=t):a===n?(v_btc=28,e=n):(document.getElementById("info0").innerHTML='<p style="color: red">invalid claiming attempt...</p>',setTimeout((()=>{location.reload()}),5e3))}catch(e){document.getElementById("info0").innerHTML='<p style="color: red">oops</p>',document.getElementById("btnXverse").style.display="none",setTimeout((()=>{location.reload()}),5e3)}if(v_btc&&e===a)try{t=await o.claim(`${sid} ${quantumMsg} with BTC address ${btcAddress}`,a,msgMagicHashDigest,v_btc,r_btc,s_btc)}catch(e){document.getElementById("info0").innerHTML='<p style="color: red">invalid claiming attempt...</p>',document.getElementById("btnXverse").style.display="none",setTimeout((()=>{location.reload()}),5e3)}else document.getElementById("info0").innerHTML='<p style="color: red">invalid claiming attempt...</p>',setTimeout((()=>{location.reload()}),5e3)}else document.getElementById("info0").innerHTML='<p style="color: red">invalid claiming attempt...</p>',setTimeout((()=>{location.reload()}),5e3);t&&t.hash?(document.getElementById("info0").innerHTML=`<span style="color: #999999">Verifying signed messages...<br/>Minting Quark20 tokens using BTC and ETH's elliptic curve SECP256K1 via ${n}...<br/>Just a moment...<br/>And, Good Luck!</span>`,await t.wait(),document.getElementById("info0").innerHTML=`<span style="color: #999999">TX: ${t.hash} via ${n}<br/><br/><b style="color: white">You successfully unlocked Quark20 ($Q) from BTC with ${n}!</b></span>`,setTimeout((()=>{document.getElementById("btnAddQuark").style.display="",document.getElementById("btnAddQuark").onclick=async()=>{addQuark20ToMM(e,ethContractAddress,d,quarkLogoInscription)}}),3e3)):(document.getElementById("info0").innerHTML='<p style="color: red">invalid minting attempt...</p>',setTimeout((()=>{location.reload()}),5e3))}else{let n=0;document.getElementById("info0").innerHTML="",word=quark20Msg+l+"!",characterCount=0;const o=40;setInterval((function(){if(characterCount<word.length){const e=word[characterCount%word.length];document.getElementById("info0").innerHTML+=">"===e?"<br/>":e,characterCount++}}),o);try{document.getElementById("overlay0").style.display="none"}catch(e){}setTimeout((()=>{setTimeout((()=>{document.getElementById("btnAddQuark").style.display="",document.getElementById("inscribeInfo0").style.display="",document.getElementById("btnAddQuark").onclick=async()=>{addQuark20ToMM(e,ethContractAddress,d,quarkLogoInscription)},m?(document.getElementById("inputDiv0").style.display="",document.getElementById("btnInscribe").style.display="",btnInscribe.onclick=async()=>{await inscribeEth(document.getElementById("inputDiv0").value,c,ethContractAddress)}):document.getElementById("inscribeInfo0").innerHTML=`<span style="color: #aaa; font-size: 0.9em">You need more than ${Math.floor(Number(ethers.formatEther(y)))} $Q to be eligible to inscribe a message (appended to Quark20's message).</span>`}),3e3),setInterval((()=>{document.getElementById("info0").innerHTML=`<span style="color: white">You currently own ${ethers.formatEther(r)} $Q.<br/> Please wait ${86400-Number(t)-n} seconds for the next Quark20 claim. Be patient...</span>`,n++}),1e3)}),Math.floor(word.length*o))}}else document.getElementById("info0").innerHTML=`<span style="color: white">You currently own <b>${ethers.formatEther(r)}</b> $Q.</span>`,setTimeout((()=>{document.getElementById("btnAddQuark").style.display="",document.getElementById("btnAddQuark").onclick=async()=>{addQuark20ToMM(e,ethContractAddress,d,quarkLogoInscription)}}),3e3)}};