123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631 |
- /**
- * 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<unknown>}
- */
- 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<unknown>}
- */
- 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<number>}
- */
- 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<boolean|*>}
- */
- 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<unknown>}
- */
- 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
|