web3-wizzard-lib 1.6.12__py3-none-any.whl → 1.6.15__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (267) hide show
  1. web3_wizzard_lib/core/__init__.py +1 -0
  2. web3_wizzard_lib/core/contract/__init__.py +0 -0
  3. web3_wizzard_lib/core/contract/aavecontract.py +36 -0
  4. web3_wizzard_lib/core/contract/alienswap_contract.py +21 -0
  5. web3_wizzard_lib/core/contract/arena_games_contract.py +16 -0
  6. web3_wizzard_lib/core/contract/basiliskcontract.py +58 -0
  7. web3_wizzard_lib/core/contract/bilinear_contract.py +22 -0
  8. web3_wizzard_lib/core/contract/bungee.py +33 -0
  9. web3_wizzard_lib/core/contract/coredao_contract.py +34 -0
  10. web3_wizzard_lib/core/contract/coredao_from_contract.py +40 -0
  11. web3_wizzard_lib/core/contract/dmail_send_mail.py +18 -0
  12. web3_wizzard_lib/core/contract/empty_nft.py +18 -0
  13. web3_wizzard_lib/core/contract/era_name.py +23 -0
  14. web3_wizzard_lib/core/contract/eralendcontract.py +34 -0
  15. web3_wizzard_lib/core/contract/eth_scroll_bridge_contract.py +25 -0
  16. web3_wizzard_lib/core/contract/frog_war_contract.py +48 -0
  17. web3_wizzard_lib/core/contract/gmx_reward_router.py +22 -0
  18. web3_wizzard_lib/core/contract/horizondex_quoter.py +14 -0
  19. web3_wizzard_lib/core/contract/horizondex_router.py +91 -0
  20. web3_wizzard_lib/core/contract/imagine_contract.py +18 -0
  21. web3_wizzard_lib/core/contract/izumi.py +63 -0
  22. web3_wizzard_lib/core/contract/kreatorland_contract.py +21 -0
  23. web3_wizzard_lib/core/contract/l0_claim.py +254 -0
  24. web3_wizzard_lib/core/contract/l2_telegraph.py +21 -0
  25. web3_wizzard_lib/core/contract/layerbank_price.py +18 -0
  26. web3_wizzard_lib/core/contract/layerbank_token.py +29 -0
  27. web3_wizzard_lib/core/contract/layerbankcontract.py +59 -0
  28. web3_wizzard_lib/core/contract/linea_day_2_contract.py +19 -0
  29. web3_wizzard_lib/core/contract/linea_day_3_contract.py +55 -0
  30. web3_wizzard_lib/core/contract/linea_ens_names_contract.py +55 -0
  31. web3_wizzard_lib/core/contract/lineaswaprouter.py +52 -0
  32. web3_wizzard_lib/core/contract/maverick_multicall.py +52 -0
  33. web3_wizzard_lib/core/contract/mendi_finance_contract.py +11 -0
  34. web3_wizzard_lib/core/contract/mendi_token.py +25 -0
  35. web3_wizzard_lib/core/contract/merkly_minter.py +47 -0
  36. web3_wizzard_lib/core/contract/micro3_contract.py +18 -0
  37. web3_wizzard_lib/core/contract/mute_router.py +93 -0
  38. web3_wizzard_lib/core/contract/new_rage_contract.py +31 -0
  39. web3_wizzard_lib/core/contract/nidum_contract.py +44 -0
  40. web3_wizzard_lib/core/contract/nile_contract.py +60 -0
  41. web3_wizzard_lib/core/contract/nomis_attest_contract.py +40 -0
  42. web3_wizzard_lib/core/contract/nomis_contract.py +40 -0
  43. web3_wizzard_lib/core/contract/octomos.py +31 -0
  44. web3_wizzard_lib/core/contract/odos.py +104 -0
  45. web3_wizzard_lib/core/contract/omnisea.py +29 -0
  46. web3_wizzard_lib/core/contract/orbiter_starknet.py +30 -0
  47. web3_wizzard_lib/core/contract/pancake_pool.py +19 -0
  48. web3_wizzard_lib/core/contract/pancake_quoter.py +20 -0
  49. web3_wizzard_lib/core/contract/pancake_router.py +72 -0
  50. web3_wizzard_lib/core/contract/rage_claim.py +24 -0
  51. web3_wizzard_lib/core/contract/reactor_fusion_contract.py +78 -0
  52. web3_wizzard_lib/core/contract/readon_contract.py +19 -0
  53. web3_wizzard_lib/core/contract/rubyscore_contract.py +31 -0
  54. web3_wizzard_lib/core/contract/satoshi_universe_contract.py +29 -0
  55. web3_wizzard_lib/core/contract/scroll_bridge_contract.py +24 -0
  56. web3_wizzard_lib/core/contract/scroll_canvas_mint_contract.py +26 -0
  57. web3_wizzard_lib/core/contract/scroll_oracle.py +11 -0
  58. web3_wizzard_lib/core/contract/snap_contract.py +16 -0
  59. web3_wizzard_lib/core/contract/social_scan_contract.py +20 -0
  60. web3_wizzard_lib/core/contract/stargate_farming.py +37 -0
  61. web3_wizzard_lib/core/contract/stargate_router.py +84 -0
  62. web3_wizzard_lib/core/contract/stargate_router_eth.py +41 -0
  63. web3_wizzard_lib/core/contract/stargate_token_pool.py +45 -0
  64. web3_wizzard_lib/core/contract/stargate_v2_contract.py +36 -0
  65. web3_wizzard_lib/core/contract/syncswap_classic_pool.py +15 -0
  66. web3_wizzard_lib/core/contract/syncswap_classic_pool_factory.py +15 -0
  67. web3_wizzard_lib/core/contract/syncswap_pool.py +25 -0
  68. web3_wizzard_lib/core/contract/syncswap_router.py +123 -0
  69. web3_wizzard_lib/core/contract/tavaera_id.py +18 -0
  70. web3_wizzard_lib/core/contract/tavaera_mint.py +17 -0
  71. web3_wizzard_lib/core/contract/townstory_bonus_contract.py +19 -0
  72. web3_wizzard_lib/core/contract/townstory_contract.py +21 -0
  73. web3_wizzard_lib/core/contract/velocore_lens.py +44 -0
  74. web3_wizzard_lib/core/contract/velocore_pool.py +198 -0
  75. web3_wizzard_lib/core/contract/velocore_router.py +80 -0
  76. web3_wizzard_lib/core/contract/woofi_swap.py +29 -0
  77. web3_wizzard_lib/core/contract/xy_finance_contract.py +87 -0
  78. web3_wizzard_lib/core/contract/yoddlo_contract.py +19 -0
  79. web3_wizzard_lib/core/contract/yuliverse_contract.py +36 -0
  80. web3_wizzard_lib/core/contract/zebra_contract.py +68 -0
  81. web3_wizzard_lib/core/contract/zerolend_contract.py +34 -0
  82. web3_wizzard_lib/core/contract/zerolend_liq_contract.py +20 -0
  83. web3_wizzard_lib/core/contract/zkdx_contract.py +40 -0
  84. web3_wizzard_lib/core/contract/zkdx_data.py +14 -0
  85. web3_wizzard_lib/core/contract/zks.py +24 -0
  86. web3_wizzard_lib/core/modules/__init__.py +0 -0
  87. web3_wizzard_lib/core/modules/ads_import_proxy.py +52 -0
  88. web3_wizzard_lib/core/modules/airdrop_printer.py +81 -0
  89. web3_wizzard_lib/core/modules/bank/__init__.py +0 -0
  90. web3_wizzard_lib/core/modules/bank/aave.py +25 -0
  91. web3_wizzard_lib/core/modules/bank/bank.py +15 -0
  92. web3_wizzard_lib/core/modules/bank/basilisk.py +25 -0
  93. web3_wizzard_lib/core/modules/bank/eralend.py +25 -0
  94. web3_wizzard_lib/core/modules/bank/layerbank.py +116 -0
  95. web3_wizzard_lib/core/modules/bank/mendi_finance.py +57 -0
  96. web3_wizzard_lib/core/modules/bank/reactorfusion.py +25 -0
  97. web3_wizzard_lib/core/modules/bank/zerolend.py +36 -0
  98. web3_wizzard_lib/core/modules/bank_module.py +99 -0
  99. web3_wizzard_lib/core/modules/bridge/__init__.py +0 -0
  100. web3_wizzard_lib/core/modules/bridge/bridge.py +8 -0
  101. web3_wizzard_lib/core/modules/bridge/coredao_bridge_sub.py +47 -0
  102. web3_wizzard_lib/core/modules/bridge/orbiter_sub.py +112 -0
  103. web3_wizzard_lib/core/modules/bridge/scroll_bridge_sub.py +42 -0
  104. web3_wizzard_lib/core/modules/bridge/stargate_v2_sub.py +74 -0
  105. web3_wizzard_lib/core/modules/bridge_module.py +47 -0
  106. web3_wizzard_lib/core/modules/bungee.py +109 -0
  107. web3_wizzard_lib/core/modules/cex_sender.py +60 -0
  108. web3_wizzard_lib/core/modules/cex_subaccount_transfer.py +34 -0
  109. web3_wizzard_lib/core/modules/cex_withdraw.py +91 -0
  110. web3_wizzard_lib/core/modules/claimer.py +45 -0
  111. web3_wizzard_lib/core/modules/claims/__init__.py +0 -0
  112. web3_wizzard_lib/core/modules/claims/layerzero_claimer.py +64 -0
  113. web3_wizzard_lib/core/modules/claims/rabby_claimer.py +81 -0
  114. web3_wizzard_lib/core/modules/concrete_swap.py +108 -0
  115. web3_wizzard_lib/core/modules/coredao_bridge.py +32 -0
  116. web3_wizzard_lib/core/modules/coredao_bridge_auto.py +39 -0
  117. web3_wizzard_lib/core/modules/debank_checker.py +78 -0
  118. web3_wizzard_lib/core/modules/dmail.py +54 -0
  119. web3_wizzard_lib/core/modules/erc20_balance.py +42 -0
  120. web3_wizzard_lib/core/modules/gmx_reward.py +25 -0
  121. web3_wizzard_lib/core/modules/intract/__init__.py +0 -0
  122. web3_wizzard_lib/core/modules/intract/intract_api.py +212 -0
  123. web3_wizzard_lib/core/modules/intract/utils.py +81 -0
  124. web3_wizzard_lib/core/modules/intract_claim.py +101 -0
  125. web3_wizzard_lib/core/modules/layer_2_20.py +65 -0
  126. web3_wizzard_lib/core/modules/lending_module.py +134 -0
  127. web3_wizzard_lib/core/modules/linea_appeal.py +98 -0
  128. web3_wizzard_lib/core/modules/linea_poh_lxp.py +65 -0
  129. web3_wizzard_lib/core/modules/liquidity/__init__.py +0 -0
  130. web3_wizzard_lib/core/modules/liquidity/nile_pool.py +64 -0
  131. web3_wizzard_lib/core/modules/liquidity/pool.py +16 -0
  132. web3_wizzard_lib/core/modules/liquidity/syncswap_pool.py +61 -0
  133. web3_wizzard_lib/core/modules/liquidity/velocore_pool.py +55 -0
  134. web3_wizzard_lib/core/modules/liquidity/zerolend_liquidity.py +26 -0
  135. web3_wizzard_lib/core/modules/liquidity_pool.py +60 -0
  136. web3_wizzard_lib/core/modules/merkly_refuel.py +87 -0
  137. web3_wizzard_lib/core/modules/new_rage_withdraw.py +41 -0
  138. web3_wizzard_lib/core/modules/nft/__init__.py +0 -0
  139. web3_wizzard_lib/core/modules/nft/abbys_world.py +22 -0
  140. web3_wizzard_lib/core/modules/nft/acg_worlds.py +25 -0
  141. web3_wizzard_lib/core/modules/nft/alienswap_linea.py +22 -0
  142. web3_wizzard_lib/core/modules/nft/arena_games.py +22 -0
  143. web3_wizzard_lib/core/modules/nft/asmatch.py +22 -0
  144. web3_wizzard_lib/core/modules/nft/battlemon.py +25 -0
  145. web3_wizzard_lib/core/modules/nft/bilinear.py +22 -0
  146. web3_wizzard_lib/core/modules/nft/bitavatar.py +25 -0
  147. web3_wizzard_lib/core/modules/nft/culture_satoshi_universe.py +24 -0
  148. web3_wizzard_lib/core/modules/nft/efrogs.py +26 -0
  149. web3_wizzard_lib/core/modules/nft/empty_nft.py +22 -0
  150. web3_wizzard_lib/core/modules/nft/era_domain.py +42 -0
  151. web3_wizzard_lib/core/modules/nft/frog_war.py +22 -0
  152. web3_wizzard_lib/core/modules/nft/frog_war_bonus.py +22 -0
  153. web3_wizzard_lib/core/modules/nft/gamerboom.py +25 -0
  154. web3_wizzard_lib/core/modules/nft/gamerboom_bonus.py +26 -0
  155. web3_wizzard_lib/core/modules/nft/imagine.py +32 -0
  156. web3_wizzard_lib/core/modules/nft/kreatorland_module.py +35 -0
  157. web3_wizzard_lib/core/modules/nft/l2_telegraph_module.py +22 -0
  158. web3_wizzard_lib/core/modules/nft/layer3_meta.py +25 -0
  159. web3_wizzard_lib/core/modules/nft/linea_culture_2_2_linus.py +24 -0
  160. web3_wizzard_lib/core/modules/nft/linea_culture_2_3_yooldo.py +24 -0
  161. web3_wizzard_lib/core/modules/nft/linea_culture_2_4_frogwar.py +24 -0
  162. web3_wizzard_lib/core/modules/nft/linea_culture_2_5_acg.py +25 -0
  163. web3_wizzard_lib/core/modules/nft/linea_culture_2_6_ascend_the_end.py +25 -0
  164. web3_wizzard_lib/core/modules/nft/linea_culture_3_1_ascend_the_end.py +25 -0
  165. web3_wizzard_lib/core/modules/nft/linea_culture_3_2_sending_me.py +25 -0
  166. web3_wizzard_lib/core/modules/nft/linea_culture_3_3_townstory.py +25 -0
  167. web3_wizzard_lib/core/modules/nft/linea_culture_3_4_daniele.py +25 -0
  168. web3_wizzard_lib/core/modules/nft/linea_culture_3_5_demmortal.py +25 -0
  169. web3_wizzard_lib/core/modules/nft/linea_culture_3_6_foxy.py +25 -0
  170. web3_wizzard_lib/core/modules/nft/linea_culture_4_1_coop_records.py +60 -0
  171. web3_wizzard_lib/core/modules/nft/linea_culture_4_2_borja_moskv.py +65 -0
  172. web3_wizzard_lib/core/modules/nft/linea_culture_4_2_borja_moskv_approve.py +27 -0
  173. web3_wizzard_lib/core/modules/nft/linea_culture_4_3_fruit.py +66 -0
  174. web3_wizzard_lib/core/modules/nft/linea_culture_4_4_fruit_crux.py +67 -0
  175. web3_wizzard_lib/core/modules/nft/linea_culture_4_5_forbidden_fruit.py +67 -0
  176. web3_wizzard_lib/core/modules/nft/linea_culture_4_6_laurent.py +67 -0
  177. web3_wizzard_lib/core/modules/nft/linea_culture_day2.py +20 -0
  178. web3_wizzard_lib/core/modules/nft/linea_culture_day3.py +20 -0
  179. web3_wizzard_lib/core/modules/nft/linea_ens_names.py +107 -0
  180. web3_wizzard_lib/core/modules/nft/lucky_cat.py +25 -0
  181. web3_wizzard_lib/core/modules/nft/merkly_minter_module.py +22 -0
  182. web3_wizzard_lib/core/modules/nft/micro3.py +23 -0
  183. web3_wizzard_lib/core/modules/nft/mint_2048.py +28 -0
  184. web3_wizzard_lib/core/modules/nft/nft_submodule.py +16 -0
  185. web3_wizzard_lib/core/modules/nft/nidum.py +87 -0
  186. web3_wizzard_lib/core/modules/nft/nidum_bonus.py +23 -0
  187. web3_wizzard_lib/core/modules/nft/nomis.py +64 -0
  188. web3_wizzard_lib/core/modules/nft/nomis_attest.py +66 -0
  189. web3_wizzard_lib/core/modules/nft/nouns.py +27 -0
  190. web3_wizzard_lib/core/modules/nft/octomos.py +32 -0
  191. web3_wizzard_lib/core/modules/nft/omnisea.py +33 -0
  192. web3_wizzard_lib/core/modules/nft/omnizone.py +25 -0
  193. web3_wizzard_lib/core/modules/nft/orbiter_claim.py +87 -0
  194. web3_wizzard_lib/core/modules/nft/readon.py +30 -0
  195. web3_wizzard_lib/core/modules/nft/rubyscore.py +45 -0
  196. web3_wizzard_lib/core/modules/nft/sarubol.py +22 -0
  197. web3_wizzard_lib/core/modules/nft/satoshi_universe.py +22 -0
  198. web3_wizzard_lib/core/modules/nft/scroll_canvas_attest_year_badge.py +35 -0
  199. web3_wizzard_lib/core/modules/nft/scroll_canvas_mint.py +51 -0
  200. web3_wizzard_lib/core/modules/nft/sign.py +32 -0
  201. web3_wizzard_lib/core/modules/nft/snap.py +25 -0
  202. web3_wizzard_lib/core/modules/nft/snap_bonus.py +31 -0
  203. web3_wizzard_lib/core/modules/nft/social_scan.py +22 -0
  204. web3_wizzard_lib/core/modules/nft/tavaera.py +30 -0
  205. web3_wizzard_lib/core/modules/nft/townstory.py +75 -0
  206. web3_wizzard_lib/core/modules/nft/townstory_bonus.py +45 -0
  207. web3_wizzard_lib/core/modules/nft/trusta_reputation.py +48 -0
  208. web3_wizzard_lib/core/modules/nft/trustaa_poh.py +49 -0
  209. web3_wizzard_lib/core/modules/nft/uber_poh.py +24 -0
  210. web3_wizzard_lib/core/modules/nft/wizards_of_linea.py +26 -0
  211. web3_wizzard_lib/core/modules/nft/yoddlo.py +22 -0
  212. web3_wizzard_lib/core/modules/nft/yuliverse.py +22 -0
  213. web3_wizzard_lib/core/modules/nft/zace.py +25 -0
  214. web3_wizzard_lib/core/modules/nft/zks_domain.py +41 -0
  215. web3_wizzard_lib/core/modules/nft_minter.py +107 -0
  216. web3_wizzard_lib/core/modules/orbiter.py +39 -0
  217. web3_wizzard_lib/core/modules/orbiter_checker.py +26 -0
  218. web3_wizzard_lib/core/modules/rage.py +54 -0
  219. web3_wizzard_lib/core/modules/scroll_bridge.py +45 -0
  220. web3_wizzard_lib/core/modules/sell_all.py +51 -0
  221. web3_wizzard_lib/core/modules/sleep_module.py +25 -0
  222. web3_wizzard_lib/core/modules/smart_contract_deployment.py +37 -0
  223. web3_wizzard_lib/core/modules/stargate/__init__.py +0 -0
  224. web3_wizzard_lib/core/modules/stargate/auto_bridge.py +91 -0
  225. web3_wizzard_lib/core/modules/stargate/bridge.py +38 -0
  226. web3_wizzard_lib/core/modules/stargate/bridge_eth.py +59 -0
  227. web3_wizzard_lib/core/modules/stargate/bridge_tokens.py +48 -0
  228. web3_wizzard_lib/core/modules/stargate/classic_bridge.py +34 -0
  229. web3_wizzard_lib/core/modules/stargate/farming.py +163 -0
  230. web3_wizzard_lib/core/modules/stargate/l0_data.py +10 -0
  231. web3_wizzard_lib/core/modules/stargate/pool.py +74 -0
  232. web3_wizzard_lib/core/modules/stargate/stargate_balance_utils.py +25 -0
  233. web3_wizzard_lib/core/modules/stargate/stargate_gas_checker.py +68 -0
  234. web3_wizzard_lib/core/modules/swap/__init__.py +1 -0
  235. web3_wizzard_lib/core/modules/swap/horizondex.py +38 -0
  236. web3_wizzard_lib/core/modules/swap/izumi.py +41 -0
  237. web3_wizzard_lib/core/modules/swap/lineaswap.py +34 -0
  238. web3_wizzard_lib/core/modules/swap/maverick.py +66 -0
  239. web3_wizzard_lib/core/modules/swap/mute.py +39 -0
  240. web3_wizzard_lib/core/modules/swap/odos.py +58 -0
  241. web3_wizzard_lib/core/modules/swap/one_inch.py +58 -0
  242. web3_wizzard_lib/core/modules/swap/pancake.py +41 -0
  243. web3_wizzard_lib/core/modules/swap/swap_list.py +11 -0
  244. web3_wizzard_lib/core/modules/swap/syncswap.py +62 -0
  245. web3_wizzard_lib/core/modules/swap/velocore.py +40 -0
  246. web3_wizzard_lib/core/modules/swap/woofi.py +38 -0
  247. web3_wizzard_lib/core/modules/swap/xy_finance.py +43 -0
  248. web3_wizzard_lib/core/modules/swap/zebra.py +32 -0
  249. web3_wizzard_lib/core/modules/warm_up.py +98 -0
  250. web3_wizzard_lib/core/modules/wrapping.py +74 -0
  251. web3_wizzard_lib/core/modules/zkdx.py +63 -0
  252. web3_wizzard_lib/core/utils/__init__.py +0 -0
  253. web3_wizzard_lib/core/utils/ai_utils.py +45 -0
  254. web3_wizzard_lib/core/utils/benchmark_utils.py +12 -0
  255. web3_wizzard_lib/core/utils/module_memory.py +28 -0
  256. web3_wizzard_lib/core/utils/statistic_utils.py +150 -0
  257. web3_wizzard_lib/core/utils/sub_module.py +8 -0
  258. web3_wizzard_lib/data/__init__.py +0 -0
  259. web3_wizzard_lib/data/config_default.py +52 -0
  260. web3_wizzard_lib/data/module_config_default.py +209 -0
  261. web3_wizzard_lib/utils/__init__.py +0 -0
  262. web3_wizzard_lib/utils/debank_utils.py +19 -0
  263. {web3_wizzard_lib-1.6.12.dist-info → web3_wizzard_lib-1.6.15.dist-info}/METADATA +2 -2
  264. web3_wizzard_lib-1.6.15.dist-info/RECORD +369 -0
  265. web3_wizzard_lib-1.6.12.dist-info/RECORD +0 -107
  266. {web3_wizzard_lib-1.6.12.dist-info → web3_wizzard_lib-1.6.15.dist-info}/WHEEL +0 -0
  267. {web3_wizzard_lib-1.6.12.dist-info → web3_wizzard_lib-1.6.15.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,15 @@
1
+ from sybil_engine.contract.contract import Contract
2
+ from sybil_engine.utils.file_loader import load_abi
3
+
4
+ abi = load_abi("resources/abi/syncswap_classic_pool_factory.json")
5
+
6
+
7
+ class SyncSwapClassicPoolFactory(Contract):
8
+ def __init__(self, contract_address, web3):
9
+ super().__init__(contract_address, web3, abi)
10
+
11
+ def get_pool(self, from_token, to_token):
12
+ return self.contract.functions.getPool(
13
+ from_token,
14
+ to_token
15
+ ).call()
@@ -0,0 +1,25 @@
1
+ from sybil_engine.contract.contract import Contract
2
+ from sybil_engine.utils.file_loader import load_abi
3
+
4
+ abi = load_abi("resources/abi/syncswap_pool.json")
5
+
6
+
7
+ class SyncSwapPoolContract(Contract):
8
+ def __init__(self, contract_address, web3):
9
+ super().__init__(contract_address, web3, abi)
10
+
11
+ def get_amount_out(self, account, amount_to_swap, token_in_address):
12
+ sender = account.address
13
+
14
+ contract = self.web3.eth.contract(address=self.contract_address, abi=abi)
15
+
16
+ return contract.functions.getAmountOut(token_in_address, amount_to_swap.wei, sender).call()
17
+
18
+ def get_pool(self, from_token, to_token):
19
+ return self.contract.functions.getPool(
20
+ from_token,
21
+ to_token
22
+ ).call()
23
+
24
+ def balanceOf(self, account):
25
+ return self.contract.functions.balanceOf(account.address).call()
@@ -0,0 +1,123 @@
1
+ from datetime import datetime
2
+
3
+ from eth_account.messages import encode_defunct
4
+ from sybil_engine.contract.contract import Contract
5
+ from sybil_engine.contract.erc20contract import MAX_ALLOWANCE
6
+ from sybil_engine.contract.transaction_executor import evm_transaction
7
+ from sybil_engine.data.tokens import get_tokens_for_chain
8
+ from sybil_engine.utils.file_loader import load_abi
9
+ from web3 import Web3
10
+
11
+ abi = load_abi("resources/abi/syncswap_router.json")
12
+
13
+
14
+ class SyncSwapRouter(Contract):
15
+ def __init__(self, contract_address, web3):
16
+ super().__init__(contract_address, web3, abi)
17
+
18
+ @evm_transaction
19
+ def swap(self, account, amount_to_swap, token_in_data_address, token_in_address, pool_address, amount_out_min,
20
+ withdraw_mode=b'\x01'):
21
+ sender = account.address
22
+
23
+ txn_params = self.build_generic_data(sender, False)
24
+ txn_params['value'] = amount_to_swap.wei if amount_to_swap.token == 'ETH' else 10000000000000
25
+
26
+ steps = self.steps(amount_to_swap, pool_address, sender, token_in_address, token_in_data_address,
27
+ withdraw_mode)
28
+
29
+ paths = [{"steps": steps, "tokenIn": token_in_address, "amountIn": amount_to_swap.wei}]
30
+ deadline = int(datetime.now().timestamp() + 60 * 60 * 3)
31
+
32
+ return self.contract.functions.swap(paths, amount_out_min, deadline).build_transaction(txn_params)
33
+
34
+ def steps(self, amount_to_swap, pool_address, sender, token_in_address, token_in_data_address, withdraw_mode):
35
+ if isinstance(pool_address, str):
36
+ data = b'\x00' * 12 + bytes.fromhex(token_in_data_address[2:]) + b'\x00' * 12 + bytes.fromhex(
37
+ sender[2:]) + b'\x00' * 31 + withdraw_mode
38
+
39
+ steps = [
40
+ {
41
+ "pool": pool_address,
42
+ "data": data,
43
+ "callback": get_tokens_for_chain(amount_to_swap.chain)['ZERO_ADDRESS'],
44
+ "callbackData": b''
45
+ }
46
+ ]
47
+ else:
48
+ usdc_address = get_tokens_for_chain(amount_to_swap.chain)['USDC']
49
+
50
+ pool_pairs = list(pool_address.items())
51
+ if amount_to_swap.token == 'USDT':
52
+ zero_pool = pool_pairs[0][1] # USDC
53
+ first_pool = pool_pairs[1][1] # USDT
54
+
55
+ data_fir_step = b'\x00' * 12 + bytes.fromhex(token_in_address[2:]) + b'\x00' * 12 + bytes.fromhex(
56
+ sender[2:]) + b'\x00' * 31 + b'\x00'
57
+
58
+ data_sec_step = b'\x00' * 12 + bytes.fromhex(usdc_address[2:]) + b'\x00' * 12 + bytes.fromhex(
59
+ sender[2:]) + b'\x00' * 31 + withdraw_mode
60
+ else:
61
+ zero_pool = pool_pairs[1][1] # USDT
62
+ first_pool = pool_pairs[0][1] # USDC
63
+
64
+ data_fir_step = b'\x00' * 12 + bytes.fromhex(
65
+ token_in_data_address[2:]) + b'\x00' * 12 + bytes.fromhex(zero_pool[2:]) + b'\x00' * 31 + b'\x00'
66
+
67
+ data_sec_step = b'\x00' * 12 + bytes.fromhex(usdc_address[2:]) + b'\x00' * 12 + bytes.fromhex(
68
+ sender[2:]) + b'\x00' * 31 + b'\x02'
69
+
70
+ steps = [
71
+ {
72
+ "pool": first_pool,
73
+ "data": data_fir_step,
74
+ "callback": get_tokens_for_chain(amount_to_swap.chain)['ZERO_ADDRESS'],
75
+ "callbackData": b''
76
+ },
77
+ {
78
+ "pool": zero_pool,
79
+ "data": data_sec_step,
80
+ "callback": get_tokens_for_chain(amount_to_swap.chain)['ZERO_ADDRESS'],
81
+ "callbackData": b''
82
+ }
83
+ ]
84
+
85
+ return steps
86
+
87
+ @evm_transaction
88
+ def add_liquidity2(self, account, amount):
89
+ sender = account.address
90
+
91
+ txn_params = self.build_generic_data(sender, False)
92
+
93
+ txn_params['value'] = amount.wei
94
+
95
+ return self.contract.functions.addLiquidity2(
96
+ '0x814A23B053FD0f102AEEda0459215C2444799C70',
97
+ [
98
+ (
99
+ '0x0000000000000000000000000000000000000000',
100
+ amount.wei
101
+ )
102
+ ],
103
+ f'0x000000000000000000000000{account.address[2:]}',
104
+ 0,
105
+ '0x0000000000000000000000000000000000000000',
106
+ b'0x'
107
+ ).build_transaction(txn_params)
108
+
109
+ @evm_transaction
110
+ def burn_liquidity(self, account, pool, amount):
111
+ sender = account.address
112
+
113
+ txn_params = self.build_generic_data(sender, False)
114
+
115
+ return self.contract.functions.burnLiquiditySingle(
116
+ pool,
117
+ amount.wei, # liqudity
118
+ Web3.to_bytes(
119
+ hexstr=f'0x0000000000000000000000005300000000000000000000000000000000000004000000000000000000000000{account.address[2:]}0000000000000000000000000000000000000000000000000000000000000001'),
120
+ amount.wei, # minAmount
121
+ Web3.to_bytes(hexstr='0x0000000000000000000000000000000000000000'),
122
+ b'0x'
123
+ ).build_transaction(txn_params)
@@ -0,0 +1,18 @@
1
+ from sybil_engine.contract.contract import Contract
2
+ from sybil_engine.utils.file_loader import load_abi
3
+ from web3 import Web3
4
+
5
+ abi = load_abi("resources/abi/tavaera_id.json")
6
+
7
+
8
+ class TavaeraID(Contract):
9
+ def __init__(self, contract_address, web3):
10
+ super().__init__(contract_address, web3, abi)
11
+
12
+ def mint_citizen_id(self, account):
13
+ txn_params = self.build_generic_data(account.address, False)
14
+ txn_params['value'] = Web3.to_wei(0.0003, "ether")
15
+
16
+ contract_txn = self.contract.functions.mintCitizenId().build_transaction(txn_params)
17
+
18
+ return contract_txn
@@ -0,0 +1,17 @@
1
+ from sybil_engine.contract.contract import Contract
2
+ from sybil_engine.utils.file_loader import load_abi
3
+
4
+
5
+ abi = load_abi("resources/abi/tavaera.json")
6
+
7
+
8
+ class Tavaera(Contract):
9
+ def __init__(self, contract_address, web3):
10
+ super().__init__(contract_address, web3, abi)
11
+
12
+ def mint(self, account):
13
+ txn_params = self.build_generic_data(account.address, False)
14
+
15
+ contract_txn = self.contract.functions.mint().build_transaction(txn_params)
16
+
17
+ return contract_txn
@@ -0,0 +1,19 @@
1
+ from sybil_engine.contract.contract import Contract
2
+ from sybil_engine.contract.transaction_executor import evm_transaction
3
+ from sybil_engine.utils.file_loader import load_abi
4
+ from web3 import Web3
5
+
6
+ abi = load_abi("resources/abi/townstory_bonus.json")
7
+
8
+
9
+ class TownstoryBonusContract(Contract):
10
+ def __init__(self, contract_address, web3):
11
+ super().__init__(contract_address, web3, abi)
12
+
13
+ @evm_transaction
14
+ def claim_linea_travelbag(self, account, signature, deadline):
15
+ txn_params = self.build_generic_data(account.address, False)
16
+
17
+ return self.contract.functions.claimLineaTravelbag(
18
+ signature, account.address, deadline
19
+ ).build_transaction(txn_params)
@@ -0,0 +1,21 @@
1
+ from sybil_engine.contract.contract import Contract
2
+ from sybil_engine.contract.transaction_executor import evm_transaction
3
+ from sybil_engine.utils.file_loader import load_abi
4
+ from web3 import Web3
5
+
6
+ abi = load_abi("resources/abi/townstory.json")
7
+
8
+
9
+ class TownstoryContract(Contract):
10
+ def __init__(self, contract_address, web3):
11
+ super().__init__(contract_address, web3, abi)
12
+
13
+ @evm_transaction
14
+ def create_account_sign(self, account, signature, deadline):
15
+ txn_params = self.build_generic_data(account.address, False)
16
+
17
+ contract_txn = self.contract.functions.createAccountSign(
18
+ signature, 0, deadline
19
+ ).build_transaction(txn_params)
20
+
21
+ return contract_txn
@@ -0,0 +1,44 @@
1
+ from sybil_engine.contract.contract import Contract
2
+ from sybil_engine.utils.file_loader import load_abi
3
+ from web3 import Web3
4
+
5
+ abi = load_abi("resources/abi/velocore_lens.json")
6
+
7
+
8
+ def to_bytes32(address):
9
+ return Web3.to_bytes(hexstr=address).rjust(32, b'\0')
10
+
11
+
12
+ class VelocoreLensContract(Contract):
13
+ def __init__(self, contract_address, web3):
14
+ super().__init__(contract_address, web3, abi)
15
+
16
+ def getPoolBalance(self):
17
+ token_identifier = '0xe2c67A9B15e9E7FF8A9Cb0dFb8feE5609923E5DB'
18
+
19
+ # 0x000000000000000000000000e2c67A9B15e9E7FF8A9Cb0dFb8feE5609923E5DB
20
+
21
+ return (self.contract.functions.getPoolBalance(
22
+ '0xe2c67A9B15e9E7FF8A9Cb0dFb8feE5609923E5DB',
23
+ Web3.to_bytes(hexstr='0x000000000000000000000000b98308D11E2B578858Fbe65b793e71C7a0CAa43e')
24
+ )
25
+ .call())
26
+
27
+ def userBalances(self):
28
+ token_identifier = '0xe2c67A9B15e9E7FF8A9Cb0dFb8feE5609923E5DB'
29
+
30
+ # 0x000000000000000000000000e2c67A9B15e9E7FF8A9Cb0dFb8feE5609923E5DB
31
+ # 0x000000000000000000000000e2c67A9B15e9E7FF8A9Cb0dFb8feE5609923E5DB
32
+
33
+ return (self.contract.functions.userBalances(
34
+ '0xe2c67A9B15e9E7FF8A9Cb0dFb8feE5609923E5DB',
35
+ [Web3.to_bytes(hexstr='0x000000000000000000000000b98308D11E2B578858Fbe65b793e71C7a0CAa43e')]
36
+ )
37
+ .call())
38
+
39
+ def query_gauge(self, pool_address, account):
40
+ return (self.contract.functions.queryGauge(
41
+ pool_address,
42
+ account.address
43
+ )
44
+ .call())
@@ -0,0 +1,198 @@
1
+ from sybil_engine.contract.contract import Contract
2
+ from sybil_engine.contract.transaction_executor import evm_transaction
3
+ from sybil_engine.data.tokens import get_tokens_for_chain
4
+
5
+ from sybil_engine.utils.file_loader import load_abi
6
+ from web3 import Web3
7
+
8
+ abi = load_abi("resources/abi/velocore_pool.json")
9
+
10
+
11
+ def to_bytes32(address):
12
+ return Web3.to_bytes(hexstr=address).rjust(32, b'\0')
13
+
14
+
15
+ class VelocorePoolContract(Contract):
16
+ ZERO = '0x0000000000000000000000000000000000000000000000000000000000000000'
17
+
18
+ def __init__(self, contract_address, web3):
19
+ self.LVC = get_tokens_for_chain('LINEA')['LVC']
20
+ self.VLP = get_tokens_for_chain('LINEA')['VLP']
21
+ super().__init__(contract_address, web3, abi)
22
+
23
+ @evm_transaction
24
+ def deposit(self, account, amount, deposit_token, pool):
25
+ sender = account.address
26
+
27
+ txn_params = self.build_generic_data(sender, set_contract_address=False)
28
+
29
+ amount_hex = '0x' + format(amount, '064x')
30
+ min_uint_256_hex = '00000000000000000000000000000000'
31
+ inverted_amount = self.invert_int(amount)
32
+ inverted_amount_hex = '0x' + min_uint_256_hex + inverted_amount
33
+
34
+ if deposit_token == 'ETH':
35
+ tokenRef = [
36
+ to_bytes32(self.VLP),
37
+ to_bytes32(self.LVC),
38
+ to_bytes32('0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee')
39
+ ]
40
+ deposit = [0, 0, 0]
41
+
42
+ txn_params['value'] = amount
43
+
44
+ ops = [
45
+ (
46
+ to_bytes32(f'0x040000000000000000000000{sender[2:]}'),
47
+ [to_bytes32('0x02000000000000000000000000000000' + format(amount, '032x'))],
48
+ to_bytes32(self.ZERO)
49
+ ),
50
+ (
51
+ to_bytes32(f'0x040000000000000000000000{sender[2:]}'),
52
+ [to_bytes32('0x02000000000000000000000000000000' + inverted_amount)],
53
+ to_bytes32(self.ZERO)
54
+ ),
55
+ (
56
+ to_bytes32(f'000000000000000000000000{pool[2:]}'),
57
+ [
58
+ to_bytes32('000100000000000000000000000000007fffffffffffffffffffffffffffffff'),
59
+ to_bytes32('020200000000000000000000000000007fffffffffffffffffffffffffffffff')
60
+ ],
61
+ to_bytes32(self.ZERO)
62
+ ),
63
+ (
64
+ to_bytes32('0500000000000000000000000000000000000000000000000000000000000000'),
65
+ [to_bytes32('00010000000000000000000000000000ffffffffffffffffffffffffff785a9c')],
66
+ to_bytes32(self.ZERO)
67
+ ),
68
+ (
69
+ to_bytes32(f'010000000000000000000000{pool[2:]}'),
70
+ [
71
+ to_bytes32('000200000000000000000000000000007fffffffffffffffffffffffffffffff'),
72
+ to_bytes32('0101000000000000000000000000000000000000000000000000000000000000')
73
+ ],
74
+ to_bytes32(self.ZERO)
75
+ )
76
+ ]
77
+ else:
78
+ wstETH = get_tokens_for_chain('LINEA')[deposit_token]
79
+ tokenRef = [
80
+ to_bytes32(wstETH),
81
+ to_bytes32(self.LVC),
82
+ to_bytes32(self.VLP),
83
+ to_bytes32('0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee')
84
+ ]
85
+ deposit = [amount, 0, 0, 0]
86
+
87
+ wstETHLP = '0x1D12E25e5516e5aD32F97fE9Edc332Bf4683f487'
88
+
89
+ ops = [
90
+ (
91
+ to_bytes32(f'0x040000000000000000000000{sender[2:]}'),
92
+ [to_bytes32(amount_hex)],
93
+ to_bytes32(self.ZERO)
94
+ ),
95
+ (
96
+ to_bytes32(f'0x040000000000000000000000{sender[2:]}'),
97
+ [to_bytes32(inverted_amount_hex)],
98
+ to_bytes32(self.ZERO)
99
+ ),
100
+ (
101
+ to_bytes32(f'000000000000000000000000{wstETHLP[2:]}'),
102
+ [
103
+ to_bytes32('000200000000000000000000000000007fffffffffffffffffffffffffffffff'),
104
+ to_bytes32('030100000000000000000000000000007fffffffffffffffffffffffffffffff')
105
+ ],
106
+ to_bytes32(self.ZERO)
107
+ ),
108
+ (
109
+ to_bytes32(f'000000000000000000000000{pool[2:]}'),
110
+ [
111
+ to_bytes32('020100000000000000000000000000007fffffffffffffffffffffffffffffff'),
112
+ to_bytes32('030200000000000000000000000000007fffffffffffffffffffffffffffffff')
113
+ ],
114
+ to_bytes32(self.ZERO)
115
+ ),
116
+ (
117
+ to_bytes32('0500000000000000000000000000000000000000000000000000000000000000'),
118
+ [to_bytes32('02010000000000000000000000000000ffffffffffffffffffffffb4ad12f9cd')],
119
+ to_bytes32(self.ZERO)
120
+ ),
121
+ (
122
+ to_bytes32(f'010000000000000000000000{pool[2:]}'),
123
+ [
124
+ to_bytes32('0101000000000000000000000000000000000000000000000000000000000000'),
125
+ to_bytes32('020200000000000000000000000000007fffffffffffffffffffffffffffffff')
126
+ ],
127
+ to_bytes32(self.ZERO)
128
+ )
129
+ ]
130
+
131
+ contract_txn = self.contract.functions.execute(tokenRef, deposit, ops).build_transaction(txn_params)
132
+
133
+ if self.web3.eth.chain_id == 59144:
134
+ contract_txn['gas'] = contract_txn['gas'] * 2
135
+
136
+ return contract_txn
137
+
138
+ @evm_transaction
139
+ def withdraw(self, account, eth_amount, eth_vlp, pool):
140
+ sender = account.address
141
+
142
+ txn_params = self.build_generic_data(sender, set_contract_address=False)
143
+
144
+ tokenRef = [
145
+ to_bytes32(self.LVC),
146
+ to_bytes32(self.VLP),
147
+ to_bytes32('0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee')
148
+ ]
149
+ deposit = [0, 0, 0]
150
+
151
+ inverted_eth_amount = self.invert_int(eth_amount)
152
+ inverted_eth_vlp = self.invert_int(eth_vlp[0])
153
+
154
+ ops = [
155
+ (
156
+ to_bytes32(f'010000000000000000000000{pool[2:]}'),
157
+ [
158
+ to_bytes32('0001000000000000000000000000000000000000000000000000000000000000'),
159
+ to_bytes32(f'01000000000000000000000000000000{inverted_eth_vlp}')
160
+ ],
161
+ to_bytes32('0x0000000000000000000000000000000000000000000000000000000000000000')
162
+ ),
163
+ (
164
+ to_bytes32(f'000000000000000000000000{pool[2:]}'),
165
+ [
166
+ to_bytes32('010200000000000000000000000000007fffffffffffffffffffffffffffffff'),
167
+ to_bytes32('020100000000000000000000000000007fffffffffffffffffffffffffffffff')
168
+ ],
169
+ to_bytes32('0x0000000000000000000000000000000000000000000000000000000000000000')
170
+ ),
171
+ (
172
+ to_bytes32('0500000000000000000000000000000000000000000000000000000000000000'),
173
+ [to_bytes32(f'02010000000000000000000000000000{inverted_eth_amount}')],
174
+ to_bytes32('0x0000000000000000000000000000000000000000000000000000000000000000')
175
+ )
176
+ ]
177
+
178
+ contract_txn = self.contract.functions.execute(tokenRef, deposit, ops).build_transaction(txn_params)
179
+
180
+ if self.web3.eth.chain_id == 59144:
181
+ contract_txn['gas'] = contract_txn['gas'] * 2
182
+
183
+ return contract_txn
184
+
185
+ def allPairs(self):
186
+ return self.contract.functions.allPairs(1).call()
187
+
188
+ def facets(self):
189
+ return self.contract.functions.facets().call()
190
+
191
+ def invert_int(self, amount):
192
+ max_uint_256_hex = 'ffffffffffffffffffffffffffffffff'
193
+ hex_2 = int(max_uint_256_hex, 16) - amount + 1
194
+ hex_string = hex(hex_2)[2:].rjust(32, '0')
195
+
196
+ return hex_string
197
+ # 5411000000000000
198
+ # 5410999999999999
@@ -0,0 +1,80 @@
1
+ from datetime import datetime
2
+
3
+ from sybil_engine.contract.contract import Contract
4
+ from sybil_engine.contract.transaction_executor import evm_transaction
5
+ from sybil_engine.data.networks import get_ids_chain
6
+ from sybil_engine.data.tokens import get_tokens_for_chain
7
+ from sybil_engine.utils.file_loader import load_abi
8
+
9
+ abi = load_abi("resources/abi/velocore.json")
10
+
11
+
12
+ class VelocoreRouter(Contract):
13
+ def __init__(self, contract_address, web3):
14
+ super().__init__(contract_address, web3, abi)
15
+
16
+ @evm_transaction
17
+ def swap_exact_eth_for_tokens(self, account, amount_to_swap, token_in_address, token_out_address, amount_out_min):
18
+ sender = account.address
19
+
20
+ deadline = int(datetime.now().timestamp() + 60 * 60 * 3)
21
+ stable = False
22
+
23
+ txn_params = self.build_generic_data(sender)
24
+
25
+ txn_params['value'] = amount_to_swap.wei
26
+ txn_params['data'] = self.contract.encode_abi('swapExactETHForTokens', args=(
27
+ amount_out_min,
28
+ [[token_in_address, token_out_address, stable]],
29
+ sender,
30
+ deadline
31
+ )
32
+ )
33
+
34
+ return txn_params
35
+
36
+ @evm_transaction
37
+ def swap_exact_tokens_for_eth(self, account, amount_to_swap, token_in_address, token_out_address, amount_out_min):
38
+ sender = account.address
39
+ txn_params = self.build_generic_data(account.address, False)
40
+
41
+ deadline = int(datetime.now().timestamp() + 60 * 60 * 3)
42
+ stable = False
43
+
44
+ return self.contract.functions.swapExactTokensForETH(
45
+ amount_to_swap.wei,
46
+ amount_out_min,
47
+ [[token_in_address, token_out_address, stable]],
48
+ sender,
49
+ deadline
50
+ ).build_transaction(txn_params)
51
+
52
+ @evm_transaction
53
+ def swap_exact_tokens_for_tokens(self, account, amount_to_swap, token_in_address, token_out_address,
54
+ amount_out_min):
55
+ sender = account.address
56
+ txn_params = self.build_generic_data(sender)
57
+
58
+ deadline = int(datetime.now().timestamp() + 60 * 60 * 3)
59
+
60
+ usdc_address = get_tokens_for_chain(get_ids_chain()[self.web3.eth.chain_id])['USDC']
61
+
62
+ if token_out_address != usdc_address:
63
+ stable = False
64
+ else:
65
+ stable = True
66
+
67
+ return self.contract.functions.swapExactTokensForTokens(
68
+ amount_to_swap.wei,
69
+ amount_out_min,
70
+ [[token_in_address, token_out_address, stable]],
71
+ sender,
72
+ deadline
73
+ ).build_transaction(txn_params)
74
+
75
+ def get_amount_out(self, amount_to_swap, token_in_address, token_out_address):
76
+ return self.contract.functions.getAmountOut(
77
+ amount_to_swap.wei,
78
+ token_in_address,
79
+ token_out_address
80
+ ).call()[0]
@@ -0,0 +1,29 @@
1
+ from sybil_engine.contract.contract import Contract
2
+ from sybil_engine.contract.transaction_executor import evm_transaction
3
+ from sybil_engine.utils.file_loader import load_abi
4
+
5
+ abi = load_abi("resources/abi/woofi.json")
6
+
7
+
8
+ class WoofiSwap(Contract):
9
+ def __init__(self, contract_address, web3):
10
+ super().__init__(contract_address, web3, abi)
11
+
12
+ @evm_transaction
13
+ def swap(self, account, amount_to_swap, token_in_address, token_out_address, amount_out_min):
14
+ sender = account.address
15
+ txn_params = self.build_generic_data(sender, False)
16
+
17
+ txn_params['value'] = amount_to_swap.wei if amount_to_swap.token == 'ETH' else 0
18
+
19
+ return self.contract.functions.swap(
20
+ token_in_address,
21
+ token_out_address,
22
+ amount_to_swap.wei,
23
+ amount_out_min,
24
+ sender,
25
+ sender
26
+ ).build_transaction(txn_params)
27
+
28
+ def query_swap(self, from_token, to_token, from_amount):
29
+ return self.contract.functions.querySwap(from_token, to_token, from_amount.wei).call()
@@ -0,0 +1,87 @@
1
+ import requests
2
+ from sybil_engine.contract.contract import Contract
3
+ from sybil_engine.contract.transaction_executor import evm_transaction
4
+ from web3 import Web3
5
+
6
+
7
+ class XYSwapContract(Contract):
8
+ def __init__(self, contract_address, web3):
9
+ super().__init__(contract_address, web3, None)
10
+
11
+ def get_quote(self, from_token: str, to_token: str, amount: int, slippage: float):
12
+ url = "https://aggregator-api.xy.finance/v1/quote"
13
+
14
+ params = {
15
+ "srcChainId": self.web3.eth.chain_id,
16
+ "srcQuoteTokenAddress": Web3.to_checksum_address(from_token),
17
+ "srcQuoteTokenAmount": amount.wei,
18
+ "dstChainId": self.web3.eth.chain_id,
19
+ "dstQuoteTokenAddress": Web3.to_checksum_address(to_token),
20
+ "slippage": slippage
21
+ }
22
+
23
+ response = requests.get(url=url, params=params)
24
+ transaction_data = response.json()
25
+
26
+ return transaction_data
27
+
28
+ @evm_transaction
29
+ def swap(
30
+ self,
31
+ account,
32
+ amount_to_swap,
33
+ from_token: str,
34
+ to_token: str,
35
+ quote: int,
36
+ slippage: int
37
+ ):
38
+ amount_wei = amount_to_swap.wei
39
+
40
+ swap_provider = quote["routes"][0]["srcSwapDescription"]["provider"]
41
+
42
+ transaction_data = self.build_transaction(
43
+ account,
44
+ from_token,
45
+ to_token,
46
+ amount_wei,
47
+ slippage,
48
+ swap_provider
49
+ )
50
+
51
+ tx_data = self.build_generic_data(account.address, True)
52
+
53
+ tx_data.update(
54
+ {
55
+ "to": self.web3.to_checksum_address(transaction_data["tx"]["to"]),
56
+ "data": transaction_data["tx"]["data"],
57
+ "value": transaction_data["tx"]["value"],
58
+ "nonce": self.web3.eth.get_transaction_count(account.address)
59
+ }
60
+ )
61
+
62
+ return tx_data
63
+
64
+ def build_transaction(self, account, from_token: str, to_token: str, amount: int, slippage: float,
65
+ swap_provider: str):
66
+ url = "https://aggregator-api.xy.finance/v1/buildTx"
67
+
68
+ params = {
69
+ "srcChainId": self.web3.eth.chain_id,
70
+ "srcQuoteTokenAddress": Web3.to_checksum_address(from_token),
71
+ "srcQuoteTokenAmount": amount,
72
+ "dstChainId": self.web3.eth.chain_id,
73
+ "dstQuoteTokenAddress": Web3.to_checksum_address(to_token),
74
+ "slippage": slippage,
75
+ "receiver": account.address,
76
+ "srcSwapProvider": swap_provider,
77
+ }
78
+
79
+ # if XYSWAP_CONTRACT["use_ref"]:
80
+ # params.update({
81
+ # "affiliate": Web3.to_checksum_address("0xb98308D11E2B578858Fbe65b793e71C7a0CAa43e"),
82
+ # "commissionRate": 10000
83
+ # })
84
+
85
+ response = requests.get(url=url, params=params)
86
+
87
+ return response.json()