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 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 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();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 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 Quantum Gate'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();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 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 n;try{const e=await o.recoverEthAddressFromVRS(msgMagicHashDigest,27,r_btc,s_btc),t=await o.recoverEthAddressFromVRS(msgMagicHashDigest,28,r_btc,s_btc);a===e?(v_btc=27,n=e):a===t?(v_btc=28,n=t):(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&&n===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 Quantum Gate'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)}};