glob["debug"] = 1; glob["item"] = ""; glob["item_def"] = "manage"; glob["lang"] = "en"; glob["api_info"] = new Array(); glob["contracts"] = new Array(); glob["contracts"]["stake"] = "0x9D6C1B00e16D8EfbF31Bdb4566eF6aD8a92Cc33A"; glob["contracts"]["usdc"] = "0xBfd995F0F67C1A3772146862132C2B716E745452"; glob["action"] = new Array(); function log(txt) { if(glob["debug"]) { console.log("AL: "+txt); } } function ajax_update(t) { var y = ""; var y2 = ""; var l = 0; var k = ""; y = JSON.parse(t); for (k in y.result) { y2 = document.getElementsByClassName(k); l = y2.length; for(i=0;i { if (xhr.status !== 200) { return; } eval(func); } xhr.send(); } function redir(v) { var t = ""; t += "/"; t += "#"; t += v; console.log("redir: "+t); location.href = t; } window.addEventListener('hashchange', function() { location_get(); } ) function location_get() { var t = ""; t = document.location.href; console.log('location changed! '+t); location_get_info(); } location_get(); function location_get_info() { var v = ""; var p = 0; var t = ""; var t2 = ""; t = document.location.href; p = t.indexOf("#"); console.log("URL POS of #: "+p); if(p==-1) { v = glob["item_def"]; } else { p++; v = t.substring(p); } r = parse_slash(v); console.log("item: "+r["item"]); console.log("item2: "+r["item2"]); glob["item"] = r["item"]?r["item"]:'claim'; glob["item2"] = r["item2"]; blk_visible(r["item"],r["item2"]); if(r["wal"] === undefined) { t2 = login_get(); if(t2 != "") login_set(glob["item"],glob["item2"],t2); } if(r["wal"] !== undefined) { if(r["wal"] != login_get() && r["wal"].length == 42) login_set(glob["item"],glob["item2"],r["wal"]); } } function parse_slash(s) { var r = new Array(); var n = 0; var n2 = ""; var p = 0; var p2 = 0; var t = ""; var v = ""; var f = 1; do { p = s.indexOf("/"); p++; t = s.substring(p); p2 = t.indexOf("/"); if(p2>0) v = t.substring(0,p2); else { v = t; f = 0; } switch(n+"") { case "0": n2 = "item"; break; case "1": n2 = "item2"; break; case "2": n2 = "wal"; v = v.toLowerCase(); break; case "3": n2 = "net"; break; default: n2 = n; } r[n2] = v; n++; s = s.substring(p+p2); } while(p>=0 && n<20 && f); return r; } function blk_visible(item,item2) { var x = document.getElementsByClassName("item_type"); var l = x.length; switch(item) { case "manage": t = "Service management"; break; default: t = "Service management"; break; } x = document.getElementById("item_title"); t = t + ' .:. '+glob['title']; switch(item2) { case "txs": t = "Transactions .:. "+glob['title']; break; case "balance": t = "Balance .:. "+glob['title']; break; case "staking": t = "Staking .:. "+glob['title']; break; case "faucet": t = "Faucet .:. "+glob['title']; break; case "all": break; } document.title = t; x = document.getElementsByClassName('pages'); l = x.length; for(i=0;i= 10) glob["cron_action_counter"] = 0; if(glob["cron_action_counter"]==0) { url = glob["api_url"] + 'balance/'+login_get(); console.log("Need download balance "+url); getData(url,"ajax_update(xhr.response);"); } } function manage_staking() { var x; x = document.getElementById('btn_stake'); x.innerHTML = 'Stake'; glob["action"]["staking"] = "stake_approve();"; if(glob["api_info"]["allowance_usdc"]=="0") { x = document.getElementById('modal_staking'); if(x.innerHTML != "Approve") { x.innerHTML = "Approve"; glob["action"]["staking2"] = 'web3_stake_allowance(-1);'; } } else { x = document.getElementById('modal_staking'); if(x.innerHTML != "Stake") { x.innerHTML = "Stake"; glob["action"]["staking2"] = 'StakeClick();'; } } x = document.getElementById('btn_unstake'); x.innerHTML = 'Untake'; glob["action"]["unstaking"] = "unstake_modal_show();"; } function stake_approve() { $('#modal_stake').modal('show'); } function unstake_modal_show() { $('#modal_unstake').modal('show'); } function stake_click() { e = glob["action"]["staking"]; if(e) { eval(e); } } function unstake_click() { e = glob["action"]["unstaking"]; if(e) { eval(e); } } function modal_staking_btn_click() { e = glob["action"]["staking2"]; if(e) { eval(e); } } function set_unstake_value() { var x = document.getElementById('unstake_amount'); x.value = glob["api_info"]["balance_stdimple"]; } function set_stake_value() { var x = document.getElementById('stake_amount'); x.value = glob["api_info"]["balance_usdc"]; } function modal_tx_info_open(txt = '',err = '',btn='See YOUR wallet') { console.log('FUNC modal_tx_info_open'); var x; x = document.getElementById('modal_txs_info_ok'); x.innerHTML = txt; x = document.getElementById('modal_txs_info_err'); x.innerHTML = err; x = document.getElementById('modal_txs_info_id'); x.innerHTML = ''; x = document.getElementById('modal_txs_info_btn'); x.innerHTML = btn; x.disabled = 1; $('#modal_tx_info').modal('show'); } function modal_txs_info_btn_click() { var explorer = ''; var url = ''; var x = document.getElementById('modal_txs_info_id'); if(x.innerHTML != '') { switch(chainId) { default: explorer = 'https://mumbai.polygonscan.com/tx/'; } url = explorer+x.innerHTML; window.open(url, '_blank'); } } $(function () { $('[data-toggle="tooltip"]').tooltip() }) glob["abi"] = [ "function claim(uint8 round)external", "function approve(address spender, uint256 amount) external returns (bool)", ] glob["abi_stake"] = [ "function Stake(uint256 amountIn)external", "function Unstake(uint256 amountOut)external" ] glob["abi_faucet"] = [ "function FaucetUSDC()external", "function FaucetWETH()external", "function FaucetWMATIC()external" ] function classList_add_remove(cname,on_or_off=1,cval='d-none') { var x = document.getElementsByClassName(cname); var l = x.length; var i; for(i=0;i 2) { t = wal.substring(0,5); t += '...'; t += wal.substring(38); } return t; } function login_set(item,item2,wal) { log("Login: "+wal); if(wal!== null) if(wal.length == 42) { wal = wal.toLowerCase(); glob["wal"] = wal; localStorage.setItem('wal', wal); check_logining(item,item2); } } function login_unset() { var wal = ''; glob["wal"] = wal; localStorage.setItem('wal', wal); connect_wallet_show_hide(1); web3Modal.clearCachedProvider(); } function login_redir(url) { console.log("login_redir to: "+url); redir(url); } function login_get() { var wal = localStorage.getItem('wal'); return wal; } function check_logining(item="",item2="pool") { var url = ""; var w = ""; log("check_logining: item="+item+' item2='+item2); var wal = login_get(); if(wal !== null &&wal.length == 42) { if(item=="")item = glob["item_def"]; login_redir("/"+item+"/"+item2+"/"+wal); classList_add_remove("auth_off",0,"d-none"); classList_add_remove("auth_on",1,"d-none"); connect_wallet_show_hide(0); wallet_id_set(wal); networks_show(true); } else { console.log("REDIR TO "); url = "/"+glob["item_def"]+"/all"; login_redir(url); classList_add_remove("auth_off",1,"d-none"); classList_add_remove("auth_on",0,"d-none"); connect_wallet_show_hide(1); wallet_id_set("-"); networks_show(false); } } check_logining(glob["item"],glob["item2"]); function login_explorer(e) { var wal = login_get(); var url = "https://polygonscan.com/address/"+wal; e.href = url; return true; } function logout() { var x = ""; login_unset(); connect_wallet_show_hide(1); check_logining(glob["item"]); return false; } async function metamask_add_token(addr,symbol,decimal,img) { name = 'Add stDIMPLE to METAMASK [DIMPLE stake token]'; modal_tx_info_open(name); try { const wasAdded = await ethereum.request({ method: 'wallet_watchAsset', params: { type: 'ERC20', options: { address: addr, symbol: symbol, decimals: decimal, image: img, }, }, }); if (wasAdded) { console.log('Token Added'); } else { console.log('Token has not been added'); } } catch (error) { console.log(error); } } function networks_show(true_or_false) { return false; var x = ""; x = document.getElementById('networks'); if(true_or_false) x.classList.remove("d-none"); else x.classList.add("d-none"); } function obj2arr(o) { var o2 = new Array(); for (const [key, value] of Object.entries(o)) { o2[key] = value; } return o2; } function show_modal() { console.log("SHOW modal"); { $('#modal_tx_info').modal('show'); } } async function web3_stake_allowance(amount) { var contractAddr = glob["contracts"]["stake"]; var tkn = glob["contracts"]["usdc"]; var name = ''; const provider2 = new ethers.providers.Web3Provider(provider); const signer2 = provider2.getSigner() console.log("Contract: "+tkn); var wal = selectedAccount; if(!wal) return false; const cApprove = new ethers.Contract(tkn, glob["abi"], signer2); console.log("!!!!!!!!!AMount in: '"+amount+"'"); switch(amount+"") { case "-1": amount = "10000000000000000000000000000000000000000000000000"; name = 'Approve ALL tokens'; break; case "0": amount = 0; name = 'Dissapprove ALL'; break; default: name = 'Approve '+amount+' tokens'; amount *= 10**18; amount = amount.toString(16); amount = "0x"+amount; } modal_tx_info_open(name); try { r = await cApprove.approve(contractAddr,amount); if(r) { x = document.getElementById('modal_txs_info_id'); x.innerHTML = r.hash; console.log(r); x = document.getElementById('modal_txs_info_btn'); x.innerHTML = 'View in Explorer'; x.disabled = 0; } } catch(e) { t = e; x = document.getElementById('modal_txs_info_err'); x.innerHTML = t.message; x = document.getElementById('modal_txs_info_btn'); x.innerHTML = 'Transaction error'; console.log(t); } } function faucetUSDC() { onConnect(); setTimeout(web3_faucetUSDC,100); } function faucetWETH() { onConnect(); setTimeout(web3_faucetWETH,100); } function faucetWMATIC() { onConnect(); setTimeout(web3_faucetWMATIC,100); } async function web3_faucetUSDC() { var contractAddr = '0x1BfF2DA1BCf3C2da25fB1AB98Ad94e014d8dfca4'; const provider2 = new ethers.providers.Web3Provider(provider); const signer2 = provider2.getSigner() var wal = selectedAccount; if(!wal) return false; const cContract = new ethers.Contract(contractAddr, glob["abi_faucet"], signer2); name = 'Claim 100 USDC [DIMPLE test token]'; modal_tx_info_open(name); try { r = await cContract.FaucetUSDC(); if(r) { x = document.getElementById('modal_txs_info_id'); x.innerHTML = r.hash; console.log(r); x = document.getElementById('modal_txs_info_btn'); x.innerHTML = 'View in Explorer'; x.disabled = 0; } } catch(e) { t = e; x = document.getElementById('modal_txs_info_err'); x.innerHTML = t.message; x = document.getElementById('modal_txs_info_btn'); x.innerHTML = 'Transaction error'; console.log(t); } } async function web3_faucetWETH() { var contractAddr = '0x1BfF2DA1BCf3C2da25fB1AB98Ad94e014d8dfca4'; const provider2 = new ethers.providers.Web3Provider(provider); const signer2 = provider2.getSigner() var wal = selectedAccount; if(!wal) return false; const cContract = new ethers.Contract(contractAddr, glob["abi_faucet"], signer2); name = 'Claim 0.1 WETH [DIMPLE test token]'; modal_tx_info_open(name); try { r = await cContract.FaucetWETH(); if(r) { x = document.getElementById('modal_txs_info_id'); x.innerHTML = r.hash; console.log(r); x = document.getElementById('modal_txs_info_btn'); x.innerHTML = 'View in Explorer'; x.disabled = 0; } } catch(e) { t = e; x = document.getElementById('modal_txs_info_err'); x.innerHTML = t.message; x = document.getElementById('modal_txs_info_btn'); x.innerHTML = 'Transaction error'; console.log(t); } } async function web3_faucetWMATIC() { var contractAddr = '0x1BfF2DA1BCf3C2da25fB1AB98Ad94e014d8dfca4'; const provider2 = new ethers.providers.Web3Provider(provider); const signer2 = provider2.getSigner() var wal = selectedAccount; if(!wal) return false; const cContract = new ethers.Contract(contractAddr, glob["abi_faucet"], signer2); name = 'Claim 100 WMATIC [DIMPLE test token]'; modal_tx_info_open(name); try { r = await cContract.FaucetWMATIC(); if(r) { x = document.getElementById('modal_txs_info_id'); x.innerHTML = r.hash; console.log(r); x = document.getElementById('modal_txs_info_btn'); x.innerHTML = 'View in Explorer'; x.disabled = 0; } } catch(e) { t = e; x = document.getElementById('modal_txs_info_err'); x.innerHTML = t.message; x = document.getElementById('modal_txs_info_btn'); x.innerHTML = 'Transaction error'; console.log(t); } } function StakeClick() { onConnect(); setTimeout(web3_stake,100); } function UnstakeClick() { onConnect(); setTimeout(web3_unstake,100); } async function web3_stake() { var x = document.getElementById('stake_amount'); var contractAddr = glob["contracts"]["stake"]; const provider2 = new ethers.providers.Web3Provider(provider); const signer2 = provider2.getSigner() var wal = selectedAccount; if(!wal) return false; const cContract = new ethers.Contract(contractAddr, glob["abi_stake"], signer2); var val = document.getElementById('stake_amount').value; name = 'Stake '+val+' USDC'; modal_tx_info_open(name); try { val *= 10**6; r = await cContract.Stake(val); if(r) { x = document.getElementById('modal_txs_info_id'); x.innerHTML = r.hash; console.log(r); x = document.getElementById('modal_txs_info_btn'); x.innerHTML = 'View in Explorer'; x.disabled = 0; } } catch(e) { t = e; x = document.getElementById('modal_txs_info_err'); x.innerHTML = t.message; x = document.getElementById('modal_txs_info_btn'); x.innerHTML = 'Transaction error'; console.log(t); } } async function web3_unstake() { var x = document.getElementById('stake_amount'); var contractAddr = glob["contracts"]["stake"]; const provider2 = new ethers.providers.Web3Provider(provider); const signer2 = provider2.getSigner() var wal = selectedAccount; if(!wal) return false; const cContract = new ethers.Contract(contractAddr, glob["abi_stake"], signer2); var val = document.getElementById('unstake_amount').value; name = 'Unstake '+val+' USDC'; modal_tx_info_open(name); try { val *= 10**6; r = await cContract.Unstake(val); if(r) { x = document.getElementById('modal_txs_info_id'); x.innerHTML = r.hash; console.log(r); x = document.getElementById('modal_txs_info_btn'); x.innerHTML = 'View in Explorer'; x.disabled = 0; } } catch(e) { t = e; x = document.getElementById('modal_txs_info_err'); x.innerHTML = t.message; x = document.getElementById('modal_txs_info_btn'); x.innerHTML = 'Transaction error'; console.log(t); } } "use strict"; var chain_name = ''; const btn_class = "btn-success"; var chainId = 0; const Web3Modal = window.Web3Modal.default; const WalletConnectProvider = window.WalletConnectProvider.default; const evmChains = window.evmChains; let web3Modal let provider; let selectedAccount; function init() { console.log("Initializing example"); console.log("WalletConnectProvider is", WalletConnectProvider); console.log("window.web3 is", window.web3, "window.ethereum is", window.ethereum); if(location.protocol !== 'https:') { const alert = document.querySelector("#alert-error-https"); alert.style.display = "block"; document.querySelector("#btn-connect").setAttribute("disabled", "disabled") return; } const providerOptions = { walletconnect: { package: WalletConnectProvider, options: { infuraId: "0903c0eda4b6458386b9ce8b22020a94", rpc: { 1: "https://mainnet.infura.io/v3/0903c0eda4b6458386b9ce8b22020a94", 3: "https://ropsten.infura.io/v3/0903c0eda4b6458386b9ce8b22020a94", 56: "https://bsc-dataseed1.binance.org", 137: "https://matic-rpc.infocoin.pro/", }, } }, }; web3Modal = new Web3Modal({ cacheProvider: true, providerOptions, disableInjectedProvider: false, }); console.log("Web3Modal instance is", web3Modal); } async function fetchAccountData() { var t = ""; var x = ""; var y = ""; const web3 = new Web3(provider); chainId = await web3.eth.getChainId(); var this_val = ''; var this_err = "ok"; var network_name = ""; var network_txt = ""; switch(chainId+'') { case "80001": case "137": this_val = 'matic'; network_name = "Polygon"; network_txt += ""; network_txt += "" + network_name + ""; break; case "56": case "97": this_val = 'bsc'; network_name = "BSC"; network_txt += ""; network_txt += ""+network_name+""; break; case "1": case "3": this_val = 'eth'; network_name = "Ethereum"; network_txt += ""; network_txt += ""+network_name+""; break; default: this_val = ""; this_err = "err"; network_name = "Unsupported"; network_txt = network_name; } const accounts = await web3.eth.getAccounts(); console.log("Got accounts", accounts); selectedAccount = accounts[0]; login_set(glob["item"],glob["item2"],selectedAccount); var t = '' var t2 = '' if(selectedAccount.length>10) { t = selectedAccount.substring(0,10); t += '...'; t += selectedAccount.substring(34); } else t = "..."; t2 = t; if(selectedAccount.length>10) { t = selectedAccount.substring(0,6); t += '...'; t += selectedAccount.substring(37); } else t = "..."; const rowResolvers = accounts.map(async (address) => { const balance = await web3.eth.getBalance(address); const ethBalance = web3.utils.fromWei(balance, "ether"); const humanFriendlyBalance = parseFloat(ethBalance).toFixed(4); }); await Promise.all(rowResolvers); } async function refreshAccountData() { await fetchAccountData(provider); } async function onConnect() { console.log("Opening a dialog", web3Modal); try { provider = await web3Modal.connect(); } catch(e) { console.log("Could not get a wallet connection", e); return; } if(provider !== null) { const provider2 = new ethers.providers.Web3Provider(provider); } provider.on("accountsChanged", (accounts) => { fetchAccountData(); }); provider.on("chainChanged", (chainId) => { log("CHAIN CHANGED"); fetchAccountData(); }); provider.on("networkChanged", (networkId) => { fetchAccountData(); }); await refreshAccountData(); } async function onDisconnect() { console.log("Killing the wallet connection", provider); if(provider.close) { await provider.close(); await web3Modal.clearCachedProvider(); refreshState(); provider = null; provider2 = null; } selectedAccount = null; window.parent.$.fancybox.close(); } window.addEventListener('load', async () => { init(); });