const addQuark20ToMM=async(e,t,n,r)=>{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/${r}`}}})}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,r,o,s)=>{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:r,symbol:o,decimals:18},blockExplorerUrls:[s]}]}),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 r=await t.getSigner();ethSigner=r;const o=new ethers.Contract(n,["function balanceOf(address) view returns (uint256)","function textInscription() view returns (string)","function textInscriber() view returns (address)","function inscribe(string)"],ethSigner),s=await o.textInscriber(),i=await o.balanceOf(s);if(await o.balanceOf(ethSigner.address)>i)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 o.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,r=toHex(e);return await window.ethereum.request({method:"personal_sign",params:[r,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,r=[];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,r=r.concat(t.inscriptions)}}let o=!1;for(let t=0;t<r.length;t++){const n=r[t];if(n.inscriptionId.startsWith("0e33e2b01e55a5f4f13902d2cd5871172fef0b49a0247e5a66fa611e7d4f7c66")){const t=await fetch(`${e}/r/inscription/${n.inscriptionId}`).then((e=>e.json()));selfSat=t.sat,o=!0;break}}return o},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,r,o,s)=>{document.getElementById("info0").innerHTML='<span style="color: white">Checking Quark20 on Ethereum via MetaMask...</span>';const i=(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,r,o,s);{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 r=await e.textInscriber();n=`"${n.replace(/(^\w{1})|(\s+\w{1})/g,(e=>e.toUpperCase()))}" inscribed by ${r.substring(0,6)}...${r.substring(r.length-5,r.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 Quantum Gate'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 o=await e.balanceOf(r),s=await e.balanceOf(i);let c=!1;return s>o&&(c=!0),{ethAddress:i,chainId:d,provider:a,ethContractSymbol:t,currentTextInscription:n,canInscribe:c,balance:s,balanceInscriber:o}}},signAndMintEth=async(e,t,n,r,o,s)=>{const{ethAddress:i,chainId:a,provider:c,ethContractSymbol:d,currentTextInscription:l,canInscribe:m,balance:u,balanceInscriber:y}=await connectEth(e,t,n,r,o,s);if(a!==e)await switchEthNetwork(e,t,n,r,o,s);else{const t=await c.getSigner();if(ethSigner=t,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 r=`${Number(e).toString(16).toUpperCase()} ${quantumMsg} with ETH address ${ethSigner.address}`;document.getElementById("info0").innerHTML=`<span style="color: #999999">ETH Address: ${i}<br/><br/><span style="color: white">Sign a human-readable ETH message to verify:<br/>"${r}"</span></span>`;const o=await signEth(r,i),s=ethers.verifyMessage(r,o),a=new ethers.Contract(ethContractAddress,ethContracAbi,ethSigner),u=await a.balanceOf(ethSigner.address);if(s.toLowerCase()===i.toLowerCase()){let t,s,h,g;try{t=ethers.formatEther(await a.maxEthSupply()),s=Number(await a.currentEpoch()),h=ethers.formatEther(await a.rewardsEthSig(s)),g=ethers.formatEther(await a.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<=t){const t=await a.getRemainTimeLocked(ethSigner.address);if(Number(t)>86400){let t;document.getElementById("info0").innerHTML=`<span style="color: #999999">ETH Address: ${i}<br/><br/><span style="color: white">Minting Quark20 tokens...</span></span>`;try{t=await a.mint(r,o)}catch(e){document.getElementById("info0").innerHTML='<p style="color: red">invalid minting attempt...</p>',setTimeout((()=>{location.reload()}),1e4)}t&&t.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 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))}else{let n=0;document.getElementById("info0").innerHTML="",word=quark20Msg+l+"!",characterCount=0;const r=40;setInterval((function(){if(characterCount<word.length){const e=word[characterCount%word.length];document.getElementById("info0").innerHTML+=">"===e?"<br/>":e,characterCount++}}),r);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)))} ${inscriptionMsg2}</span>`}),3e3),setInterval((()=>{document.getElementById("info0").innerHTML=`<span style="color: white">You currently own ${ethers.formatEther(u)} $Q.<br/> Please wait ${86400-Number(t)-n} seconds for the next Quark20 mint. Be patient...</span>`,n++}),1e3)}),Math.floor(word.length*r))}}}}},claimEthFromBTC=async(e,t,n,r,o,s)=>{const{ethAddress:i,chainId:a,provider:c,ethContractSymbol:d,currentTextInscription:l,canInscribe:m,balance:u,balanceInscriber:y}=await connectEth(e,t,n,r,o,s);if(a!==e)document.getElementById("btnEth").style.display="",await switchEthNetwork(e,t,n,r,o,s);else{const t=await c.getSigner();if(ethSigner=t,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 r=new ethers.Contract(ethContractAddress,ethContracAbi,ethSigner),o=await r.balanceOf(ethSigner.address),s=Point.fromHex(`${btcPublicKey}`),a=ethers.computeAddress(`0x${s.toHex(!1)}`);let u,h,g,p;try{u=ethers.formatEther(await r.maxBtcSupply()),h=Number(await r.currentEpoch()),g=ethers.formatEther(await r.rewardsBtcSig(h)),p=ethers.formatEther(await r.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 r.getRemainTimeLocked(a);if(Number(t)>86400){let t;if(document.getElementById("info0").innerHTML=`<span style="color: #999999">ETH Address: ${i}<br/><br/><span style="color: white">Minting Quark20 tokens...</span></span>`,r_btc&&s_btc){let n;try{const e=await r.recoverEthAddressFromVRS(msgMagicHashDigest,27,r_btc,s_btc),t=await r.recoverEthAddressFromVRS(msgMagicHashDigest,28,r_btc,s_btc);a===e?(v_btc=27,n=e):a===t&&(v_btc=28,n=t)}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&&n===a)try{t=await r.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">oops</p>',document.getElementById("btnXverse").style.display="none",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))}else{let n=0;document.getElementById("info0").innerHTML="",word=quark20Msg+l+"!",characterCount=0;const r=40;setInterval((function(){if(characterCount<word.length){const e=word[characterCount%word.length];document.getElementById("info0").innerHTML+=">"===e?"<br/>":e,characterCount++}}),r);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)))} ${inscriptionMsg2}</span>`}),3e3),setInterval((()=>{document.getElementById("info0").innerHTML=`<span style="color: white">You currently own ${ethers.formatEther(o)} $Q.<br/> Please wait ${86400-Number(t)-n} seconds for the next Quark20 claim. Be patient...</span>`,n++}),1e3)}),Math.floor(word.length*r))}}else document.getElementById("info0").innerHTML=`<span style="color: white">You currently own <b>${ethers.formatEther(o)}</b> $Q.</span>`,setTimeout((()=>{document.getElementById("btnAddQuark").style.display="",document.getElementById("btnAddQuark").onclick=async()=>{addQuark20ToMM(e,ethContractAddress,d,quarkLogoInscription)}}),3e3)}};