import abi from 'utils/EthAbi.js' import systemConfiguration from 'utils/SystemConfiguration.js' const Web3 = require('web3'); const Tx = require('ethereumjs-tx'); let web3; // let tx; if (typeof web3 !== 'undefined') { web3 = new Web3(web3.currentProvider); } else { web3 = new Web3(new Web3.providers.HttpProvider(systemConfiguration.constant.ethNode)); } let eth = { // //获取主币eth余额 // getBalance: async function(address) { // console.log("查询余额:",address) // let balance = 0; // try{ // web3 = new Web3(new Web3.providers.HttpProvider(systemConfiguration.constant.ethNode)); // balance = await web3.eth.getBalance(address); // console.log("余额:",balance,9999999999999) // }catch(e){ // console.log("余额:",e,9999999999999) // } // return Number(balance) / Math.pow(10, 18); // }, getBalance: async function(address) { console.log("查询余额:",address) 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() { web3 = new Web3(new Web3.providers.HttpProvider(systemConfiguration.constant.ethNode)); const gasPrice = await web3.eth.getGasPrice().then((v) => { return v }); console.log(gasPrice, 'gasPrice') return gasPrice; }, //获取主币eth余额 getBalance: async function(address) { web3 = new Web3(); const data = { 'jsonrpc': '2.0', 'id': '1', 'method': 'eth_getBalance', 'params': [address, "latest"] }; let res = await uni.request({ url: systemConfiguration.constant.ethNode, //仅为示例,并非真实接口地址。 method: 'POST', data: data, dataType: 'json' }); try { let balance = Number(web3.utils.hexToNumberString(res[1].data.result)) / Math.pow(10, 18) 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: async function(address, contract, success) { web3 = new Web3(); const data = { 'jsonrpc': '2.0', 'id': '1', 'method': 'eth_call', 'params': [{ "data": '0x70a08231' + this.addPreZero(address.replace('0x', '')), "to": contract, }, "latest"] }; let res = await uni.request({ url: systemConfiguration.constant.ethNode, //仅为示例,并非真实接口地址。 method: 'POST', data: data, dataType: 'json' }); let resData = res[res.length - 1]; console.log(resData, 5555555555) let balance = Number(web3.utils.hexToNumberString(resData.data.result)) / Math.pow(10, 18) console.log(balance, 'balance') return 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,web3.eth.getGasPrice()) var txData = { // nonce每次++,以免覆盖之前pending中的交易 nonce: web3.utils.toHex(nonce++), // 设置gasLimit和gasPrice gasLimit: web3.utils.toHex(600000), gasPrice: web3.utils.toHex(web3.eth.getGasPrice()), // 要转账的哪个账号 to: toAddress, // 从哪个账号转 from: fromAddress, // 0.001 以太币 value: web3.utils.toHex(web3.utils.toWei(value, 'ether')), chainId:systemConfiguration.constant.ethChainId } // 引入私钥,并转换为16进制 // 用私钥签署交易 console.log(txData,55555) 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;