ipor-fusion 4.0.0.dev103__tar.gz → 4.0.0.dev106__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 (298) hide show
  1. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/AGENTS.md +17 -12
  2. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/MIGRATION_4.md +21 -0
  3. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/PKG-INFO +3 -3
  4. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/README.md +2 -2
  5. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/pyproject.toml +1 -1
  6. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/__init__.py +37 -37
  7. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/crosschain/__init__.py +89 -10
  8. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/crosschain/ccip/__init__.py +4 -3
  9. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/crosschain/ccip/lane.py +4 -4
  10. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/crosschain/contracts.py +1 -1
  11. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/crosschain/discovery.py +4 -4
  12. {ipor_fusion-4.0.0.dev103/src/ipor_fusion/fuses/crosschain → ipor_fusion-4.0.0.dev106/src/ipor_fusion/crosschain/fuses}/__init__.py +5 -4
  13. {ipor_fusion-4.0.0.dev103/src/ipor_fusion/fuses/crosschain → ipor_fusion-4.0.0.dev106/src/ipor_fusion/crosschain/fuses}/ccip.py +2 -2
  14. {ipor_fusion-4.0.0.dev103/src/ipor_fusion/fuses/crosschain → ipor_fusion-4.0.0.dev106/src/ipor_fusion/crosschain/fuses}/stargate.py +5 -5
  15. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/crosschain/lane.py +3 -3
  16. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/crosschain/stargate/__init__.py +5 -4
  17. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/crosschain/stargate/lane.py +6 -6
  18. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/fuses/__init__.py +0 -34
  19. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/market_ids.py +1 -1
  20. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/_crosschain.py +1 -1
  21. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_crosschain_encoding.py +5 -5
  22. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_crosschain_lane.py +1 -1
  23. ipor_fusion-4.0.0.dev106/tests/test_crosschain_layering.py +212 -0
  24. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_public_api.py +58 -36
  25. ipor_fusion-4.0.0.dev103/tests/test_crosschain_layering.py +0 -117
  26. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/.claude-plugin/marketplace.json +0 -0
  27. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/.claude-plugin/plugin.json +0 -0
  28. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/.env.example +0 -0
  29. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/.gemini/settings.json +0 -0
  30. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/.git-blame-ignore-revs +0 -0
  31. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/.github/workflows/cd.yml +0 -0
  32. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/.github/workflows/ci.yml +0 -0
  33. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/.github/workflows/commit-lint.yml +0 -0
  34. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/.github/workflows/notify-slack.yml +0 -0
  35. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/.github/workflows/python-build.yml +0 -0
  36. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/.github/workflows/python-publish.yml +0 -0
  37. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/.github/workflows/release.yml +0 -0
  38. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/.github/workflows/report-slack.yml +0 -0
  39. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/.gitignore +0 -0
  40. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/.mcp.json +0 -0
  41. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/.pre-commit-config.yaml +0 -0
  42. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/.python-version +0 -0
  43. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/CHANGELOG.md +0 -0
  44. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/CLAUDE.md +0 -0
  45. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/CODEOWNERS +0 -0
  46. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/LICENSE +0 -0
  47. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/build.sh +0 -0
  48. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/examples/CONTRIBUTING.md +0 -0
  49. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/examples/README.md +0 -0
  50. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/examples/advanced_euler_v2_credit_market_base.py +0 -0
  51. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/examples/advanced_euler_v2_looping_arbitrum.py +0 -0
  52. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/examples/composed_hypercore_flow_arbitrum_hyperevm.py +0 -0
  53. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/examples/crosschain_ccip_usdc_arbitrum_hyperevm.py +0 -0
  54. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/examples/external_state_margin_leg_base.py +0 -0
  55. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/examples/simple_aave_v3_supply_base.py +0 -0
  56. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/pytest.ini +0 -0
  57. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/scripts/commit-check.sh +0 -0
  58. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/scripts/crosschain_readiness.py +0 -0
  59. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/skills/ipor-deploy-vault/SKILL.md +0 -0
  60. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/about.py +0 -0
  61. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/cache.py +0 -0
  62. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/chains.py +0 -0
  63. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/cli/__init__.py +0 -0
  64. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/cli/changelog_cmd.py +0 -0
  65. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/cli/config_cmd.py +0 -0
  66. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/cli/config_store.py +0 -0
  67. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/cli/main.py +0 -0
  68. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/cli/market_cmd.py +0 -0
  69. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/cli/options.py +0 -0
  70. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/cli/oracle_mapping_view.py +0 -0
  71. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/cli/vault_cmd.py +0 -0
  72. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/cli/vault_health.py +0 -0
  73. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/cli/vault_info_view.py +0 -0
  74. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/cli/vault_markets_view.py +0 -0
  75. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/cli/vault_rendering.py +0 -0
  76. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/config/__init__.py +0 -0
  77. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/config/roles.py +0 -0
  78. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/core/__init__.py +0 -0
  79. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/core/access.py +0 -0
  80. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/core/address.py +0 -0
  81. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/core/context.py +0 -0
  82. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/core/contract.py +0 -0
  83. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/core/erc20.py +0 -0
  84. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/core/external_state_executor.py +0 -0
  85. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/core/fee_manager.py +0 -0
  86. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/core/fuse.py +0 -0
  87. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/core/fuse_action.py +0 -0
  88. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/core/fusion_factory.py +0 -0
  89. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/core/logs.py +0 -0
  90. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/core/multicall.py +0 -0
  91. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/core/oracle.py +0 -0
  92. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/core/plasma_vault.py +0 -0
  93. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/core/rewards_manager.py +0 -0
  94. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/core/simulation.py +0 -0
  95. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/core/withdraw_manager.py +0 -0
  96. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/crosschain/ccip/chainlink.py +0 -0
  97. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/crosschain/ccip/codec.py +0 -0
  98. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/crosschain/ccip/contracts.py +0 -0
  99. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/crosschain/ccip/events.py +0 -0
  100. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/crosschain/ccip/indexer.py +0 -0
  101. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/crosschain/ccip/quote.py +0 -0
  102. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/crosschain/ccip/transport.py +0 -0
  103. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/crosschain/errors.py +0 -0
  104. {ipor_fusion-4.0.0.dev103/src/ipor_fusion/fuses/crosschain → ipor_fusion-4.0.0.dev106/src/ipor_fusion/crosschain/fuses}/base.py +0 -0
  105. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/crosschain/logs.py +0 -0
  106. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/crosschain/messages.py +0 -0
  107. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/crosschain/simulation.py +0 -0
  108. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/crosschain/stargate/contracts.py +0 -0
  109. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/crosschain/stargate/layerzero.py +0 -0
  110. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/crosschain/stargate/transport.py +0 -0
  111. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/crosschain/transport.py +0 -0
  112. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/dependency_graph.py +0 -0
  113. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/entry_cli.py +0 -0
  114. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/entry_mcp.py +0 -0
  115. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/errors.py +0 -0
  116. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/explorer.py +0 -0
  117. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/field_docs.py +0 -0
  118. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/fuses/aave_v3.py +0 -0
  119. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/fuses/async_action.py +0 -0
  120. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/fuses/base.py +0 -0
  121. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/fuses/compound_v3.py +0 -0
  122. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/fuses/erc4626.py +0 -0
  123. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/fuses/euler_v2.py +0 -0
  124. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/fuses/events.py +0 -0
  125. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/fuses/external_state.py +0 -0
  126. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/fuses/external_state_events.py +0 -0
  127. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/fuses/fluid_instadapp.py +0 -0
  128. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/fuses/gearbox_v3.py +0 -0
  129. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/fuses/hypercore.py +0 -0
  130. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/fuses/hypercore_events.py +0 -0
  131. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/fuses/merkl.py +0 -0
  132. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/fuses/morpho.py +0 -0
  133. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/fuses/ramses_v2.py +0 -0
  134. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/fuses/uniswap_v3.py +0 -0
  135. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/fuses/universal.py +0 -0
  136. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/guide/__init__.py +0 -0
  137. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/guide/architecture.md +0 -0
  138. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/guide/glossary.md +0 -0
  139. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/guide/invariants.md +0 -0
  140. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/guide/quickstart.md +0 -0
  141. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/market_info.py +0 -0
  142. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/mcp/__init__.py +0 -0
  143. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/mcp/guide.py +0 -0
  144. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/mcp/models.py +0 -0
  145. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/mcp/server.py +0 -0
  146. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/morpho_api.py +0 -0
  147. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/py.typed +0 -0
  148. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/readers/__init__.py +0 -0
  149. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/readers/aave_v3.py +0 -0
  150. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/readers/aave_v4.py +0 -0
  151. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/readers/compound_v3.py +0 -0
  152. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/readers/hypercore.py +0 -0
  153. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/readers/hypercore_outcome.py +0 -0
  154. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/readers/lending_health.py +0 -0
  155. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/readers/morpho.py +0 -0
  156. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/readers/oracle_mapping.py +0 -0
  157. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/readers/oracle_mapping_nodes.py +0 -0
  158. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/readers/oracle_mapping_reader.py +0 -0
  159. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/readers/position_manager.py +0 -0
  160. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/readers/ramses_v2.py +0 -0
  161. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/readers/uniswap_v3.py +0 -0
  162. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/readers/unpriceable.py +0 -0
  163. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/substrates.py +0 -0
  164. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/types.py +0 -0
  165. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/validation.py +0 -0
  166. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/vault_data.py +0 -0
  167. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/vault_erc20.py +0 -0
  168. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/vault_info.py +0 -0
  169. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/vault_managers.py +0 -0
  170. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/vault_positions.py +0 -0
  171. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/src/ipor_fusion/vault_reads.py +0 -0
  172. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/UniswapV3UniversalRouter.py +0 -0
  173. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/_crosschain_lifecycle.py +0 -0
  174. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/_crosschain_recovery.py +0 -0
  175. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/_euler_v2.py +0 -0
  176. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/_foundry.py +0 -0
  177. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/_guide.py +0 -0
  178. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/_hypercore_model.py +0 -0
  179. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/_hypercore_shadow.py +0 -0
  180. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/_multicall.py +0 -0
  181. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/_simulate.py +0 -0
  182. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/_validation.py +0 -0
  183. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/addresses.py +0 -0
  184. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/conftest.py +0 -0
  185. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/constants.py +0 -0
  186. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/fixtures/hypercore_hip3_flow.json +0 -0
  187. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/fixtures/hypercore_market55.json +0 -0
  188. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/fixtures/vault_info_golden/clean.json +0 -0
  189. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/fixtures/vault_info_golden/clean.txt +0 -0
  190. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/fixtures/vault_info_golden/rich.json +0 -0
  191. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/fixtures/vault_info_golden/rich.txt +0 -0
  192. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_about.py +0 -0
  193. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_access_manager.py +0 -0
  194. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_cache.py +0 -0
  195. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_chains.py +0 -0
  196. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_cli_changelog.py +0 -0
  197. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_cli_commands.py +0 -0
  198. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_cli_config_store.py +0 -0
  199. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_cli_helpers.py +0 -0
  200. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_cli_hypercore.py +0 -0
  201. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_cli_lending_health.py +0 -0
  202. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_cli_market_morpho_blue.py +0 -0
  203. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_cli_oracle_mapping.py +0 -0
  204. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_cli_pending_requests_scan.py +0 -0
  205. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_cli_role_accounts.py +0 -0
  206. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_cli_vault_info_golden.py +0 -0
  207. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_cli_vault_predates_getters.py +0 -0
  208. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_cli_vault_validate.py +0 -0
  209. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_contract_call.py +0 -0
  210. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_contract_encoder.py +0 -0
  211. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_crosschain_ccip_events.py +0 -0
  212. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_crosschain_ccip_indexer.py +0 -0
  213. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_crosschain_ccip_quote.py +0 -0
  214. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_crosschain_chainlink.py +0 -0
  215. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_crosschain_contracts.py +0 -0
  216. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_crosschain_errors.py +0 -0
  217. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_crosschain_readiness.py +0 -0
  218. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_crosschain_readiness_report.py +0 -0
  219. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_crosschain_transport.py +0 -0
  220. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_erc20.py +0 -0
  221. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_error_hierarchy.py +0 -0
  222. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_examples_composed_hypercore.py +0 -0
  223. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_examples_crosschain.py +0 -0
  224. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_examples_euler_looping_arbitrum.py +0 -0
  225. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_examples_vaults.py +0 -0
  226. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_explorer.py +0 -0
  227. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_external_state_events.py +0 -0
  228. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_external_state_executor.py +0 -0
  229. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_fee_manager.py +0 -0
  230. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_fuse_encoding.py +0 -0
  231. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_fusion_instance.py +0 -0
  232. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_guide.py +0 -0
  233. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_hypercore_deployment.py +0 -0
  234. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_hypercore_events.py +0 -0
  235. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_hypercore_flow.py +0 -0
  236. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_hypercore_live.py +0 -0
  237. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_hypercore_outcome.py +0 -0
  238. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_hypercore_readers.py +0 -0
  239. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_hypercore_simulation.py +0 -0
  240. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_logs.py +0 -0
  241. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_mcp_hypercore.py +0 -0
  242. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_mcp_models.py +0 -0
  243. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_mcp_server.py +0 -0
  244. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_mcp_vault_validate.py +0 -0
  245. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_multicall.py +0 -0
  246. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_oracle.py +0 -0
  247. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_oracle_mapping.py +0 -0
  248. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_plasma_vault.py +0 -0
  249. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_reader_encoding.py +0 -0
  250. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_readiness_selection.py +0 -0
  251. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_revert_decoding.py +0 -0
  252. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_rewards_manager.py +0 -0
  253. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_roles.py +0 -0
  254. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_sdk_layering.py +0 -0
  255. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_simulate_borrow_aave_v3_mainnet.py +0 -0
  256. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_simulate_claim_merkl_wrapper_base.py +0 -0
  257. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_simulate_claim_morpho_rewards.py +0 -0
  258. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_simulate_crosschain_canary.py +0 -0
  259. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_simulate_crosschain_hypercore.py +0 -0
  260. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_simulate_crosschain_hyperevm.py +0 -0
  261. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_simulate_crosschain_lifecycle.py +0 -0
  262. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_simulate_euler_v2_batch_base.py +0 -0
  263. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_simulate_euler_v2_credit_market_base.py +0 -0
  264. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_simulate_euler_v2_swap_deploy_base.py +0 -0
  265. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_simulate_euler_v2_swap_reconfigure_base.py +0 -0
  266. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_simulate_euler_v2_swap_registry_base.py +0 -0
  267. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_simulate_examples_arbitrum.py +0 -0
  268. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_simulate_examples_base.py +0 -0
  269. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_simulate_examples_crosschain.py +0 -0
  270. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_simulate_external_state_executor_base.py +0 -0
  271. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_simulate_fusion_factory_clone_base.py +0 -0
  272. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_simulate_looping_aave_v3_base.py +0 -0
  273. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_simulate_looping_morpho_blue_base.py +0 -0
  274. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_simulate_morpho_blue.py +0 -0
  275. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_simulate_pilot_v3.py +0 -0
  276. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_simulate_pilot_v4_uniswap.py +0 -0
  277. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_simulate_pilot_v5_ramses.py +0 -0
  278. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_simulate_pilot_v5_scheduled.py +0 -0
  279. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_simulate_plasma_vault_setters_base.py +0 -0
  280. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_simulate_readers_integration.py +0 -0
  281. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_simulate_release_funds.py +0 -0
  282. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_simulate_swap_on_base.py +0 -0
  283. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_simulate_vault_from_scratch_base.py +0 -0
  284. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_solidity_compiler.py +0 -0
  285. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_solidity_mirrors.py +0 -0
  286. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_substrates.py +0 -0
  287. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_types_and_events.py +0 -0
  288. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_unpriceable_tokens.py +0 -0
  289. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_validation.py +0 -0
  290. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_vault_dep_graph.py +0 -0
  291. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_vault_info_onchain_base.py +0 -0
  292. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_vault_info_onchain_base_no_withdraw_manager.py +0 -0
  293. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_vault_simulator_blocks.py +0 -0
  294. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_web3_context.py +0 -0
  295. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/test_withdraw_manager.py +0 -0
  296. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/typed_client/consumer.py +0 -0
  297. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/tests/typed_client/rejected.py +0 -0
  298. {ipor_fusion-4.0.0.dev103 → ipor_fusion-4.0.0.dev106}/uv.lock +0 -0
@@ -155,8 +155,8 @@ the lifecycle matrix follows that.
155
155
  cases and non-obvious logic.
156
156
  - The public API is `ipor_fusion.__all__` (README, "Public API and stability").
157
157
  Every public symbol is imported and listed there; a symbol of a public
158
- subpackage (`core`, `config`, `fuses`, `fuses.crosschain`, `readers`,
159
- `crosschain`, `crosschain.ccip`, `crosschain.stargate`) also goes in that
158
+ subpackage (`core`, `config`, `fuses`, `readers`, `crosschain`,
159
+ `crosschain.fuses`, `crosschain.ccip`, `crosschain.stargate`) also goes in that
160
160
  subpackage's `__all__`. `ipor_fusion.guide` keeps its own namespace. The
161
161
  public modules (`about`, `chains`, `dependency_graph`, `errors`, `explorer`,
162
162
  `field_docs`, `market_ids`, `market_info`, `morpho_api`, `substrates`, `types`,
@@ -224,7 +224,7 @@ the lifecycle matrix follows that.
224
224
  (`FuseAction`), `fuse` (the `Fuse` base, `StakeFuse`, the shared validators and
225
225
  substrate packers), `address` (`_validate_not_zero_address`). `core` imports neither
226
226
  `fuses` nor `crosschain` (`tests/test_sdk_layering.py`)
227
- - `fuses/` — per-protocol fuse encoders (aave_v3, async_action, compound_v3, crosschain/,
227
+ - `fuses/` — per-protocol fuse encoders (aave_v3, async_action, compound_v3,
228
228
  erc4626, euler_v2, external_state, fluid_instadapp, gearbox_v3, merkl, morpho, ramses_v2,
229
229
  uniswap_v3, universal, `events.py`); `base.py` re-exports the `core/fuse.py` base and validators,
230
230
  `FuseAction` and `ZERO_ADDRESS` (from `types`). A fuse is a value: equality and
@@ -251,15 +251,20 @@ the lifecycle matrix follows that.
251
251
  (`CcipOffRamp.execute` is the permissionless delivery) and `ccip/indexer` fetches a
252
252
  message's verifier result from Chainlink's public indexers and builds that
253
253
  `manual_execution` call.
254
- `fuses/crosschain/` mirrors it (`base`, `stargate`, `ccip`). Names mirror
255
- the Solidity contracts and libraries. Adding a transport: a new subpackage plus one
256
- `LANES` entry. Layering: the fuse encoders import the wire codecs and wrappers; lanes,
257
- discovery, transports and the simulator import the encoders. A package `__init__`
258
- runs before its modules, so `ipor_fusion.crosschain`, `.stargate` and `.ccip`
259
- export only the fuse-free half; the rest is exported from `ipor_fusion` and
260
- imported by module path. `tests/test_crosschain_layering.py` pins this (no
261
- function-level or `TYPE_CHECKING` imports in either package); never work around
262
- a cycle with a lazy import, move the module instead.
254
+ The market fuse encoders live in `crosschain/fuses/` (`base`, `stargate`, `ccip`),
255
+ mirroring `contracts/fuses/crosschain/`; they build on `core/fuse.py`, so the
256
+ dependency direction is `core` <- `crosschain` and `fuses/` holds no crosschain code
257
+ (neither package imports the other). Names mirror the Solidity contracts and
258
+ libraries. Adding a transport: a new subpackage, its encoders in `crosschain/fuses/`
259
+ and one `LANES` entry. Layering: the encoders import the wire codecs and wrappers;
260
+ lanes, discovery, transports and the simulator import the encoders.
261
+ `ipor_fusion.crosschain` exports the whole surface (encoders, lanes, discovery,
262
+ transports, simulator). A package `__init__` runs before its modules and the
263
+ encoders import `ccip.contracts` / `stargate.layerzero`, so `.ccip` and `.stargate`
264
+ export only their codecs and wrappers. `tests/test_crosschain_layering.py` pins this:
265
+ the SDK's module-level import graph, with the implicit package-`__init__` edges, is
266
+ acyclic, and the crosschain package has no function-level or `TYPE_CHECKING`
267
+ imports; never work around a cycle with a lazy import, move the module instead.
263
268
  - `readers/` — read side: lending_health, oracle_mapping, position_manager, aave_v3,
264
269
  compound_v3, morpho, ramses_v2, uniswap_v3, unpriceable (middleware-priced tokens of
265
270
  granted substrates the oracle cannot price)
@@ -220,6 +220,27 @@ live in `ipor_fusion.core.fuse`; `ipor_fusion.fuses.base`, `ipor_fusion.fuses` a
220
220
  hash now cover every attribute a fuse stores, not only its class and address (see
221
221
  [Behavior changes](#behavior-changes)).
222
222
 
223
+ **Crosschain fuse encoders moved.** The crosschain market encoders moved from
224
+ `ipor_fusion.fuses.crosschain` into the crosschain package, and
225
+ `ipor_fusion.fuses` no longer re-exports them. There is no shim: the old paths
226
+ raise `ImportError`. The top-level names (`from ipor_fusion import ...`) are
227
+ unchanged.
228
+
229
+ | 3.x import | 4.0 import |
230
+ |---|---|
231
+ | `ipor_fusion.fuses.crosschain` | `ipor_fusion.crosschain.fuses` (or `ipor_fusion.crosschain`) |
232
+ | `ipor_fusion.fuses.crosschain.base` | `ipor_fusion.crosschain.fuses.base` |
233
+ | `ipor_fusion.fuses.crosschain.ccip` | `ipor_fusion.crosschain.fuses.ccip` |
234
+ | `ipor_fusion.fuses.crosschain.stargate` | `ipor_fusion.crosschain.fuses.stargate` |
235
+ | `from ipor_fusion.fuses import CcipCrosschainSupplyFuse` (and the other crosschain encoders, `SendParams`, `CrosschainSubstrate*`, `crosschain_market_id`) | `from ipor_fusion.crosschain import ...` or `from ipor_fusion import ...` |
236
+
237
+ `ipor_fusion.crosschain` now exports the whole crosschain surface: besides the
238
+ codecs and wrappers, the encoders, `CrosschainLane`, `CcipLane`, `StargateLane`,
239
+ the transports and chains, `discover_deployment`, `open_lane(s)`, `LANES` and
240
+ `CrosschainSimulator`, which 3.x exported only from `ipor_fusion`.
241
+ `ipor_fusion.crosschain.ccip` and `.stargate` keep exporting only their codecs
242
+ and wrappers.
243
+
223
244
  **Moved, still importable.** `FuseAction` lives in `ipor_fusion.core.fuse_action` and
224
245
  `ZERO_ADDRESS` in `ipor_fusion.types`; both are re-exported from
225
246
  `ipor_fusion.fuses.base` and `FuseAction` from `ipor_fusion`. The CLI's internal
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: ipor-fusion
3
- Version: 4.0.0.dev103
3
+ Version: 4.0.0.dev106
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
@@ -377,8 +377,8 @@ renaming a name in it, or changing a signature incompatibly, waits for a major
377
377
  release; adding one does not.
378
378
 
379
379
  - **Public subpackages** declare their own `__all__`, each a subset of the top
380
- level: `ipor_fusion.core`, `config`, `fuses`, `fuses.crosschain`, `readers`,
381
- `crosschain`, `crosschain.ccip` and `crosschain.stargate`. `ipor_fusion.guide`
380
+ level: `ipor_fusion.core`, `config`, `fuses`, `readers`, `crosschain`,
381
+ `crosschain.fuses`, `crosschain.ccip` and `crosschain.stargate`. `ipor_fusion.guide`
382
382
  (the packaged docs) keeps its names in its own namespace.
383
383
  - **Public modules** stay importable for the top-level names they define:
384
384
  `about`, `chains`, `dependency_graph`, `errors`, `explorer`, `field_docs`,
@@ -329,8 +329,8 @@ renaming a name in it, or changing a signature incompatibly, waits for a major
329
329
  release; adding one does not.
330
330
 
331
331
  - **Public subpackages** declare their own `__all__`, each a subset of the top
332
- level: `ipor_fusion.core`, `config`, `fuses`, `fuses.crosschain`, `readers`,
333
- `crosschain`, `crosschain.ccip` and `crosschain.stargate`. `ipor_fusion.guide`
332
+ level: `ipor_fusion.core`, `config`, `fuses`, `readers`, `crosschain`,
333
+ `crosschain.fuses`, `crosschain.ccip` and `crosschain.stargate`. `ipor_fusion.guide`
334
334
  (the packaged docs) keeps its names in its own namespace.
335
335
  - **Public modules** stay importable for the top-level names they define:
336
336
  `about`, `chains`, `dependency_graph`, `errors`, `explorer`, `field_docs`,
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "ipor-fusion"
3
- version = "4.0.0.dev103"
3
+ version = "4.0.0.dev106"
4
4
  description = "The IPOR Fusion SDK for Python"
5
5
  authors = [
6
6
  { name = "Adam Mydlarz", email = "amydlarz@gmail.com" },
@@ -79,17 +79,24 @@ from ipor_fusion.crosschain import (
79
79
  EMPTY_COMMAND,
80
80
  INDEXER_URLS,
81
81
  INSUFFICIENT_NATIVE_FEE_SELECTOR,
82
+ LANES,
82
83
  PACKET_SENT_TOPIC,
84
+ SYNTHETIC_TOKEN_SOURCE,
83
85
  ActiveCommand,
84
86
  Any2EVMMessage,
85
87
  BalanceObservation,
86
88
  BusinessAction,
89
+ CcipChain,
90
+ CcipCommandType,
87
91
  CcipCommitteeVerifier,
92
+ CcipCrosschainCommandFuse,
88
93
  CcipCrosschainDispatcher,
89
94
  CcipCrosschainExecutor,
90
95
  CcipCrosschainFactory,
96
+ CcipCrosschainSupplyFuse,
91
97
  CcipEvent,
92
98
  CcipEventSpec,
99
+ CcipLane,
93
100
  CcipMessageSent,
94
101
  CcipMsgType,
95
102
  CcipObservation,
@@ -97,32 +104,57 @@ from ipor_fusion.crosschain import (
97
104
  CcipOnRamp,
98
105
  CcipRouteConfig,
99
106
  CcipRouter,
107
+ CcipSendParams,
100
108
  CcipTokenAdminRegistry,
101
109
  CcipTokenLane,
102
110
  CcipTokenPool,
111
+ CcipTransport,
103
112
  CcipVerifierResolver,
104
113
  CcvRequirements,
105
114
  Command,
106
115
  CommandStatus,
116
+ CrosschainClaimFuse,
117
+ CrosschainCommandFuse,
118
+ CrosschainDeployment,
107
119
  CrosschainDispatcher,
108
120
  CrosschainExecutor,
121
+ CrosschainExecutorInfo,
109
122
  CrosschainFactory,
123
+ CrosschainLane,
124
+ CrosschainSimulator,
125
+ CrosschainSubstrate,
126
+ CrosschainSubstrateLib,
127
+ CrosschainSubstrateType,
128
+ CrosschainSupplyFuse,
129
+ CrosschainTransport,
110
130
  CrosschainTransportKind,
131
+ DeliveryCall,
111
132
  DeploymentStatus,
112
133
  EnforcedOptionParam,
113
134
  EVMTokenAmount,
114
135
  ExecutorInitParams,
136
+ LaneFuses,
137
+ LaneObservation,
115
138
  MessageExecutionState,
116
139
  MessageV1,
117
140
  MsgType,
118
141
  Observation,
119
142
  OptionsBuilder,
143
+ OutboundMessage,
120
144
  Packet,
121
145
  SafetyConfig,
146
+ SendParams,
147
+ StargateChain,
148
+ StargateCrosschainCommandFuse,
149
+ StargateCrosschainCommandType,
122
150
  StargateCrosschainDispatcher,
123
151
  StargateCrosschainExecutor,
124
152
  StargateCrosschainFactory,
153
+ StargateCrosschainSupplyFuse,
154
+ StargateLane,
155
+ StargateSendParams,
125
156
  StargateTokenMessaging,
157
+ StargateTransport,
126
158
  TaxiMessage,
127
159
  TokenTransferV1,
128
160
  VerifierResult,
@@ -130,10 +162,14 @@ from ipor_fusion.crosschain import (
130
162
  ccip_events,
131
163
  ccip_receive_calldata,
132
164
  ccip_token_lane,
165
+ crosschain_market_id,
133
166
  decode_ccip_envelope,
134
167
  decode_ccip_event,
135
168
  decode_command,
136
169
  decode_envelope,
170
+ detect_transport,
171
+ discover_deployment,
172
+ discover_lane_fuses,
137
173
  encode_enforced_options,
138
174
  encode_oft_compose_msg,
139
175
  fetch_verifier_result,
@@ -141,29 +177,9 @@ from ipor_fusion.crosschain import (
141
177
  lz_compose_calldata,
142
178
  lz_receive_calldata,
143
179
  manual_execution,
144
- quote_ccip_native_fee,
145
- )
146
- from ipor_fusion.crosschain.ccip.lane import CcipLane
147
- from ipor_fusion.crosschain.ccip.transport import CcipChain, CcipTransport
148
- from ipor_fusion.crosschain.discovery import (
149
- LANES,
150
- CrosschainDeployment,
151
- CrosschainExecutorInfo,
152
- detect_transport,
153
- discover_deployment,
154
- discover_lane_fuses,
155
180
  open_lane,
156
181
  open_lanes,
157
- )
158
- from ipor_fusion.crosschain.lane import CrosschainLane, LaneFuses, LaneObservation
159
- from ipor_fusion.crosschain.simulation import CrosschainSimulator
160
- from ipor_fusion.crosschain.stargate.lane import StargateLane
161
- from ipor_fusion.crosschain.stargate.transport import StargateChain, StargateTransport
162
- from ipor_fusion.crosschain.transport import (
163
- SYNTHETIC_TOKEN_SOURCE,
164
- CrosschainTransport,
165
- DeliveryCall,
166
- OutboundMessage,
182
+ quote_ccip_native_fee,
167
183
  )
168
184
  from ipor_fusion.dependency_graph import (
169
185
  compute_update_groups,
@@ -206,17 +222,7 @@ from ipor_fusion.fuses import (
206
222
  AaveV3SupplyFuse,
207
223
  AsyncActionFuse,
208
224
  AsyncActionSubstrates,
209
- CcipCommandType,
210
- CcipCrosschainCommandFuse,
211
- CcipCrosschainSupplyFuse,
212
- CcipSendParams,
213
225
  CompoundV3SupplyFuse,
214
- CrosschainClaimFuse,
215
- CrosschainCommandFuse,
216
- CrosschainSubstrate,
217
- CrosschainSubstrateLib,
218
- CrosschainSubstrateType,
219
- CrosschainSupplyFuse,
220
226
  ERC4626SupplyFuse,
221
227
  EulerSwapDynamicParams,
222
228
  EulerSwapInitialState,
@@ -261,13 +267,8 @@ from ipor_fusion.fuses import (
261
267
  RamsesV2CollectFuse,
262
268
  RamsesV2ModifyPositionFuse,
263
269
  RamsesV2NewPositionFuse,
264
- SendParams,
265
270
  SettlementMode,
266
271
  StakeFuse,
267
- StargateCrosschainCommandFuse,
268
- StargateCrosschainCommandType,
269
- StargateCrosschainSupplyFuse,
270
- StargateSendParams,
271
272
  TimeInForce,
272
273
  UniswapV3ClosePositionEvent,
273
274
  UniswapV3CollectFuse,
@@ -279,7 +280,6 @@ from ipor_fusion.fuses import (
279
280
  UniversalTokenSwapperAbi,
280
281
  UniversalTokenSwapperFuse,
281
282
  UniversalTokenSwapperSubstrates,
282
- crosschain_market_id,
283
283
  decode_hypercore_event,
284
284
  euler_substrate,
285
285
  find_hypercore_events,
@@ -1,14 +1,11 @@
1
1
  """Crosschain Plasma Vault support, split like the contracts: shared
2
- ``messages`` and ``contracts`` (wrapper bases), plus one subpackage per
3
- transport (``stargate``, ``ccip``) with its wire codecs and wrappers.
4
-
5
- This namespace exports only the fuse-free half of the package. The fuse
6
- encoders in :mod:`ipor_fusion.fuses.crosschain` import it, and Python runs a
7
- package's ``__init__`` before any of its modules, so anything here that
8
- imported the encoders back would re-enter a half-initialized module. The
9
- modules that need the encoders, ``lane``, ``discovery``, ``transport``,
10
- ``simulation`` and the per-transport ``lane``/``transport``, are exported from
11
- :mod:`ipor_fusion` and importable by module path.
2
+ ``messages`` and ``contracts`` (wrapper bases), the market fuse encoders in
3
+ ``fuses`` (mirroring ``contracts/fuses/crosschain``), the transport-agnostic
4
+ ``transport``, ``lane``, ``discovery`` and ``simulation``, and one subpackage
5
+ per transport (``stargate``, ``ccip``) with its wire codecs, wrappers,
6
+ transport and lane. This namespace exports all of it; the transport
7
+ subpackages export only their codecs and wrappers, because the encoders import
8
+ those and a package's ``__init__`` runs before any of its modules.
12
9
 
13
10
  Status: preview, not production. The contracts behind it are under active development, the mainnet deployments are a proof of concept and IPOR Labs canaries, and interfaces may change between minor versions; see ``ipor_fusion.about.PREVIEW_FEATURES``.
14
11
  """
@@ -59,16 +56,51 @@ from ipor_fusion.crosschain.ccip.indexer import (
59
56
  fetch_verifier_result,
60
57
  manual_execution,
61
58
  )
59
+ from ipor_fusion.crosschain.ccip.lane import CcipLane
62
60
  from ipor_fusion.crosschain.ccip.quote import (
63
61
  INSUFFICIENT_NATIVE_FEE_SELECTOR,
64
62
  quote_ccip_native_fee,
65
63
  )
64
+ from ipor_fusion.crosschain.ccip.transport import CcipChain, CcipTransport
66
65
  from ipor_fusion.crosschain.contracts import (
67
66
  CrosschainDispatcher,
68
67
  CrosschainExecutor,
69
68
  CrosschainFactory,
70
69
  )
70
+ from ipor_fusion.crosschain.discovery import (
71
+ LANES,
72
+ CrosschainDeployment,
73
+ CrosschainExecutorInfo,
74
+ detect_transport,
75
+ discover_deployment,
76
+ discover_lane_fuses,
77
+ open_lane,
78
+ open_lanes,
79
+ )
71
80
  from ipor_fusion.crosschain.errors import CROSSCHAIN_ERROR_SIGNATURES
81
+ from ipor_fusion.crosschain.fuses.base import (
82
+ CrosschainClaimFuse,
83
+ CrosschainCommandFuse,
84
+ CrosschainSubstrate,
85
+ CrosschainSubstrateLib,
86
+ CrosschainSubstrateType,
87
+ CrosschainSupplyFuse,
88
+ SendParams,
89
+ crosschain_market_id,
90
+ )
91
+ from ipor_fusion.crosschain.fuses.ccip import (
92
+ CcipCommandType,
93
+ CcipCrosschainCommandFuse,
94
+ CcipCrosschainSupplyFuse,
95
+ CcipSendParams,
96
+ )
97
+ from ipor_fusion.crosschain.fuses.stargate import (
98
+ StargateCrosschainCommandFuse,
99
+ StargateCrosschainCommandType,
100
+ StargateCrosschainSupplyFuse,
101
+ StargateSendParams,
102
+ )
103
+ from ipor_fusion.crosschain.lane import CrosschainLane, LaneFuses, LaneObservation
72
104
  from ipor_fusion.crosschain.messages import (
73
105
  CCIP_VERSION,
74
106
  CODEC_VERSION,
@@ -84,6 +116,7 @@ from ipor_fusion.crosschain.messages import (
84
116
  decode_command,
85
117
  decode_envelope,
86
118
  )
119
+ from ipor_fusion.crosschain.simulation import CrosschainSimulator
87
120
  from ipor_fusion.crosschain.stargate.contracts import (
88
121
  ActiveCommand,
89
122
  BalanceObservation,
@@ -94,6 +127,7 @@ from ipor_fusion.crosschain.stargate.contracts import (
94
127
  StargateCrosschainFactory,
95
128
  StargateTokenMessaging,
96
129
  )
130
+ from ipor_fusion.crosschain.stargate.lane import StargateLane
97
131
  from ipor_fusion.crosschain.stargate.layerzero import (
98
132
  PACKET_SENT_TOPIC,
99
133
  EnforcedOptionParam,
@@ -105,8 +139,53 @@ from ipor_fusion.crosschain.stargate.layerzero import (
105
139
  lz_compose_calldata,
106
140
  lz_receive_calldata,
107
141
  )
142
+ from ipor_fusion.crosschain.stargate.transport import StargateChain, StargateTransport
143
+ from ipor_fusion.crosschain.transport import (
144
+ SYNTHETIC_TOKEN_SOURCE,
145
+ CrosschainTransport,
146
+ DeliveryCall,
147
+ OutboundMessage,
148
+ )
108
149
 
109
150
  __all__ = [
151
+ "CrosschainClaimFuse",
152
+ "CrosschainCommandFuse",
153
+ "CrosschainSubstrate",
154
+ "CrosschainSubstrateLib",
155
+ "CrosschainSubstrateType",
156
+ "CrosschainSupplyFuse",
157
+ "SendParams",
158
+ "crosschain_market_id",
159
+ "CcipCommandType",
160
+ "CcipCrosschainCommandFuse",
161
+ "CcipCrosschainSupplyFuse",
162
+ "CcipSendParams",
163
+ "StargateCrosschainCommandFuse",
164
+ "StargateCrosschainCommandType",
165
+ "StargateCrosschainSupplyFuse",
166
+ "StargateSendParams",
167
+ "LANES",
168
+ "CrosschainDeployment",
169
+ "CrosschainExecutorInfo",
170
+ "detect_transport",
171
+ "discover_deployment",
172
+ "discover_lane_fuses",
173
+ "open_lane",
174
+ "open_lanes",
175
+ "CrosschainLane",
176
+ "LaneFuses",
177
+ "LaneObservation",
178
+ "CrosschainSimulator",
179
+ "SYNTHETIC_TOKEN_SOURCE",
180
+ "CrosschainTransport",
181
+ "DeliveryCall",
182
+ "OutboundMessage",
183
+ "CcipLane",
184
+ "CcipChain",
185
+ "CcipTransport",
186
+ "StargateLane",
187
+ "StargateChain",
188
+ "StargateTransport",
110
189
  "ActiveCommand",
111
190
  "Any2EVMMessage",
112
191
  "BalanceObservation",
@@ -1,6 +1,7 @@
1
- """Chainlink CCIP: wire codecs and contract wrappers. The transport and lane
2
- (``ccip.transport``, ``ccip.lane``) import the fuse encoders and are exported
3
- from :mod:`ipor_fusion` instead, see :mod:`ipor_fusion.crosschain`.
1
+ """Chainlink CCIP: wire codecs and contract wrappers. The CCIP fuse encoders
2
+ (:mod:`ipor_fusion.crosschain.fuses.ccip`) import them, so this namespace must
3
+ not import the encoders back: the transport and lane (``ccip.transport``,
4
+ ``ccip.lane``) are exported from :mod:`ipor_fusion.crosschain` instead.
4
5
 
5
6
  Status: preview, not production. The contracts behind it are under active development, the mainnet deployments are a proof of concept and IPOR Labs canaries, and interfaces may change between minor versions; see ``ipor_fusion.about.PREVIEW_FEATURES``.
6
7
  """
@@ -14,14 +14,14 @@ from ipor_fusion.crosschain.ccip.contracts import (
14
14
  CcipRouteConfig,
15
15
  )
16
16
  from ipor_fusion.crosschain.contracts import BalanceObservation
17
- from ipor_fusion.crosschain.lane import CrosschainLane, LaneFuses, LaneObservation
18
- from ipor_fusion.crosschain.messages import CommandStatus, CrosschainTransportKind
19
- from ipor_fusion.fuses.crosschain.base import SendParams
20
- from ipor_fusion.fuses.crosschain.ccip import (
17
+ from ipor_fusion.crosschain.fuses.base import SendParams
18
+ from ipor_fusion.crosschain.fuses.ccip import (
21
19
  CcipCrosschainCommandFuse,
22
20
  CcipCrosschainSupplyFuse,
23
21
  CcipSendParams,
24
22
  )
23
+ from ipor_fusion.crosschain.lane import CrosschainLane, LaneFuses, LaneObservation
24
+ from ipor_fusion.crosschain.messages import CommandStatus, CrosschainTransportKind
25
25
  from ipor_fusion.types import Amount, ProposalId
26
26
 
27
27
 
@@ -7,7 +7,7 @@ here hold the surface both transports share; ``stargate.contracts`` and
7
7
  executor functions (``sendAssetToDispatcher``, ``sendCommandToDispatcher``,
8
8
  ``registerChain``, ...) are deliberately absent: the executor's ``MANAGER`` is
9
9
  the PlasmaVault, so those are reachable only through the fuses in
10
- ``ipor_fusion.fuses.crosschain``.
10
+ ``ipor_fusion.crosschain.fuses``.
11
11
  """
12
12
 
13
13
  from __future__ import annotations
@@ -30,15 +30,15 @@ from ipor_fusion.core.plasma_vault import PlasmaVault
30
30
  from ipor_fusion.crosschain.ccip.contracts import CcipCrosschainExecutor
31
31
  from ipor_fusion.crosschain.ccip.lane import CcipLane
32
32
  from ipor_fusion.crosschain.contracts import CrosschainExecutor
33
+ from ipor_fusion.crosschain.fuses.base import (
34
+ CrosschainSubstrateLib,
35
+ CrosschainSubstrateType,
36
+ )
33
37
  from ipor_fusion.crosschain.lane import CrosschainLane, LaneFuses
34
38
  from ipor_fusion.crosschain.messages import CrosschainTransportKind
35
39
  from ipor_fusion.crosschain.stargate.contracts import StargateCrosschainExecutor
36
40
  from ipor_fusion.crosschain.stargate.lane import StargateLane
37
41
  from ipor_fusion.errors import CrosschainDiscoveryError, EmptyCallResultError
38
- from ipor_fusion.fuses.crosschain.base import (
39
- CrosschainSubstrateLib,
40
- CrosschainSubstrateType,
41
- )
42
42
  from ipor_fusion.types import (
43
43
  ZERO_ADDRESS,
44
44
  ChainId,
@@ -1,11 +1,12 @@
1
- """Crosschain market fuses, split by transport like the contracts:
1
+ """Crosschain market fuses (``contracts/fuses/crosschain``), split by transport
2
+ like the contracts:
2
3
  ``base`` (substrates, the transport-agnostic bases, the claim fuse),
3
4
  ``stargate`` and ``ccip``.
4
5
 
5
6
  Status: preview, not production. The contracts behind it are under active development, the mainnet deployments are a proof of concept and IPOR Labs canaries, and interfaces may change between minor versions; see ``ipor_fusion.about.PREVIEW_FEATURES``.
6
7
  """
7
8
 
8
- from ipor_fusion.fuses.crosschain.base import (
9
+ from ipor_fusion.crosschain.fuses.base import (
9
10
  CrosschainClaimFuse,
10
11
  CrosschainCommandFuse,
11
12
  CrosschainSubstrate,
@@ -15,13 +16,13 @@ from ipor_fusion.fuses.crosschain.base import (
15
16
  SendParams,
16
17
  crosschain_market_id,
17
18
  )
18
- from ipor_fusion.fuses.crosschain.ccip import (
19
+ from ipor_fusion.crosschain.fuses.ccip import (
19
20
  CcipCommandType,
20
21
  CcipCrosschainCommandFuse,
21
22
  CcipCrosschainSupplyFuse,
22
23
  CcipSendParams,
23
24
  )
24
- from ipor_fusion.fuses.crosschain.stargate import (
25
+ from ipor_fusion.crosschain.fuses.stargate import (
25
26
  StargateCrosschainCommandFuse,
26
27
  StargateCrosschainCommandType,
27
28
  StargateCrosschainSupplyFuse,
@@ -25,12 +25,12 @@ from eth_typing import ChecksumAddress
25
25
  from ipor_fusion.core.fuse import Fuse
26
26
  from ipor_fusion.core.fuse_action import FuseAction
27
27
  from ipor_fusion.crosschain.ccip.contracts import CcipRouteConfig
28
- from ipor_fusion.crosschain.messages import COMMAND_TUPLE_TYPE, EMPTY_COMMAND, Command
29
- from ipor_fusion.fuses.crosschain.base import (
28
+ from ipor_fusion.crosschain.fuses.base import (
30
29
  CrosschainCommandFuse,
31
30
  CrosschainSupplyFuse,
32
31
  SendParams,
33
32
  )
33
+ from ipor_fusion.crosschain.messages import COMMAND_TUPLE_TYPE, EMPTY_COMMAND, Command
34
34
  from ipor_fusion.types import ZERO_ADDRESS, Amount, ChainId
35
35
 
36
36
 
@@ -22,6 +22,11 @@ from eth_typing import ChecksumAddress
22
22
 
23
23
  from ipor_fusion.core.fuse import Fuse
24
24
  from ipor_fusion.core.fuse_action import FuseAction
25
+ from ipor_fusion.crosschain.fuses.base import (
26
+ CrosschainCommandFuse,
27
+ CrosschainSupplyFuse,
28
+ SendParams,
29
+ )
25
30
  from ipor_fusion.crosschain.messages import (
26
31
  COMMAND_TUPLE_TYPE,
27
32
  EMPTY_COMMAND,
@@ -29,11 +34,6 @@ from ipor_fusion.crosschain.messages import (
29
34
  Command,
30
35
  )
31
36
  from ipor_fusion.crosschain.stargate.layerzero import OptionsBuilder
32
- from ipor_fusion.fuses.crosschain.base import (
33
- CrosschainCommandFuse,
34
- CrosschainSupplyFuse,
35
- SendParams,
36
- )
37
37
  from ipor_fusion.types import Amount, ChainId, DeploymentRequestId, LayerZeroEid
38
38
 
39
39
  _NO_CHAIN = ChainId(0)
@@ -40,14 +40,14 @@ from ipor_fusion.crosschain.contracts import (
40
40
  CrosschainDispatcher,
41
41
  CrosschainExecutor,
42
42
  )
43
- from ipor_fusion.crosschain.logs import log_address, log_bytes, log_topic0
44
- from ipor_fusion.crosschain.messages import Command, CrosschainTransportKind
45
- from ipor_fusion.fuses.crosschain.base import (
43
+ from ipor_fusion.crosschain.fuses.base import (
46
44
  CrosschainClaimFuse,
47
45
  CrosschainCommandFuse,
48
46
  CrosschainSupplyFuse,
49
47
  SendParams,
50
48
  )
49
+ from ipor_fusion.crosschain.logs import log_address, log_bytes, log_topic0
50
+ from ipor_fusion.crosschain.messages import Command, CrosschainTransportKind
51
51
  from ipor_fusion.types import Amount, ChainId, FuseAddress, PositionSetHash, ProposalId
52
52
 
53
53
 
@@ -1,7 +1,8 @@
1
- """Stargate V2 / LayerZero V2: wire codecs and contract wrappers. The
2
- transport and lane (``stargate.transport``, ``stargate.lane``) import the fuse
3
- encoders and are exported from :mod:`ipor_fusion` instead, see
4
- :mod:`ipor_fusion.crosschain`.
1
+ """Stargate V2 / LayerZero V2: wire codecs and contract wrappers. The Stargate
2
+ fuse encoders (:mod:`ipor_fusion.crosschain.fuses.stargate`) import them, so
3
+ this namespace must not import the encoders back: the transport and lane
4
+ (``stargate.transport``, ``stargate.lane``) are exported from
5
+ :mod:`ipor_fusion.crosschain` instead.
5
6
 
6
7
  Status: preview, not production. The contracts behind it are under active development, the mainnet deployments are a proof of concept and IPOR Labs canaries, and interfaces may change between minor versions; see ``ipor_fusion.about.PREVIEW_FEATURES``.
7
8
  """
@@ -11,6 +11,12 @@ from eth_utils import keccak
11
11
  from ipor_fusion.core.context import Web3Context
12
12
  from ipor_fusion.core.contract import Call
13
13
  from ipor_fusion.crosschain.contracts import BalanceObservation
14
+ from ipor_fusion.crosschain.fuses.base import SendParams
15
+ from ipor_fusion.crosschain.fuses.stargate import (
16
+ StargateCrosschainCommandFuse,
17
+ StargateCrosschainSupplyFuse,
18
+ StargateSendParams,
19
+ )
14
20
  from ipor_fusion.crosschain.lane import CrosschainLane, LaneFuses, LaneObservation
15
21
  from ipor_fusion.crosschain.messages import CommandStatus, CrosschainTransportKind
16
22
  from ipor_fusion.crosschain.stargate.contracts import (
@@ -19,12 +25,6 @@ from ipor_fusion.crosschain.stargate.contracts import (
19
25
  StargateCrosschainExecutor,
20
26
  )
21
27
  from ipor_fusion.crosschain.stargate.layerzero import OptionsBuilder
22
- from ipor_fusion.fuses.crosschain.base import SendParams
23
- from ipor_fusion.fuses.crosschain.stargate import (
24
- StargateCrosschainCommandFuse,
25
- StargateCrosschainSupplyFuse,
26
- StargateSendParams,
27
- )
28
28
  from ipor_fusion.types import Amount
29
29
 
30
30