import Web3 from 'web3' import axios from 'axios' import BEB_abi from './../abi/BEBadgeV2.json' import NFT_abi from './../abi/NFTClaimer.json' var abis = { "BEB": BEB_abi, "NFT": NFT_abi, } var BEBAddress = process.env.VUE_APP_BEB_URL var NFTAddress = process.env.VUE_APP_NFT_URL var chainId = process.env.VUE_APP_TOKENID_ID var connectUrl = process.env.VUE_APP_CONFIG_URL // Wallet Connect初始化 import { EthereumProvider } from '@walletconnect/ethereum-provider' const provider = await EthereumProvider.init({ projectId: 'e7743d46923911fa8850619b7a7f6d9d', // required chains: ['1'], // required showQrModal: true, // requires @walletconnect/modal optionalChains: ['1'], // optionalMethods: ['eth_signTypedData', 'eth_signTypedData_v4'], metadata: { name: 'Counter Fire', description: 'Counter Fire', url: 'https://mint.counterfire.games/', icons: ['https://www.counterfire.games/favicon.ico'], }, }); // 链接Wallet Connect钱包 export async function getConnect() { await provider.connect() let result = await provider.request({ method: 'eth_requestAccounts' }) return result } // 断开链接 export async function disconnectLink(name) { if(name == 'ethereum') { await window.ethereum.request({ "method": "wallet_revokePermissions", "params": [ { "eth_accounts": {} } ] }); } else if(name == 'okxwallet') { await okxwallet.request({ "method": "wallet_disconnect", }) } else if(name == 'connect') { await provider.request({method: 'eth_requestDisconnect'}) } } // 获取钱包地址 export async function getWalletAddress() { const web3js = window.ethereum const web3 = await web3js.request({ method: 'eth_accounts' }) if (web3 !== 'undefined') { if (web3[0] == '') { return false } else { return await web3[0] } } } // 查看钱包是否链接 export async function isWalletConnected() { const ethereum = window.web3; if (typeof ethereum !== 'undefined') { let res = await ethereum.request({ method: "eth_accounts" }) // await okxwallet.request({ method: "eth_accounts" }); // console.log(res,'279-----') if(res[0] == '') { return false } else { return true } } return false } // 检查是否有arbitrum-sepolia网络 export async function isSepoliNetwork(name) { let res if(name == 'ethereum') { res = await window.ethereum.request({ method: "wallet_switchEthereumChain", params: [ { chainId: chainId } ] }); return false } else if(name == 'okxwallet') { res = await window.ethereum.request({ method: "wallet_switchEthereumChain", params: [ { chainId: chainId } ] }); return false } else if(name == 'connect') { return false } } // 添加arbitrum-sepolia网络 export async function addNetwork(name) { if(name == 'ethereum') { try{ let res = await window.ethereum.request({ method: 'wallet_addEthereumChain', params: [{ chainId: '0xaa36a7', chainName: 'Sepolia Testnet Explorer', rpcUrls: ['https://sepolia.infura.io/v3'], iconUrls: ['https://xdaichain.com/fake/example/url/xdai.png'], blockExplorerUrls: ['https://sepolia.etherscan.io'], nativeCurrency: { name: "xDAI", symbol: "xDAI", decimals: 18 }, },] }) return await res } catch(e) { return false } } else if(name == 'okxwallet') { try{ let res = await okxwallet.request({ method: 'wallet_addEthereumChain', params: [{ chainId: '11155111', chainName: 'Sepolia Testnet Explorer', rpcUrls: ['https://sepolia.infura.io/v3'], iconUrls: ['https://xdaichain.com/fake/example/url/xdai.png'], blockExplorerUrls: ['https://sepolia.etherscan.io'], nativeCurrency: { name: "xDAI", symbol: "xDAI", decimals: 18 }, }] }) return await res } catch(e) { return false } } else if(name == 'connect') { try{ let res = await window.provider.request({ method: 'wallet_addEthereumChain', params: [{ chainId: '0xaa36a7', chainName: 'Sepolia Testnet Explorer', rpcUrls: ['https://sepolia.infura.io/v3'], iconUrls: ['https://xdaichain.com/fake/example/url/xdai.png'], blockExplorerUrls: ['https://sepolia.etherscan.io'], nativeCurrency: { name: "xDAI", symbol: "xDAI", decimals: 18 }, }] }) return await res } catch(e) { return false } } } // 获取总数 export async function getSupplyLimit(name,address) { let web3 if(name == 'ethereum') { web3 = new Web3(window.ethereum); } else if(name == 'okxwallet') { web3 = new Web3(window.okxwallet) } else if(name == 'connect') { web3 = new Web3(provider) } let contract = new web3.eth.Contract(abis['BEB'].abi, BEBAddress, { from: address}) let time = await contract.methods.supplyLimit().call() return Number(time) } // 获取已Mint数量 export async function getTotalLimit(name,address) { let web3 if(name == 'ethereum') { web3 = new Web3(window.ethereum); } else if(name == 'okxwallet') { web3 = new Web3(okxwallet) } else if(name == 'connect') { web3 = new Web3(provider) } let contract = new web3.eth.Contract(abis['BEB'].abi, BEBAddress, { from: address}) let time = await contract.methods.totalSupply().call() return Number(time) } // 开始时间 export async function getStartTime(name,address) { let web3 if(name == 'ethereum') { web3 = new Web3(window.ethereum); } else if(name == 'okxwallet') { web3 = new Web3(okxwallet) } else if(name == 'connect') { web3 = new Web3(provider) } let contract = new web3.eth.Contract(abis['NFT'].abi, NFTAddress, { from: address}) let startTime = await contract.methods.startTime().call() return Number(startTime) } // 结束时间 export async function getEndTime(name,address) { let web3 if(name == 'ethereum') { web3 = new Web3(window.ethereum); } else if(name == 'okxwallet') { web3 = new Web3(okxwallet) } else if(name == 'connect') { web3 = new Web3(provider) } let contract = new web3.eth.Contract(abis['NFT'].abi, NFTAddress, { from: address}) let endTime = await contract.methods.endTime().call() return Number(endTime) } // 开启NFT export async function testClaim(name,data,address) { let web3 if(name == 'ethereum') { web3 = new Web3(window.ethereum); } else if(name == 'okxwallet') { web3 = new Web3(okxwallet) } else if(name == 'connect') { web3 = new Web3(provider) } const gasPrice = await web3.eth.getGasPrice(); let contract = new web3.eth.Contract(abis['NFT'].abi, NFTAddress, { from: address}) let gas = await contract.methods.claim(...data).estimateGas(); gas = (Number(gas) * 1) | 0; const receipt = await contract.methods.claim(...data).send({ gas, gasPrice }); return receipt } // 查看已Mint的tokenId export async function inquireClaimHistory(name, address) { let web3 if(name == 'ethereum') { web3 = new Web3(window.ethereum); } else if(name == 'okxwallet') { web3 = new Web3(okxwallet) } else if(name == 'connect') { web3 = new Web3(provider) } let contract = new web3.eth.Contract(abis['NFT'].abi, NFTAddress, { from: address}) const tokenId = await contract.methods.claimHistory(address).call(); return tokenId } // 初始化数据 export async function makeBatchRequestList(name,address) { const [supplyLimit, totalLimit, startTime, endTime] = [ await getSupplyLimit(name,address), await getTotalLimit(name,address), await getStartTime(name,address), await getEndTime(name,address) ] return [supplyLimit, totalLimit, startTime, endTime] } // 获取数据 export async function getReqConnect(dataID, contract, address) { const data = { id: (Date.now() / 1000) | 0, jsonrpc: '2.0', method: 'eth_call', params: [ { data: dataID, from: address, to: contract, }, 'latest', ] } let res = await axios.post(connectUrl, data) if(res.data.result) { return res.data.result } else { return } }