import abi from 'utils/EthAbi.js' const Web3 = require('web3'); const Tx = require('ethereumjs-tx'); let web3; // let tx; web3 = new Web3(); let eth = { // //获取主币eth余额 // getBalance: async function(address, type) { // let balance = await web3.eth.getBalance(address); // console.log("余额:",balance) // return Number(balance) / Math.pow(10, 18); // }, // //获取eth代币币余额 // getTokenBalance: async function(address, contract) { // console.log(address, contract) // var myContract = new web3.eth.Contract(abi, contract, { // from: address // }); // var decimals = await myContract.methods.decimals().call(); // var balance = await myContract.methods.balanceOf(address).call(); // return Number(balance) / Math.pow(10, decimals); // }, getGas: async function() { const gasPrice = await web3.eth.getGasPrice().then((v) => { return v }); return Number(nubmerJs.strip(gas * gasPrice / 10 ** 18).toFixed(6)) }, //获取主币eth余额 getBalance: function(address,success) { const data = { 'jsonrpc': '2.0', 'id': '1', 'method': 'eth_getBalance', 'params': [address, "latest"] }; uni.request({ url: 'https://mainnet.infura.io/v3/9aa3d95b3bc440fa88ea12eaa4456161', //仅为示例,并非真实接口地址。 method: 'POST', data: data, dataType: 'json', success: (res) => { console.log() let balance = Number(web3.utils.hexToNumberString(res['data']['result'])) / Math.pow(10, 18) console.log(balance,45465465) success(balance) } }); try { let web3 = new Web3(); return balance } catch (e) { return 0; } }, addPreZero: function(num) { let t = (num + '').length, s = ''; for (let i = 0; i < 64 - t; i++) { s += '0'; } return s + num; }, // 获取bms,bmdt,usdt/erc余额 getTokenBalance: function(address, contract,success) { const data = { 'jsonrpc': '2.0', 'id': '1', 'method': 'eth_call', 'params': [{ "data": '0x70a08231' + this.addPreZero(address.replace('0x', '')), "to": contract, }, "latest"] }; uni.request({ url: 'https://mainnet.infura.io/v3/9aa3d95b3bc440fa88ea12eaa4456161', //仅为示例,并非真实接口地址。 method: 'POST', data: data, dataType: 'json', success: (res) => { console.log(res,45454) let balance = Number(web3.utils.hexToNumberString(res['data']['result'])) / Math.pow(10, 18) console.log(balance,45454) success(balance) } }); }, sendTransaction: async function(fromAddress, toAddress, value, privateKey, success) { var nonce = await web3.eth.getTransactionCount(fromAddress); var gas = await web3.eth.estimateGas({ from: fromAddress }); console.log(11111111111) console.log(nonce) console.log(fromAddress, toAddress, value, privateKey) var txData = { chainId: web3.utils.toHex(1899), // nonce每次++,以免覆盖之前pending中的交易 nonce: web3.utils.toHex(nonce++), // 设置gasLimit和gasPrice gas: web3.utils.toHex(gas), gasPrice: web3.utils.toHex(web3.eth.getGasPrice()), // 要转账的哪个账号 to: toAddress, // 从哪个账号转 from: fromAddress, // 0.001 以太币 value: web3.utils.toHex(web3.utils.toWei(value, 'ether')) } // 引入私钥,并转换为16进制 // 用私钥签署交易 console.log(Buffer.from(privateKey).toString('hex')) const tx = new Tx(txData); tx.sign(Buffer.from(privateKey, 'hex')); // 序列化 var serializedTx = tx.serialize().toString('hex'); web3.eth.sendSignedTransaction('0x' + serializedTx.toString('hex'), function(err, hash) { console.log('hash' + hash) if (!err) { success(hash, undefined); } else { console.log(err, 789798) success(undefined, err); } }); // 获取交易数据 }, sendTokenTransaction: async function(fromAddress, toAddress, value, privateKey, contract, success) { var nonce = await web3.eth.getTransactionCount(fromAddress); var gas = await web3.eth.estimateGas({ from: fromAddress }); console.log('nonce' + nonce) var myContract = new web3.eth.Contract(abi, contract) myContract.methods.decimals().call() .then(function(decimals) { // 获取交易数据 console.log(Number(value) * Math.pow(10, decimals)) var txData = { chainId: web3.utils.toHex(128), // nonce每次++,以免覆盖之前pending中的交易 nonce: web3.utils.toHex(nonce++), // 设置gasLimit和gasPrice gas: web3.utils.toHex(gas), gasPrice: web3.utils.toHex(web3.eth.getGasPrice()), // 要转账的哪个账号 to: contract, // 从哪个账号转 from: fromAddress, // 0.001 以太币 value: "0x00", data: myContract.methods.transfer( toAddress, web3.utils.toWei(value, 'ether')).encodeABI() } // 引入私钥,并转换为16进制 // 用私钥签署交易 const tx = new Tx(txData, { 'chain': 'ropsten' }); tx.sign(Buffer.from(privateKey, 'hex')); console.log(Buffer.from(privateKey).toString('hex')) // 序列化 var serializedTx = tx.serialize().toString('hex'); web3.eth.sendSignedTransaction('0x' + serializedTx.toString('hex'), function( err, hash) { if (!err) { success(hash, undefined); } else { success(undefined, err); } }); }); }, transaction:async function(fromAddress, toAddress, value, privateKey, contract, success){ if(contract){ await this.sendTokenTransaction(fromAddress, toAddress, value, privateKey, contract, success); }else{ await this.sendTransaction(fromAddress, toAddress, value, privateKey, success) } } } export default eth;