executeAction.test.js 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. const { ethers } = require("hardhat")
  2. const { getAddr } = require("./util/helpers")
  3. const { setup } = require("./util/setup")
  4. const { USDC, DAI, MIM, BUSD, TETHER, ETHEREUM, AVAX, POLYGON, BSC, OPTIMISM } = require("./util/constants")
  5. const { executeAction } = require("./util/actions")
  6. const {
  7. printPoolStates,
  8. printPooledTokenStates,
  9. printChainPaths,
  10. printLpBalancesFromPool,
  11. printTokenBalancesFromPool,
  12. } = require("./util/poolStateHelpers")
  13. const { audit } = require("./util/poolStateHelpers")
  14. describe.skip("ExecuteAction: ", function () {
  15. this.timeout(600000000)
  16. let pools, endpoints, tokens, users
  17. // endpoints
  18. let eth_endpoint, polygon_endpoint, avax_endpoint, bsc_endpoint, optimism_endpoint
  19. // pools
  20. let eth_usdc_pool, eth_dai_pool, eth_mim_pool, eth_busd_pool, eth_tether_pool
  21. let avax_usdc_pool, avax_dai_pool, avax_mim_pool, avax_busd_pool, avax_tether_pool
  22. let polygon_usdc_pool, polygon_dai_pool, polygon_mim_pool, polygon_busd_pool, polygon_tether_pool
  23. let bsc_usdc_pool, bsc_dai_pool, bsc_mim_pool, bsc_busd_pool, bsc_tether_pool
  24. let optimism_usdc_pool, optimism_dai_pool, optimism_mim_pool, optimism_busd_pool, optimism_tether_pool
  25. // users
  26. let alice, bob, badUser1, fakeContract
  27. before(async function () {
  28. ;({ alice, bob, badUser1, fakeContract } = await getAddr(ethers))
  29. })
  30. // beforeEach(async function () {
  31. // endpoints = await setup(3, 3, true)
  32. // eth_endpoint = endpoints[ETHEREUM]
  33. // avax_endpoint = endpoints[AVAX]
  34. // polygon_endpoint = endpoints[POLYGON]
  35. // ;({ [DAI]: eth_dai_pool, [USDC]: eth_usdc_pool, [MIM]: eth_mim_pool } = eth_endpoint.pools)
  36. // ;({ [DAI]: avax_dai_pool, [USDC]: avax_usdc_pool, [MIM]: avax_mim_pool } = avax_endpoint.pools)
  37. // ;({ [DAI]: polygon_dai_pool, [USDC]: polygon_usdc_pool, [MIM]: polygon_mim_pool } = polygon_endpoint.pools)
  38. //
  39. // endpoints = [eth_endpoint, avax_endpoint, polygon_endpoint]
  40. // pools = [
  41. // eth_usdc_pool,
  42. // eth_dai_pool,
  43. // eth_mim_pool,
  44. // avax_usdc_pool,
  45. // avax_dai_pool,
  46. // avax_mim_pool,
  47. // polygon_usdc_pool,
  48. // polygon_dai_pool,
  49. // polygon_mim_pool,
  50. // ]
  51. // tokens = [DAI, USDC, MIM]
  52. // users = [alice, bob]
  53. // })
  54. beforeEach(async function () {
  55. endpoints = await setup(5, 5, true)
  56. eth_endpoint = endpoints[ETHEREUM]
  57. avax_endpoint = endpoints[AVAX]
  58. polygon_endpoint = endpoints[POLYGON]
  59. bsc_endpoint = endpoints[BSC]
  60. optimism_endpoint = endpoints[OPTIMISM]
  61. ;({
  62. [DAI]: eth_dai_pool,
  63. [USDC]: eth_usdc_pool,
  64. [MIM]: eth_mim_pool,
  65. [BUSD]: eth_busd_pool,
  66. [TETHER]: eth_tether_pool,
  67. } = eth_endpoint.pools)
  68. ;({
  69. [DAI]: avax_dai_pool,
  70. [USDC]: avax_usdc_pool,
  71. [MIM]: avax_mim_pool,
  72. [BUSD]: avax_busd_pool,
  73. [TETHER]: avax_tether_pool,
  74. } = avax_endpoint.pools)
  75. ;({
  76. [DAI]: polygon_dai_pool,
  77. [USDC]: polygon_usdc_pool,
  78. [MIM]: polygon_mim_pool,
  79. [BUSD]: polygon_busd_pool,
  80. [TETHER]: polygon_tether_pool,
  81. } = polygon_endpoint.pools)
  82. ;({
  83. [DAI]: bsc_dai_pool,
  84. [USDC]: bsc_usdc_pool,
  85. [MIM]: bsc_mim_pool,
  86. [BUSD]: bsc_busd_pool,
  87. [TETHER]: bsc_tether_pool,
  88. } = bsc_endpoint.pools)
  89. ;({
  90. [DAI]: optimism_dai_pool,
  91. [USDC]: optimism_usdc_pool,
  92. [MIM]: optimism_mim_pool,
  93. [BUSD]: optimism_busd_pool,
  94. [TETHER]: optimism_tether_pool,
  95. } = optimism_endpoint.pools)
  96. endpoints = [eth_endpoint, avax_endpoint, polygon_endpoint, bsc_endpoint, optimism_endpoint]
  97. pools = [
  98. eth_usdc_pool,
  99. eth_dai_pool,
  100. eth_mim_pool,
  101. eth_busd_pool,
  102. eth_tether_pool,
  103. avax_usdc_pool,
  104. avax_dai_pool,
  105. avax_mim_pool,
  106. avax_busd_pool,
  107. avax_tether_pool,
  108. polygon_usdc_pool,
  109. polygon_dai_pool,
  110. polygon_mim_pool,
  111. polygon_busd_pool,
  112. polygon_tether_pool,
  113. bsc_usdc_pool,
  114. bsc_dai_pool,
  115. bsc_mim_pool,
  116. bsc_busd_pool,
  117. bsc_tether_pool,
  118. optimism_usdc_pool,
  119. optimism_dai_pool,
  120. optimism_mim_pool,
  121. optimism_busd_pool,
  122. optimism_tether_pool,
  123. ]
  124. tokens = [DAI, USDC, MIM, BUSD, TETHER]
  125. users = [alice, bob]
  126. })
  127. it("executeTransaction() - randomized tests", async function () {
  128. await Promise.all(
  129. pools.map(async (poolObj) => {
  130. poolObj.router.setFees(poolObj.id, 2)
  131. poolObj.router.setDeltaParam(
  132. poolObj.id,
  133. true,
  134. 500, // 5%
  135. 500, // 5%
  136. true, //default
  137. true //default
  138. )
  139. })
  140. )
  141. for (let i = 0; i < 1000000; i++) {
  142. try {
  143. await executeAction([alice, bob], pools, endpoints)
  144. if (i > 0 && i % 1000 === 0) {
  145. require("fs").writeSync(process.stdout.fd, `${i} auditing \n`)
  146. await audit(endpoints, pools)
  147. }
  148. } catch (e) {
  149. console.log(`fail at action ${i}`)
  150. await printPoolStates(pools)
  151. await printChainPaths(pools)
  152. await printPooledTokenStates(endpoints, tokens)
  153. await printTokenBalancesFromPool(pools, [alice, bob])
  154. await printLpBalancesFromPool(pools, [alice, bob])
  155. throw e
  156. }
  157. }
  158. })
  159. })