InitiaTask.ts 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332
  1. import { JennieModule } from './JennieModule'
  2. import {
  3. bcs,
  4. Coins,
  5. MsgDelegate,
  6. MsgExecute,
  7. MsgWithdrawDelegatorReward,
  8. } from '@initia/initia.js'
  9. import { validatorArray } from './validatorArray'
  10. import { generateRandomString, getAxiosClient } from './utils'
  11. export abstract class InitiaTask extends JennieModule {
  12. protected constructor(mnemonic: string, useProxy: boolean = false) {
  13. super(mnemonic, useProxy)
  14. }
  15. //done
  16. async swapScript() {
  17. // const swaped = await this.checkUsdcSwaped()
  18. // if (swaped) {
  19. // console.log(`swaped`)
  20. // return `done`
  21. // }
  22. // ;[
  23. // '2/BsSK85hOxtmuipqn27C7HnhKqbjEpWga9mDPhVjX0=',
  24. // 'jkczvavPfUr8PRTw3UbJv1L7D86eS5lsk54ZW4vIkdk=',
  25. // 'QEtMAAAAAAA=',
  26. // 'AbThSwAAAAAA',
  27. // ]
  28. // const amount = bcs
  29. // .u64() // type
  30. // .parse(Uint8Array.from(Buffer.from('QEtMAAAAAAA=', 'base64')))
  31. // console.log(amount)
  32. // return `done`
  33. const randomNum = this.randomAmount(10000, 200000)
  34. const msg = new MsgExecute(
  35. this.key.accAddress,
  36. '0x1',
  37. 'dex',
  38. 'swap_script',
  39. [],
  40. [
  41. '2/BsSK85hOxtmuipqn27C7HnhKqbjEpWga9mDPhVjX0=', //liquidityTOken
  42. 'jkczvavPfUr8PRTw3UbJv1L7D86eS5lsk54ZW4vIkdk=', //offerCoin
  43. bcs.u64().serialize(randomNum).toBase64(), //offerAmount
  44. bcs.option(bcs.u64()).serialize(this.randomAmount(0, 2)).toBase64(),
  45. ],
  46. )
  47. return await this.broadcast(msg)
  48. }
  49. async swapTiaScript() {
  50. //["sTSuZ4bxDvdClOYn0lGbY7fHQqZzX5hoKSn+qahHRNI=","jkczvavPfUr8PRTw3UbJv1L7D86eS5lsk54ZW4vIkdk=","QEIPAAAAAAA=","AaY5AQAAAAAA"]
  51. const randomNum = this.randomAmount(5000000, 10000000)
  52. const msg = new MsgExecute(
  53. this.key.accAddress,
  54. '0x1',
  55. 'dex',
  56. 'swap_script',
  57. [],
  58. [
  59. 'sTSuZ4bxDvdClOYn0lGbY7fHQqZzX5hoKSn+qahHRNI=', //liquidityTOken
  60. 'jkczvavPfUr8PRTw3UbJv1L7D86eS5lsk54ZW4vIkdk=', //offerCoin
  61. bcs.u64().serialize(randomNum).toBase64(), //offerAmount
  62. bcs
  63. .option(bcs.u64())
  64. .serialize(this.randomAmount(1000, 2000))
  65. .toBase64(),
  66. ],
  67. )
  68. return await this.broadcast(msg)
  69. }
  70. async swapEthScript() {
  71. // const swaped = await this.checkEthSwaped()
  72. // if (swaped) {
  73. // console.log(`swaped`)
  74. // return `done`
  75. // }
  76. // ["orDTyOU+N57eMfOjYf8CcW1Q7FPGtluMSKgdWwZUggA=","jkczvavPfUr8PRTw3UbJv1L7D86eS5lsk54ZW4vIkdk=","QEIPAAAAAAA=","AeYAAAAAAAAA"]
  77. const msg = new MsgExecute(
  78. this.key.accAddress,
  79. '0x1',
  80. 'dex',
  81. 'swap_script',
  82. [],
  83. [
  84. 'orDTyOU+N57eMfOjYf8CcW1Q7FPGtluMSKgdWwZUggA=', //liquidityTOken
  85. 'jkczvavPfUr8PRTw3UbJv1L7D86eS5lsk54ZW4vIkdk=', //offerCoin
  86. 'QEIPAAAAAAA=', //offerAmount
  87. bcs.option(bcs.u64()).serialize(this.randomAmount(0, 100)).toBase64(),
  88. ],
  89. )
  90. return await this.broadcast(msg)
  91. }
  92. async nameRegister() {
  93. const moduleAddress =
  94. '0x42cd8467b1c86e59bf319e5664a09b6b5840bb3fac64f5ce690b5041c530565a'
  95. const moduleName = 'usernames'
  96. const fnName = 'get_name_from_address'
  97. const viewResult = await this.lcd.move.viewFunction(
  98. moduleAddress,
  99. moduleName,
  100. fnName,
  101. [],
  102. [bcs.address().serialize(this.key.accAddress).toBase64()],
  103. )
  104. console.log(viewResult)
  105. if (viewResult !== null) {
  106. return `done`
  107. }
  108. const random = generateRandomString(10)
  109. const arg = bcs.string().serialize(random).toBase64()
  110. const msgs = []
  111. msgs.push(
  112. new MsgExecute(
  113. this.key.accAddress,
  114. '0x42cd8467b1c86e59bf319e5664a09b6b5840bb3fac64f5ce690b5041c530565a',
  115. 'usernames',
  116. 'register_domain',
  117. [],
  118. [arg, '4IfhAQAAAAA='],
  119. ),
  120. )
  121. msgs.push(
  122. new MsgExecute(
  123. this.key.accAddress,
  124. '0x42cd8467b1c86e59bf319e5664a09b6b5840bb3fac64f5ce690b5041c530565a',
  125. 'usernames',
  126. 'set_name',
  127. [],
  128. [arg],
  129. ),
  130. )
  131. return await this.broadcast(msgs)
  132. }
  133. async stakeSingle() {
  134. const res = await this.getDelegationInfo()
  135. const flag = res.some((item: any) => {
  136. const coin: Coins = item.balance
  137. const data = coin.toData()
  138. return (
  139. data[0].denom ===
  140. 'move/dbf06c48af3984ec6d9ae8a9aa7dbb0bb1e784aa9b8c4a5681af660cf8558d7d'
  141. )
  142. })
  143. if (flag) {
  144. return `done`
  145. }
  146. const usdcAmount = await this.getUsdcAmount()
  147. if (Number(usdcAmount) < 1000) {
  148. await this.swapScript()
  149. return `needMint`
  150. }
  151. const randomValidator =
  152. validatorArray[Math.floor(Math.random() * validatorArray.length)]
  153. // console.log(bcs.u64().serialize(usdcAmount).toBase64())
  154. // console.log(bcs.string().serialize(randomValidator).toBase64())
  155. //["sTSuZ4bxDvdClOYn0lGbY7fHQqZzX5hoKSn+qahHRNI=","rM6zskU5Kv4INGt5TPXE/4Xn6ajIL8r1ESrp1kulfMs=","QJwAAAAAAAA=","AQ5IAwAAAAAA","MmluaXR2YWxvcGVyMTlqNmF3M2xxczBxaDk3Zjl0bHZodmdldWZjcjgzYTN3aDBzeHRu"]
  156. const msg = new MsgExecute(
  157. this.key.accAddress,
  158. '0x42cd8467b1c86e59bf319e5664a09b6b5840bb3fac64f5ce690b5041c530565a',
  159. 'dex_utils',
  160. 'single_asset_provide_stake',
  161. [],
  162. [
  163. '2/BsSK85hOxtmuipqn27C7HnhKqbjEpWga9mDPhVjX0=',
  164. 'KYJNlS4DVJD651Z97qXxW1BKaPpzYQBjwWCrH6h91gk=',
  165. bcs
  166. .u64()
  167. .serialize(Math.floor(Number(usdcAmount) / 2))
  168. .toBase64(), //amount
  169. bcs
  170. .option(bcs.u64())
  171. .serialize(this.randomAmount(1000, 10000))
  172. .toBase64(),
  173. bcs.string().serialize(randomValidator).toBase64(), //validator
  174. ],
  175. )
  176. return await this.broadcast(msg)
  177. }
  178. async stakeTiaSingle() {
  179. const res = await this.getDelegationInfo()
  180. const flag = res.some((item: any) => {
  181. const coin: Coins = item.balance
  182. const data = coin.toData()
  183. return (
  184. data[0].denom ===
  185. 'move/b134ae6786f10ef74294e627d2519b63b7c742a6735f98682929fea9a84744d2'
  186. )
  187. })
  188. if (flag) {
  189. return `done`
  190. }
  191. //move/b134ae6786f10ef74294e627d2519b63b7c742a6735f98682929fea9a84744d2
  192. const usdcAmount = await this.getTiaAmount()
  193. if (Number(usdcAmount) < 1000) {
  194. await this.swapTiaScript()
  195. return `needMint`
  196. }
  197. const randomValidator =
  198. validatorArray[Math.floor(Math.random() * validatorArray.length)]
  199. // console.log(bcs.u64().serialize(usdcAmount).toBase64())
  200. // console.log(bcs.string().serialize(randomValidator).toBase64())
  201. //["sTSuZ4bxDvdClOYn0lGbY7fHQqZzX5hoKSn+qahHRNI=","rM6zskU5Kv4INGt5TPXE/4Xn6ajIL8r1ESrp1kulfMs=","QJwAAAAAAAA=","AQ5IAwAAAAAA","MmluaXR2YWxvcGVyMTlqNmF3M2xxczBxaDk3Zjl0bHZodmdldWZjcjgzYTN3aDBzeHRu"]
  202. const msg = new MsgExecute(
  203. this.key.accAddress,
  204. '0x42cd8467b1c86e59bf319e5664a09b6b5840bb3fac64f5ce690b5041c530565a',
  205. 'dex_utils',
  206. 'single_asset_provide_stake',
  207. [],
  208. [
  209. 'sTSuZ4bxDvdClOYn0lGbY7fHQqZzX5hoKSn+qahHRNI=',
  210. 'rM6zskU5Kv4INGt5TPXE/4Xn6ajIL8r1ESrp1kulfMs=',
  211. bcs
  212. .u64()
  213. .serialize(Math.floor(Number(usdcAmount) / 2))
  214. .toBase64(), //amount
  215. bcs
  216. .option(bcs.u64())
  217. .serialize(this.randomAmount(1000, 10000))
  218. .toBase64(),
  219. bcs.string().serialize(randomValidator).toBase64(), //validator
  220. ],
  221. )
  222. return await this.broadcast(msg)
  223. }
  224. async stakeEthSingle() {
  225. const res = await this.getDelegationInfo()
  226. const flag = res.some((item: any) => {
  227. const coin: Coins = item.balance
  228. const data = coin.toData()
  229. return (
  230. data[0].denom ===
  231. 'move/a2b0d3c8e53e379ede31f3a361ff02716d50ec53c6b65b8c48a81d5b06548200'
  232. )
  233. })
  234. if (flag) {
  235. return `done`
  236. }
  237. const usdcAmount = await this.getEthAmount()
  238. if (Number(usdcAmount) < 100) {
  239. await this.swapEthScript()
  240. return `needMint`
  241. }
  242. const randomValidator =
  243. validatorArray[Math.floor(Math.random() * validatorArray.length)]
  244. // console.log(bcs.u64().serialize(usdcAmount).toBase64())
  245. // console.log(bcs.string().serialize(randomValidator).toBase64())
  246. // ["orDTyOU+N57eMfOjYf8CcW1Q7FPGtluMSKgdWwZUggA=","vg74SeQlyomDDB/w+YT1sLUStwyralrilMYlXD7kzQw=","ZAAAAAAAAAA=","AUy6AgAAAAAA","MmluaXR2YWxvcGVyMWs0N3kyM3Jla3RnY2FueTk3bDk3cWwzY2x1MzZ4ajJjY2dra2x1"]
  247. const msg = new MsgExecute(
  248. this.key.accAddress,
  249. '0x42cd8467b1c86e59bf319e5664a09b6b5840bb3fac64f5ce690b5041c530565a',
  250. 'dex_utils',
  251. 'single_asset_provide_stake',
  252. [],
  253. [
  254. 'orDTyOU+N57eMfOjYf8CcW1Q7FPGtluMSKgdWwZUggA=',
  255. 'vg74SeQlyomDDB/w+YT1sLUStwyralrilMYlXD7kzQw=',
  256. bcs
  257. .u64()
  258. .serialize(Math.floor(Number(usdcAmount) / 2))
  259. .toBase64(), //amount
  260. bcs.option(bcs.u64()).serialize(this.randomAmount(0, 10)).toBase64(),
  261. bcs.string().serialize(randomValidator).toBase64(), //validator
  262. ],
  263. )
  264. return await this.broadcast(msg)
  265. }
  266. async getDelegationInfo() {
  267. const data = await this.lcd.mstaking.delegations(this.key.accAddress)
  268. // const data = await axiosClient.get(
  269. // `https://b545809c-5562-4e60-b5a1-22e83df57748.initiation-1.mesa-rest.ue1-prod.newmetric.xyz/initia/mstaking/v1/delegations/${this.key.accAddress}`,
  270. // )
  271. // console.log(JSON.stringify(response))
  272. return data[0]
  273. // return data.data.delegation_responses
  274. }
  275. async stakeInit() {
  276. const res = await this.getDelegationInfo()
  277. const flag = res.some((item: any) => {
  278. return item.balance[0].denom === 'uinit'
  279. })
  280. if (flag) {
  281. return `done`
  282. }
  283. const randomValidator =
  284. validatorArray[Math.floor(Math.random() * validatorArray.length)]
  285. const msg = new MsgDelegate(
  286. this.key.accAddress, // delegator address
  287. randomValidator, // validator's operator addres
  288. '100000uinit', // delegate amount
  289. )
  290. return await this.broadcast(msg)
  291. }
  292. async claimReward() {
  293. const axiosClient = getAxiosClient(true)
  294. // const res = await axiosClient.get('https://api.ipify.org?format=json')
  295. // console.log(res.data.ip)
  296. // return ``
  297. const data = await axiosClient.get(
  298. `https://b545809c-5562-4e60-b5a1-22e83df57748.initiation-1.mesa-rest.ue1-prod.newmetric.xyz/initia/mstaking/v1/delegations/${this.key.accAddress}`,
  299. )
  300. const response = data.data.delegation_responses
  301. console.log(response)
  302. if (response.length === 0) {
  303. return `done`
  304. }
  305. // return false
  306. const msgs = []
  307. response.forEach((item: any) => {
  308. const msg = new MsgWithdrawDelegatorReward(
  309. this.key.accAddress,
  310. item.delegation.validator_address,
  311. )
  312. msgs.push(msg)
  313. })
  314. return await this.broadcast(msgs)
  315. }
  316. }