ipor-fusion 4.0.0.dev315__tar.gz → 4.0.0.dev325__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 (357) hide show
  1. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/AGENTS.md +12 -4
  2. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/PKG-INFO +28 -1
  3. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/README.md +27 -0
  4. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/examples/README.md +41 -0
  5. ipor_fusion-4.0.0.dev325/examples/crosschain_ccip_usdc_arbitrum_hyperevm.py +1460 -0
  6. ipor_fusion-4.0.0.dev325/examples/hypercore_vault_official_deployment_hyperevm.py +908 -0
  7. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/pyproject.toml +1 -1
  8. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/fuses/hypercore.py +0 -3
  9. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/_foundry.py +15 -5
  10. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/_hypercore_model.py +4 -5
  11. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/_hypercore_shadow.py +42 -13
  12. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/fixtures/hypercore_official.json +5 -0
  13. ipor_fusion-4.0.0.dev325/tests/test_examples_crosschain.py +312 -0
  14. ipor_fusion-4.0.0.dev325/tests/test_examples_hypercore_hyperevm.py +215 -0
  15. ipor_fusion-4.0.0.dev325/tests/test_hypercore_simulation.py +16 -0
  16. ipor_fusion-4.0.0.dev325/tests/test_simulate_examples_crosschain.py +164 -0
  17. ipor_fusion-4.0.0.dev325/tests/test_simulate_examples_hyperevm.py +128 -0
  18. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_solidity_compiler.py +3 -0
  19. ipor_fusion-4.0.0.dev315/tests/test_hypercore_simulation.py +0 -176
  20. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/.claude-plugin/marketplace.json +0 -0
  21. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/.claude-plugin/plugin.json +0 -0
  22. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/.env.example +0 -0
  23. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/.gemini/settings.json +0 -0
  24. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/.git-blame-ignore-revs +0 -0
  25. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/.github/workflows/cd.yml +0 -0
  26. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/.github/workflows/ci.yml +0 -0
  27. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/.github/workflows/commit-lint.yml +0 -0
  28. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/.github/workflows/notify-slack.yml +0 -0
  29. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/.github/workflows/python-build.yml +0 -0
  30. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/.github/workflows/python-publish.yml +0 -0
  31. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/.github/workflows/release.yml +0 -0
  32. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/.github/workflows/report-slack.yml +0 -0
  33. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/.gitignore +0 -0
  34. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/.mcp.json +0 -0
  35. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/.pre-commit-config.yaml +0 -0
  36. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/.python-version +0 -0
  37. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/CHANGELOG.md +0 -0
  38. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/CLAUDE.md +0 -0
  39. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/CODEOWNERS +0 -0
  40. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/LICENSE +0 -0
  41. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/MIGRATION_4.md +0 -0
  42. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/build.sh +0 -0
  43. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/examples/CONTRIBUTING.md +0 -0
  44. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/examples/advanced_euler_v2_credit_market_base.py +0 -0
  45. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/examples/advanced_euler_v2_looping_arbitrum.py +0 -0
  46. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/examples/external_state_margin_leg_base.py +0 -0
  47. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/examples/simple_aave_v3_supply_base.py +0 -0
  48. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/pytest.ini +0 -0
  49. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/scripts/commit-check.sh +0 -0
  50. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/scripts/fusion_error_signatures.py +0 -0
  51. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/skills/ipor-deploy-vault/SKILL.md +0 -0
  52. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/__init__.py +0 -0
  53. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/about.py +0 -0
  54. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/cache.py +0 -0
  55. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/chains.py +0 -0
  56. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/cli/__init__.py +0 -0
  57. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/cli/address_cmd.py +0 -0
  58. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/cli/changelog_cmd.py +0 -0
  59. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/cli/config_cmd.py +0 -0
  60. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/cli/config_store.py +0 -0
  61. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/cli/main.py +0 -0
  62. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/cli/market_cmd.py +0 -0
  63. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/cli/options.py +0 -0
  64. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/cli/oracle_mapping_view.py +0 -0
  65. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/cli/preflight_cmd.py +0 -0
  66. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/cli/vault_cmd.py +0 -0
  67. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/cli/vault_health.py +0 -0
  68. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/cli/vault_info_view.py +0 -0
  69. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/cli/vault_markets_view.py +0 -0
  70. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/cli/vault_rendering.py +0 -0
  71. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/config/__init__.py +0 -0
  72. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/config/roles.py +0 -0
  73. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/core/__init__.py +0 -0
  74. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/core/access.py +0 -0
  75. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/core/address.py +0 -0
  76. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/core/context.py +0 -0
  77. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/core/context_manager.py +0 -0
  78. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/core/contract.py +0 -0
  79. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/core/erc20.py +0 -0
  80. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/core/external_state_executor.py +0 -0
  81. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/core/fee_manager.py +0 -0
  82. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/core/fuse.py +0 -0
  83. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/core/fuse_action.py +0 -0
  84. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/core/fuse_decoding.py +0 -0
  85. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/core/fusion_factory.py +0 -0
  86. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/core/logs.py +0 -0
  87. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/core/multicall.py +0 -0
  88. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/core/oracle.py +0 -0
  89. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/core/plasma_vault.py +0 -0
  90. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/core/rewards_manager.py +0 -0
  91. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/core/simulation.py +0 -0
  92. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/core/simulation_result.py +0 -0
  93. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/core/withdraw_manager.py +0 -0
  94. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/crosschain/__init__.py +0 -0
  95. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/crosschain/ccip/__init__.py +0 -0
  96. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/crosschain/ccip/chainlink.py +0 -0
  97. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/crosschain/ccip/codec.py +0 -0
  98. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/crosschain/ccip/contracts.py +0 -0
  99. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/crosschain/ccip/events.py +0 -0
  100. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/crosschain/ccip/indexer.py +0 -0
  101. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/crosschain/ccip/lane.py +0 -0
  102. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/crosschain/ccip/quote.py +0 -0
  103. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/crosschain/ccip/transport.py +0 -0
  104. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/crosschain/contracts.py +0 -0
  105. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/crosschain/discovery.py +0 -0
  106. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/crosschain/errors.py +0 -0
  107. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/crosschain/fuses/__init__.py +0 -0
  108. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/crosschain/fuses/base.py +0 -0
  109. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/crosschain/fuses/ccip.py +0 -0
  110. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/crosschain/fuses/stargate.py +0 -0
  111. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/crosschain/lane.py +0 -0
  112. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/crosschain/logs.py +0 -0
  113. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/crosschain/messages.py +0 -0
  114. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/crosschain/simulation.py +0 -0
  115. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/crosschain/stargate/__init__.py +0 -0
  116. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/crosschain/stargate/contracts.py +0 -0
  117. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/crosschain/stargate/lane.py +0 -0
  118. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/crosschain/stargate/layerzero.py +0 -0
  119. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/crosschain/stargate/transport.py +0 -0
  120. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/crosschain/transport.py +0 -0
  121. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/dependency_graph.py +0 -0
  122. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/entry_cli.py +0 -0
  123. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/entry_mcp.py +0 -0
  124. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/errors.py +0 -0
  125. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/explorer.py +0 -0
  126. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/field_docs.py +0 -0
  127. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/fuses/__init__.py +0 -0
  128. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/fuses/aave_v3.py +0 -0
  129. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/fuses/async_action.py +0 -0
  130. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/fuses/base.py +0 -0
  131. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/fuses/compound_v3.py +0 -0
  132. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/fuses/erc4626.py +0 -0
  133. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/fuses/euler_v2.py +0 -0
  134. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/fuses/events.py +0 -0
  135. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/fuses/external_state.py +0 -0
  136. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/fuses/external_state_event_decoding.py +0 -0
  137. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/fuses/fluid_instadapp.py +0 -0
  138. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/fuses/gearbox_v3.py +0 -0
  139. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/fuses/hypercore_event_decoding.py +0 -0
  140. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/fuses/merkl.py +0 -0
  141. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/fuses/morpho.py +0 -0
  142. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/fuses/ramses_v2.py +0 -0
  143. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/fuses/uniswap_v3.py +0 -0
  144. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/fuses/universal.py +0 -0
  145. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/fusion_errors.py +0 -0
  146. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/guide/__init__.py +0 -0
  147. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/guide/architecture.md +0 -0
  148. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/guide/glossary.md +0 -0
  149. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/guide/invariants.md +0 -0
  150. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/guide/quickstart.md +0 -0
  151. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/hypercore/__init__.py +0 -0
  152. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/market_ids.py +0 -0
  153. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/market_info.py +0 -0
  154. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/mcp/__init__.py +0 -0
  155. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/mcp/guide.py +0 -0
  156. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/mcp/models.py +0 -0
  157. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/mcp/server.py +0 -0
  158. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/morpho_api.py +0 -0
  159. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/preflight.py +0 -0
  160. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/py.typed +0 -0
  161. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/readers/__init__.py +0 -0
  162. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/readers/aave_v3.py +0 -0
  163. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/readers/aave_v4.py +0 -0
  164. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/readers/compound_v3.py +0 -0
  165. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/readers/hypercore.py +0 -0
  166. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/readers/hypercore_outcome.py +0 -0
  167. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/readers/lending_health.py +0 -0
  168. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/readers/morpho.py +0 -0
  169. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/readers/oracle_mapping.py +0 -0
  170. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/readers/oracle_mapping_nodes.py +0 -0
  171. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/readers/oracle_mapping_reader.py +0 -0
  172. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/readers/position_manager.py +0 -0
  173. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/readers/ramses_v2.py +0 -0
  174. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/readers/uniswap_v3.py +0 -0
  175. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/readers/unpriceable.py +0 -0
  176. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/registry.py +0 -0
  177. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/substrates.py +0 -0
  178. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/types.py +0 -0
  179. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/validation.py +0 -0
  180. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/vault_data.py +0 -0
  181. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/vault_erc20.py +0 -0
  182. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/vault_info.py +0 -0
  183. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/vault_managers.py +0 -0
  184. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/vault_positions.py +0 -0
  185. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/vault_reads.py +0 -0
  186. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/UniswapV3UniversalRouter.py +0 -0
  187. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/_crosschain.py +0 -0
  188. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/_crosschain_lifecycle.py +0 -0
  189. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/_crosschain_recovery.py +0 -0
  190. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/_euler_v2.py +0 -0
  191. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/_event_args.py +0 -0
  192. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/_fake_rpc.py +0 -0
  193. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/_golden.py +0 -0
  194. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/_guide.py +0 -0
  195. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/_live.py +0 -0
  196. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/_multicall.py +0 -0
  197. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/_oracle_mapping_fake.py +0 -0
  198. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/_simulate.py +0 -0
  199. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/_validation.py +0 -0
  200. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/addresses.py +0 -0
  201. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/conftest.py +0 -0
  202. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/constants.py +0 -0
  203. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/fixtures/hypercore_hip3_flow.json +0 -0
  204. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/fixtures/hypercore_market55.json +0 -0
  205. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/fixtures/market_golden/meta_morpho_v1.json +0 -0
  206. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/fixtures/market_golden/meta_morpho_v1.mcp.json +0 -0
  207. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/fixtures/market_golden/meta_morpho_v2.json +0 -0
  208. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/fixtures/market_golden/meta_morpho_v2.mcp.json +0 -0
  209. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/fixtures/market_golden/morpho_api/market.json +0 -0
  210. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/fixtures/market_golden/morpho_api/vault_v1.json +0 -0
  211. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/fixtures/market_golden/morpho_api/vault_v2.json +0 -0
  212. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/fixtures/market_golden/morpho_api/vault_v2_not_found.json +0 -0
  213. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/fixtures/market_golden/morpho_blue.json +0 -0
  214. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/fixtures/market_golden/morpho_blue.mcp.json +0 -0
  215. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/fixtures/market_golden/morpho_blue_api_error.json +0 -0
  216. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/fixtures/market_golden/morpho_blue_api_error.mcp.json +0 -0
  217. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/fixtures/market_golden/morpho_blue_no_api.json +0 -0
  218. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/fixtures/market_golden/morpho_blue_no_api.mcp.json +0 -0
  219. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/fixtures/oracle_mapping_golden/mapping.json +0 -0
  220. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/fixtures/oracle_mapping_golden/mapping.mcp.json +0 -0
  221. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/fixtures/simulate_v1_request.json +0 -0
  222. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/fixtures/vault_info_golden/clean.json +0 -0
  223. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/fixtures/vault_info_golden/clean.mcp.json +0 -0
  224. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/fixtures/vault_info_golden/clean.txt +0 -0
  225. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/fixtures/vault_info_golden/deployment_error.json +0 -0
  226. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/fixtures/vault_info_golden/deployment_error.mcp.json +0 -0
  227. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/fixtures/vault_info_golden/deployment_error.txt +0 -0
  228. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/fixtures/vault_info_golden/fetched.cli.json +0 -0
  229. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/fixtures/vault_info_golden/fetched.json +0 -0
  230. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/fixtures/vault_info_golden/fetched.mcp.json +0 -0
  231. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/fixtures/vault_info_golden/full.json +0 -0
  232. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/fixtures/vault_info_golden/full.mcp.json +0 -0
  233. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/fixtures/vault_info_golden/full.txt +0 -0
  234. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/fixtures/vault_info_golden/rich.json +0 -0
  235. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/fixtures/vault_info_golden/rich.mcp.json +0 -0
  236. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/fixtures/vault_info_golden/rich.txt +0 -0
  237. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_about.py +0 -0
  238. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_access_manager.py +0 -0
  239. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_cache.py +0 -0
  240. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_chains.py +0 -0
  241. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_cli_address.py +0 -0
  242. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_cli_changelog.py +0 -0
  243. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_cli_commands.py +0 -0
  244. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_cli_config_store.py +0 -0
  245. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_cli_helpers.py +0 -0
  246. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_cli_hypercore.py +0 -0
  247. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_cli_lending_health.py +0 -0
  248. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_cli_market_golden.py +0 -0
  249. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_cli_market_morpho_blue.py +0 -0
  250. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_cli_mcp_parity.py +0 -0
  251. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_cli_oracle_mapping.py +0 -0
  252. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_cli_oracle_mapping_golden.py +0 -0
  253. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_cli_pending_requests_scan.py +0 -0
  254. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_cli_preflight.py +0 -0
  255. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_cli_role_accounts.py +0 -0
  256. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_cli_vault_info_golden.py +0 -0
  257. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_cli_vault_predates_getters.py +0 -0
  258. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_cli_vault_validate.py +0 -0
  259. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_contract_call.py +0 -0
  260. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_contract_encoder.py +0 -0
  261. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_crosschain_ccip_events.py +0 -0
  262. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_crosschain_ccip_indexer.py +0 -0
  263. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_crosschain_ccip_quote.py +0 -0
  264. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_crosschain_chainlink.py +0 -0
  265. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_crosschain_contracts.py +0 -0
  266. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_crosschain_encoding.py +0 -0
  267. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_crosschain_errors.py +0 -0
  268. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_crosschain_lane.py +0 -0
  269. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_crosschain_layering.py +0 -0
  270. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_crosschain_transport.py +0 -0
  271. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_docs_typing.py +0 -0
  272. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_erc20.py +0 -0
  273. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_error_hierarchy.py +0 -0
  274. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_examples_euler_looping_arbitrum.py +0 -0
  275. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_examples_vaults.py +0 -0
  276. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_explorer.py +0 -0
  277. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_external_state_events.py +0 -0
  278. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_external_state_executor.py +0 -0
  279. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_fee_manager.py +0 -0
  280. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_fuse_decoding.py +0 -0
  281. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_fuse_encoding.py +0 -0
  282. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_fusion_errors.py +0 -0
  283. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_fusion_instance.py +0 -0
  284. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_governance_wrappers.py +0 -0
  285. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_guide.py +0 -0
  286. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_hypercore_deployment.py +0 -0
  287. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_hypercore_events.py +0 -0
  288. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_hypercore_flow.py +0 -0
  289. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_hypercore_live.py +0 -0
  290. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_hypercore_outcome.py +0 -0
  291. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_hypercore_readers.py +0 -0
  292. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_logs.py +0 -0
  293. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_mcp_address.py +0 -0
  294. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_mcp_hypercore.py +0 -0
  295. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_mcp_models.py +0 -0
  296. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_mcp_preflight.py +0 -0
  297. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_mcp_server.py +0 -0
  298. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_mcp_vault_validate.py +0 -0
  299. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_multicall.py +0 -0
  300. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_oracle.py +0 -0
  301. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_oracle_mapping.py +0 -0
  302. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_plasma_vault.py +0 -0
  303. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_preflight.py +0 -0
  304. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_public_api.py +0 -0
  305. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_public_type_reachability.py +0 -0
  306. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_reader_encoding.py +0 -0
  307. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_registry.py +0 -0
  308. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_revert_decoding.py +0 -0
  309. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_rewards_manager.py +0 -0
  310. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_roles.py +0 -0
  311. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_sdk_layering.py +0 -0
  312. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_simulate_borrow_aave_v3_mainnet.py +0 -0
  313. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_simulate_claim_merkl_wrapper_base.py +0 -0
  314. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_simulate_claim_morpho_rewards.py +0 -0
  315. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_simulate_crosschain_hyperevm.py +0 -0
  316. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_simulate_euler_v2_batch_base.py +0 -0
  317. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_simulate_euler_v2_credit_market_base.py +0 -0
  318. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_simulate_euler_v2_swap_deploy_base.py +0 -0
  319. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_simulate_euler_v2_swap_reconfigure_base.py +0 -0
  320. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_simulate_euler_v2_swap_registry_base.py +0 -0
  321. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_simulate_examples_arbitrum.py +0 -0
  322. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_simulate_examples_base.py +0 -0
  323. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_simulate_external_state_executor_base.py +0 -0
  324. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_simulate_fusion_factory_clone_base.py +0 -0
  325. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_simulate_looping_aave_v3_base.py +0 -0
  326. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_simulate_looping_morpho_blue_base.py +0 -0
  327. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_simulate_morpho_blue.py +0 -0
  328. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_simulate_pilot_v3.py +0 -0
  329. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_simulate_pilot_v4_uniswap.py +0 -0
  330. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_simulate_pilot_v5_ramses.py +0 -0
  331. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_simulate_pilot_v5_scheduled.py +0 -0
  332. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_simulate_plasma_vault_setters_base.py +0 -0
  333. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_simulate_preflight_base.py +0 -0
  334. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_simulate_readers_integration.py +0 -0
  335. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_simulate_release_funds.py +0 -0
  336. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_simulate_swap_on_base.py +0 -0
  337. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_simulate_timelock_base.py +0 -0
  338. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_simulate_vault_from_scratch_base.py +0 -0
  339. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_simulation_errors.py +0 -0
  340. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_simulation_observation.py +0 -0
  341. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_solidity_mirrors.py +0 -0
  342. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_substrates.py +0 -0
  343. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_types_and_events.py +0 -0
  344. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_unpriceable_tokens.py +0 -0
  345. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_validation.py +0 -0
  346. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_vault_data_block.py +0 -0
  347. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_vault_dep_graph.py +0 -0
  348. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_vault_info_fetched_golden.py +0 -0
  349. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_vault_info_onchain_base.py +0 -0
  350. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_vault_info_onchain_base_no_withdraw_manager.py +0 -0
  351. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_vault_reconciliation_onchain_base.py +0 -0
  352. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_vault_simulator_blocks.py +0 -0
  353. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_web3_context.py +0 -0
  354. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_withdraw_manager.py +0 -0
  355. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/typed_client/consumer.py +0 -0
  356. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/typed_client/rejected.py +0 -0
  357. {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/uv.lock +0 -0
@@ -79,11 +79,15 @@ supports only that release, so there is no live-pair generation. It needs
79
79
  `IPOR_FUSION_CONTRACTS_DIR` at that revision; a checkout without `node_modules` also
80
80
  needs `IPOR_FUSION_FOUNDRY_REMAPPINGS` for OpenZeppelin. `test_crosschain_ccip_events.py`
81
81
  mirrors the CCIP event registry from a checkout at its own `CONTRACTS_REVISION`.
82
+ `test_simulate_examples_crosschain.py` runs the crosschain example against the deployed
83
+ (unconfigured) release factory and fuses: it builds the executor and dispatcher creation
84
+ codes from the same checkout, linked against the example's `RELEASE_LIBRARIES`, proves the
85
+ deployed runtimes are that build, and needs `ARBITRUM_PROVIDER_URL`,
86
+ `HYPEREVM_PROVIDER_URL` and `IPOR_FUSION_CONTRACTS_DIR` (a missing one is an `_live` skip).
82
87
  `test_solidity_compiler.py` unit-tests that compiler helper (`tests/_foundry.py`)
83
88
  offline, with `forge` and `git` mocked. The checkout-based tests above skip when their
84
89
  external prerequisites are unavailable. `test_hypercore_live.py`,
85
- `test_hypercore_deployment.py` and `test_hypercore_simulation.py` need
86
- `HYPEREVM_PROVIDER_URL` as well.
90
+ and `test_hypercore_deployment.py` need `HYPEREVM_PROVIDER_URL` as well.
87
91
  HyperCore (market 55) cannot be simulated directly: the HyperEVM RPC ignores code
88
92
  overrides at the precompile addresses `0x800`–`0x813`, and the public Hyperliquid RPC
89
93
  has no `eth_simulateV1`. `tests/_hypercore_shadow.py` therefore compiles the HyperCore
@@ -93,8 +97,12 @@ CoreWriter constants redirected to ordinary addresses, proves the rest is identi
93
97
  the deployed runtimes, and `tests/_hypercore_model.py` answers those addresses through
94
98
  `VaultSimulator.with_state_override_provider`. Core never applies anything there: the
95
99
  tests prove EVM validation under supplied Core state. `test_hypercore_simulation.py`
96
- runs one vault cycle; it skips without the source directory and needs
97
- `HYPEREVM_PROVIDER_URL`.
100
+ pins the shadow guard offline. `test_simulate_examples_hyperevm.py` runs the HyperCore
101
+ example on the official deployment (`fixtures/hypercore_official.json`) at its pinned
102
+ block: the wiring needs only `HYPEREVM_PROVIDER_URL`; the Core leg also needs the source
103
+ directory at the fixture's `build.source_revision` and compiles with its
104
+ `build.optimizer_runs` (the deployed set reproduces only with that setting, not the
105
+ checkout's default profile), the pending reader included.
98
106
 
99
107
  ## Conventions
100
108
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: ipor-fusion
3
- Version: 4.0.0.dev315
3
+ Version: 4.0.0.dev325
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
@@ -392,6 +392,15 @@ ever signed or broadcast.
392
392
  - [External-state margin leg](https://github.com/IPOR-Labs/ipor-fusion.py/blob/main/examples/external_state_margin_leg_base.py) — a vault whose capital
393
393
  sits off-chain: typed market-50 substrates, a dual-custodian propose/confirm marking the NAV,
394
394
  the scheduled-withdrawal prep an alpha performs, and a mismatched confirmation being rejected.
395
+ - [Crosschain CCIP vault, Arbitrum hub and HyperEVM spoke](https://github.com/IPOR-Labs/ipor-fusion.py/blob/main/examples/crosschain_ccip_usdc_arbitrum_hyperevm.py) —
396
+ the released crosschain contracts as deployed: configure the CCIP factory pair as its owner,
397
+ create both vaults and the executor, wire the crosschain market and NAV pre-hook, deploy the
398
+ dispatcher, then supply → attest → DEPOSIT → REDEEM → recall → claim USDC (preview feature).
399
+ - [HyperCore vault on the official deployment](https://github.com/IPOR-Labs/ipor-fusion.py/blob/main/examples/hypercore_vault_official_deployment_hyperevm.py) —
400
+ a HyperEVM vault that trades on Hyperliquid Core (market 55, preview): wiring the published
401
+ HyperCore fuses, pre-hooks and grants on a factory clone, and building the Core leg (bridge,
402
+ dex transfers, an order and its reduce-only close, Core → EVM) as unsigned `execute` calldata.
403
+ Core execution is never simulated; see the example for what is.
395
404
  ```bash
396
405
  export BASE_PROVIDER_URL="https://base-mainnet.g.alchemy.com/v2/YOUR_KEY"
397
406
  uv run python examples/simple_aave_v3_supply_base.py
@@ -399,10 +408,28 @@ uv run python examples/advanced_euler_v2_credit_market_base.py
399
408
  uv run python examples/external_state_margin_leg_base.py
400
409
  ```
401
410
 
411
+ The crosschain example needs Arbitrum and HyperEVM archive RPCs and the executor and dispatcher
412
+ creation codes built with Foundry from the contracts release it pins; run without them, it prints
413
+ the `forge inspect` commands that build them:
414
+
415
+ ```bash
416
+ export ARBITRUM_PROVIDER_URL="https://arb-mainnet.g.alchemy.com/v2/YOUR_KEY"
417
+ export HYPEREVM_PROVIDER_URL="https://YOUR_HYPEREVM_ARCHIVE_NODE"
418
+ export CCIP_EXECUTOR_CREATION_CODE_FILE=executor.hex CCIP_DISPATCHER_CREATION_CODE_FILE=dispatcher.hex
419
+ uv run python examples/crosschain_ccip_usdc_arbitrum_hyperevm.py
420
+ ```
421
+
402
422
  No RPC key? `BASE_PROVIDER_URL=https://mainnet.base.org` (Base's public RPC) runs the examples out of
403
423
  the box — it supports `eth_simulateV1` and serves their pinned blocks. It is rate-limited, so use a
404
424
  dedicated archive node for repeated or CI runs.
405
425
 
426
+ The HyperCore example runs on HyperEVM:
427
+
428
+ ```bash
429
+ export HYPEREVM_PROVIDER_URL="https://YOUR_HYPEREVM_ARCHIVE_NODE"
430
+ uv run python examples/hypercore_vault_official_deployment_hyperevm.py
431
+ ```
432
+
406
433
  ## Public API and stability
407
434
 
408
435
  The supported API is `ipor_fusion.__all__`: import from `ipor_fusion`. Removing or
@@ -343,6 +343,15 @@ ever signed or broadcast.
343
343
  - [External-state margin leg](https://github.com/IPOR-Labs/ipor-fusion.py/blob/main/examples/external_state_margin_leg_base.py) — a vault whose capital
344
344
  sits off-chain: typed market-50 substrates, a dual-custodian propose/confirm marking the NAV,
345
345
  the scheduled-withdrawal prep an alpha performs, and a mismatched confirmation being rejected.
346
+ - [Crosschain CCIP vault, Arbitrum hub and HyperEVM spoke](https://github.com/IPOR-Labs/ipor-fusion.py/blob/main/examples/crosschain_ccip_usdc_arbitrum_hyperevm.py) —
347
+ the released crosschain contracts as deployed: configure the CCIP factory pair as its owner,
348
+ create both vaults and the executor, wire the crosschain market and NAV pre-hook, deploy the
349
+ dispatcher, then supply → attest → DEPOSIT → REDEEM → recall → claim USDC (preview feature).
350
+ - [HyperCore vault on the official deployment](https://github.com/IPOR-Labs/ipor-fusion.py/blob/main/examples/hypercore_vault_official_deployment_hyperevm.py) —
351
+ a HyperEVM vault that trades on Hyperliquid Core (market 55, preview): wiring the published
352
+ HyperCore fuses, pre-hooks and grants on a factory clone, and building the Core leg (bridge,
353
+ dex transfers, an order and its reduce-only close, Core → EVM) as unsigned `execute` calldata.
354
+ Core execution is never simulated; see the example for what is.
346
355
  ```bash
347
356
  export BASE_PROVIDER_URL="https://base-mainnet.g.alchemy.com/v2/YOUR_KEY"
348
357
  uv run python examples/simple_aave_v3_supply_base.py
@@ -350,10 +359,28 @@ uv run python examples/advanced_euler_v2_credit_market_base.py
350
359
  uv run python examples/external_state_margin_leg_base.py
351
360
  ```
352
361
 
362
+ The crosschain example needs Arbitrum and HyperEVM archive RPCs and the executor and dispatcher
363
+ creation codes built with Foundry from the contracts release it pins; run without them, it prints
364
+ the `forge inspect` commands that build them:
365
+
366
+ ```bash
367
+ export ARBITRUM_PROVIDER_URL="https://arb-mainnet.g.alchemy.com/v2/YOUR_KEY"
368
+ export HYPEREVM_PROVIDER_URL="https://YOUR_HYPEREVM_ARCHIVE_NODE"
369
+ export CCIP_EXECUTOR_CREATION_CODE_FILE=executor.hex CCIP_DISPATCHER_CREATION_CODE_FILE=dispatcher.hex
370
+ uv run python examples/crosschain_ccip_usdc_arbitrum_hyperevm.py
371
+ ```
372
+
353
373
  No RPC key? `BASE_PROVIDER_URL=https://mainnet.base.org` (Base's public RPC) runs the examples out of
354
374
  the box — it supports `eth_simulateV1` and serves their pinned blocks. It is rate-limited, so use a
355
375
  dedicated archive node for repeated or CI runs.
356
376
 
377
+ The HyperCore example runs on HyperEVM:
378
+
379
+ ```bash
380
+ export HYPEREVM_PROVIDER_URL="https://YOUR_HYPEREVM_ARCHIVE_NODE"
381
+ uv run python examples/hypercore_vault_official_deployment_hyperevm.py
382
+ ```
383
+
357
384
  ## Public API and stability
358
385
 
359
386
  The supported API is `ipor_fusion.__all__`: import from `ipor_fusion`. Removing or
@@ -38,6 +38,32 @@ transaction.
38
38
  brings the margin home and releases it for a user's scheduled withdrawal, then
39
39
  demonstrates the executor rejecting a confirmation that does not match its
40
40
  proposal.
41
+ - [`crosschain_ccip_usdc_arbitrum_hyperevm.py`](crosschain_ccip_usdc_arbitrum_hyperevm.py) --
42
+ a crosschain vault on the released CCIP contracts as they are deployed: an
43
+ Arbitrum hub vault, a HyperEVM spoke vault and USDC over Chainlink CCIP. It
44
+ configures the deployed (unconfigured) factory pair as its owner would --
45
+ creation codes, asset, route, dispatcher deployment gas limit through the
46
+ factory's 24 h timelock, the creator allowlist -- creates both vaults and the
47
+ executor, wires the crosschain market (the four fuses, the executor and
48
+ spoke-vault substrates, the NAV pre-hook), deploys the dispatcher through the
49
+ factory's deployment ticket, then drives supply, two-key attestation, DEPOSIT,
50
+ REDEEM, recall and claim. The crosschain SDK is a preview feature. It has
51
+ extra prerequisites, listed below.
52
+ - [`hypercore_vault_official_deployment_hyperevm.py`](hypercore_vault_official_deployment_hyperevm.py) --
53
+ a vault that is itself a Hyperliquid Core account (HyperCore, market 55; a
54
+ preview feature). No live vault uses the official HyperCore contracts yet, so
55
+ it clones a USDC vault from the official HyperEVM factory, wires the published
56
+ HyperCore fuses, balance fuse and pre-hooks with narrow market-55 grants, reads
57
+ the post-deployment checklist back, checks its constants against live Core
58
+ metadata at head, and builds the Core leg (EVM -> Core bridge, spot -> xyz dex,
59
+ an IOC order and its reduce-only close, dex -> spot, Core -> EVM) as unsigned
60
+ `execute` calldata. Core execution is never simulated, and the HyperCore read
61
+ precompiles do not run in `eth_simulateV1`: the default run stops before the
62
+ Core leg. Its RPC-gated test runs the Core leg too, with the fuses recompiled
63
+ from source against stand-in precompile answers (EVM acceptance only); it needs
64
+ `HYPEREVM_PROVIDER_URL`, `IPOR_FUSION_HYPERCORE_SOURCE_DIR` (an ipor-fusion
65
+ checkout at the release the deployment was built from) and `forge`, and skips
66
+ without them, which is how pull-request CI runs it.
41
67
 
42
68
  ## Prerequisites
43
69
 
@@ -54,6 +80,21 @@ transaction.
54
80
  your Arbitrum archive RPC endpoint. Never commit it or share it.
55
81
  - `HYPEREVM_PROVIDER_URL` (required by the crosschain example) -- your HyperEVM
56
82
  archive RPC endpoint. Never commit it or share it.
83
+ - `CCIP_EXECUTOR_CREATION_CODE_FILE` and `CCIP_DISPATCHER_CREATION_CODE_FILE`
84
+ (required by the crosschain example) -- files holding the hex creation code of
85
+ `CcipCrosschainExecutor` and `CcipCrosschainDispatcher`, built with Foundry
86
+ (`forge`) in a checkout of
87
+ [ipor-fusion](https://github.com/IPOR-Labs/ipor-fusion) at the release commit
88
+ the example pins (`RELEASE_COMMIT`), after `npm ci`. Run the example without
89
+ them and it prints the two `forge inspect` commands, which link the deployed
90
+ release libraries; it refuses codes whose hashes differ from the release's.
91
+
92
+ The crosschain example's own test (`tests/test_simulate_examples_crosschain.py`)
93
+ builds those codes itself, so it needs `ARBITRUM_PROVIDER_URL`,
94
+ `HYPEREVM_PROVIDER_URL`, `forge` and `IPOR_FUSION_CONTRACTS_DIR` -- that checkout
95
+ -- (plus `IPOR_FUSION_FOUNDRY_REMAPPINGS` when it has no `node_modules`). Pull
96
+ request CI supplies neither the HyperEVM RPC nor the checkout, so it skips there;
97
+ run it locally.
57
98
 
58
99
  ## Running
59
100