ipor-fusion 4.0.0.dev325__tar.gz → 4.0.0.dev330__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 (356) hide show
  1. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/AGENTS.md +4 -2
  2. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/MIGRATION_4.md +10 -10
  3. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/PKG-INFO +6 -5
  4. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/README.md +5 -4
  5. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/pyproject.toml +1 -1
  6. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/about.py +5 -6
  7. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/crosschain/__init__.py +1 -1
  8. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/crosschain/fuses/base.py +4 -4
  9. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/hypercore/__init__.py +4 -2
  10. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/market_ids.py +1 -4
  11. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/mcp/models.py +2 -3
  12. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/substrates.py +3 -12
  13. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/_crosschain_lifecycle.py +1 -1
  14. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_crosschain_encoding.py +12 -8
  15. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/.claude-plugin/marketplace.json +0 -0
  16. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/.claude-plugin/plugin.json +0 -0
  17. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/.env.example +0 -0
  18. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/.gemini/settings.json +0 -0
  19. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/.git-blame-ignore-revs +0 -0
  20. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/.github/workflows/cd.yml +0 -0
  21. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/.github/workflows/ci.yml +0 -0
  22. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/.github/workflows/commit-lint.yml +0 -0
  23. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/.github/workflows/notify-slack.yml +0 -0
  24. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/.github/workflows/python-build.yml +0 -0
  25. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/.github/workflows/python-publish.yml +0 -0
  26. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/.github/workflows/release.yml +0 -0
  27. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/.github/workflows/report-slack.yml +0 -0
  28. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/.gitignore +0 -0
  29. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/.mcp.json +0 -0
  30. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/.pre-commit-config.yaml +0 -0
  31. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/.python-version +0 -0
  32. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/CHANGELOG.md +0 -0
  33. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/CLAUDE.md +0 -0
  34. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/CODEOWNERS +0 -0
  35. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/LICENSE +0 -0
  36. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/build.sh +0 -0
  37. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/examples/CONTRIBUTING.md +0 -0
  38. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/examples/README.md +0 -0
  39. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/examples/advanced_euler_v2_credit_market_base.py +0 -0
  40. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/examples/advanced_euler_v2_looping_arbitrum.py +0 -0
  41. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/examples/crosschain_ccip_usdc_arbitrum_hyperevm.py +0 -0
  42. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/examples/external_state_margin_leg_base.py +0 -0
  43. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/examples/hypercore_vault_official_deployment_hyperevm.py +0 -0
  44. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/examples/simple_aave_v3_supply_base.py +0 -0
  45. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/pytest.ini +0 -0
  46. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/scripts/commit-check.sh +0 -0
  47. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/scripts/fusion_error_signatures.py +0 -0
  48. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/skills/ipor-deploy-vault/SKILL.md +0 -0
  49. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/__init__.py +0 -0
  50. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/cache.py +0 -0
  51. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/chains.py +0 -0
  52. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/cli/__init__.py +0 -0
  53. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/cli/address_cmd.py +0 -0
  54. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/cli/changelog_cmd.py +0 -0
  55. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/cli/config_cmd.py +0 -0
  56. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/cli/config_store.py +0 -0
  57. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/cli/main.py +0 -0
  58. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/cli/market_cmd.py +0 -0
  59. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/cli/options.py +0 -0
  60. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/cli/oracle_mapping_view.py +0 -0
  61. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/cli/preflight_cmd.py +0 -0
  62. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/cli/vault_cmd.py +0 -0
  63. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/cli/vault_health.py +0 -0
  64. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/cli/vault_info_view.py +0 -0
  65. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/cli/vault_markets_view.py +0 -0
  66. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/cli/vault_rendering.py +0 -0
  67. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/config/__init__.py +0 -0
  68. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/config/roles.py +0 -0
  69. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/core/__init__.py +0 -0
  70. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/core/access.py +0 -0
  71. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/core/address.py +0 -0
  72. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/core/context.py +0 -0
  73. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/core/context_manager.py +0 -0
  74. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/core/contract.py +0 -0
  75. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/core/erc20.py +0 -0
  76. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/core/external_state_executor.py +0 -0
  77. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/core/fee_manager.py +0 -0
  78. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/core/fuse.py +0 -0
  79. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/core/fuse_action.py +0 -0
  80. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/core/fuse_decoding.py +0 -0
  81. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/core/fusion_factory.py +0 -0
  82. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/core/logs.py +0 -0
  83. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/core/multicall.py +0 -0
  84. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/core/oracle.py +0 -0
  85. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/core/plasma_vault.py +0 -0
  86. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/core/rewards_manager.py +0 -0
  87. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/core/simulation.py +0 -0
  88. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/core/simulation_result.py +0 -0
  89. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/core/withdraw_manager.py +0 -0
  90. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/crosschain/ccip/__init__.py +0 -0
  91. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/crosschain/ccip/chainlink.py +0 -0
  92. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/crosschain/ccip/codec.py +0 -0
  93. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/crosschain/ccip/contracts.py +0 -0
  94. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/crosschain/ccip/events.py +0 -0
  95. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/crosschain/ccip/indexer.py +0 -0
  96. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/crosschain/ccip/lane.py +0 -0
  97. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/crosschain/ccip/quote.py +0 -0
  98. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/crosschain/ccip/transport.py +0 -0
  99. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/crosschain/contracts.py +0 -0
  100. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/crosschain/discovery.py +0 -0
  101. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/crosschain/errors.py +0 -0
  102. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/crosschain/fuses/__init__.py +0 -0
  103. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/crosschain/fuses/ccip.py +0 -0
  104. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/crosschain/fuses/stargate.py +0 -0
  105. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/crosschain/lane.py +0 -0
  106. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/crosschain/logs.py +0 -0
  107. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/crosschain/messages.py +0 -0
  108. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/crosschain/simulation.py +0 -0
  109. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/crosschain/stargate/__init__.py +0 -0
  110. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/crosschain/stargate/contracts.py +0 -0
  111. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/crosschain/stargate/lane.py +0 -0
  112. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/crosschain/stargate/layerzero.py +0 -0
  113. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/crosschain/stargate/transport.py +0 -0
  114. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/crosschain/transport.py +0 -0
  115. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/dependency_graph.py +0 -0
  116. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/entry_cli.py +0 -0
  117. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/entry_mcp.py +0 -0
  118. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/errors.py +0 -0
  119. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/explorer.py +0 -0
  120. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/field_docs.py +0 -0
  121. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/fuses/__init__.py +0 -0
  122. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/fuses/aave_v3.py +0 -0
  123. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/fuses/async_action.py +0 -0
  124. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/fuses/base.py +0 -0
  125. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/fuses/compound_v3.py +0 -0
  126. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/fuses/erc4626.py +0 -0
  127. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/fuses/euler_v2.py +0 -0
  128. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/fuses/events.py +0 -0
  129. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/fuses/external_state.py +0 -0
  130. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/fuses/external_state_event_decoding.py +0 -0
  131. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/fuses/fluid_instadapp.py +0 -0
  132. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/fuses/gearbox_v3.py +0 -0
  133. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/fuses/hypercore.py +0 -0
  134. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/fuses/hypercore_event_decoding.py +0 -0
  135. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/fuses/merkl.py +0 -0
  136. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/fuses/morpho.py +0 -0
  137. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/fuses/ramses_v2.py +0 -0
  138. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/fuses/uniswap_v3.py +0 -0
  139. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/fuses/universal.py +0 -0
  140. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/fusion_errors.py +0 -0
  141. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/guide/__init__.py +0 -0
  142. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/guide/architecture.md +0 -0
  143. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/guide/glossary.md +0 -0
  144. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/guide/invariants.md +0 -0
  145. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/guide/quickstart.md +0 -0
  146. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/market_info.py +0 -0
  147. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/mcp/__init__.py +0 -0
  148. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/mcp/guide.py +0 -0
  149. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/mcp/server.py +0 -0
  150. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/morpho_api.py +0 -0
  151. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/preflight.py +0 -0
  152. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/py.typed +0 -0
  153. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/readers/__init__.py +0 -0
  154. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/readers/aave_v3.py +0 -0
  155. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/readers/aave_v4.py +0 -0
  156. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/readers/compound_v3.py +0 -0
  157. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/readers/hypercore.py +0 -0
  158. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/readers/hypercore_outcome.py +0 -0
  159. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/readers/lending_health.py +0 -0
  160. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/readers/morpho.py +0 -0
  161. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/readers/oracle_mapping.py +0 -0
  162. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/readers/oracle_mapping_nodes.py +0 -0
  163. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/readers/oracle_mapping_reader.py +0 -0
  164. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/readers/position_manager.py +0 -0
  165. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/readers/ramses_v2.py +0 -0
  166. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/readers/uniswap_v3.py +0 -0
  167. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/readers/unpriceable.py +0 -0
  168. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/registry.py +0 -0
  169. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/types.py +0 -0
  170. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/validation.py +0 -0
  171. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/vault_data.py +0 -0
  172. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/vault_erc20.py +0 -0
  173. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/vault_info.py +0 -0
  174. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/vault_managers.py +0 -0
  175. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/vault_positions.py +0 -0
  176. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/src/ipor_fusion/vault_reads.py +0 -0
  177. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/UniswapV3UniversalRouter.py +0 -0
  178. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/_crosschain.py +0 -0
  179. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/_crosschain_recovery.py +0 -0
  180. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/_euler_v2.py +0 -0
  181. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/_event_args.py +0 -0
  182. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/_fake_rpc.py +0 -0
  183. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/_foundry.py +0 -0
  184. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/_golden.py +0 -0
  185. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/_guide.py +0 -0
  186. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/_hypercore_model.py +0 -0
  187. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/_hypercore_shadow.py +0 -0
  188. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/_live.py +0 -0
  189. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/_multicall.py +0 -0
  190. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/_oracle_mapping_fake.py +0 -0
  191. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/_simulate.py +0 -0
  192. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/_validation.py +0 -0
  193. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/addresses.py +0 -0
  194. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/conftest.py +0 -0
  195. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/constants.py +0 -0
  196. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/fixtures/hypercore_hip3_flow.json +0 -0
  197. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/fixtures/hypercore_market55.json +0 -0
  198. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/fixtures/hypercore_official.json +0 -0
  199. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/fixtures/market_golden/meta_morpho_v1.json +0 -0
  200. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/fixtures/market_golden/meta_morpho_v1.mcp.json +0 -0
  201. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/fixtures/market_golden/meta_morpho_v2.json +0 -0
  202. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/fixtures/market_golden/meta_morpho_v2.mcp.json +0 -0
  203. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/fixtures/market_golden/morpho_api/market.json +0 -0
  204. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/fixtures/market_golden/morpho_api/vault_v1.json +0 -0
  205. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/fixtures/market_golden/morpho_api/vault_v2.json +0 -0
  206. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/fixtures/market_golden/morpho_api/vault_v2_not_found.json +0 -0
  207. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/fixtures/market_golden/morpho_blue.json +0 -0
  208. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/fixtures/market_golden/morpho_blue.mcp.json +0 -0
  209. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/fixtures/market_golden/morpho_blue_api_error.json +0 -0
  210. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/fixtures/market_golden/morpho_blue_api_error.mcp.json +0 -0
  211. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/fixtures/market_golden/morpho_blue_no_api.json +0 -0
  212. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/fixtures/market_golden/morpho_blue_no_api.mcp.json +0 -0
  213. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/fixtures/oracle_mapping_golden/mapping.json +0 -0
  214. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/fixtures/oracle_mapping_golden/mapping.mcp.json +0 -0
  215. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/fixtures/simulate_v1_request.json +0 -0
  216. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/fixtures/vault_info_golden/clean.json +0 -0
  217. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/fixtures/vault_info_golden/clean.mcp.json +0 -0
  218. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/fixtures/vault_info_golden/clean.txt +0 -0
  219. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/fixtures/vault_info_golden/deployment_error.json +0 -0
  220. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/fixtures/vault_info_golden/deployment_error.mcp.json +0 -0
  221. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/fixtures/vault_info_golden/deployment_error.txt +0 -0
  222. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/fixtures/vault_info_golden/fetched.cli.json +0 -0
  223. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/fixtures/vault_info_golden/fetched.json +0 -0
  224. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/fixtures/vault_info_golden/fetched.mcp.json +0 -0
  225. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/fixtures/vault_info_golden/full.json +0 -0
  226. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/fixtures/vault_info_golden/full.mcp.json +0 -0
  227. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/fixtures/vault_info_golden/full.txt +0 -0
  228. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/fixtures/vault_info_golden/rich.json +0 -0
  229. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/fixtures/vault_info_golden/rich.mcp.json +0 -0
  230. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/fixtures/vault_info_golden/rich.txt +0 -0
  231. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_about.py +0 -0
  232. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_access_manager.py +0 -0
  233. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_cache.py +0 -0
  234. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_chains.py +0 -0
  235. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_cli_address.py +0 -0
  236. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_cli_changelog.py +0 -0
  237. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_cli_commands.py +0 -0
  238. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_cli_config_store.py +0 -0
  239. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_cli_helpers.py +0 -0
  240. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_cli_hypercore.py +0 -0
  241. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_cli_lending_health.py +0 -0
  242. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_cli_market_golden.py +0 -0
  243. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_cli_market_morpho_blue.py +0 -0
  244. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_cli_mcp_parity.py +0 -0
  245. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_cli_oracle_mapping.py +0 -0
  246. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_cli_oracle_mapping_golden.py +0 -0
  247. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_cli_pending_requests_scan.py +0 -0
  248. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_cli_preflight.py +0 -0
  249. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_cli_role_accounts.py +0 -0
  250. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_cli_vault_info_golden.py +0 -0
  251. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_cli_vault_predates_getters.py +0 -0
  252. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_cli_vault_validate.py +0 -0
  253. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_contract_call.py +0 -0
  254. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_contract_encoder.py +0 -0
  255. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_crosschain_ccip_events.py +0 -0
  256. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_crosschain_ccip_indexer.py +0 -0
  257. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_crosschain_ccip_quote.py +0 -0
  258. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_crosschain_chainlink.py +0 -0
  259. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_crosschain_contracts.py +0 -0
  260. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_crosschain_errors.py +0 -0
  261. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_crosschain_lane.py +0 -0
  262. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_crosschain_layering.py +0 -0
  263. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_crosschain_transport.py +0 -0
  264. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_docs_typing.py +0 -0
  265. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_erc20.py +0 -0
  266. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_error_hierarchy.py +0 -0
  267. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_examples_crosschain.py +0 -0
  268. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_examples_euler_looping_arbitrum.py +0 -0
  269. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_examples_hypercore_hyperevm.py +0 -0
  270. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_examples_vaults.py +0 -0
  271. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_explorer.py +0 -0
  272. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_external_state_events.py +0 -0
  273. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_external_state_executor.py +0 -0
  274. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_fee_manager.py +0 -0
  275. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_fuse_decoding.py +0 -0
  276. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_fuse_encoding.py +0 -0
  277. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_fusion_errors.py +0 -0
  278. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_fusion_instance.py +0 -0
  279. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_governance_wrappers.py +0 -0
  280. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_guide.py +0 -0
  281. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_hypercore_deployment.py +0 -0
  282. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_hypercore_events.py +0 -0
  283. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_hypercore_flow.py +0 -0
  284. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_hypercore_live.py +0 -0
  285. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_hypercore_outcome.py +0 -0
  286. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_hypercore_readers.py +0 -0
  287. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_hypercore_simulation.py +0 -0
  288. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_logs.py +0 -0
  289. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_mcp_address.py +0 -0
  290. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_mcp_hypercore.py +0 -0
  291. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_mcp_models.py +0 -0
  292. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_mcp_preflight.py +0 -0
  293. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_mcp_server.py +0 -0
  294. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_mcp_vault_validate.py +0 -0
  295. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_multicall.py +0 -0
  296. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_oracle.py +0 -0
  297. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_oracle_mapping.py +0 -0
  298. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_plasma_vault.py +0 -0
  299. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_preflight.py +0 -0
  300. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_public_api.py +0 -0
  301. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_public_type_reachability.py +0 -0
  302. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_reader_encoding.py +0 -0
  303. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_registry.py +0 -0
  304. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_revert_decoding.py +0 -0
  305. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_rewards_manager.py +0 -0
  306. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_roles.py +0 -0
  307. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_sdk_layering.py +0 -0
  308. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_simulate_borrow_aave_v3_mainnet.py +0 -0
  309. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_simulate_claim_merkl_wrapper_base.py +0 -0
  310. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_simulate_claim_morpho_rewards.py +0 -0
  311. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_simulate_crosschain_hyperevm.py +0 -0
  312. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_simulate_euler_v2_batch_base.py +0 -0
  313. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_simulate_euler_v2_credit_market_base.py +0 -0
  314. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_simulate_euler_v2_swap_deploy_base.py +0 -0
  315. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_simulate_euler_v2_swap_reconfigure_base.py +0 -0
  316. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_simulate_euler_v2_swap_registry_base.py +0 -0
  317. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_simulate_examples_arbitrum.py +0 -0
  318. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_simulate_examples_base.py +0 -0
  319. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_simulate_examples_crosschain.py +0 -0
  320. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_simulate_examples_hyperevm.py +0 -0
  321. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_simulate_external_state_executor_base.py +0 -0
  322. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_simulate_fusion_factory_clone_base.py +0 -0
  323. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_simulate_looping_aave_v3_base.py +0 -0
  324. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_simulate_looping_morpho_blue_base.py +0 -0
  325. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_simulate_morpho_blue.py +0 -0
  326. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_simulate_pilot_v3.py +0 -0
  327. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_simulate_pilot_v4_uniswap.py +0 -0
  328. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_simulate_pilot_v5_ramses.py +0 -0
  329. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_simulate_pilot_v5_scheduled.py +0 -0
  330. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_simulate_plasma_vault_setters_base.py +0 -0
  331. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_simulate_preflight_base.py +0 -0
  332. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_simulate_readers_integration.py +0 -0
  333. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_simulate_release_funds.py +0 -0
  334. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_simulate_swap_on_base.py +0 -0
  335. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_simulate_timelock_base.py +0 -0
  336. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_simulate_vault_from_scratch_base.py +0 -0
  337. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_simulation_errors.py +0 -0
  338. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_simulation_observation.py +0 -0
  339. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_solidity_compiler.py +0 -0
  340. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_solidity_mirrors.py +0 -0
  341. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_substrates.py +0 -0
  342. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_types_and_events.py +0 -0
  343. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_unpriceable_tokens.py +0 -0
  344. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_validation.py +0 -0
  345. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_vault_data_block.py +0 -0
  346. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_vault_dep_graph.py +0 -0
  347. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_vault_info_fetched_golden.py +0 -0
  348. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_vault_info_onchain_base.py +0 -0
  349. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_vault_info_onchain_base_no_withdraw_manager.py +0 -0
  350. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_vault_reconciliation_onchain_base.py +0 -0
  351. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_vault_simulator_blocks.py +0 -0
  352. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_web3_context.py +0 -0
  353. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/test_withdraw_manager.py +0 -0
  354. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/typed_client/consumer.py +0 -0
  355. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/tests/typed_client/rejected.py +0 -0
  356. {ipor_fusion-4.0.0.dev325 → ipor_fusion-4.0.0.dev330}/uv.lock +0 -0
@@ -159,7 +159,8 @@ checkout's default profile), the pending reader included.
159
159
  - No AI attribution trailers or "generated with" lines in commits or PRs.
160
160
  - Branch and open a PR; `main` only moves through PRs and the release workflow.
161
161
  - Dependencies: `>=x,<next-major` ranges in `pyproject.toml`, resolved by
162
- `uv.lock`; `pyright` is pinned exactly.
162
+ `uv.lock`; `pyright` is pinned exactly. `certifi` is the deliberate exception: it
163
+ is calendar-versioned, and its floor only forces a CA bundle with recent revocations.
163
164
  - English only, US spelling, in code, comments, docstrings and user-facing
164
165
  strings (`field_docs.py` ships as API documentation). Comments only for edge
165
166
  cases and non-obvious logic.
@@ -304,7 +305,8 @@ checkout's default profile), the pending reader included.
304
305
  `ccip/quote` (`quote_ccip_native_fee`: the exact native fee of a send, from a
305
306
  simulation with the payer's balance at zero);
306
307
  `ccip/events` decodes the executor/dispatcher/factory events by topic (one
307
- registry, mirrored from the v3 source; the v2 pair emits a subset of it);
308
+ registry, mirrored from the released contracts; earlier deployments' events
309
+ are not decoded where their signatures differ);
308
310
  `ccip/chainlink` also wraps the 2.0 OffRamp, verifier resolver and committee verifier
309
311
  (`CcipOffRamp.execute` is the permissionless delivery) and `ccip/indexer` fetches a
310
312
  message's verifier result from Chainlink's public indexers and builds that
@@ -346,12 +346,12 @@ could not hold. 4.0 exports them only from their subpackages.
346
346
  `CrosschainSimulator`. It also covers the crosschain ids (`AssetId`, `CommandId`,
347
347
  `MessageId`, `LayerZeroEid`, `CcipChainSelector`, ...), which still import from
348
348
  `ipor_fusion.types` too.
349
- - **HyperCore:** the 97 HyperCore names import from the new
349
+ - **HyperCore:** the HyperCore names import from the new
350
350
  `ipor_fusion.hypercore`. That covers the fuses and `HyperCoreSubstrates`, the
351
351
  readers and `read_hypercore_*`, the event classes, specs and decoders, and the
352
352
  ids (`HyperCoreAsset`, `HyperCoreTokenIndex`, `MarginTableId`, `PayloadHash`,
353
353
  ...). It also covers the constants and helpers (`SPOT_DEX`, `USDC_TOKEN_INDEX`,
354
- `USDC_SYSTEM_ADDRESS`, `system_address`, `precompile_index_of`, `SettlementMode`,
354
+ `USDC_SYSTEM_ADDRESS`, `system_address`, `precompile_index_of`,
355
355
  `TimeInForce`, `TransferDirection`, ...). `HYPEREVM_CHAIN_ID` stays a top-level
356
356
  chain constant. `ipor_fusion.fuses`
357
357
  and `ipor_fusion.readers` no longer list them; the ids still import from
@@ -540,11 +540,12 @@ on the spoke side.
540
540
  `observation()` raises `UnsupportedContractVersionError` this way), and it
541
541
  survives `Call.map()`.
542
542
  - **Removed.** `CrosschainDispatcher.pending_request_shares` (neither released
543
- dispatcher has it). From the repository: `scripts/crosschain_readiness.py`, the
544
- pytest `--run-readiness` option and `readiness` marker, and the examples
545
- `crosschain_ccip_usdc_arbitrum_hyperevm.py` and
546
- `composed_hypercore_flow_arbitrum_hyperevm.py`, which drove an earlier
547
- deployment.
543
+ dispatcher has it). From the repository: `scripts/crosschain_readiness.py` and the
544
+ pytest `--run-readiness` option and `readiness` marker. The example
545
+ `crosschain_ccip_usdc_arbitrum_hyperevm.py` is rewritten for the released
546
+ contracts under the same name, and `composed_hypercore_flow_arbitrum_hyperevm.py`,
547
+ which drove an earlier deployment, is replaced by
548
+ `hypercore_vault_official_deployment_hyperevm.py`.
548
549
  - **Events and errors.** `CCIP_EVENTS` mirrors the released contracts:
549
550
  `ReturnFinalized` / `LateReturnFinalized` gain `debitedSD`, `SharesRequested`
550
551
  gains `feeShares`, and new events are registered. The crosschain error registry
@@ -851,7 +852,7 @@ oracle-mapping readers, `read_external_state`, `VaultSimulator(vault=)`,
851
852
  `CrosschainSimulator`, crosschain discovery, the hub-manager inputs
852
853
  (`ExecutorInitParams.manager`, `create_executor(manager=)`, `executors_of(manager=)`),
853
854
  the async command helpers `Command.request_shares` / `redeem_from_request`,
854
- `pending_request_shares` and `WithdrawManager.update_plasma_vault_address` take a
855
+ and `WithdrawManager.update_plasma_vault_address` take a
855
856
  `PlasmaVaultAddress`; `.address`, `FusionInstance.plasma_vault` and the executor's
856
857
  `manager()` return one. Crosschain deposit and redeem destinations stay
857
858
  `ChecksumAddress`: `Command.deposit` / `redeem`, `is_allowed_vault`,
@@ -928,8 +929,7 @@ and `pending_deployment_created_at()` return a `Timestamp`. Decimals are
928
929
  `shared_decimals` of `CcipCrosschainFactory.asset_config()`, `schedule_asset` and
929
930
  `execute_asset`. Token amounts are `Amount` (`EVMTokenAmount.amount`,
930
931
  `TokenTransferV1.amount`, `TaxiMessage.amount_sd`, `OutboundMessage.token_amount`,
931
- `StargateChain.to_local_decimals`), and `pending_request_shares()` returns
932
- `Shares`. Counters, sequences, epochs, versions, bps and gas limits stay `int`.
932
+ `StargateChain.to_local_decimals`). Counters, sequences, epochs, versions, bps and gas limits stay `int`.
933
933
  Decoded event values
934
934
  (`ccip_events` → `CcipEvent.values`) stay a generic mapping: convert a value
935
935
  before passing it on.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: ipor-fusion
3
- Version: 4.0.0.dev325
3
+ Version: 4.0.0.dev330
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
@@ -58,9 +58,10 @@ Maintained by <a href="https://ipor.io">IPOR Labs AG</a>.
58
58
 
59
59
  > **Preview, not production:** the crosschain market (54: Stargate and CCIP executors,
60
60
  > dispatchers, lanes, fuses) and the HyperCore market (55: fuses, readers, events) are
61
- > under active development. Their contracts are not production releases, the mainnet
62
- > deployments are a proof of concept and IPOR Labs canaries, and their interfaces may
63
- > change between minor versions. Route no production capital through them. Everything
61
+ > under active development. The SDK follows their official deployment (the 2026-10-21
62
+ > contracts release, listed in ipor-abi) and nothing earlier, and their interfaces may
63
+ > change or be removed between minor versions, with no backward compatibility. Route
64
+ > no production capital through them. Everything
64
65
  > else in the package is production. `server_info` and `fusion changelog` list the same
65
66
  > status (`PREVIEW_FEATURES`).
66
67
 
@@ -540,7 +541,7 @@ the pilot executors and factories). Pin an exact version if you depend on them.
540
541
  | `discover_deployment`, `open_lanes` | Read a vault's crosschain market from the hub alone (executors with transport, factory, fuses, attestation keys and spokes served; remote vaults per spoke) and open every lane; `LANES` maps a transport kind to its lane class |
541
542
  | `CrosschainSimulator` | Multi-chain `eth_simulateV1` relay: replays LayerZero and CCIP messages between pinned chains by impersonating the endpoint or router on delivery, no bridge needed |
542
543
  | `ccip_token_lane` | Whether a CCIP message lane exists from a chain and whether a token's pool serves it, read on Chainlink's Router, OnRamp, TokenAdminRegistry and pool |
543
- | `decode_hypercore_event`, `hypercore_events` | The HyperCore fuse, pending-library, settlement and reporter events, decoded by topic with their raw log identity under the same input contract as `decode_external_state_event`; a malformed listed log raises `HyperCoreEventDecodeError` |
544
+ | `decode_hypercore_event`, `hypercore_events` | The HyperCore fuse events and the pending library's `HyperCoreActionEnqueued` / `HyperCoreActionSettled`, decoded by topic with their raw log identity under the same input contract as `decode_external_state_event`; a malformed listed log raises `HyperCoreEventDecodeError` |
544
545
  | Crosschain fuses (market 54): `StargateCrosschainSupplyFuse`, `StargateCrosschainCommandFuse`, `CcipCrosschainSupplyFuse`, `CcipCrosschainCommandFuse`, `CrosschainClaimFuse`; transport-agnostic bases `CrosschainSupplyFuse` / `CrosschainCommandFuse` with `StargateSendParams` / `CcipSendParams`, plus `Command`, `CrosschainSubstrateLib`, `OptionsBuilder` | `ipor_fusion.crosschain` |
545
546
  | HyperCore fuses (market 55): `HyperCoreDepositFuse`, `HyperCoreMarginFuse`, `HyperCoreSendFuse`, `HyperCoreOrderFuse`, `HyperCoreCancelFuse`, `HyperCoreBuilderFeeFuse`, `HyperCoreSubstrates` | `ipor_fusion.hypercore`, with `HyperCoreReader`, `read_hypercore_vault_state` and the event decoders |
546
547
 
@@ -9,9 +9,10 @@ Maintained by <a href="https://ipor.io">IPOR Labs AG</a>.
9
9
 
10
10
  > **Preview, not production:** the crosschain market (54: Stargate and CCIP executors,
11
11
  > dispatchers, lanes, fuses) and the HyperCore market (55: fuses, readers, events) are
12
- > under active development. Their contracts are not production releases, the mainnet
13
- > deployments are a proof of concept and IPOR Labs canaries, and their interfaces may
14
- > change between minor versions. Route no production capital through them. Everything
12
+ > under active development. The SDK follows their official deployment (the 2026-10-21
13
+ > contracts release, listed in ipor-abi) and nothing earlier, and their interfaces may
14
+ > change or be removed between minor versions, with no backward compatibility. Route
15
+ > no production capital through them. Everything
15
16
  > else in the package is production. `server_info` and `fusion changelog` list the same
16
17
  > status (`PREVIEW_FEATURES`).
17
18
 
@@ -491,7 +492,7 @@ the pilot executors and factories). Pin an exact version if you depend on them.
491
492
  | `discover_deployment`, `open_lanes` | Read a vault's crosschain market from the hub alone (executors with transport, factory, fuses, attestation keys and spokes served; remote vaults per spoke) and open every lane; `LANES` maps a transport kind to its lane class |
492
493
  | `CrosschainSimulator` | Multi-chain `eth_simulateV1` relay: replays LayerZero and CCIP messages between pinned chains by impersonating the endpoint or router on delivery, no bridge needed |
493
494
  | `ccip_token_lane` | Whether a CCIP message lane exists from a chain and whether a token's pool serves it, read on Chainlink's Router, OnRamp, TokenAdminRegistry and pool |
494
- | `decode_hypercore_event`, `hypercore_events` | The HyperCore fuse, pending-library, settlement and reporter events, decoded by topic with their raw log identity under the same input contract as `decode_external_state_event`; a malformed listed log raises `HyperCoreEventDecodeError` |
495
+ | `decode_hypercore_event`, `hypercore_events` | The HyperCore fuse events and the pending library's `HyperCoreActionEnqueued` / `HyperCoreActionSettled`, decoded by topic with their raw log identity under the same input contract as `decode_external_state_event`; a malformed listed log raises `HyperCoreEventDecodeError` |
495
496
  | Crosschain fuses (market 54): `StargateCrosschainSupplyFuse`, `StargateCrosschainCommandFuse`, `CcipCrosschainSupplyFuse`, `CcipCrosschainCommandFuse`, `CrosschainClaimFuse`; transport-agnostic bases `CrosschainSupplyFuse` / `CrosschainCommandFuse` with `StargateSendParams` / `CcipSendParams`, plus `Command`, `CrosschainSubstrateLib`, `OptionsBuilder` | `ipor_fusion.crosschain` |
496
497
  | HyperCore fuses (market 55): `HyperCoreDepositFuse`, `HyperCoreMarginFuse`, `HyperCoreSendFuse`, `HyperCoreOrderFuse`, `HyperCoreCancelFuse`, `HyperCoreBuilderFeeFuse`, `HyperCoreSubstrates` | `ipor_fusion.hypercore`, with `HyperCoreReader`, `read_hypercore_vault_state` and the event decoders |
497
498
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "ipor-fusion"
3
- version = "4.0.0.dev325"
3
+ version = "4.0.0.dev330"
4
4
  description = "The IPOR Fusion SDK for Python"
5
5
  authors = [
6
6
  { name = "Adam Mydlarz", email = "amydlarz@gmail.com" },
@@ -23,9 +23,9 @@ class PreviewFeature:
23
23
 
24
24
  # Stated once here and surfaced by `server_info`, `fusion changelog`, the
25
25
  # README and the module docstrings, so no reader can miss it: the contracts
26
- # behind these are under active development, their mainnet deployments are
27
- # a proof of concept and IPOR Labs canaries, and their interfaces may change
28
- # between minor versions. Nothing under these names should route production
26
+ # behind these are under active development, the SDK follows only their
27
+ # official deployment, and their interfaces may change or be removed between
28
+ # minor versions. Nothing under these names should route production
29
29
  # capital. Every other feature of the package is production.
30
30
  PREVIEW_FEATURES: tuple[PreviewFeature, ...] = (
31
31
  PreviewFeature(
@@ -40,9 +40,8 @@ PREVIEW_FEATURES: tuple[PreviewFeature, ...] = (
40
40
  )
41
41
  PREVIEW_STATEMENT = (
42
42
  "Preview, not production: the contracts are under active development, the "
43
- "mainnet deployments are a proof of concept and IPOR Labs canaries, and "
44
- "interfaces may change or be removed between minor versions, with no "
45
- "backward compatibility."
43
+ "SDK follows only their official deployment, and interfaces may change or "
44
+ "be removed between minor versions, with no backward compatibility."
46
45
  )
47
46
 
48
47
  _DISTRIBUTION = "ipor-fusion"
@@ -7,7 +7,7 @@ transport and lane. This namespace exports all of it; the transport
7
7
  subpackages export only their codecs and wrappers, because the encoders import
8
8
  those and a package's ``__init__`` runs before any of its modules.
9
9
 
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``.
10
+ Status: preview, not production. The contracts behind it are under active development, the SDK follows only their official deployment, and interfaces may change or be removed between minor versions, with no backward compatibility; see ``ipor_fusion.about.PREVIEW_FEATURES``.
11
11
  """
12
12
 
13
13
  from ipor_fusion.crosschain.ccip.chainlink import (
@@ -7,10 +7,10 @@ exist and each has its own supply and command fuse (``stargate`` and ``ccip``
7
7
  next to this module); the claim fuse and the substrates are shared. Names,
8
8
  methods and parameters follow ``contracts/fuses/crosschain/**``.
9
9
 
10
- Every fuse is bound to one market id at construction (``MARKET_ID``), and the
11
- deployments so far were built with a keccak-derived id rather than the
12
- library constant, so the market id is a parameter here, never an assumption
13
- (see :func:`crosschain_market_id`).
10
+ Every fuse is bound to one market id at construction (``MARKET_ID``). The
11
+ released deployment uses ``IporFusionMarkets.CROSSCHAIN`` (54); a fuse built
12
+ with another id (see :func:`crosschain_market_id`) is still addressed by it, so
13
+ the market id is a parameter here, never an assumption.
14
14
 
15
15
  ``CrosschainSupplyFuse`` and ``CrosschainCommandFuse`` are the SDK's
16
16
  transport-agnostic layer (the contracts have none): the operations both
@@ -1,8 +1,10 @@
1
1
  """HyperCore (Hyperliquid) vaults, market 55: preview.
2
2
 
3
3
  The fuses, readers, events and identifiers of the HyperCore market. A
4
- preview feature (`ipor_fusion.PREVIEW_FEATURES`): its names may change in a
5
- minor release, which is why they live here rather than in `ipor_fusion`.
4
+ preview feature (`ipor_fusion.PREVIEW_FEATURES`) that follows only the
5
+ official deployment: its names may change or be removed in a minor release,
6
+ with no backward compatibility, which is why they live here rather than in
7
+ `ipor_fusion`.
6
8
  """
7
9
 
8
10
  from ipor_fusion.fuses.hypercore import (
@@ -99,10 +99,7 @@ class IporFusionMarkets:
99
99
  # Crosschain market: a hub PlasmaVault deploys capital into PlasmaVaults
100
100
  # on other chains through an executor (Stargate/LayerZero or Chainlink
101
101
  # CCIP). Substrate type: CrosschainSubstrateLib (1 EXECUTOR, 2 REMOTE_VAULT
102
- # bound to a chain id). Ahead of the public contracts repo: defined on the
103
- # crosschain feature branch; the mirror test allowlists it until it lands.
104
- # The mainnet POC fuses were built with a keccak-derived id instead (see
105
- # ipor_fusion.crosschain.fuses.crosschain_market_id).
102
+ # bound to a chain id).
106
103
  # A legacy HyperEVM HyperCore test vault also uses 54 until it is
107
104
  # redeployed on HyperCore's assigned market 55; do not interpret that
108
105
  # vault's market-54 substrates as crosschain configuration.
@@ -1175,9 +1175,8 @@ class PreviewFeatureModel(_Base):
1175
1175
  status: Literal["preview"] = Field(
1176
1176
  default="preview",
1177
1177
  description="Always 'preview': not production. The contracts are under "
1178
- "active development, the mainnet deployments are a proof of concept "
1179
- "and IPOR Labs canaries, and interfaces may change or be removed "
1180
- "between minor versions, with no backward compatibility. Route no "
1178
+ "active development, the SDK follows only their official deployment, "
1179
+ "and interfaces may change or be removed between minor versions, with no backward compatibility. Route no "
1181
1180
  "production capital through these features.",
1182
1181
  )
1183
1182
 
@@ -16,7 +16,6 @@ from collections.abc import Callable
16
16
  from dataclasses import dataclass, field
17
17
 
18
18
  from eth_typing import HexAddress
19
- from eth_utils import keccak
20
19
 
21
20
  from ipor_fusion.fuses.hypercore import (
22
21
  is_hip3_asset,
@@ -634,17 +633,9 @@ _register_markets([40], _decode_async_action)
634
633
  _register_markets([50], _decode_external_state)
635
634
  # Uniswap V4 (id 53 per IporFusionMarkets.sol): PoolId or pool currency.
636
635
  _register_markets([53], _decode_uniswap_v4)
637
- # Crosschain (id 54 on the contracts' crosschain branch): EXECUTOR /
638
- # REMOTE_VAULT typed substrates per CrosschainSubstrateLib.sol. The mainnet
639
- # POC vault (Ethereum 0x0Aa75BfD…) granted the same layout under the
640
- # keccak-derived market id its fuses were built with, so that id decodes too.
641
- _register_markets(
642
- [
643
- 54,
644
- int.from_bytes(keccak(text="IPOR_FUSION_CROSSCHAIN_USDC_POC_V1"), "big"),
645
- ],
646
- _decode_crosschain,
647
- )
636
+ # Crosschain (54): EXECUTOR / REMOTE_VAULT typed substrates per
637
+ # CrosschainSubstrateLib.sol.
638
+ _register_markets([54], _decode_crosschain)
648
639
  # HyperCore (55): typed substrates per HyperCoreSubstrateLib.sol, verified
649
640
  # against the 12 words granted on the first HyperEVM test vault (see
650
641
  # tests/fixtures/hypercore_hip3_flow.json; that run used id 54 before the
@@ -70,7 +70,7 @@ SUPPLY_AMOUNT = {
70
70
  NATIVE_BUDGET = 10**18 # executor and dispatcher pay bridge fees themselves
71
71
 
72
72
  # Simulated schedule. The freshness window itself (``staleness_max``, 1 h on
73
- # the POC executors) is read from the lane; MIN_UPDATE_INTERVAL is 60 s and a
73
+ # the released executors) is read from the lane; MIN_UPDATE_INTERVAL is 60 s and a
74
74
  # proposal needs a 15 min approval window.
75
75
  BRIDGE_LATENCY = 2 * 60
76
76
  APPROVAL_DELAY = 5 * 60
@@ -1,8 +1,7 @@
1
1
  """Offline tests for the crosschain fuses, substrates and wire codecs.
2
2
 
3
- Live fixtures: the substrates granted on the mainnet POC vault (Ethereum
4
- 0x0Aa75BfD…, market keccak256("IPOR_FUSION_CROSSCHAIN_USDC_POC_V1"),
5
- read on 2026-09-24) and the well-known LayerZero option blobs.
3
+ Fixtures: substrate words in the CrosschainSubstrateLib layout, as granted on
4
+ a mainnet vault on 2026-09-24, and the well-known LayerZero option blobs.
6
5
  """
7
6
 
8
7
  from __future__ import annotations
@@ -79,7 +78,7 @@ WITHDRAW_MANAGER = Web3.to_checksum_address(
79
78
  )
80
79
  RECEIVER = Web3.to_checksum_address("0x3333333333333333333333333333333333333333")
81
80
 
82
- # Live grants on the POC vault: one EXECUTOR and two chain-bound REMOTE_VAULTs.
81
+ # Granted substrate words: one EXECUTOR and two chain-bound REMOTE_VAULTs.
83
82
  LIVE_EXECUTOR_SUBSTRATE = (
84
83
  "0x0100000000000000000000001d5c9d44f8d556ec7f557ae992401cc770937e6e"
85
84
  )
@@ -89,7 +88,6 @@ LIVE_REMOTE_VAULT_BASE = (
89
88
  LIVE_REMOTE_VAULT_ARB = (
90
89
  "0x02000000000000000000a4b1174bfa12935ac416caa7d27397bd4f3b15175980"
91
90
  )
92
- POC_MARKET_ID = crosschain_market_id("IPOR_FUSION_CROSSCHAIN_USDC_POC_V1")
93
91
 
94
92
 
95
93
  def _decoded(action, signature: str) -> tuple:
@@ -249,7 +247,7 @@ class TestCrosschainSubstrateLib:
249
247
  assert info.type_label == "EXECUTOR"
250
248
  assert info.address == EXECUTOR.lower()
251
249
  assert info.extra == {}
252
- info = decode_substrate(LIVE_REMOTE_VAULT_BASE, market_id=POC_MARKET_ID)
250
+ info = decode_substrate(LIVE_REMOTE_VAULT_BASE, market_id=54)
253
251
  assert info.type_label == "REMOTE_VAULT"
254
252
  assert info.address == REMOTE_VAULT_BASE.lower()
255
253
  assert info.extra == {"chain_id": "8453"}
@@ -279,11 +277,17 @@ class TestCrosschainSubstrateLib:
279
277
  assert info.is_error is True
280
278
  assert info.extra == {"chain_id": str(substrate.chain_id)}
281
279
 
282
- def test_poc_market_id_matches_deployment_manifest(self):
283
- assert POC_MARKET_ID == int(
280
+ def test_crosschain_market_id_is_the_keccak_of_its_preimage(self):
281
+ assert crosschain_market_id("IPOR_FUSION_CROSSCHAIN_USDC_POC_V1") == int(
284
282
  "0x3698b2215fdb7b90ebd6e623939afe7a334e14147954f78e1a42ddcbcbc9b576", 16
285
283
  )
286
284
 
285
+ def test_only_the_canonical_crosschain_market_decodes(self):
286
+ market = crosschain_market_id("IPOR_FUSION_CROSSCHAIN_USDC_POC_V1")
287
+ info = decode_substrate(LIVE_REMOTE_VAULT_BASE, market_id=market)
288
+ assert info.type_label == "no_decoder(UNKNOWN)"
289
+ assert info.address is None
290
+
287
291
 
288
292
  # ── Fuses ──────────────────────────────────────────────────────────────────
289
293