tokenpocket-bnb.js 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278
  1. /**
  2. * bitkeep钱包的tron
  3. * @type {{}}
  4. */
  5. import tools from "@/common/js/tools";
  6. import {ethers} from "ethers";
  7. import web3 from "web3";
  8. let tokenpocketBnb = {}
  9. let contractArr=[
  10. '0x41D8081BE81e5940F23ADd6F68bFA0Bd0aF24Af4',//token
  11. '0x337610d27c682e347c9cd60bd4b3b107c9d34ddd',//usdt
  12. // '0x47fB7D1f92119eBFbC8B799044D42a65D4050D93',//token 正式
  13. // '0x55d398326f99059fF775485246999027B3197955',//usdt 正式
  14. ];
  15. let chainId=''
  16. let provider;
  17. /**
  18. * 钱包初始校验
  19. * @returns {*}
  20. */
  21. tokenpocketBnb.getProvider= function (){
  22. console.log(window.ethereum)
  23. console.log(window.ethereum.isTokenPocket)
  24. if (!window.ethereum || typeof window.ethereum.isTokenPocket === 'undefined') {
  25. return false
  26. }
  27. if(!provider){
  28. provider = window.ethereum;
  29. }
  30. // alert(provider.isConnected())
  31. console.log(chainId)
  32. if(!chainId){
  33. provider.request({method:'eth_chainId'}).then((ethChainId)=>{
  34. console.log(ethChainId)
  35. if(ethChainId!=='0x38'){
  36. uni.$emit('noBan',false)
  37. }else {
  38. chainId=ethChainId
  39. }
  40. })
  41. }
  42. return provider;
  43. }
  44. tokenpocketBnb.getPrice= async function () {
  45. const provider = new ethers.providers.JsonRpcProvider('https://bsc-prebsc-dataseed.bnbchain.org/');
  46. const contract = {
  47. factory: '0x6725F303b657a9451d8BA641348b6761A6CC7a17', // PancakeSwap V2 factory
  48. router: '0xD99D1c33F9fC3444f8101754aBC46c52416550D1', // PancakeSwap V2 router
  49. // factory: '0xcA143Ce32Fe78f1f7019d7d551a6402fC5350c73', // PancakeSwap V2 factory zs
  50. // router: '0x10ED43C718714eb63d5aA57B78B54704E256024E', // PancakeSwap V2 router zs
  51. };
  52. const router = new ethers.Contract(
  53. contract.router,
  54. [{
  55. "inputs": [{"internalType": "uint256", "name": "amountIn", "type": "uint256"}, {
  56. "internalType": "address[]",
  57. "name": "path",
  58. "type": "address[]"
  59. }],
  60. "name": "getAmountsOut",
  61. "outputs": [{"internalType": "uint256[]", "name": "amounts", "type": "uint256[]"}],
  62. "stateMutability": "view",
  63. "type": "function"
  64. }],
  65. provider
  66. );
  67. const amounts = await router.getAmountsOut(ethers.utils.parseUnits('1', 18), [contractArr[0], contractArr[1]]);
  68. return amounts[1].toString() / 1e18;
  69. }
  70. /**
  71. * 获取我登陆的地址
  72. * @returns {any}
  73. */
  74. tokenpocketBnb.getMyAddress=function () {
  75. return uni.getStorageSync('babAddress')
  76. }
  77. /**
  78. * 获取基本账户地址
  79. * @returns {Promise<unknown>}
  80. */
  81. tokenpocketBnb.getAccounts=async function (){
  82. return new Promise( (resolve, reject) => {
  83. try {
  84. tokenpocketBnb.getProvider().request({ method: 'eth_requestAccounts'})
  85. .then((address)=>{
  86. if(address.length>0){
  87. uni.setStorageSync('babAddress',address[0])
  88. resolve(address[0])
  89. }else {
  90. resolve(false)
  91. }
  92. })
  93. .catch((e)=>{
  94. console.log(e)
  95. })
  96. }catch (e) {
  97. reject(e)
  98. }
  99. })
  100. }
  101. /**
  102. * 获取我的余额
  103. * @param selectedAddress
  104. * @returns {Promise<unknown>}
  105. */
  106. tokenpocketBnb.getBalance=async function (selectedAddress) {
  107. if(!selectedAddress){
  108. selectedAddress=tokenpocketBnb.getMyAddress();
  109. }
  110. return new Promise( (resolve, reject) => {
  111. try {
  112. tokenpocketBnb.getProvider().request({ method: 'eth_getBalance',params:[selectedAddress,'latest']})
  113. .then((balance)=>{
  114. balance= ethers.utils.formatEther(balance.toString())
  115. resolve(balance)
  116. })
  117. .catch((e)=>{
  118. resolve(0)
  119. })
  120. }catch (e) {
  121. reject(e)
  122. }
  123. })
  124. }
  125. /**
  126. * 获取合约数量
  127. * @param selectedAddress
  128. * @param contractType
  129. * @returns {Promise<number>}
  130. */
  131. tokenpocketBnb.getTokenBalance=async function (selectedAddress,contractType) {
  132. if(!contractType){
  133. contractType=0
  134. }
  135. if(!selectedAddress){
  136. selectedAddress=tokenpocketBnb.getMyAddress();
  137. }
  138. return new Promise( (resolve, reject) => {
  139. let data='0x70a08231000000000000000000000000'+(selectedAddress.substring(2))
  140. tokenpocketBnb.getProvider().request({method: 'eth_call',params:[{'to':contractArr[contractType],'data':data}, "latest"]}).then((balance)=>{
  141. balance= (web3.utils.hexToNumberString(balance)/1000000000000000000).toString()
  142. if(balance<0.000001){
  143. balance=0
  144. }
  145. resolve(balance)
  146. }).catch((e)=>{
  147. console.log(e)
  148. resolve(0)
  149. })
  150. })
  151. }
  152. /**
  153. * 获取gasPrice
  154. * @returns {Promise<unknown>}
  155. */
  156. tokenpocketBnb.getGasPrice= async function (){
  157. let gasPrice =await tokenpocketBnb.getProvider().request({ method: 'eth_gasPrice',params:[]})
  158. // gasPrice=web3.utils.hexToNumber(gasPrice)
  159. console.log('gasPrice:'+gasPrice)
  160. if(!gasPrice){
  161. gasPrice='0x12a05f200'
  162. }
  163. return gasPrice;
  164. }
  165. /**
  166. * 获取燃料数量
  167. * @param data
  168. * @returns {Promise<unknown>}
  169. */
  170. tokenpocketBnb.getEstimateGas= async function (data){
  171. console.log('estimateGas---------------start',data)
  172. let estimateGas =await tokenpocketBnb.getProvider().request({ method: 'eth_estimateGas',params:[data, "latest"]})
  173. // estimateGas=web3.utils.hexToNumber(estimateGas)
  174. console.log(estimateGas,'estimateGas-------------------------------------------------------',web3.utils.hexToNumberString(estimateGas))
  175. if(!estimateGas || web3.utils.hexToNumberString(estimateGas)<100000){
  176. estimateGas=1000000
  177. estimateGas=web3.utils.numberToHex('1500000');
  178. }
  179. console.log('estimateGas:',estimateGas)
  180. return estimateGas;
  181. }
  182. /**
  183. * 转账接口
  184. * @param to
  185. * @param money
  186. * @returns {{}}
  187. */
  188. tokenpocketBnb.getTransactionData=async function (to,money){
  189. console.log('-------------------------aaaaaaaaaaaaaaaaaaaaaa')
  190. let data={};
  191. data.to=to;
  192. data.from=tokenpocketBnb.getMyAddress();
  193. data.gasPrice=await tokenpocketBnb.getGasPrice();
  194. data.gas=await tokenpocketBnb.getEstimateGas(data);
  195. console.log('-------------------------aaaaaaaaaaaaaaaaaaaaaa')
  196. data.chainId=chainId;
  197. if(tools.isDevelopment()){
  198. money=0.00001;
  199. }
  200. data.data='0x0';
  201. console.log(money.toString())
  202. data.value=web3.utils.numberToHex(ethers.utils.parseEther(money.toString()).toString());
  203. console.log('value:'+data.value)
  204. return data;
  205. }
  206. tokenpocketBnb.getContractTransaction=async function (sendData,contractType){
  207. console.log('getContractTransaction-----------------start')
  208. let data={};
  209. data.to=contractArr[contractType];
  210. data.from=tokenpocketBnb.getMyAddress();
  211. console.log('getContractTransaction-----------------1')
  212. data.gasPrice=await tokenpocketBnb.getGasPrice();
  213. console.log('getContractTransaction-----------------2')
  214. data.gas=await tokenpocketBnb.getEstimateGas();
  215. data.value='0x0';
  216. data.data=sendData;
  217. console.log('getContractTransaction-----------------3')
  218. data.chainId=chainId;
  219. console.log('value:'+data.value)
  220. console.log('getContractTransaction-----------------end')
  221. return data;
  222. }
  223. /**
  224. * 转账
  225. * @param data
  226. * @returns {Promise<unknown>}
  227. */
  228. tokenpocketBnb.sendTransaction=function (data){
  229. return new Promise(async (resolve, reject) => {
  230. console.log(data)
  231. try {
  232. let txHash = await tokenpocketBnb.getProvider().request({
  233. method: 'eth_sendTransaction',
  234. params: [data],
  235. });
  236. console.log('txHash:'+txHash)
  237. if(txHash){
  238. resolve(txHash)
  239. }else {
  240. reject(false)
  241. }
  242. }catch (e) {
  243. reject(false)
  244. }
  245. })
  246. }
  247. export default tokenpocketBnb