ipor-fusion 4.0.0.dev272__tar.gz → 4.0.0.dev274__tar.gz

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 (344) hide show
  1. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/PKG-INFO +1 -1
  2. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/pyproject.toml +1 -1
  3. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/readers/hypercore.py +71 -28
  4. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_hypercore_deployment.py +0 -6
  5. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_hypercore_live.py +16 -0
  6. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_hypercore_readers.py +65 -27
  7. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/.claude-plugin/marketplace.json +0 -0
  8. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/.claude-plugin/plugin.json +0 -0
  9. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/.env.example +0 -0
  10. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/.gemini/settings.json +0 -0
  11. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/.git-blame-ignore-revs +0 -0
  12. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/.github/workflows/cd.yml +0 -0
  13. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/.github/workflows/ci.yml +0 -0
  14. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/.github/workflows/commit-lint.yml +0 -0
  15. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/.github/workflows/notify-slack.yml +0 -0
  16. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/.github/workflows/python-build.yml +0 -0
  17. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/.github/workflows/python-publish.yml +0 -0
  18. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/.github/workflows/release.yml +0 -0
  19. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/.github/workflows/report-slack.yml +0 -0
  20. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/.gitignore +0 -0
  21. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/.mcp.json +0 -0
  22. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/.pre-commit-config.yaml +0 -0
  23. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/.python-version +0 -0
  24. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/AGENTS.md +0 -0
  25. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/CHANGELOG.md +0 -0
  26. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/CLAUDE.md +0 -0
  27. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/CODEOWNERS +0 -0
  28. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/LICENSE +0 -0
  29. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/MIGRATION_4.md +0 -0
  30. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/README.md +0 -0
  31. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/build.sh +0 -0
  32. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/examples/CONTRIBUTING.md +0 -0
  33. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/examples/README.md +0 -0
  34. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/examples/advanced_euler_v2_credit_market_base.py +0 -0
  35. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/examples/advanced_euler_v2_looping_arbitrum.py +0 -0
  36. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/examples/composed_hypercore_flow_arbitrum_hyperevm.py +0 -0
  37. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/examples/crosschain_ccip_usdc_arbitrum_hyperevm.py +0 -0
  38. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/examples/external_state_margin_leg_base.py +0 -0
  39. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/examples/simple_aave_v3_supply_base.py +0 -0
  40. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/pytest.ini +0 -0
  41. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/scripts/commit-check.sh +0 -0
  42. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/scripts/crosschain_readiness.py +0 -0
  43. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/skills/ipor-deploy-vault/SKILL.md +0 -0
  44. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/__init__.py +0 -0
  45. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/about.py +0 -0
  46. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/cache.py +0 -0
  47. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/chains.py +0 -0
  48. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/cli/__init__.py +0 -0
  49. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/cli/changelog_cmd.py +0 -0
  50. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/cli/config_cmd.py +0 -0
  51. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/cli/config_store.py +0 -0
  52. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/cli/main.py +0 -0
  53. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/cli/market_cmd.py +0 -0
  54. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/cli/options.py +0 -0
  55. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/cli/oracle_mapping_view.py +0 -0
  56. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/cli/vault_cmd.py +0 -0
  57. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/cli/vault_health.py +0 -0
  58. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/cli/vault_info_view.py +0 -0
  59. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/cli/vault_markets_view.py +0 -0
  60. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/cli/vault_rendering.py +0 -0
  61. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/config/__init__.py +0 -0
  62. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/config/roles.py +0 -0
  63. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/core/__init__.py +0 -0
  64. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/core/access.py +0 -0
  65. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/core/address.py +0 -0
  66. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/core/context.py +0 -0
  67. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/core/context_manager.py +0 -0
  68. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/core/contract.py +0 -0
  69. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/core/erc20.py +0 -0
  70. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/core/external_state_executor.py +0 -0
  71. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/core/fee_manager.py +0 -0
  72. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/core/fuse.py +0 -0
  73. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/core/fuse_action.py +0 -0
  74. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/core/fusion_factory.py +0 -0
  75. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/core/logs.py +0 -0
  76. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/core/multicall.py +0 -0
  77. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/core/oracle.py +0 -0
  78. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/core/plasma_vault.py +0 -0
  79. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/core/rewards_manager.py +0 -0
  80. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/core/simulation.py +0 -0
  81. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/core/simulation_result.py +0 -0
  82. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/core/withdraw_manager.py +0 -0
  83. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/crosschain/__init__.py +0 -0
  84. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/crosschain/ccip/__init__.py +0 -0
  85. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/crosschain/ccip/chainlink.py +0 -0
  86. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/crosschain/ccip/codec.py +0 -0
  87. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/crosschain/ccip/contracts.py +0 -0
  88. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/crosschain/ccip/events.py +0 -0
  89. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/crosschain/ccip/indexer.py +0 -0
  90. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/crosschain/ccip/lane.py +0 -0
  91. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/crosschain/ccip/quote.py +0 -0
  92. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/crosschain/ccip/transport.py +0 -0
  93. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/crosschain/contracts.py +0 -0
  94. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/crosschain/discovery.py +0 -0
  95. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/crosschain/errors.py +0 -0
  96. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/crosschain/fuses/__init__.py +0 -0
  97. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/crosschain/fuses/base.py +0 -0
  98. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/crosschain/fuses/ccip.py +0 -0
  99. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/crosschain/fuses/stargate.py +0 -0
  100. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/crosschain/lane.py +0 -0
  101. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/crosschain/logs.py +0 -0
  102. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/crosschain/messages.py +0 -0
  103. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/crosschain/simulation.py +0 -0
  104. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/crosschain/stargate/__init__.py +0 -0
  105. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/crosschain/stargate/contracts.py +0 -0
  106. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/crosschain/stargate/lane.py +0 -0
  107. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/crosschain/stargate/layerzero.py +0 -0
  108. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/crosschain/stargate/transport.py +0 -0
  109. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/crosschain/transport.py +0 -0
  110. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/dependency_graph.py +0 -0
  111. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/entry_cli.py +0 -0
  112. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/entry_mcp.py +0 -0
  113. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/errors.py +0 -0
  114. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/explorer.py +0 -0
  115. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/field_docs.py +0 -0
  116. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/fuses/__init__.py +0 -0
  117. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/fuses/aave_v3.py +0 -0
  118. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/fuses/async_action.py +0 -0
  119. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/fuses/base.py +0 -0
  120. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/fuses/compound_v3.py +0 -0
  121. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/fuses/erc4626.py +0 -0
  122. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/fuses/euler_v2.py +0 -0
  123. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/fuses/events.py +0 -0
  124. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/fuses/external_state.py +0 -0
  125. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/fuses/external_state_event_decoding.py +0 -0
  126. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/fuses/fluid_instadapp.py +0 -0
  127. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/fuses/gearbox_v3.py +0 -0
  128. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/fuses/hypercore.py +0 -0
  129. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/fuses/hypercore_event_decoding.py +0 -0
  130. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/fuses/merkl.py +0 -0
  131. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/fuses/morpho.py +0 -0
  132. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/fuses/ramses_v2.py +0 -0
  133. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/fuses/uniswap_v3.py +0 -0
  134. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/fuses/universal.py +0 -0
  135. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/guide/__init__.py +0 -0
  136. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/guide/architecture.md +0 -0
  137. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/guide/glossary.md +0 -0
  138. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/guide/invariants.md +0 -0
  139. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/guide/quickstart.md +0 -0
  140. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/hypercore/__init__.py +0 -0
  141. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/market_ids.py +0 -0
  142. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/market_info.py +0 -0
  143. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/mcp/__init__.py +0 -0
  144. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/mcp/guide.py +0 -0
  145. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/mcp/models.py +0 -0
  146. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/mcp/server.py +0 -0
  147. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/morpho_api.py +0 -0
  148. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/py.typed +0 -0
  149. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/readers/__init__.py +0 -0
  150. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/readers/aave_v3.py +0 -0
  151. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/readers/aave_v4.py +0 -0
  152. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/readers/compound_v3.py +0 -0
  153. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/readers/hypercore_outcome.py +0 -0
  154. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/readers/lending_health.py +0 -0
  155. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/readers/morpho.py +0 -0
  156. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/readers/oracle_mapping.py +0 -0
  157. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/readers/oracle_mapping_nodes.py +0 -0
  158. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/readers/oracle_mapping_reader.py +0 -0
  159. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/readers/position_manager.py +0 -0
  160. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/readers/ramses_v2.py +0 -0
  161. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/readers/uniswap_v3.py +0 -0
  162. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/readers/unpriceable.py +0 -0
  163. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/substrates.py +0 -0
  164. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/types.py +0 -0
  165. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/validation.py +0 -0
  166. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/vault_data.py +0 -0
  167. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/vault_erc20.py +0 -0
  168. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/vault_info.py +0 -0
  169. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/vault_managers.py +0 -0
  170. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/vault_positions.py +0 -0
  171. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/src/ipor_fusion/vault_reads.py +0 -0
  172. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/UniswapV3UniversalRouter.py +0 -0
  173. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/_crosschain.py +0 -0
  174. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/_crosschain_lifecycle.py +0 -0
  175. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/_crosschain_recovery.py +0 -0
  176. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/_euler_v2.py +0 -0
  177. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/_event_args.py +0 -0
  178. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/_fake_rpc.py +0 -0
  179. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/_foundry.py +0 -0
  180. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/_golden.py +0 -0
  181. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/_guide.py +0 -0
  182. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/_hypercore_model.py +0 -0
  183. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/_hypercore_shadow.py +0 -0
  184. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/_live.py +0 -0
  185. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/_multicall.py +0 -0
  186. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/_oracle_mapping_fake.py +0 -0
  187. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/_simulate.py +0 -0
  188. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/_validation.py +0 -0
  189. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/addresses.py +0 -0
  190. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/conftest.py +0 -0
  191. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/constants.py +0 -0
  192. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/fixtures/hypercore_hip3_flow.json +0 -0
  193. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/fixtures/hypercore_market55.json +0 -0
  194. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/fixtures/market_golden/meta_morpho_v1.json +0 -0
  195. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/fixtures/market_golden/meta_morpho_v1.mcp.json +0 -0
  196. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/fixtures/market_golden/meta_morpho_v2.json +0 -0
  197. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/fixtures/market_golden/meta_morpho_v2.mcp.json +0 -0
  198. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/fixtures/market_golden/morpho_api/market.json +0 -0
  199. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/fixtures/market_golden/morpho_api/vault_v1.json +0 -0
  200. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/fixtures/market_golden/morpho_api/vault_v2.json +0 -0
  201. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/fixtures/market_golden/morpho_api/vault_v2_not_found.json +0 -0
  202. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/fixtures/market_golden/morpho_blue.json +0 -0
  203. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/fixtures/market_golden/morpho_blue.mcp.json +0 -0
  204. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/fixtures/market_golden/morpho_blue_api_error.json +0 -0
  205. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/fixtures/market_golden/morpho_blue_api_error.mcp.json +0 -0
  206. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/fixtures/market_golden/morpho_blue_no_api.json +0 -0
  207. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/fixtures/market_golden/morpho_blue_no_api.mcp.json +0 -0
  208. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/fixtures/oracle_mapping_golden/mapping.json +0 -0
  209. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/fixtures/oracle_mapping_golden/mapping.mcp.json +0 -0
  210. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/fixtures/simulate_v1_request.json +0 -0
  211. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/fixtures/vault_info_golden/clean.json +0 -0
  212. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/fixtures/vault_info_golden/clean.mcp.json +0 -0
  213. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/fixtures/vault_info_golden/clean.txt +0 -0
  214. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/fixtures/vault_info_golden/deployment_error.json +0 -0
  215. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/fixtures/vault_info_golden/deployment_error.mcp.json +0 -0
  216. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/fixtures/vault_info_golden/deployment_error.txt +0 -0
  217. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/fixtures/vault_info_golden/fetched.cli.json +0 -0
  218. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/fixtures/vault_info_golden/fetched.json +0 -0
  219. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/fixtures/vault_info_golden/fetched.mcp.json +0 -0
  220. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/fixtures/vault_info_golden/full.json +0 -0
  221. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/fixtures/vault_info_golden/full.mcp.json +0 -0
  222. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/fixtures/vault_info_golden/full.txt +0 -0
  223. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/fixtures/vault_info_golden/rich.json +0 -0
  224. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/fixtures/vault_info_golden/rich.mcp.json +0 -0
  225. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/fixtures/vault_info_golden/rich.txt +0 -0
  226. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_about.py +0 -0
  227. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_access_manager.py +0 -0
  228. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_cache.py +0 -0
  229. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_chains.py +0 -0
  230. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_cli_changelog.py +0 -0
  231. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_cli_commands.py +0 -0
  232. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_cli_config_store.py +0 -0
  233. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_cli_helpers.py +0 -0
  234. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_cli_hypercore.py +0 -0
  235. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_cli_lending_health.py +0 -0
  236. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_cli_market_golden.py +0 -0
  237. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_cli_market_morpho_blue.py +0 -0
  238. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_cli_mcp_parity.py +0 -0
  239. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_cli_oracle_mapping.py +0 -0
  240. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_cli_oracle_mapping_golden.py +0 -0
  241. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_cli_pending_requests_scan.py +0 -0
  242. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_cli_role_accounts.py +0 -0
  243. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_cli_vault_info_golden.py +0 -0
  244. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_cli_vault_predates_getters.py +0 -0
  245. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_cli_vault_validate.py +0 -0
  246. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_contract_call.py +0 -0
  247. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_contract_encoder.py +0 -0
  248. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_crosschain_ccip_events.py +0 -0
  249. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_crosschain_ccip_indexer.py +0 -0
  250. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_crosschain_ccip_quote.py +0 -0
  251. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_crosschain_chainlink.py +0 -0
  252. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_crosschain_contracts.py +0 -0
  253. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_crosschain_encoding.py +0 -0
  254. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_crosschain_errors.py +0 -0
  255. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_crosschain_lane.py +0 -0
  256. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_crosschain_layering.py +0 -0
  257. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_crosschain_readiness.py +0 -0
  258. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_crosschain_readiness_report.py +0 -0
  259. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_crosschain_transport.py +0 -0
  260. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_docs_typing.py +0 -0
  261. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_erc20.py +0 -0
  262. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_error_hierarchy.py +0 -0
  263. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_examples_composed_hypercore.py +0 -0
  264. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_examples_crosschain.py +0 -0
  265. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_examples_euler_looping_arbitrum.py +0 -0
  266. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_examples_vaults.py +0 -0
  267. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_explorer.py +0 -0
  268. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_external_state_events.py +0 -0
  269. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_external_state_executor.py +0 -0
  270. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_fee_manager.py +0 -0
  271. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_fuse_encoding.py +0 -0
  272. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_fusion_instance.py +0 -0
  273. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_governance_wrappers.py +0 -0
  274. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_guide.py +0 -0
  275. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_hypercore_events.py +0 -0
  276. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_hypercore_flow.py +0 -0
  277. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_hypercore_outcome.py +0 -0
  278. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_hypercore_simulation.py +0 -0
  279. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_logs.py +0 -0
  280. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_mcp_hypercore.py +0 -0
  281. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_mcp_models.py +0 -0
  282. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_mcp_server.py +0 -0
  283. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_mcp_vault_validate.py +0 -0
  284. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_multicall.py +0 -0
  285. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_oracle.py +0 -0
  286. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_oracle_mapping.py +0 -0
  287. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_plasma_vault.py +0 -0
  288. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_public_api.py +0 -0
  289. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_public_type_reachability.py +0 -0
  290. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_reader_encoding.py +0 -0
  291. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_readiness_selection.py +0 -0
  292. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_revert_decoding.py +0 -0
  293. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_rewards_manager.py +0 -0
  294. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_roles.py +0 -0
  295. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_sdk_layering.py +0 -0
  296. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_simulate_borrow_aave_v3_mainnet.py +0 -0
  297. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_simulate_claim_merkl_wrapper_base.py +0 -0
  298. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_simulate_claim_morpho_rewards.py +0 -0
  299. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_simulate_crosschain_canary.py +0 -0
  300. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_simulate_crosschain_hypercore.py +0 -0
  301. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_simulate_crosschain_hyperevm.py +0 -0
  302. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_simulate_crosschain_lifecycle.py +0 -0
  303. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_simulate_euler_v2_batch_base.py +0 -0
  304. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_simulate_euler_v2_credit_market_base.py +0 -0
  305. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_simulate_euler_v2_swap_deploy_base.py +0 -0
  306. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_simulate_euler_v2_swap_reconfigure_base.py +0 -0
  307. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_simulate_euler_v2_swap_registry_base.py +0 -0
  308. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_simulate_examples_arbitrum.py +0 -0
  309. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_simulate_examples_base.py +0 -0
  310. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_simulate_examples_crosschain.py +0 -0
  311. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_simulate_external_state_executor_base.py +0 -0
  312. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_simulate_fusion_factory_clone_base.py +0 -0
  313. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_simulate_looping_aave_v3_base.py +0 -0
  314. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_simulate_looping_morpho_blue_base.py +0 -0
  315. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_simulate_morpho_blue.py +0 -0
  316. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_simulate_pilot_v3.py +0 -0
  317. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_simulate_pilot_v4_uniswap.py +0 -0
  318. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_simulate_pilot_v5_ramses.py +0 -0
  319. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_simulate_pilot_v5_scheduled.py +0 -0
  320. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_simulate_plasma_vault_setters_base.py +0 -0
  321. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_simulate_readers_integration.py +0 -0
  322. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_simulate_release_funds.py +0 -0
  323. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_simulate_swap_on_base.py +0 -0
  324. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_simulate_vault_from_scratch_base.py +0 -0
  325. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_simulation_errors.py +0 -0
  326. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_simulation_observation.py +0 -0
  327. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_solidity_compiler.py +0 -0
  328. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_solidity_mirrors.py +0 -0
  329. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_substrates.py +0 -0
  330. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_types_and_events.py +0 -0
  331. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_unpriceable_tokens.py +0 -0
  332. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_validation.py +0 -0
  333. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_vault_data_block.py +0 -0
  334. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_vault_dep_graph.py +0 -0
  335. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_vault_info_fetched_golden.py +0 -0
  336. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_vault_info_onchain_base.py +0 -0
  337. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_vault_info_onchain_base_no_withdraw_manager.py +0 -0
  338. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_vault_reconciliation_onchain_base.py +0 -0
  339. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_vault_simulator_blocks.py +0 -0
  340. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_web3_context.py +0 -0
  341. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/test_withdraw_manager.py +0 -0
  342. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/typed_client/consumer.py +0 -0
  343. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/tests/typed_client/rejected.py +0 -0
  344. {ipor_fusion-4.0.0.dev272 → ipor_fusion-4.0.0.dev274}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: ipor-fusion
3
- Version: 4.0.0.dev272
3
+ Version: 4.0.0.dev274
4
4
  Summary: The IPOR Fusion SDK for Python
5
5
  Project-URL: homepage, https://ipor.io
6
6
  Project-URL: repository, https://github.com/IPOR-Labs/ipor-fusion.py
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "ipor-fusion"
3
- version = "4.0.0.dev272"
3
+ version = "4.0.0.dev274"
4
4
  description = "The IPOR Fusion SDK for Python"
5
5
  authors = [
6
6
  { name = "Adam Mydlarz", email = "amydlarz@gmail.com" },
@@ -30,7 +30,7 @@ from dataclasses import dataclass
30
30
  from enum import IntEnum
31
31
  from typing import TypeVar
32
32
 
33
- from eth_abi import encode
33
+ from eth_abi import decode, encode
34
34
  from eth_typing import ChecksumAddress
35
35
  from eth_utils import function_signature_to_4byte_selector
36
36
  from web3 import Web3
@@ -41,7 +41,7 @@ from ipor_fusion.core.contract import Call
41
41
  from ipor_fusion.core.multicall import Multicall3
42
42
  from ipor_fusion.core.oracle import PriceOracleMiddleware
43
43
  from ipor_fusion.core.plasma_vault import PlasmaVault
44
- from ipor_fusion.errors import HyperCoreValuationError
44
+ from ipor_fusion.errors import HyperCoreValuationError, UnsupportedContractVersionError
45
45
  from ipor_fusion.fuses.hypercore import (
46
46
  NATIVE_PERP_DEX,
47
47
  SUPPORTED_HIP3_DEXES,
@@ -71,13 +71,17 @@ T = TypeVar("T")
71
71
  HYPERCORE_MARKET = IporFusionMarkets.HYPERCORE
72
72
  #: The only chain with the HyperCore precompiles.
73
73
  HYPEREVM_CHAIN_ID = ChainId(999)
74
- #: Known ``HyperCorePendingReader`` deployments per chain. The reader is a
75
- #: stateless helper and any deployment serves any vault. The market-55 reader
76
- #: is pinned in ``tests/fixtures/hypercore_market55.json`` until ``ipor-abi``
77
- #: publishes it.
74
+ #: The ``HyperCorePendingReader`` ``ipor-abi`` lists per chain. The reader
75
+ #: runs the pending-action library in the vault's storage, so it must come from
76
+ #: the build of the vault's HyperCore fuses and pre-hooks. A vault deployed
77
+ #: before that build (the HyperEVM market-55 vault
78
+ #: ``0xB8De01Ca5ca57A14671E1c696337134a02B4A478``) needs its own reader,
79
+ #: ``0x83F54bc9eA4Dd19cb579Daa70368562C7a7534C4``, passed explicitly: the current
80
+ #: one reads its storage the same but settles its reported-mode orders by time
81
+ #: alone.
78
82
  HYPERCORE_PENDING_READERS: dict[ChainId, ChecksumAddress] = {
79
83
  HYPEREVM_CHAIN_ID: Web3.to_checksum_address(
80
- "0x83F54bc9eA4Dd19cb579Daa70368562C7a7534C4"
84
+ "0x1EFFb12434f5fb59a636C54D8CBaC93b13DF1A9E"
81
85
  ),
82
86
  }
83
87
  WAD_DECIMALS = 18
@@ -363,22 +367,58 @@ class HyperCorePendingState:
363
367
  l1_block_available: bool
364
368
 
365
369
 
366
- _PENDING_ACTION_TYPE = "(uint64,uint64,uint64,uint8,uint8,uint8,uint64,uint24,bytes32,bool,uint256,uint256)"
367
- PENDING_STATE_TYPE = f"({_PENDING_ACTION_TYPE},bool,bool,bool,uint64,uint64,bool)"
370
+ _PENDING_ACTION_PREFIX = (
371
+ "uint64,uint64,uint64,uint8,uint8,uint8,uint64,uint24,bytes32,bool,uint256,uint256"
372
+ )
373
+ _PENDING_ACTION_TYPE = (
374
+ f"({_PENDING_ACTION_PREFIX},uint8,uint64,address,uint64,uint256,uint64)"
375
+ )
376
+ #: ``pendingState()`` of the current reader.
377
+ PENDING_STATE_TYPE = f"({_PENDING_ACTION_TYPE},bool,bool,uint64,uint64,bool)"
378
+ #: ``pendingState()`` of the earlier reader: the 12-field struct and a
379
+ #: ``refreshing`` predicate. Both tuples are static, so the payload length
380
+ #: tells the two apart.
381
+ LEGACY_PENDING_STATE_TYPE = (
382
+ f"(({_PENDING_ACTION_PREFIX}),bool,bool,bool,uint64,uint64,bool)"
383
+ )
384
+ _PENDING_STATE_SIZE = 23 * 32
385
+ _LEGACY_PENDING_STATE_SIZE = 18 * 32
368
386
  _PENDING_STATE_SELECTOR = function_signature_to_4byte_selector("pendingState()")
369
- _IS_PENDING_SELECTOR = function_signature_to_4byte_selector("isPending()")
370
387
 
371
388
 
372
389
  # pendingUntil, enqueuedL1Block, enqueuedEvmBlock, actionClass, settlementMode,
373
390
  # reportedResult, resultL1Block, actionId, payloadHash, stateRefreshing,
374
- # cachedValueWad, actionNonce.
391
+ # cachedValueWad, actionNonce: the struct prefix both readers share.
375
392
  _PendingAction = tuple[int, int, int, int, int, int, int, int, bytes, bool, int, int]
376
393
 
377
394
 
378
- def _decode_pending_state(
379
- values: tuple[_PendingAction, bool, bool, bool, int, int, bool],
395
+ def _decode_pending_payload(data: bytes) -> HyperCorePendingState:
396
+ if len(data) == _PENDING_STATE_SIZE:
397
+ state, pending, settled, l1_block, timestamp, l1_available = decode(
398
+ [PENDING_STATE_TYPE], data
399
+ )[0]
400
+ refreshing = False
401
+ elif len(data) == _LEGACY_PENDING_STATE_SIZE:
402
+ state, pending, settled, refreshing, l1_block, timestamp, l1_available = decode(
403
+ [LEGACY_PENDING_STATE_TYPE], data
404
+ )[0]
405
+ else:
406
+ raise UnsupportedContractVersionError(
407
+ f"HyperCorePendingReader.pendingState() returned {len(data)} bytes, "
408
+ f"not {_PENDING_STATE_SIZE} or {_LEGACY_PENDING_STATE_SIZE}"
409
+ )
410
+ return _pending_state(
411
+ state[:12],
412
+ (bool(pending), bool(settled), bool(refreshing)),
413
+ (l1_block, timestamp, bool(l1_available)),
414
+ )
415
+
416
+
417
+ def _pending_state(
418
+ state: _PendingAction,
419
+ predicates: tuple[bool, bool, bool],
420
+ l1: tuple[int, int, bool],
380
421
  ) -> HyperCorePendingState:
381
- state, pending, settled, refreshing, l1_block, timestamp, l1_available = values
382
422
  (
383
423
  pending_until,
384
424
  enqueued_l1_block,
@@ -393,6 +433,8 @@ def _decode_pending_state(
393
433
  cached_value_wad,
394
434
  action_nonce,
395
435
  ) = state
436
+ pending, settled, refreshing = predicates
437
+ l1_block, timestamp, l1_available = l1
396
438
  return HyperCorePendingState(
397
439
  pending_until=Timestamp(pending_until),
398
440
  enqueued_l1_block=enqueued_l1_block,
@@ -403,22 +445,23 @@ def _decode_pending_state(
403
445
  result_l1_block=result_l1_block,
404
446
  action_id=HyperCoreActionId(action_id),
405
447
  payload_hash=PayloadHash(bytes(payload_hash)),
406
- refreshing=bool(refreshing or state_refreshing),
448
+ refreshing=refreshing or bool(state_refreshing),
407
449
  cached_value_wad=cached_value_wad,
408
450
  action_nonce=action_nonce,
409
- pending=bool(pending),
410
- settled=bool(settled),
451
+ pending=pending,
452
+ settled=settled,
411
453
  current_l1_block=l1_block,
412
454
  current_timestamp=Timestamp(timestamp),
413
- l1_block_available=bool(l1_available),
455
+ l1_block_available=l1_available,
414
456
  )
415
457
 
416
458
 
417
459
  class HyperCorePendingReader:
418
460
  """``HyperCorePendingReader`` through the vault's ``UniversalReader``.
419
461
 
420
- ``reader`` is the deployed helper (one per chain, never called directly);
421
- the vault delegatecalls it so it sees the vault's pending slot. Keepers
462
+ ``reader`` is the deployed helper from the vault's build (never called
463
+ directly; see :data:`HYPERCORE_PENDING_READERS`); the vault delegatecalls
464
+ it so it sees the vault's pending slot. Keepers
422
465
  gate every action on :meth:`is_pending`: the pending-action pre-hook
423
466
  reverts ``execute`` and ``updateMarketsBalances`` while it is true.
424
467
  """
@@ -428,17 +471,17 @@ class HyperCorePendingReader:
428
471
  self._reader = reader
429
472
 
430
473
  def pending_state(self) -> Call[HyperCorePendingState]:
431
- return self._vault.universal_read_decoded(
432
- self._reader,
433
- _PENDING_STATE_SELECTOR,
434
- output_types=[PENDING_STATE_TYPE],
435
- decoder=_decode_pending_state,
474
+ """``pendingState()`` of either reader build, told apart by the
475
+ payload length."""
476
+ return self._vault.universal_read(self._reader, _PENDING_STATE_SELECTOR).map(
477
+ _decode_pending_payload
436
478
  )
437
479
 
438
480
  def is_pending(self) -> Call[bool]:
439
- return self._vault.universal_read_decoded(
440
- self._reader, _IS_PENDING_SELECTOR, output_types=["bool"], decoder=bool
441
- )
481
+ """The ``pending`` predicate of :meth:`pending_state`: the readers
482
+ name the standalone getter differently (``isPending()`` /
483
+ ``isActionPending()``)."""
484
+ return self.pending_state().map(lambda state: state.pending)
442
485
 
443
486
 
444
487
  def convert_to_wad_int(value: int, decimals: int) -> int:
@@ -10,7 +10,6 @@ from web3 import Web3
10
10
  from ipor_fusion import PlasmaVault
11
11
  from ipor_fusion.core.context import Web3Context
12
12
  from ipor_fusion.hypercore import HyperCoreSubstrates
13
- from ipor_fusion.readers.hypercore import HYPERCORE_PENDING_READERS
14
13
  from ipor_fusion.types import MarketId
15
14
 
16
15
  FIXTURE = json.loads(
@@ -19,11 +18,6 @@ FIXTURE = json.loads(
19
18
  FUSE_NAMES = frozenset(name for name in FIXTURE["contracts"] if name.endswith("Fuse"))
20
19
 
21
20
 
22
- def test_default_pending_reader_matches_broadcast() -> None:
23
- expected = FIXTURE["contracts"]["HyperCorePendingReader"]["address"]
24
- assert HYPERCORE_PENDING_READERS[FIXTURE["chain_id"]] == expected
25
-
26
-
27
21
  def _read_address(web3: Web3, target: str, signature: str, block: int) -> str:
28
22
  result = web3.eth.call(
29
23
  {"to": target, "data": Web3.keccak(text=signature)[:4]},
@@ -34,6 +34,7 @@ from ipor_fusion.fuses.hypercore import (
34
34
  precompile_index_of,
35
35
  )
36
36
  from ipor_fusion.hypercore import (
37
+ HYPERCORE_PENDING_READERS,
37
38
  HyperCoreCancelFuse,
38
39
  HyperCoreDepositFuse,
39
40
  HyperCoreOrderFuse,
@@ -125,6 +126,21 @@ def test_pending_state_reads_through_the_vault(
125
126
  assert state.pending or state.settled
126
127
 
127
128
 
129
+ def test_both_reader_builds_read_the_same_pending_slot(
130
+ ctx: Web3Context, pending: HyperCorePendingReader
131
+ ):
132
+ legacy = pending.pending_state().call(ctx)
133
+ current = (
134
+ HyperCorePendingReader(VAULT, HYPERCORE_PENDING_READERS[999])
135
+ .pending_state()
136
+ .call(ctx)
137
+ )
138
+ shared = ("action_nonce", "action_class", "pending_until", "cached_value_wad")
139
+ assert [getattr(current, f) for f in shared] == [getattr(legacy, f) for f in shared]
140
+ assert current.payload_hash == legacy.payload_hash
141
+ assert current.l1_block_available and current.current_l1_block > 0
142
+
143
+
128
144
  def test_precompiles_batch_through_multicall3(ctx: Web3Context):
129
145
  reader = HyperCoreReader()
130
146
  nvda = precompile_index_of(XYZ_NVDA)
@@ -14,7 +14,11 @@ from eth_utils import function_signature_to_4byte_selector
14
14
  from web3 import Web3
15
15
  from web3.exceptions import ContractLogicError
16
16
 
17
- from ipor_fusion import HyperCoreValuationError, PlasmaVault
17
+ from ipor_fusion import (
18
+ HyperCoreValuationError,
19
+ PlasmaVault,
20
+ UnsupportedContractVersionError,
21
+ )
18
22
  from ipor_fusion.hypercore import (
19
23
  HyperCoreActionClass,
20
24
  HyperCoreNav,
@@ -32,6 +36,7 @@ from ipor_fusion.readers.hypercore import (
32
36
  ACCOUNT_MARGIN_SUMMARY_PRECOMPILE,
33
37
  CORE_USER_EXISTS_PRECOMPILE,
34
38
  L1_BLOCK_NUMBER_PRECOMPILE,
39
+ LEGACY_PENDING_STATE_TYPE,
35
40
  PENDING_STATE_TYPE,
36
41
  PERP_ASSET_INFO_PRECOMPILE,
37
42
  POSITION_PRECOMPILE,
@@ -154,32 +159,47 @@ class TestPrecompileCalls:
154
159
  self.reader.perp_asset_info(1 << 32)
155
160
 
156
161
 
157
- def _pending_state_raw(*, pending: bool, settled: bool) -> bytes:
158
- state = (
159
- 1_790_609_642,
160
- 1_164_341_828,
161
- 47_125_670,
162
- 1, # Transfer
163
- 0, # settlement mode unset for a transfer
164
- 0,
165
- 0,
166
- 13, # sendAsset
167
- b"\x30" * 32,
168
- False,
169
- 10**16,
170
- 32,
171
- )
172
- inner = encode(
173
- [PENDING_STATE_TYPE],
174
- [(state, pending, settled, False, 1_168_823_034, 1_790_931_001, True)],
175
- )
162
+ _STATE_PREFIX = (
163
+ 1_790_609_642,
164
+ 1_164_341_828,
165
+ 47_125_670,
166
+ 1, # Transfer
167
+ 0, # settlement mode unset for a transfer
168
+ 0,
169
+ 0,
170
+ 13, # sendAsset
171
+ b"\x30" * 32,
172
+ False,
173
+ 10**16,
174
+ 32,
175
+ )
176
+ # effectKind, effectTokenIndex, effectEvmAsset, timeoutAt, expectedBalance,
177
+ # lastOrderL1Block: appended by the current build.
178
+ _EFFECT_FIELDS = (1, 0, "0x" + "00" * 20, 1_790_609_702, 10**6, 1_164_341_800)
179
+
180
+
181
+ def _pending_state_raw(*, pending: bool, settled: bool, legacy: bool) -> bytes:
182
+ l1 = (1_168_823_034, 1_790_931_001, True)
183
+ if legacy:
184
+ inner = encode(
185
+ [LEGACY_PENDING_STATE_TYPE],
186
+ [(_STATE_PREFIX, pending, settled, False, *l1)],
187
+ )
188
+ else:
189
+ inner = encode(
190
+ [PENDING_STATE_TYPE],
191
+ [(_STATE_PREFIX + _EFFECT_FIELDS, pending, settled, *l1)],
192
+ )
176
193
  return encode(["(bytes)"], [(inner,)])
177
194
 
178
195
 
179
196
  class TestUniversalRead:
180
- def test_pending_state_reads_through_the_vault(self):
197
+ @pytest.mark.parametrize("legacy", [False, True])
198
+ def test_pending_state_reads_through_the_vault(self, legacy: bool):
181
199
  ctx = _ctx()
182
- ctx.call.return_value = _pending_state_raw(pending=False, settled=True)
200
+ ctx.call.return_value = _pending_state_raw(
201
+ pending=False, settled=True, legacy=legacy
202
+ )
183
203
  reader = HyperCorePendingReader(VAULT, READER)
184
204
 
185
205
  state = reader.pending_state().call(ctx)
@@ -203,13 +223,29 @@ class TestUniversalRead:
203
223
  1_168_823_034,
204
224
  True,
205
225
  )
226
+ assert state.current_timestamp == 1_790_931_001
206
227
  assert state.payload_hash == b"\x30" * 32
207
228
 
208
- def test_is_pending_and_balance_fuse_value_decode_their_payloads(self):
229
+ @pytest.mark.parametrize("legacy", [False, True])
230
+ def test_is_pending_is_the_pending_state_predicate(self, legacy: bool):
209
231
  ctx = _ctx()
210
- vault = PlasmaVault(VAULT)
211
- ctx.call.return_value = encode(["(bytes)"], [(encode(["bool"], [True]),)])
232
+ ctx.call.return_value = _pending_state_raw(
233
+ pending=True, settled=False, legacy=legacy
234
+ )
212
235
  assert HyperCorePendingReader(VAULT, READER).is_pending().call(ctx) is True
236
+ assert ctx.call.call_args.args[1][4:] == encode(
237
+ ["address", "bytes"], [READER, _selector("pendingState()")]
238
+ )
239
+
240
+ def test_unknown_payload_size_is_refused(self):
241
+ ctx = _ctx()
242
+ ctx.call.return_value = encode(["(bytes)"], [(b"\x00" * 32 * 20,)])
243
+ with pytest.raises(UnsupportedContractVersionError, match="640 bytes"):
244
+ HyperCorePendingReader(VAULT, READER).pending_state().call(ctx)
245
+
246
+ def test_balance_fuse_value_and_raw_read_decode_their_payloads(self):
247
+ ctx = _ctx()
248
+ vault = PlasmaVault(VAULT)
213
249
  ctx.call.return_value = encode(
214
250
  ["(bytes)"], [(encode(["uint256"], [8_245_000_000_000_000]),)]
215
251
  )
@@ -226,7 +262,9 @@ class TestUniversalRead:
226
262
  def test_reported_order_state_maps_the_enums(self):
227
263
  ctx = _ctx()
228
264
  state = (0, 0, 0, 2, 2, 2, 5, 1, b"\x00" * 32, True, 0, 1)
229
- inner = encode([PENDING_STATE_TYPE], [(state, True, False, True, 0, 0, False)])
265
+ inner = encode(
266
+ [LEGACY_PENDING_STATE_TYPE], [(state, True, False, True, 0, 0, False)]
267
+ )
230
268
  ctx.call.return_value = encode(["(bytes)"], [(inner,)])
231
269
  decoded = HyperCorePendingReader(VAULT, READER).pending_state().call(ctx)
232
270
  assert decoded.action_class is HyperCoreActionClass.ORDER
@@ -258,7 +296,7 @@ def _universal_read(data: bytes) -> bytes:
258
296
  """`PlasmaVault.read` double: the pending reader or the balance fuse."""
259
297
  target, inner = decode(["address", "bytes"], data[4:])
260
298
  if Web3.to_checksum_address(target) == READER:
261
- return _pending_state_raw(pending=False, settled=True)
299
+ return _pending_state_raw(pending=False, settled=True, legacy=False)
262
300
  assert Web3.to_checksum_address(target) == BALANCE_FUSE
263
301
  assert bytes(inner) == _selector("balanceOf()")
264
302
  return encode(["(bytes)"], [(encode(["uint256"], [8_245_000_000_000_000]),)])