ipor-fusion 4.0.1.dev2__tar.gz → 4.1.0.dev7__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.1.dev2 → ipor_fusion-4.1.0.dev7}/MIGRATION_4.md +6 -6
  2. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/PKG-INFO +2 -1
  3. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/README.md +1 -0
  4. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/pyproject.toml +1 -1
  5. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/skills/ipor-deploy-vault/SKILL.md +1 -1
  6. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/chains.py +1 -1
  7. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/cli/market_cmd.py +1 -1
  8. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/cli/options.py +5 -11
  9. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/cli/preflight_cmd.py +4 -1
  10. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/cli/vault_cmd.py +4 -4
  11. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/guide/quickstart.md +1 -1
  12. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_chains.py +6 -4
  13. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_cli_mcp_parity.py +18 -5
  14. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/.claude-plugin/marketplace.json +0 -0
  15. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/.claude-plugin/plugin.json +0 -0
  16. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/.env.example +0 -0
  17. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/.gemini/settings.json +0 -0
  18. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/.git-blame-ignore-revs +0 -0
  19. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/.github/workflows/cd.yml +0 -0
  20. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/.github/workflows/ci.yml +0 -0
  21. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/.github/workflows/commit-lint.yml +0 -0
  22. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/.github/workflows/notify-slack.yml +0 -0
  23. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/.github/workflows/python-build.yml +0 -0
  24. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/.github/workflows/python-publish.yml +0 -0
  25. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/.github/workflows/release.yml +0 -0
  26. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/.github/workflows/report-slack.yml +0 -0
  27. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/.gitignore +0 -0
  28. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/.mcp.json +0 -0
  29. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/.pre-commit-config.yaml +0 -0
  30. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/.python-version +0 -0
  31. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/AGENTS.md +0 -0
  32. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/CHANGELOG.md +0 -0
  33. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/CLAUDE.md +0 -0
  34. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/CODEOWNERS +0 -0
  35. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/LICENSE +0 -0
  36. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/build.sh +0 -0
  37. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/examples/CONTRIBUTING.md +0 -0
  38. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/examples/README.md +0 -0
  39. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/examples/advanced_euler_v2_credit_market_base.py +0 -0
  40. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/examples/advanced_euler_v2_looping_arbitrum.py +0 -0
  41. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/examples/crosschain_ccip_usdc_arbitrum_hyperevm.py +0 -0
  42. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/examples/external_state_margin_leg_base.py +0 -0
  43. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/examples/hypercore_vault_official_deployment_hyperevm.py +0 -0
  44. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/examples/simple_aave_v3_supply_base.py +0 -0
  45. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/pytest.ini +0 -0
  46. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/scripts/commit-check.sh +0 -0
  47. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/scripts/fusion_error_signatures.py +0 -0
  48. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/__init__.py +0 -0
  49. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/about.py +0 -0
  50. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/cache.py +0 -0
  51. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/cli/__init__.py +0 -0
  52. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/cli/address_cmd.py +0 -0
  53. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/cli/changelog_cmd.py +0 -0
  54. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/cli/config_cmd.py +0 -0
  55. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/cli/config_store.py +0 -0
  56. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/cli/main.py +0 -0
  57. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/cli/oracle_mapping_view.py +0 -0
  58. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/cli/vault_health.py +0 -0
  59. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/cli/vault_info_view.py +0 -0
  60. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/cli/vault_markets_view.py +0 -0
  61. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/cli/vault_rendering.py +0 -0
  62. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/config/__init__.py +0 -0
  63. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/config/roles.py +0 -0
  64. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/core/__init__.py +0 -0
  65. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/core/access.py +0 -0
  66. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/core/address.py +0 -0
  67. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/core/context.py +0 -0
  68. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/core/context_manager.py +0 -0
  69. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/core/contract.py +0 -0
  70. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/core/erc20.py +0 -0
  71. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/core/external_state_executor.py +0 -0
  72. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/core/fee_manager.py +0 -0
  73. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/core/fuse.py +0 -0
  74. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/core/fuse_action.py +0 -0
  75. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/core/fuse_decoding.py +0 -0
  76. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/core/fusion_factory.py +0 -0
  77. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/core/logs.py +0 -0
  78. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/core/multicall.py +0 -0
  79. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/core/oracle.py +0 -0
  80. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/core/plasma_vault.py +0 -0
  81. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/core/rewards_manager.py +0 -0
  82. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/core/simulation.py +0 -0
  83. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/core/simulation_result.py +0 -0
  84. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/core/withdraw_manager.py +0 -0
  85. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/crosschain/__init__.py +0 -0
  86. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/crosschain/ccip/__init__.py +0 -0
  87. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/crosschain/ccip/chainlink.py +0 -0
  88. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/crosschain/ccip/codec.py +0 -0
  89. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/crosschain/ccip/contracts.py +0 -0
  90. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/crosschain/ccip/events.py +0 -0
  91. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/crosschain/ccip/indexer.py +0 -0
  92. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/crosschain/ccip/lane.py +0 -0
  93. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/crosschain/ccip/quote.py +0 -0
  94. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/crosschain/ccip/transport.py +0 -0
  95. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/crosschain/contracts.py +0 -0
  96. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/crosschain/discovery.py +0 -0
  97. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/crosschain/errors.py +0 -0
  98. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/crosschain/fuses/__init__.py +0 -0
  99. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/crosschain/fuses/base.py +0 -0
  100. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/crosschain/fuses/ccip.py +0 -0
  101. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/crosschain/fuses/stargate.py +0 -0
  102. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/crosschain/lane.py +0 -0
  103. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/crosschain/logs.py +0 -0
  104. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/crosschain/messages.py +0 -0
  105. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/crosschain/simulation.py +0 -0
  106. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/crosschain/stargate/__init__.py +0 -0
  107. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/crosschain/stargate/contracts.py +0 -0
  108. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/crosschain/stargate/lane.py +0 -0
  109. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/crosschain/stargate/layerzero.py +0 -0
  110. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/crosschain/stargate/transport.py +0 -0
  111. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/crosschain/transport.py +0 -0
  112. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/dependency_graph.py +0 -0
  113. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/entry_cli.py +0 -0
  114. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/entry_mcp.py +0 -0
  115. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/errors.py +0 -0
  116. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/explorer.py +0 -0
  117. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/field_docs.py +0 -0
  118. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/fuses/__init__.py +0 -0
  119. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/fuses/aave_v3.py +0 -0
  120. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/fuses/async_action.py +0 -0
  121. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/fuses/base.py +0 -0
  122. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/fuses/compound_v3.py +0 -0
  123. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/fuses/erc4626.py +0 -0
  124. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/fuses/euler_v2.py +0 -0
  125. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/fuses/events.py +0 -0
  126. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/fuses/external_state.py +0 -0
  127. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/fuses/external_state_event_decoding.py +0 -0
  128. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/fuses/fluid_instadapp.py +0 -0
  129. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/fuses/gearbox_v3.py +0 -0
  130. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/fuses/hypercore.py +0 -0
  131. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/fuses/hypercore_event_decoding.py +0 -0
  132. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/fuses/merkl.py +0 -0
  133. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/fuses/morpho.py +0 -0
  134. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/fuses/ramses_v2.py +0 -0
  135. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/fuses/uniswap_v3.py +0 -0
  136. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/fuses/universal.py +0 -0
  137. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/fusion_errors.py +0 -0
  138. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/guide/__init__.py +0 -0
  139. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/guide/architecture.md +0 -0
  140. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/guide/glossary.md +0 -0
  141. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/guide/invariants.md +0 -0
  142. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/hypercore/__init__.py +0 -0
  143. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/market_ids.py +0 -0
  144. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/market_info.py +0 -0
  145. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/mcp/__init__.py +0 -0
  146. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/mcp/guide.py +0 -0
  147. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/mcp/models.py +0 -0
  148. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/mcp/server.py +0 -0
  149. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/morpho_api.py +0 -0
  150. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/preflight.py +0 -0
  151. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/py.typed +0 -0
  152. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/readers/__init__.py +0 -0
  153. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/readers/aave_v3.py +0 -0
  154. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/readers/aave_v4.py +0 -0
  155. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/readers/compound_v3.py +0 -0
  156. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/readers/hypercore.py +0 -0
  157. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/readers/hypercore_outcome.py +0 -0
  158. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/readers/lending_health.py +0 -0
  159. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/readers/morpho.py +0 -0
  160. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/readers/oracle_mapping.py +0 -0
  161. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/readers/oracle_mapping_nodes.py +0 -0
  162. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/readers/oracle_mapping_reader.py +0 -0
  163. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/readers/position_manager.py +0 -0
  164. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/readers/ramses_v2.py +0 -0
  165. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/readers/uniswap_v3.py +0 -0
  166. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/readers/unpriceable.py +0 -0
  167. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/registry.py +0 -0
  168. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/substrates.py +0 -0
  169. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/types.py +0 -0
  170. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/validation.py +0 -0
  171. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/vault_data.py +0 -0
  172. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/vault_erc20.py +0 -0
  173. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/vault_info.py +0 -0
  174. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/vault_managers.py +0 -0
  175. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/vault_positions.py +0 -0
  176. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/src/ipor_fusion/vault_reads.py +0 -0
  177. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/UniswapV3UniversalRouter.py +0 -0
  178. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/_crosschain.py +0 -0
  179. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/_crosschain_lifecycle.py +0 -0
  180. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/_crosschain_recovery.py +0 -0
  181. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/_euler_v2.py +0 -0
  182. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/_event_args.py +0 -0
  183. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/_fake_rpc.py +0 -0
  184. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/_foundry.py +0 -0
  185. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/_golden.py +0 -0
  186. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/_guide.py +0 -0
  187. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/_hypercore_model.py +0 -0
  188. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/_hypercore_shadow.py +0 -0
  189. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/_live.py +0 -0
  190. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/_multicall.py +0 -0
  191. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/_oracle_mapping_fake.py +0 -0
  192. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/_simulate.py +0 -0
  193. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/_validation.py +0 -0
  194. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/addresses.py +0 -0
  195. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/conftest.py +0 -0
  196. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/constants.py +0 -0
  197. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/fixtures/hypercore_hip3_flow.json +0 -0
  198. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/fixtures/hypercore_market55.json +0 -0
  199. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/fixtures/hypercore_official.json +0 -0
  200. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/fixtures/market_golden/meta_morpho_v1.json +0 -0
  201. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/fixtures/market_golden/meta_morpho_v1.mcp.json +0 -0
  202. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/fixtures/market_golden/meta_morpho_v2.json +0 -0
  203. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/fixtures/market_golden/meta_morpho_v2.mcp.json +0 -0
  204. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/fixtures/market_golden/morpho_api/market.json +0 -0
  205. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/fixtures/market_golden/morpho_api/vault_v1.json +0 -0
  206. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/fixtures/market_golden/morpho_api/vault_v2.json +0 -0
  207. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/fixtures/market_golden/morpho_api/vault_v2_not_found.json +0 -0
  208. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/fixtures/market_golden/morpho_blue.json +0 -0
  209. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/fixtures/market_golden/morpho_blue.mcp.json +0 -0
  210. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/fixtures/market_golden/morpho_blue_api_error.json +0 -0
  211. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/fixtures/market_golden/morpho_blue_api_error.mcp.json +0 -0
  212. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/fixtures/market_golden/morpho_blue_no_api.json +0 -0
  213. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/fixtures/market_golden/morpho_blue_no_api.mcp.json +0 -0
  214. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/fixtures/oracle_mapping_golden/mapping.json +0 -0
  215. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/fixtures/oracle_mapping_golden/mapping.mcp.json +0 -0
  216. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/fixtures/simulate_v1_request.json +0 -0
  217. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/fixtures/vault_info_golden/clean.json +0 -0
  218. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/fixtures/vault_info_golden/clean.mcp.json +0 -0
  219. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/fixtures/vault_info_golden/clean.txt +0 -0
  220. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/fixtures/vault_info_golden/deployment_error.json +0 -0
  221. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/fixtures/vault_info_golden/deployment_error.mcp.json +0 -0
  222. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/fixtures/vault_info_golden/deployment_error.txt +0 -0
  223. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/fixtures/vault_info_golden/fetched.cli.json +0 -0
  224. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/fixtures/vault_info_golden/fetched.json +0 -0
  225. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/fixtures/vault_info_golden/fetched.mcp.json +0 -0
  226. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/fixtures/vault_info_golden/full.json +0 -0
  227. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/fixtures/vault_info_golden/full.mcp.json +0 -0
  228. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/fixtures/vault_info_golden/full.txt +0 -0
  229. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/fixtures/vault_info_golden/rich.json +0 -0
  230. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/fixtures/vault_info_golden/rich.mcp.json +0 -0
  231. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/fixtures/vault_info_golden/rich.txt +0 -0
  232. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_about.py +0 -0
  233. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_access_manager.py +0 -0
  234. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_cache.py +0 -0
  235. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_cli_address.py +0 -0
  236. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_cli_changelog.py +0 -0
  237. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_cli_commands.py +0 -0
  238. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_cli_config_store.py +0 -0
  239. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_cli_helpers.py +0 -0
  240. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_cli_hypercore.py +0 -0
  241. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_cli_lending_health.py +0 -0
  242. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_cli_market_golden.py +0 -0
  243. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_cli_market_morpho_blue.py +0 -0
  244. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_cli_oracle_mapping.py +0 -0
  245. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_cli_oracle_mapping_golden.py +0 -0
  246. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_cli_pending_requests_scan.py +0 -0
  247. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_cli_preflight.py +0 -0
  248. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_cli_role_accounts.py +0 -0
  249. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_cli_vault_info_golden.py +0 -0
  250. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_cli_vault_predates_getters.py +0 -0
  251. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_cli_vault_validate.py +0 -0
  252. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_contract_call.py +0 -0
  253. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_contract_encoder.py +0 -0
  254. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_crosschain_ccip_events.py +0 -0
  255. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_crosschain_ccip_indexer.py +0 -0
  256. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_crosschain_ccip_quote.py +0 -0
  257. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_crosschain_chainlink.py +0 -0
  258. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_crosschain_contracts.py +0 -0
  259. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_crosschain_encoding.py +0 -0
  260. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_crosschain_errors.py +0 -0
  261. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_crosschain_lane.py +0 -0
  262. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_crosschain_layering.py +0 -0
  263. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_crosschain_transport.py +0 -0
  264. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_docs_typing.py +0 -0
  265. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_erc20.py +0 -0
  266. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_error_hierarchy.py +0 -0
  267. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_examples_crosschain.py +0 -0
  268. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_examples_euler_looping_arbitrum.py +0 -0
  269. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_examples_hypercore_hyperevm.py +0 -0
  270. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_examples_vaults.py +0 -0
  271. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_explorer.py +0 -0
  272. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_external_state_events.py +0 -0
  273. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_external_state_executor.py +0 -0
  274. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_fee_manager.py +0 -0
  275. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_fuse_decoding.py +0 -0
  276. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_fuse_encoding.py +0 -0
  277. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_fusion_errors.py +0 -0
  278. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_fusion_instance.py +0 -0
  279. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_governance_wrappers.py +0 -0
  280. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_guide.py +0 -0
  281. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_hypercore_deployment.py +0 -0
  282. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_hypercore_events.py +0 -0
  283. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_hypercore_flow.py +0 -0
  284. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_hypercore_live.py +0 -0
  285. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_hypercore_outcome.py +0 -0
  286. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_hypercore_readers.py +0 -0
  287. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_hypercore_simulation.py +0 -0
  288. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_logs.py +0 -0
  289. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_mcp_address.py +0 -0
  290. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_mcp_hypercore.py +0 -0
  291. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_mcp_models.py +0 -0
  292. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_mcp_preflight.py +0 -0
  293. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_mcp_server.py +0 -0
  294. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_mcp_vault_validate.py +0 -0
  295. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_multicall.py +0 -0
  296. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_oracle.py +0 -0
  297. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_oracle_mapping.py +0 -0
  298. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_plasma_vault.py +0 -0
  299. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_preflight.py +0 -0
  300. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_public_api.py +0 -0
  301. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_public_type_reachability.py +0 -0
  302. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_reader_encoding.py +0 -0
  303. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_registry.py +0 -0
  304. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_revert_decoding.py +0 -0
  305. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_rewards_manager.py +0 -0
  306. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_roles.py +0 -0
  307. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_sdk_layering.py +0 -0
  308. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_simulate_borrow_aave_v3_mainnet.py +0 -0
  309. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_simulate_claim_merkl_wrapper_base.py +0 -0
  310. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_simulate_claim_morpho_rewards.py +0 -0
  311. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_simulate_crosschain_hyperevm.py +0 -0
  312. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_simulate_euler_v2_batch_base.py +0 -0
  313. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_simulate_euler_v2_credit_market_base.py +0 -0
  314. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_simulate_euler_v2_swap_deploy_base.py +0 -0
  315. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_simulate_euler_v2_swap_reconfigure_base.py +0 -0
  316. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_simulate_euler_v2_swap_registry_base.py +0 -0
  317. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_simulate_examples_arbitrum.py +0 -0
  318. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_simulate_examples_base.py +0 -0
  319. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_simulate_examples_crosschain.py +0 -0
  320. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_simulate_examples_hyperevm.py +0 -0
  321. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_simulate_external_state_executor_base.py +0 -0
  322. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_simulate_fusion_factory_clone_base.py +0 -0
  323. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_simulate_looping_aave_v3_base.py +0 -0
  324. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_simulate_looping_morpho_blue_base.py +0 -0
  325. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_simulate_morpho_blue.py +0 -0
  326. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_simulate_pilot_v3.py +0 -0
  327. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_simulate_pilot_v4_uniswap.py +0 -0
  328. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_simulate_pilot_v5_ramses.py +0 -0
  329. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_simulate_pilot_v5_scheduled.py +0 -0
  330. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_simulate_plasma_vault_setters_base.py +0 -0
  331. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_simulate_preflight_base.py +0 -0
  332. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_simulate_readers_integration.py +0 -0
  333. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_simulate_release_funds.py +0 -0
  334. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_simulate_swap_on_base.py +0 -0
  335. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_simulate_timelock_base.py +0 -0
  336. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_simulate_vault_from_scratch_base.py +0 -0
  337. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_simulation_errors.py +0 -0
  338. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_simulation_observation.py +0 -0
  339. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_solidity_compiler.py +0 -0
  340. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_solidity_mirrors.py +0 -0
  341. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_substrates.py +0 -0
  342. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_types_and_events.py +0 -0
  343. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_unpriceable_tokens.py +0 -0
  344. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_validation.py +0 -0
  345. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_vault_data_block.py +0 -0
  346. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_vault_dep_graph.py +0 -0
  347. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_vault_info_fetched_golden.py +0 -0
  348. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_vault_info_onchain_base.py +0 -0
  349. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_vault_info_onchain_base_no_withdraw_manager.py +0 -0
  350. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_vault_reconciliation_onchain_base.py +0 -0
  351. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_vault_simulator_blocks.py +0 -0
  352. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_web3_context.py +0 -0
  353. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/test_withdraw_manager.py +0 -0
  354. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/typed_client/consumer.py +0 -0
  355. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/tests/typed_client/rejected.py +0 -0
  356. {ipor_fusion-4.0.1.dev2 → ipor_fusion-4.1.0.dev7}/uv.lock +0 -0
@@ -1130,12 +1130,12 @@ are listed with a link.
1130
1130
  - **The CLI and the MCP tools take the same arguments.**
1131
1131
  - **MCP inputs:** the vault tools' `chain_id` and every `block_number` are
1132
1132
  optional and omitted means auto-detected / latest; `market_morpho_blue` and
1133
- `market_meta_morpho` still require a positive `chain_id`. The `0` sentinel is
1134
- gone: an optional `0` is rejected with an error naming the argument to omit (it
1135
- is never read as chain or block 0), so a client that passed `0` omits the
1136
- argument instead; the market tools' required `chain_id` rejects `0` too and
1137
- needs the real chain id. The CLI refuses `--block-number 0` and `--chain-id 0`
1138
- the same way. `server_info(changelog_since=)` is `server_info(since=)` as in
1133
+ `market_meta_morpho` still require a positive `chain_id`. A `chain_id` of `0`
1134
+ no longer means auto-detection: it is rejected with an error naming the
1135
+ argument to omit, and the market tools' required `chain_id` needs the real
1136
+ chain id. A `block_number` of `0` still means the latest block, like an
1137
+ omitted one (genesis never holds a vault). The CLI follows the same rules:
1138
+ `--chain-id 0` is refused, `--block-number 0` reads the latest block. `server_info(changelog_since=)` is `server_info(since=)` as in
1139
1139
  `fusion changelog --since`, and `vault_oracle_mapping` takes `max_depth` like
1140
1140
  `--max-depth`.
1141
1141
  - **Chain auto-detection:** the vault commands and tools use the saved vault's
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: ipor-fusion
3
- Version: 4.0.1.dev2
3
+ Version: 4.1.0.dev7
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
@@ -577,6 +577,7 @@ validated on every live vault of these chains (`SUPPORTED_CHAIN_IDS`):
577
577
  - **Avalanche** C-Chain
578
578
  - **Katana**
579
579
  - **Monad**
580
+ - **TAC**
580
581
  - **Ink** and **Robinhood**, which have no live vault yet: validated on a vault freshly
581
582
  cloned through their FusionFactory on a fork
582
583
 
@@ -528,6 +528,7 @@ validated on every live vault of these chains (`SUPPORTED_CHAIN_IDS`):
528
528
  - **Avalanche** C-Chain
529
529
  - **Katana**
530
530
  - **Monad**
531
+ - **TAC**
531
532
  - **Ink** and **Robinhood**, which have no live vault yet: validated on a vault freshly
532
533
  cloned through their FusionFactory on a fork
533
534
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "ipor-fusion"
3
- version = "4.0.1.dev2"
3
+ version = "4.1.0.dev7"
4
4
  description = "The IPOR Fusion SDK for Python"
5
5
  authors = [
6
6
  { name = "Adam Mydlarz", email = "amydlarz@gmail.com" },
@@ -210,7 +210,7 @@ registry is the source of truth and is regenerated on release.
210
210
  | Flare | 14 | `0xE75F3565D67645775351A9886F2b598f07d1860B` | `0x6C1ff6eBf5e92Dbc5591E7cCF455829De9C46579` | factory only | implementation slot |
211
211
  | Unichain | 130 | `0xC9b4E839e86284C558791C13Bda97999fc49aF63` | `0x73c7CA802403BB21e9608C937c556C04d5eeBAD6` | validated | implementation slot |
212
212
  | Monad | 143 | `0x62DFfe8bCaaf7960f858a4f7dDC83cc98F04cEDC` | `0x1017f0032460B3c8FBB92Bfd350F708Ff6229137` | validated | implementation slot |
213
- | TAC | 239 | `0x26b5561E2E0e7d7977431E92740903Ef3cB7194b` | `0x7DDd0bBB59eFB4b7791cE5E1Cf1587F083aE4Ef5` | factory only | implementation slot |
213
+ | TAC | 239 | `0x26b5561E2E0e7d7977431E92740903Ef3cB7194b` | `0x7DDd0bBB59eFB4b7791cE5E1Cf1587F083aE4Ef5` | validated | implementation slot |
214
214
  | HyperEVM | 999 | `0x6bBc827F34b4e862d15215ABd4AC0E3886181665` | `0x010430cbdE2Bb8ACC48D7aDfbEb99812E83f1156` | validated | implementation slot |
215
215
  | Botanix | 3637 | `0x7c9857f22D0cc6523C8e88BFDCbf411AB8300fF5` | `0xddb0EFB2a7a5C02e01b5A1f85C0a1110d68EeC26` | factory only | registry only |
216
216
  | Robinhood | 4663 | `0xDF7A590b60072476E355A8EfF33e4872440bDc7C` | `0x9d897beA78F8747d8f9C45d5734089ca7225AE90` | validated | implementation slot |
@@ -36,7 +36,7 @@ CHAIN_NAME_TO_ID: dict[str, ChainId] = {name: cid for cid, name in CHAIN_NAMES.i
36
36
  # with none yet (Ink, Robinhood), on a vault cloned through its FusionFactory.
37
37
  SUPPORTED_CHAIN_IDS: frozenset[ChainId] = frozenset(
38
38
  ChainId(cid)
39
- for cid in (1, 130, 143, 999, 4663, 8453, 9745, 42161, 43114, 57073, 747474)
39
+ for cid in (1, 130, 143, 239, 999, 4663, 8453, 9745, 42161, 43114, 57073, 747474)
40
40
  )
41
41
 
42
42
  # First eth_getLogs page size, in blocks, on chains whose providers cap the
@@ -87,7 +87,7 @@ def market() -> None:
87
87
  "block_number",
88
88
  type=BLOCK_NUMBER,
89
89
  default=None,
90
- help="Block number for on-chain reads (default: latest).",
90
+ help="Block number for on-chain reads (0 or omitted: latest).",
91
91
  )
92
92
  @click.option(
93
93
  "--no-api",
@@ -109,24 +109,18 @@ CHAIN = ChainType()
109
109
 
110
110
 
111
111
  class BlockNumberType(click.IntRange):
112
- """A positive block number. 0 is refused rather than read as block 0:
113
- some callers still pass it meaning "latest"."""
112
+ """A block number, 0 meaning the latest block like an omitted option:
113
+ callers fill optional integers with 0, and genesis never holds a vault."""
114
114
 
115
115
  name = "block"
116
116
 
117
117
  def __init__(self) -> None:
118
- super().__init__(min=1)
118
+ super().__init__(min=0)
119
119
 
120
120
  def convert(
121
121
  self, value: object, param: click.Parameter | None, ctx: click.Context | None
122
- ) -> int:
123
- if value in (0, "0"):
124
- self.fail(
125
- "0 is not a block selector: omit --block-number for the latest block",
126
- param,
127
- ctx,
128
- )
129
- return super().convert(value, param, ctx)
122
+ ) -> int | None:
123
+ return super().convert(value, param, ctx) or None
130
124
 
131
125
 
132
126
  BLOCK_NUMBER = BlockNumberType()
@@ -53,7 +53,10 @@ def _read_calldata(calldata: str) -> str:
53
53
  "--chain-id", type=CHAIN, default=None, help="Chain ID or name (e.g. 1, ethereum)."
54
54
  )
55
55
  @click.option(
56
- "--block-number", type=BLOCK_NUMBER, default=None, help="Block (default: latest)."
56
+ "--block-number",
57
+ type=BLOCK_NUMBER,
58
+ default=None,
59
+ help="Block (0 or omitted: latest).",
57
60
  )
58
61
  @click.option(
59
62
  "--simulate/--no-simulate",
@@ -188,7 +188,7 @@ vault.add_command(list_vaults, "ls")
188
188
  "--block-number",
189
189
  type=BLOCK_NUMBER,
190
190
  default=None,
191
- help="Block number (default: latest).",
191
+ help="Block number (0 or omitted: latest).",
192
192
  )
193
193
  @click.option(
194
194
  "--json", "json_output", is_flag=True, default=False, help="Output as JSON."
@@ -233,7 +233,7 @@ def info(
233
233
  "--block-number",
234
234
  type=BLOCK_NUMBER,
235
235
  default=None,
236
- help="Block number (default: latest).",
236
+ help="Block number (0 or omitted: latest).",
237
237
  )
238
238
  @click.option(
239
239
  "--json", "json_output", is_flag=True, default=False, help="Output as JSON."
@@ -294,7 +294,7 @@ def validate(
294
294
  "--block-number",
295
295
  type=BLOCK_NUMBER,
296
296
  default=None,
297
- help="Block number (default: latest).",
297
+ help="Block number (0 or omitted: latest).",
298
298
  )
299
299
  @click.option(
300
300
  "--json", "json_output", is_flag=True, default=False, help="Output as JSON."
@@ -355,7 +355,7 @@ def role_accounts(
355
355
  "--block-number",
356
356
  type=BLOCK_NUMBER,
357
357
  default=None,
358
- help="Block number (default: latest).",
358
+ help="Block number (0 or omitted: latest).",
359
359
  )
360
360
  @click.option(
361
361
  "--max-depth",
@@ -125,7 +125,7 @@ registry is the source of truth and is regenerated on release.
125
125
  | Flare | 14 | `0xE75F3565D67645775351A9886F2b598f07d1860B` | `0x6C1ff6eBf5e92Dbc5591E7cCF455829De9C46579` | factory only | implementation slot |
126
126
  | Unichain | 130 | `0xC9b4E839e86284C558791C13Bda97999fc49aF63` | `0x73c7CA802403BB21e9608C937c556C04d5eeBAD6` | validated | implementation slot |
127
127
  | Monad | 143 | `0x62DFfe8bCaaf7960f858a4f7dDC83cc98F04cEDC` | `0x1017f0032460B3c8FBB92Bfd350F708Ff6229137` | validated | implementation slot |
128
- | TAC | 239 | `0x26b5561E2E0e7d7977431E92740903Ef3cB7194b` | `0x7DDd0bBB59eFB4b7791cE5E1Cf1587F083aE4Ef5` | factory only | implementation slot |
128
+ | TAC | 239 | `0x26b5561E2E0e7d7977431E92740903Ef3cB7194b` | `0x7DDd0bBB59eFB4b7791cE5E1Cf1587F083aE4Ef5` | validated | implementation slot |
129
129
  | HyperEVM | 999 | `0x6bBc827F34b4e862d15215ABd4AC0E3886181665` | `0x010430cbdE2Bb8ACC48D7aDfbEb99812E83f1156` | validated | implementation slot |
130
130
  | Botanix | 3637 | `0x7c9857f22D0cc6523C8e88BFDCbf411AB8300fF5` | `0xddb0EFB2a7a5C02e01b5A1f85C0a1110d68EeC26` | factory only | registry only |
131
131
  | Robinhood | 4663 | `0xDF7A590b60072476E355A8EfF33e4872440bDc7C` | `0x9d897beA78F8747d8f9C45d5734089ca7225AE90` | validated | implementation slot |
@@ -17,8 +17,8 @@ def test_supported_chains_pass():
17
17
 
18
18
 
19
19
  def test_unsupported_known_chain_includes_name():
20
- with pytest.raises(UnsupportedChainError, match=r"chain 239 \(tac\)"):
21
- ensure_supported_chain(239)
20
+ with pytest.raises(UnsupportedChainError, match=r"chain 3637 \(botanix\)"):
21
+ ensure_supported_chain(3637)
22
22
 
23
23
 
24
24
  def test_unsupported_unknown_chain_plain_id():
@@ -29,7 +29,8 @@ def test_unsupported_unknown_chain_plain_id():
29
29
  def test_message_lists_supported_chains():
30
30
  with pytest.raises(
31
31
  UnsupportedChainError,
32
- match=r"ethereum \(1\), unichain \(130\), monad \(143\), hyperevm \(999\), "
32
+ match=r"ethereum \(1\), unichain \(130\), monad \(143\), tac \(239\), "
33
+ r"hyperevm \(999\), "
33
34
  r"robinhood \(4663\), base \(8453\), plasma \(9745\), arbitrum \(42161\), "
34
35
  r"avalanche \(43114\), ink \(57073\), katana \(747474\)$",
35
36
  ):
@@ -60,10 +61,11 @@ def test_supported_chains():
60
61
  "katana",
61
62
  "ink",
62
63
  "robinhood",
64
+ "tac",
63
65
  }
64
66
 
65
67
 
66
- @pytest.mark.parametrize("chain_id", [239, 3637, 14])
68
+ @pytest.mark.parametrize("chain_id", [3637, 14])
67
69
  def test_chains_without_validated_vaults_stay_gated(chain_id):
68
70
  with pytest.raises(UnsupportedChainError):
69
71
  ensure_supported_chain(chain_id)
@@ -166,18 +166,31 @@ def test_a_negative_block_is_rejected() -> None:
166
166
  load.assert_not_called()
167
167
 
168
168
 
169
+ @pytest.mark.parametrize(("raw", "expected"), [("0", None), ("123", 123)])
170
+ def test_cli_block_zero_reads_the_latest_block(raw: str, expected: int | None) -> None:
171
+ with patch(
172
+ "ipor_fusion.cli.vault_cmd._build_ctx",
173
+ autospec=True,
174
+ side_effect=RuntimeError("stop"),
175
+ ) as build_ctx:
176
+ CliRunner().invoke(
177
+ cli, ["vault", "info", _VAULT, "--chain-id", "1", "--block-number", raw]
178
+ )
179
+ assert build_ctx.call_args.args[3] == expected
180
+
181
+
169
182
  @pytest.mark.parametrize(
170
183
  "args",
171
184
  [
172
- ["vault", "info", _VAULT, "--block-number", "0"],
173
- ["vault", "validate", _VAULT, "--block-number", "0"],
174
- ["market", "morpho-blue", _MARKET, "--chain", "1", "--block", "0"],
185
+ ["vault", "info", _VAULT, "--block-number", "-1"],
186
+ ["vault", "validate", _VAULT, "--block-number", "-1"],
187
+ ["market", "morpho-blue", _MARKET, "--chain", "1", "--block", "-1"],
175
188
  ],
176
189
  )
177
- def test_cli_refuses_block_zero(args: list[str]) -> None:
190
+ def test_cli_rejects_a_negative_block(args: list[str]) -> None:
178
191
  result = CliRunner().invoke(cli, args)
179
192
  assert result.exit_code == 2
180
- assert "omit --block-number" in result.output
193
+ assert "-1 is not in the range x>=0" in result.output
181
194
 
182
195
 
183
196
  def test_cli_refuses_chain_zero() -> None: