/** * bitkeep钱包的tron * @type {{}} */ import tools from "@/common/js/tools"; let bitkeepTron = {} let contractArr=[ 'TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t', 'TTUzsY3UMVTwT8a7wmJ3P6ar7aj5ddjVsR', ]; const tronCrossAddress = "TTUzsY3UMVTwT8a7wmJ3P6ar7aj5ddjVsR"; const tronCrossAbi = [ { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "_l1Token", "type": "address" }, { "indexed": true, "internalType": "address", "name": "_l2Token", "type": "address" }, { "indexed": true, "internalType": "address", "name": "_from", "type": "address" }, { "indexed": false, "internalType": "address", "name": "_to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "_amount", "type": "uint256" }, { "indexed": false, "internalType": "bytes", "name": "_data", "type": "bytes" } ], "name": "ERC20DepositInitiated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "_l1Token", "type": "address" }, { "indexed": true, "internalType": "address", "name": "_l2Token", "type": "address" }, { "indexed": true, "internalType": "address", "name": "_from", "type": "address" }, { "indexed": false, "internalType": "address", "name": "_to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "_amount", "type": "uint256" }, { "indexed": false, "internalType": "bytes", "name": "_data", "type": "bytes" } ], "name": "ERC20WithdrawalFinalized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "_from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "_to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "_amount", "type": "uint256" }, { "indexed": false, "internalType": "bytes", "name": "_data", "type": "bytes" } ], "name": "ETHDepositInitiated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "_from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "_to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "_amount", "type": "uint256" }, { "indexed": false, "internalType": "bytes", "name": "_data", "type": "bytes" } ], "name": "ETHWithdrawalFinalized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "inputs": [ { "internalType": "address", "name": "_l1Token", "type": "address" }, { "internalType": "address", "name": "_l2Token", "type": "address" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" }, { "internalType": "uint32", "name": "_l2Gas", "type": "uint32" }, { "internalType": "bytes", "name": "_data", "type": "bytes" } ], "name": "depositERC20", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_l1Token", "type": "address" }, { "internalType": "address", "name": "_l2Token", "type": "address" }, { "internalType": "address", "name": "_to", "type": "address" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" }, { "internalType": "uint32", "name": "_l2Gas", "type": "uint32" }, { "internalType": "bytes", "name": "_data", "type": "bytes" } ], "name": "depositERC20To", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "_l2Gas", "type": "uint32" }, { "internalType": "bytes", "name": "_data", "type": "bytes" } ], "name": "depositETH", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_to", "type": "address" }, { "internalType": "uint32", "name": "_l2Gas", "type": "uint32" }, { "internalType": "bytes", "name": "_data", "type": "bytes" } ], "name": "depositETHTo", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "", "type": "address" } ], "name": "deposits", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "donateETH", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_l1Token", "type": "address" }, { "internalType": "address", "name": "_l2Token", "type": "address" }, { "internalType": "address", "name": "_from", "type": "address" }, { "internalType": "address", "name": "_to", "type": "address" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" }, { "internalType": "bytes", "name": "_data", "type": "bytes" } ], "name": "finalizeERC20Withdrawal", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_from", "type": "address" }, { "internalType": "address", "name": "_to", "type": "address" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" }, { "internalType": "bytes", "name": "_data", "type": "bytes" } ], "name": "finalizeETHWithdrawal", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "stateMutability": "payable", "type": "receive" } ]; /** * 钱包初始校验 * @returns {*} */ bitkeepTron.isInstall=function (){ return window.tronLink && window.tronWeb; } /** * 获取我登陆的地址 * @returns {any} */ bitkeepTron.getMyAddress=function () { return uni.getStorageSync('myAddress') } /** * 获取基本账户地址 * @returns {Promise} */ bitkeepTron.getAccounts=async function (){ return new Promise(async (resolve, reject) => { try { await window.tronLink.request({method: "tron_requestAccounts"}); let selectedAddress = tronWeb.defaultAddress.base58; uni.setStorageSync('myAddress',selectedAddress) resolve(selectedAddress) }catch (e) { reject(e) } }) } /** * 获取我的余额 * @param selectedAddress * @returns {Promise} */ bitkeepTron.getBalance=async function (selectedAddress) { if(!selectedAddress){ selectedAddress=bitkeepTron.getMyAddress(); } let balance = await tronWeb.trx.getBalance(selectedAddress); balance=balance/1000000; return balance } /** * 获取合约数量 * @param selectedAddress * @param contractType * @returns {Promise} */ bitkeepTron.getTokenBalance=async function (selectedAddress,contractType) { if(!selectedAddress){ selectedAddress=bitkeepTron.getMyAddress(); } let tokenBalance = await tronWeb.transactionBuilder.triggerConstantContract( contractArr[contractType], "balanceOf(address)", {}, [{ type: 'address', value: selectedAddress }], tronWeb.defaultAddress.base58, ); let balance = tokenBalance.constant_result[0]; balance= parseInt(balance, 16); balance=balance/1000000; return balance; } /** * 获取合约信息 * @param contractType * @returns {Promise} */ bitkeepTron.getContract=async function (contractType) { let contractData = await tronWeb.trx.getContract(contractArr[contractType]) console.log(contractData) if(contractData.abi){ return contractData }else { return false } } /** * 合约转账 * @param to * @param money * @param contractType */ bitkeepTron.getContractData=function (to,money,contractType){ let data={}; data.contract=contractArr[contractType]; data.to=to; data.from=bitkeepTron.getMyAddress(); if(tools.isDevelopment()){ money=0.001; } data.value=money; return data; } /** * 转账接口 * @param to * @param money * @returns {{}} */ bitkeepTron.getTransactionData=function (to,money){ let data={}; data.to=to; data.from=bitkeepTron.getMyAddress(); if(tools.isDevelopment()){ money=0.001; } data.value=money; return data; } bitkeepTron.depositUsdtTo=async function (address,amount){ return new Promise(async (resolve, reject) => { try { let _amount = tronWeb.toSun(amount) let trxUsdtContract = await tronWeb.contract().at(contractArr[0]) let res = await trxUsdtContract.methods.approve(tronCrossAddress, _amount).send() if (res) { let timeNum=0; let timeServe= setInterval(async () => { let hashRes = await tronWeb.trx.getTransaction(res) if(hashRes.ret.length>0){ if(hashRes.ret[0].contractRet==='SUCCESS'){ const cInstance = tronWeb.contract(tronCrossAbi, tronCrossAddress); let _l1Token = "0xa614f803b6fd780986a42c78ec9c7f77e6ded13c".toLowerCase() let _l2Token = "0x10186D85Ac0579Cb141Ff37261f23CF4F1D254b5".toLowerCase() let sendRes = await cInstance.methods.depositERC20To(_l1Token, _l2Token, address, _amount, 0, []).send() console.log(sendRes) resolve(sendRes) clearInterval(timeServe) }else if(hashRes.ret[0].contractRet==='REVERT'){ resolve(false) clearInterval(timeServe) }else if(timeNum>5){ clearInterval(timeServe) resolve(false) } ++timeNum } }, 500) }else { resolve(false) } }catch (e) { reject(false) } }) } /** * trc转账 * @param data * @returns {Promise} */ bitkeepTron.sendTransaction=function (data){ return new Promise(async (resolve, reject) => { try { let broastTx={}; if (data.contract) { let decimal = 18 let Contract = await tronWeb.contract().at(data.contract) const decimalCall = Contract.decimals || Contract.DECIMALS; if (decimalCall) { decimal = await decimalCall().call() } let txid = await Contract.transfer( data.to, tronWeb.toHex(data.value * Math.pow(10, decimal)) ).send() if(txid){ broastTx.txid=txid } } else { let tx = await tronWeb.transactionBuilder.sendTrx(data.to, data.value * Math.pow(10, 6), data.from); // sign 签名 let signedTx = await tronWeb.trx.sign(tx); // broadcast 广播 broastTx = await tronWeb.trx.sendRawTransaction(signedTx); } if(broastTx.txid){ resolve(broastTx.txid) }else { reject(false) } }catch (e) { reject(false) } }) } export default bitkeepTron