diff --git a/checkbridge.js b/checkbridge.js new file mode 100644 index 0000000..0cbc070 --- /dev/null +++ b/checkbridge.js @@ -0,0 +1,326 @@ +const fs = require("fs"); + +const axios = require("axios") +// web3.eth.defaultAccount = '0x50A8e60041A206AcaA5F844a1104896224be6F39' + +const Web3 = require('web3'); + +// const jsontxt = fs.readFileSync('./build/contracts/ERC721.json', 'utf-8') +// const jsonabi = JSON.parse(jsontxt) + +const abimodule = require('./abi_code'); + +// IsDbg = false; +IsDbg = true; +const RPC = IsDbg? + 'https://sepolia.drpc.org': + // 'https://eth-sepolia.public.blastapi.io': + 'https://ethereum.publicnode.com' + // 'https://eth-mainnet.g.alchemy.com/v2/5OZeb3Gly2poPeCFhnK7qVsCMDB_oPwO' + //'https://eth-mainnet.public.blastapi.io' + //'https://arbitrum-sepolia.infura.io/v3/8ae5bef48da14bbbac03860879a08bd7' + +// const w3 = new Web3('https://arbitrum-one.public.blastapi.io') + +const w3 = new Web3(RPC) +console.log('start') + +async function getNonce(addr){ + return await w3.eth.getTransactionCount(addr) +} + +const BRIDGE_ADDRESS = IsDbg? "0x0D3C59c779Fd552C27b23F723E80246c840100F5": "0xBa5E35E26Ae59c7aea6F029B68c6460De2d13eB6" +const PRIVATE_KEY = '0x7456b7f12365224bafa37a76437571859780e490c0d24927a832d2411e77080f' + +const MI = { + sc: BRIDGE_ADDRESS, + abi: + [{ + "inputs": [{ + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }], + "name": "depositToETH", + "outputs": [], + "stateMutability": "payable", + "type": "function" + } + ], + func: "depositToETH" +} + +let SCInstance = null +let FromAddr = null +const initInstance = async() => { + // let account = w3.eth.accounts.privateKeyToAccount(PRIVATE_KEY); + let account = w3.eth.accounts.wallet.add(PRIVATE_KEY); + console.log('account:', account) + // const accounts = await w3.eth.getAccounts(); + // console.log('accounts:', accounts) + // if(accounts.length > 0){ + // FromAddr = accounts[0] + // } + FromAddr = account.address + SCInstance = new w3.eth.Contract(MI.abi, MI.sc); + return SCInstance +} + +const bridge = async() => { + if(!SCInstance){ + await initInstance() + } + + const amt = Web3.utils.toWei('0.001', 'ether') + console.log('amt:', amt) + // const val = Web3.utils.fromWei(amt, 'ether') + const val = amt + console.log('val:', val) + const fromaddr = FromAddr + console.log('fromaddr:', fromaddr) + const toaddr = '0x742Ac5804Ce24F70618fC68281151df5f6f195Fb' + + const gp = await w3.eth.getGasPrice() + console.log('gp:', gp) + const params = [{from: fromaddr, value: val * 2}] + + // const gc = IsDbg? 21798: await SCInstance.methods.depositToETH(toaddr, amt).estimateGas(...params) + const gc = await SCInstance.methods.depositToETH(toaddr, amt).estimateGas(...params) + const fee = gp * gc * 2 + console.log('fee:', fee, 'gp:', gp, 'gc:', gc) + + const newval = Web3.utils.toBN(val).add(Web3.utils.toBN(fee)).toString() + + console.log('val:', newval) + + // const params2 = [{from: fromaddr}, {value: newval}] + const params2 = [{from: fromaddr, value: newval, gas: gc * 10, gasPrice: gp}] + + try{ + // const receipt = await SCInstance.methods.depositToETH(toaddr, amt).send(...params2) + // console.log('receipt:', receipt) + }catch(err){ + console.log('err:', err) + } + +} + +const checkBalance = async(addr) => { + if(!SCInstance){ + initInstance() + } + let banlace = await SCInstance.methods.balanceOf(addr).call(); + return parseFloat(banlace); +} + +const getTokenId = async(addr) =>{ + if(!SCInstance){ + initInstance() + } + let tokenid = await SCInstance.methods.tokenOfOwnerByIndex(addr, 0).call(); + return tokenid; +} + +const checkIsMint = async (address) => { + contract = '0x20c095fb98b7F353b859c42589f2322248Ea8A23' + url = RPC + const data = { + id: (Date.now() / 1000) | 0, + jsonrpc: '2.0', + method: 'eth_call', + params: [ + { + data: `0x425a69cc000000000000000000000000${address.replace('0x', '')}`, + from: address, + to: contract, + }, + 'latest', + ], + } + const reqConfig = { + method: 'post', + url, + headers: { + 'Content-Type': 'application/json', + 'cache-control': 'no-cache', + pragma: 'no-cache', + }, + data: JSON.stringify(data), + } + let res = await axios(reqConfig).then(response => response.data) + if(res && res.result){ + let no = parseInt(res.result) + return no > 0 + }else{ + console.log('error:', res) + return 0 + } +} + +async function checkToken(){ + // const str = fs.readFileSync("nft_claim_address_list.txt").toString().trim(); + const str = fs.readFileSync("150.txt").toString().trim(); + // const str = fs.readFileSync("team.txt").toString().trim(); + const walletlst = str.split('\n') + let rescount = 0; + let cmstr = '' + let nomintcount = 0 + let mstr = '' + let reslst = [] + for(let i = 0; i < walletlst.length; i++){ + let addr = walletlst[i].trim() + // let isOk = await checkIsMint(addr) + let ncount = await checkBalance(addr) + let isOk = ncount > 0 + if(isOk){ + let tokenid = await getTokenId(addr) + reslst.push( + { + idx: i, + addr: addr, + token: `#${tokenid}` + } + ) + // console.log(`${addr}`) + rescount++; + mstr = mstr + addr + '\n' + }else{ + console.log(`${addr}`) + nomintcount++ + cmstr = cmstr + addr + '\n' + } + // let count = await checkContractMethod(addr) + // if(count > 0){ + // // console.log(`${addr}:${count}`) + // rescount++; + // }else{ + // nomintcount++ + // console.log(`${addr}`) + // cmstr = cmstr + addr + '\n' + // } + } + + console.log('minted count:', rescount) + console.log('not minted count:', nomintcount) + fs.writeFileSync("no_claim.txt", cmstr) + fs.writeFileSync("claim.txt", mstr) + fs.writeFileSync("detail.json", JSON.stringify(reslst)) +} + +function getTokenRare(){ + let str = fs.readFileSync('detail.json') + let detail = JSON.parse(str) + str = fs.readFileSync('rare.json') + let rare = JSON.parse(str) + + let rarecount = 0 + let legendcount = 0 + for(let i =0; i < detail.length;i++){ + let obj = detail[i] + let idx = rare.findIndex((item)=>{ + let s = '#' + item.id + return s === obj.token + }) + if(idx >= 0){ + console.log(rare[idx]) + obj.rare = rare[idx].rarity + if(obj.rare === 'Rare'){ + rarecount++ + }else if(obj.rare === 'Legendary'){ + legendcount++ + } + } + } + console.log(`rare:${rarecount} legend:${legendcount}`) + fs.writeFileSync("detail.json", JSON.stringify(detail)) +} + +async function getEthBalance(addr){ + let balance = await w3.eth.getBalance(addr) + if(balance > 0){ + balance = w3.utils.fromWei(balance, 'ether') + } + + return balance +} + +async function checkEth(){ + const str = fs.readFileSync("150.txt").toString().trim(); + // const str = fs.readFileSync("team.txt").toString().trim(); + const walletlst = str.split('\n') + let rescount = 0; + let cmstr = '' + for(let i = 0; i < walletlst.length; i++){ + let addr = walletlst[i].trim() + // let isOk = await checkIsMint(addr) + let neth = await getEthBalance(addr) + rescount += parseFloat(neth) + cmstr = cmstr + '' + neth + '\n' + } + console.log(`total:${rescount}`) + fs.writeFileSync("eth.txt", cmstr) +} + +async function checkListBalance(filename){ + const str = fs.readFileSync(filename).toString().trim(); + const walletlst = str.split('\n') + let rescount = 0; + let cmstr = '' + for(let i = 0; i < walletlst.length; i++){ + let addr = walletlst[i].trim() + if(!addr){ + continue + } + // let isOk = await checkIsMint(addr) + let ncount = await checkBalance(addr) + rescount += ncount + cmstr = cmstr + '' + ncount + '\n' + } + console.log(`total:${rescount}`) + fs.writeFileSync("balance.txt", cmstr) +} + +async function main(){ + // const nonce = await getNonce("0x7E8E62EF14E9ae1a0B1dd753b45AA42Faa6208D7") + // console.log('nonce:', nonce) + + // const msg = 'some msg that need sign' + // let res = w3.eth.accounts.sign(msg, arbOneKey) + + // console.log(res) + + // let hash = w3.eth.accounts.hashMessage(res.signature) + + // console.log(hash) + + // let res = await abimodule.getBalance() + // console.log(res) + // if (res > 0){ + + // } + + // let res = await abimodule.getPastEvents() + // console.log(res) + + // await checkToken() + // getTokenRare() + + + // await checkEth() + + // await checkListBalance('checkaddrs.txt') + + await bridge() + + console.log("done") +} + +main() + + +