bitkeep-tron.js 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. /**
  2. * bitkeep钱包的tron
  3. * @type {{}}
  4. */
  5. import tools from "@/common/js/tools";
  6. let bitkeepTron = {}
  7. let contractArr=[
  8. 'TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t'
  9. ];
  10. /**
  11. * 钱包初始校验
  12. * @returns {*}
  13. */
  14. bitkeepTron.isInstall=function (){
  15. return window.tronLink && window.tronWeb;
  16. }
  17. /**
  18. * 获取我登陆的地址
  19. * @returns {any}
  20. */
  21. bitkeepTron.getMyAddress=function () {
  22. return uni.getStorageSync('myAddress')
  23. }
  24. /**
  25. * 获取基本账户地址
  26. * @returns {Promise<unknown>}
  27. */
  28. bitkeepTron.getAccounts=async function (){
  29. return new Promise(async (resolve, reject) => {
  30. try {
  31. await window.tronLink.request({method: "tron_requestAccounts"});
  32. let selectedAddress = tronWeb.defaultAddress.base58;
  33. uni.setStorageSync('myAddress',selectedAddress)
  34. resolve(selectedAddress)
  35. }catch (e) {
  36. reject(e)
  37. }
  38. })
  39. }
  40. /**
  41. * 获取我的余额
  42. * @param selectedAddress
  43. * @returns {Promise<unknown>}
  44. */
  45. bitkeepTron.getBalance=async function (selectedAddress) {
  46. if(!selectedAddress){
  47. selectedAddress=bitkeepTron.getMyAddress();
  48. }
  49. let balance = await tronWeb.trx.getBalance(selectedAddress);
  50. balance=balance/1000000;
  51. return balance
  52. }
  53. /**
  54. * 获取合约数量
  55. * @param selectedAddress
  56. * @param contractType
  57. * @returns {Promise<number>}
  58. */
  59. bitkeepTron.getTokenBalance=async function (selectedAddress,contractType) {
  60. if(!selectedAddress){
  61. selectedAddress=bitkeepTron.getMyAddress();
  62. }
  63. let tokenBalance = await tronWeb.transactionBuilder.triggerConstantContract(
  64. contractArr[contractType],
  65. "balanceOf(address)",
  66. {},
  67. [{ type: 'address', value: selectedAddress }],
  68. tronWeb.defaultAddress.base58,
  69. );
  70. let balance = tokenBalance.constant_result[0];
  71. balance= parseInt(balance, 16);
  72. balance=balance/1000000;
  73. return balance;
  74. }
  75. /**
  76. * 获取合约信息
  77. * @param contractType
  78. * @returns {Promise<boolean|*>}
  79. */
  80. bitkeepTron.getContract=async function (contractType) {
  81. let contractData = await tronWeb.trx.getContract(contractArr[contractType])
  82. if(contractData.abi){
  83. return contractData.abi
  84. }else {
  85. return false
  86. }
  87. }
  88. /**
  89. * 合约转账
  90. * @param to
  91. * @param money
  92. * @param contractType
  93. */
  94. bitkeepTron.getContractData=function (to,money,contractType){
  95. let data={};
  96. data.contract=contractArr[contractType];
  97. data.to=to;
  98. data.from=bitkeepTron.getMyAddress();
  99. if(tools.isDevelopment()){
  100. money=0.001;
  101. }
  102. data.value=money;
  103. return data;
  104. }
  105. /**
  106. * 转账接口
  107. * @param to
  108. * @param money
  109. * @returns {{}}
  110. */
  111. bitkeepTron.getTransactionData=function (to,money){
  112. let data={};
  113. data.to=to;
  114. data.from=bitkeepTron.getMyAddress();
  115. if(tools.isDevelopment()){
  116. money=0.001;
  117. }
  118. data.value=money;
  119. return data;
  120. }
  121. /**
  122. * trc转账
  123. * @param data
  124. * @returns {Promise<unknown>}
  125. */
  126. bitkeepTron.sendTransaction=function (data){
  127. return new Promise(async (resolve, reject) => {
  128. try {
  129. let broastTx={};
  130. if (data.contract) {
  131. let decimal = 18
  132. let Contract = await tronWeb.contract().at(data.contract)
  133. const decimalCall = Contract.decimals || Contract.DECIMALS;
  134. if (decimalCall) {
  135. decimal = await decimalCall().call()
  136. }
  137. let txid = await Contract.transfer(
  138. data.to,
  139. tronWeb.toHex(data.value * Math.pow(10, decimal))
  140. ).send()
  141. if(txid){
  142. broastTx.txid=txid
  143. }
  144. } else {
  145. let tx = await tronWeb.transactionBuilder.sendTrx(data.to, data.value * Math.pow(10, 6), data.from);
  146. // sign 签名
  147. let signedTx = await tronWeb.trx.sign(tx);
  148. // broadcast 广播
  149. broastTx = await tronWeb.trx.sendRawTransaction(signedTx);
  150. }
  151. if(broastTx.txid){
  152. resolve(broastTx.txid)
  153. }else {
  154. reject(false)
  155. }
  156. }catch (e) {
  157. reject(false)
  158. }
  159. })
  160. }
  161. export default bitkeepTron