ipor-fusion 4.0.0.dev71__tar.gz → 4.0.0.dev78__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 (293) hide show
  1. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/AGENTS.md +17 -5
  2. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/MIGRATION_4.md +20 -5
  3. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/PKG-INFO +27 -1
  4. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/README.md +24 -0
  5. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/examples/advanced_euler_v2_credit_market_base.py +2 -2
  6. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/examples/advanced_euler_v2_looping_arbitrum.py +2 -2
  7. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/examples/composed_hypercore_flow_arbitrum_hyperevm.py +6 -8
  8. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/examples/external_state_margin_leg_base.py +2 -2
  9. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/examples/simple_aave_v3_supply_base.py +1 -1
  10. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/pyproject.toml +3 -1
  11. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/skills/ipor-deploy-vault/SKILL.md +1 -1
  12. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/__init__.py +153 -0
  13. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/chains.py +28 -28
  14. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/explorer.py +3 -1
  15. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/fuses/__init__.py +16 -0
  16. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/guide/quickstart.md +1 -1
  17. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/market_ids.py +0 -7
  18. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/morpho_api.py +34 -12
  19. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/readers/__init__.py +12 -0
  20. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/readers/hypercore.py +3 -2
  21. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/readers/lending_health.py +5 -10
  22. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/readers/morpho.py +10 -10
  23. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/substrates.py +2 -3
  24. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/vault_info.py +9 -9
  25. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_cli_lending_health.py +3 -4
  26. ipor_fusion-4.0.0.dev78/tests/test_public_api.py +876 -0
  27. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_solidity_mirrors.py +0 -2
  28. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_substrates.py +1 -4
  29. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/typed_client/consumer.py +33 -39
  30. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/uv.lock +4 -0
  31. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/.claude-plugin/marketplace.json +0 -0
  32. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/.claude-plugin/plugin.json +0 -0
  33. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/.env.example +0 -0
  34. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/.gemini/settings.json +0 -0
  35. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/.git-blame-ignore-revs +0 -0
  36. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/.github/workflows/cd.yml +0 -0
  37. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/.github/workflows/ci.yml +0 -0
  38. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/.github/workflows/commit-lint.yml +0 -0
  39. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/.github/workflows/notify-slack.yml +0 -0
  40. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/.github/workflows/python-build.yml +0 -0
  41. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/.github/workflows/python-publish.yml +0 -0
  42. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/.github/workflows/release.yml +0 -0
  43. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/.github/workflows/report-slack.yml +0 -0
  44. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/.gitignore +0 -0
  45. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/.mcp.json +0 -0
  46. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/.pre-commit-config.yaml +0 -0
  47. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/.python-version +0 -0
  48. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/CHANGELOG.md +0 -0
  49. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/CLAUDE.md +0 -0
  50. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/CODEOWNERS +0 -0
  51. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/LICENSE +0 -0
  52. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/build.sh +0 -0
  53. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/examples/CONTRIBUTING.md +0 -0
  54. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/examples/README.md +0 -0
  55. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/examples/crosschain_ccip_usdc_arbitrum_hyperevm.py +0 -0
  56. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/pytest.ini +0 -0
  57. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/scripts/commit-check.sh +0 -0
  58. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/scripts/crosschain_readiness.py +0 -0
  59. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/about.py +0 -0
  60. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/cache.py +0 -0
  61. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/cli/__init__.py +0 -0
  62. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/cli/changelog_cmd.py +0 -0
  63. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/cli/config_cmd.py +0 -0
  64. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/cli/config_store.py +0 -0
  65. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/cli/main.py +0 -0
  66. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/cli/market_cmd.py +0 -0
  67. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/cli/options.py +0 -0
  68. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/cli/oracle_mapping_view.py +0 -0
  69. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/cli/vault_cmd.py +0 -0
  70. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/cli/vault_health.py +0 -0
  71. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/cli/vault_info_view.py +0 -0
  72. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/cli/vault_markets_view.py +0 -0
  73. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/cli/vault_rendering.py +0 -0
  74. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/config/__init__.py +0 -0
  75. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/config/roles.py +0 -0
  76. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/core/__init__.py +0 -0
  77. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/core/access.py +0 -0
  78. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/core/address.py +0 -0
  79. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/core/context.py +0 -0
  80. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/core/contract.py +0 -0
  81. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/core/erc20.py +0 -0
  82. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/core/external_state_executor.py +0 -0
  83. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/core/fee_manager.py +0 -0
  84. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/core/fuse_action.py +0 -0
  85. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/core/fusion_factory.py +0 -0
  86. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/core/logs.py +0 -0
  87. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/core/multicall.py +0 -0
  88. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/core/oracle.py +0 -0
  89. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/core/plasma_vault.py +0 -0
  90. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/core/rewards_manager.py +0 -0
  91. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/core/simulation.py +0 -0
  92. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/core/withdraw_manager.py +0 -0
  93. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/crosschain/__init__.py +0 -0
  94. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/crosschain/ccip/__init__.py +0 -0
  95. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/crosschain/ccip/chainlink.py +0 -0
  96. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/crosschain/ccip/codec.py +0 -0
  97. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/crosschain/ccip/contracts.py +0 -0
  98. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/crosschain/ccip/events.py +0 -0
  99. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/crosschain/ccip/indexer.py +0 -0
  100. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/crosschain/ccip/lane.py +0 -0
  101. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/crosschain/ccip/quote.py +0 -0
  102. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/crosschain/ccip/transport.py +0 -0
  103. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/crosschain/contracts.py +0 -0
  104. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/crosschain/discovery.py +0 -0
  105. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/crosschain/errors.py +0 -0
  106. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/crosschain/lane.py +0 -0
  107. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/crosschain/logs.py +0 -0
  108. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/crosschain/messages.py +0 -0
  109. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/crosschain/simulation.py +0 -0
  110. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/crosschain/stargate/__init__.py +0 -0
  111. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/crosschain/stargate/contracts.py +0 -0
  112. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/crosschain/stargate/lane.py +0 -0
  113. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/crosschain/stargate/layerzero.py +0 -0
  114. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/crosschain/stargate/transport.py +0 -0
  115. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/crosschain/transport.py +0 -0
  116. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/dependency_graph.py +0 -0
  117. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/entry_cli.py +0 -0
  118. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/entry_mcp.py +0 -0
  119. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/errors.py +0 -0
  120. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/field_docs.py +0 -0
  121. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/fuses/aave_v3.py +0 -0
  122. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/fuses/async_action.py +0 -0
  123. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/fuses/base.py +0 -0
  124. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/fuses/compound_v3.py +0 -0
  125. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/fuses/crosschain/__init__.py +0 -0
  126. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/fuses/crosschain/base.py +0 -0
  127. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/fuses/crosschain/ccip.py +0 -0
  128. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/fuses/crosschain/stargate.py +0 -0
  129. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/fuses/erc4626.py +0 -0
  130. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/fuses/euler_v2.py +0 -0
  131. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/fuses/events.py +0 -0
  132. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/fuses/external_state.py +0 -0
  133. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/fuses/external_state_events.py +0 -0
  134. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/fuses/fluid_instadapp.py +0 -0
  135. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/fuses/gearbox_v3.py +0 -0
  136. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/fuses/hypercore.py +0 -0
  137. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/fuses/hypercore_events.py +0 -0
  138. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/fuses/merkl.py +0 -0
  139. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/fuses/morpho.py +0 -0
  140. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/fuses/ramses_v2.py +0 -0
  141. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/fuses/uniswap_v3.py +0 -0
  142. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/fuses/universal.py +0 -0
  143. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/guide/__init__.py +0 -0
  144. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/guide/architecture.md +0 -0
  145. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/guide/glossary.md +0 -0
  146. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/guide/invariants.md +0 -0
  147. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/market_info.py +0 -0
  148. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/mcp/__init__.py +0 -0
  149. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/mcp/guide.py +0 -0
  150. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/mcp/models.py +0 -0
  151. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/mcp/server.py +0 -0
  152. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/py.typed +0 -0
  153. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/readers/aave_v3.py +0 -0
  154. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/readers/aave_v4.py +0 -0
  155. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/readers/compound_v3.py +0 -0
  156. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/readers/hypercore_outcome.py +0 -0
  157. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/readers/oracle_mapping.py +0 -0
  158. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/readers/oracle_mapping_nodes.py +0 -0
  159. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/readers/oracle_mapping_reader.py +0 -0
  160. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/readers/position_manager.py +0 -0
  161. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/readers/ramses_v2.py +0 -0
  162. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/readers/uniswap_v3.py +0 -0
  163. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/readers/unpriceable.py +0 -0
  164. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/types.py +0 -0
  165. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/validation.py +0 -0
  166. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/vault_data.py +0 -0
  167. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/vault_managers.py +0 -0
  168. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/vault_positions.py +0 -0
  169. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/vault_reads.py +0 -0
  170. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/UniswapV3UniversalRouter.py +0 -0
  171. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/_crosschain.py +0 -0
  172. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/_crosschain_lifecycle.py +0 -0
  173. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/_crosschain_recovery.py +0 -0
  174. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/_euler_v2.py +0 -0
  175. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/_foundry.py +0 -0
  176. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/_guide.py +0 -0
  177. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/_hypercore_model.py +0 -0
  178. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/_hypercore_shadow.py +0 -0
  179. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/_multicall.py +0 -0
  180. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/_simulate.py +0 -0
  181. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/_validation.py +0 -0
  182. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/addresses.py +0 -0
  183. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/conftest.py +0 -0
  184. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/constants.py +0 -0
  185. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/fixtures/hypercore_hip3_flow.json +0 -0
  186. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/fixtures/hypercore_market55.json +0 -0
  187. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/fixtures/vault_info_golden/clean.json +0 -0
  188. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/fixtures/vault_info_golden/clean.txt +0 -0
  189. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/fixtures/vault_info_golden/rich.json +0 -0
  190. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/fixtures/vault_info_golden/rich.txt +0 -0
  191. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_about.py +0 -0
  192. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_access_manager.py +0 -0
  193. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_cache.py +0 -0
  194. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_chains.py +0 -0
  195. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_cli_changelog.py +0 -0
  196. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_cli_commands.py +0 -0
  197. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_cli_config_store.py +0 -0
  198. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_cli_helpers.py +0 -0
  199. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_cli_hypercore.py +0 -0
  200. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_cli_market_morpho_blue.py +0 -0
  201. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_cli_oracle_mapping.py +0 -0
  202. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_cli_pending_requests_scan.py +0 -0
  203. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_cli_role_accounts.py +0 -0
  204. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_cli_vault_info_golden.py +0 -0
  205. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_cli_vault_predates_getters.py +0 -0
  206. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_cli_vault_validate.py +0 -0
  207. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_contract_call.py +0 -0
  208. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_contract_encoder.py +0 -0
  209. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_crosschain_ccip_events.py +0 -0
  210. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_crosschain_ccip_indexer.py +0 -0
  211. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_crosschain_ccip_quote.py +0 -0
  212. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_crosschain_chainlink.py +0 -0
  213. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_crosschain_contracts.py +0 -0
  214. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_crosschain_encoding.py +0 -0
  215. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_crosschain_errors.py +0 -0
  216. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_crosschain_lane.py +0 -0
  217. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_crosschain_layering.py +0 -0
  218. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_crosschain_readiness.py +0 -0
  219. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_crosschain_readiness_report.py +0 -0
  220. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_crosschain_transport.py +0 -0
  221. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_erc20.py +0 -0
  222. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_examples_composed_hypercore.py +0 -0
  223. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_examples_crosschain.py +0 -0
  224. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_examples_euler_looping_arbitrum.py +0 -0
  225. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_examples_vaults.py +0 -0
  226. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_explorer.py +0 -0
  227. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_external_state_events.py +0 -0
  228. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_external_state_executor.py +0 -0
  229. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_fee_manager.py +0 -0
  230. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_fuse_encoding.py +0 -0
  231. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_fusion_instance.py +0 -0
  232. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_guide.py +0 -0
  233. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_hypercore_deployment.py +0 -0
  234. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_hypercore_events.py +0 -0
  235. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_hypercore_flow.py +0 -0
  236. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_hypercore_live.py +0 -0
  237. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_hypercore_outcome.py +0 -0
  238. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_hypercore_readers.py +0 -0
  239. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_hypercore_simulation.py +0 -0
  240. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_logs.py +0 -0
  241. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_mcp_hypercore.py +0 -0
  242. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_mcp_models.py +0 -0
  243. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_mcp_server.py +0 -0
  244. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_mcp_vault_validate.py +0 -0
  245. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_multicall.py +0 -0
  246. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_oracle.py +0 -0
  247. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_oracle_mapping.py +0 -0
  248. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_plasma_vault.py +0 -0
  249. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_reader_encoding.py +0 -0
  250. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_readiness_selection.py +0 -0
  251. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_revert_decoding.py +0 -0
  252. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_rewards_manager.py +0 -0
  253. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_roles.py +0 -0
  254. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_sdk_layering.py +0 -0
  255. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_simulate_borrow_aave_v3_mainnet.py +0 -0
  256. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_simulate_claim_merkl_wrapper_base.py +0 -0
  257. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_simulate_claim_morpho_rewards.py +0 -0
  258. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_simulate_crosschain_canary.py +0 -0
  259. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_simulate_crosschain_hypercore.py +0 -0
  260. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_simulate_crosschain_hyperevm.py +0 -0
  261. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_simulate_crosschain_lifecycle.py +0 -0
  262. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_simulate_euler_v2_batch_base.py +0 -0
  263. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_simulate_euler_v2_credit_market_base.py +0 -0
  264. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_simulate_euler_v2_swap_deploy_base.py +0 -0
  265. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_simulate_euler_v2_swap_reconfigure_base.py +0 -0
  266. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_simulate_euler_v2_swap_registry_base.py +0 -0
  267. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_simulate_examples_arbitrum.py +0 -0
  268. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_simulate_examples_base.py +0 -0
  269. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_simulate_examples_crosschain.py +0 -0
  270. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_simulate_external_state_executor_base.py +0 -0
  271. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_simulate_fusion_factory_clone_base.py +0 -0
  272. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_simulate_looping_aave_v3_base.py +0 -0
  273. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_simulate_looping_morpho_blue_base.py +0 -0
  274. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_simulate_morpho_blue.py +0 -0
  275. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_simulate_pilot_v3.py +0 -0
  276. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_simulate_pilot_v4_uniswap.py +0 -0
  277. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_simulate_pilot_v5_ramses.py +0 -0
  278. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_simulate_pilot_v5_scheduled.py +0 -0
  279. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_simulate_plasma_vault_setters_base.py +0 -0
  280. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_simulate_readers_integration.py +0 -0
  281. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_simulate_release_funds.py +0 -0
  282. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_simulate_swap_on_base.py +0 -0
  283. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_simulate_vault_from_scratch_base.py +0 -0
  284. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_solidity_compiler.py +0 -0
  285. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_types_and_events.py +0 -0
  286. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_unpriceable_tokens.py +0 -0
  287. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_validation.py +0 -0
  288. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_vault_dep_graph.py +0 -0
  289. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_vault_info_onchain_base.py +0 -0
  290. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_vault_info_onchain_base_no_withdraw_manager.py +0 -0
  291. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_vault_simulator_blocks.py +0 -0
  292. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_web3_context.py +0 -0
  293. {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_withdraw_manager.py +0 -0
@@ -153,9 +153,20 @@ the lifecycle matrix follows that.
153
153
  - English only, US spelling, in code, comments, docstrings and user-facing
154
154
  strings (`field_docs.py` ships as API documentation). Comments only for edge
155
155
  cases and non-obvious logic.
156
- - Public symbols are re-exported from `src/ipor_fusion/__init__.py` (import +
157
- `__all__`); fuse classes also from `fuses/__init__.py`. The package is
158
- `py.typed`, so public APIs stay fully annotated.
156
+ - The public API is `ipor_fusion.__all__` (README, "Public API and stability").
157
+ Every public symbol is imported and listed there; a symbol of a public
158
+ subpackage (`core`, `config`, `fuses`, `fuses.crosschain`, `readers`,
159
+ `crosschain`, `crosschain.ccip`, `crosschain.stargate`) also goes in that
160
+ subpackage's `__all__`. `ipor_fusion.guide` keeps its own namespace. The
161
+ public modules (`about`, `chains`, `dependency_graph`, `errors`, `explorer`,
162
+ `field_docs`, `market_ids`, `market_info`, `morpho_api`, `substrates`, `types`,
163
+ `validation`, `vault_data`, `vault_info`) stay importable for the names they
164
+ define; `cli`, `mcp` and every other module are internal. Examples, the guide
165
+ and the skill import from `ipor_fusion` or a public module, never an internal
166
+ path. Adding or removing a
167
+ name updates the snapshot in `tests/test_public_api.py`; a removal or rename
168
+ is a breaking change. The package is `py.typed`, so public APIs stay fully
169
+ annotated.
159
170
 
160
171
  ## Invariants that must change together
161
172
 
@@ -308,8 +319,9 @@ or examples.
308
319
  (`PlasmaVault.get_fuses()`) and its market granted substrates before an
309
320
  action can succeed.
310
321
  - Adding a protocol: new module in `fuses/`, re-export from `fuses/__init__.py`
311
- and the top-level `__all__`, encoding test in `test_fuse_encoding.py`, and a
312
- row in the README protocol table.
322
+ and the top-level `__all__` (and both snapshots in `test_public_api.py`),
323
+ encoding test in `test_fuse_encoding.py`, and a row in the README protocol
324
+ table.
313
325
  - Keeping `examples/` current: a change to public API, SDK behavior or
314
326
  defaults includes reading the examples for what it supersedes — hand-rolled
315
327
  code a new helper replaces, workarounds for a gap it closes, prose describing
@@ -14,11 +14,10 @@ type-checked or not. In particular, `fetch_market` and
14
14
  (pyright, mypy, Pylance) also wraps literals and raw values as below. Values the SDK
15
15
  returns already carry their type and go back in unwrapped.
16
16
 
17
- All types are importable from `ipor_fusion` (and `ipor_fusion.types`);
18
- `ChecksumAddress` and `HexAddress` come from `eth_typing`,
19
- `BlockIdentifier` from `web3.types`, and `USDC_TOKEN_INDEX` / `hip3_action_asset` from
20
- `ipor_fusion.fuses.hypercore`. The wrappers label values; they do not validate byte
21
- widths or address spelling.
17
+ All types are importable from `ipor_fusion` (and `ipor_fusion.types`), as are
18
+ `USDC_TOKEN_INDEX` and `hip3_action_asset`; `ChecksumAddress` and `HexAddress` come
19
+ from `eth_typing` and `BlockIdentifier` from `web3.types`. The wrappers label values;
20
+ they do not validate byte widths or address spelling.
22
21
 
23
22
  ## Building the types
24
23
 
@@ -52,6 +51,12 @@ a `bytes32` return (recall) request is `ReturnRequestId`.
52
51
 
53
52
  ## What changed, by area
54
53
 
54
+ **Public API.** 4.0 declares it: `ipor_fusion.__all__`, which now also exports the
55
+ names earlier reachable only by module path (`FusionFactory`, `FusionInstance`,
56
+ `fetch_market`, `resolve_token_symbol`, the crosschain codecs, ...). Import from
57
+ `ipor_fusion`: a module path outside the README's list (*Public API and stability*)
58
+ still works but is internal.
59
+
55
60
  **Vault reads and validation.** `fetch_vault_data(chain_id=)`, `fetch_deployment_info`,
56
61
  `build_vault_info_json`, `ensure_supported_chain` and `fetch_vault_lending_health`
57
62
  take `ChainId`. The vault is a `PlasmaVaultAddress` (see *Address roles*) in
@@ -128,6 +133,16 @@ and the Stargate fuse's `eid=` take it (`LayerZeroEid(30101)`).
128
133
  `encode_oft_compose_msg(*, nonce=, src_eid=, amount_ld=, compose_msg=)` takes
129
134
  keyword arguments only. `ZERO_ADDRESS` is a `ChecksumAddress` (same value).
130
135
 
136
+ **Chain registry and removed aliases.** `CHAIN_NAMES`, `CHAIN_NAME_TO_ID`,
137
+ `SUPPORTED_CHAIN_IDS`, `GET_LOGS_RANGE_HINTS`, `BLOCK_EXPLORER_URLS`,
138
+ `MORPHO_BLUE_ADDRESSES`, `AAVE_V3_POOL`, `PUBLIC_ALLOCATOR_ADDRESSES` and
139
+ `HYPERCORE_PENDING_READERS` are keyed by `ChainId` (`HYPEREVM_CHAIN_ID` is one) and
140
+ `explorer.SUPPORTED_CHAINS` is a `frozenset[ChainId]`, so
141
+ `ensure_supported_chain(CHAIN_NAME_TO_ID["ethereum"])` type-checks;
142
+ `PUBLIC_ALLOCATOR_ADDRESSES` values are `ChecksumAddress`. `IporFusionMarkets.RWA`
143
+ is gone: market 50 is `IporFusionMarkets.EXTERNAL_STATE`. `MORPHO_BLUE_ADDRESS` is
144
+ gone: use `morpho_blue_address(chain_id)`.
145
+
131
146
  **Markets and substrates.** Every `IporFusionMarkets` member is a `MarketId`.
132
147
  `decode_substrate`, `market_name`, `format_market_label` take `MarketId`.
133
148
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: ipor-fusion
3
- Version: 4.0.0.dev71
3
+ Version: 4.0.0.dev78
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
@@ -29,9 +29,11 @@ Classifier: Topic :: Software Development :: Libraries :: Python Modules
29
29
  Classifier: Topic :: Utilities
30
30
  Requires-Python: >=3.11
31
31
  Requires-Dist: eth-abi<6,>=5.1.0
32
+ Requires-Dist: eth-account<1,>=0.13
32
33
  Requires-Dist: eth-typing<7,>=6.0.0
33
34
  Requires-Dist: eth-utils<7,>=6.0.0
34
35
  Requires-Dist: hexbytes<2,>=1.2.0
36
+ Requires-Dist: requests<3,>=2.31.0
35
37
  Requires-Dist: web3<8,>=7.7.0
36
38
  Provides-Extra: cli
37
39
  Requires-Dist: click<9,>=8.0; extra == 'cli'
@@ -365,6 +367,30 @@ No RPC key? `BASE_PROVIDER_URL=https://mainnet.base.org` (Base's public RPC) run
365
367
  the box — it supports `eth_simulateV1` and serves their pinned blocks. It is rate-limited, so use a
366
368
  dedicated archive node for repeated or CI runs.
367
369
 
370
+ ## Public API and stability
371
+
372
+ The supported API is `ipor_fusion.__all__`: import from `ipor_fusion`. Removing or
373
+ renaming a name in it, or changing a signature incompatibly, waits for a major
374
+ release; adding one does not.
375
+
376
+ - **Public subpackages** declare their own `__all__`, each a subset of the top
377
+ level: `ipor_fusion.core`, `config`, `fuses`, `fuses.crosschain`, `readers`,
378
+ `crosschain`, `crosschain.ccip` and `crosschain.stargate`. `ipor_fusion.guide`
379
+ (the packaged docs) keeps its names in its own namespace.
380
+ - **Public modules** stay importable for the top-level names they define:
381
+ `about`, `chains`, `dependency_graph`, `errors`, `explorer`, `field_docs`,
382
+ `market_ids`, `market_info`, `morpho_api`, `substrates`, `types`, `validation`,
383
+ `vault_data` and `vault_info` (all under `ipor_fusion.`).
384
+ - **Internal:** `ipor_fusion.cli`, `ipor_fusion.mcp`, every other module (e.g.
385
+ `cache`, `vault_reads`, the submodules of the public subpackages), underscore
386
+ names, and names in no `__all__`. They change without notice; the CLI and the
387
+ MCP server are stable as commands and tools, not as Python modules.
388
+ - **Preview features** (`PREVIEW_FEATURES` in `ipor_fusion.about`: crosschain,
389
+ HyperCore) are exported like the rest but may change in a minor release.
390
+
391
+ `tests/test_public_api.py` snapshots every `__all__`, so a change to the surface
392
+ is a deliberate, reviewed edit.
393
+
368
394
  ## Architecture
369
395
 
370
396
  The SDK uses a **fuse adapter pattern**:
@@ -319,6 +319,30 @@ No RPC key? `BASE_PROVIDER_URL=https://mainnet.base.org` (Base's public RPC) run
319
319
  the box — it supports `eth_simulateV1` and serves their pinned blocks. It is rate-limited, so use a
320
320
  dedicated archive node for repeated or CI runs.
321
321
 
322
+ ## Public API and stability
323
+
324
+ The supported API is `ipor_fusion.__all__`: import from `ipor_fusion`. Removing or
325
+ renaming a name in it, or changing a signature incompatibly, waits for a major
326
+ release; adding one does not.
327
+
328
+ - **Public subpackages** declare their own `__all__`, each a subset of the top
329
+ level: `ipor_fusion.core`, `config`, `fuses`, `fuses.crosschain`, `readers`,
330
+ `crosschain`, `crosschain.ccip` and `crosschain.stargate`. `ipor_fusion.guide`
331
+ (the packaged docs) keeps its names in its own namespace.
332
+ - **Public modules** stay importable for the top-level names they define:
333
+ `about`, `chains`, `dependency_graph`, `errors`, `explorer`, `field_docs`,
334
+ `market_ids`, `market_info`, `morpho_api`, `substrates`, `types`, `validation`,
335
+ `vault_data` and `vault_info` (all under `ipor_fusion.`).
336
+ - **Internal:** `ipor_fusion.cli`, `ipor_fusion.mcp`, every other module (e.g.
337
+ `cache`, `vault_reads`, the submodules of the public subpackages), underscore
338
+ names, and names in no `__all__`. They change without notice; the CLI and the
339
+ MCP server are stable as commands and tools, not as Python modules.
340
+ - **Preview features** (`PREVIEW_FEATURES` in `ipor_fusion.about`: crosschain,
341
+ HyperCore) are exported like the rest but may change in a minor release.
342
+
343
+ `tests/test_public_api.py` snapshots every `__all__`, so a change to the surface
344
+ is a deliberate, reviewed edit.
345
+
322
346
  ## Architecture
323
347
 
324
348
  The SDK uses a **fuse adapter pattern**:
@@ -52,6 +52,8 @@ from web3 import Web3
52
52
  from ipor_fusion import (
53
53
  ERC20,
54
54
  AccessManager,
55
+ Call,
56
+ FusionFactory,
55
57
  PlasmaVault,
56
58
  PriceOracleMiddlewareManager,
57
59
  Roles,
@@ -61,8 +63,6 @@ from ipor_fusion import (
61
63
  is_simulate_v1_supported,
62
64
  parse_fuse_address,
63
65
  )
64
- from ipor_fusion.core import FusionFactory
65
- from ipor_fusion.core.contract import Call
66
66
  from ipor_fusion.fuses import (
67
67
  EulerV2BorrowFuse,
68
68
  EulerV2CollateralFuse,
@@ -37,6 +37,8 @@ from web3 import Web3
37
37
  from ipor_fusion import (
38
38
  ERC20,
39
39
  AccessManager,
40
+ Call,
41
+ FusionFactory,
40
42
  PlasmaVault,
41
43
  PriceOracleMiddlewareManager,
42
44
  Roles,
@@ -46,8 +48,6 @@ from ipor_fusion import (
46
48
  is_simulate_v1_supported,
47
49
  parse_fuse_address,
48
50
  )
49
- from ipor_fusion.core import FusionFactory
50
- from ipor_fusion.core.contract import Call
51
51
  from ipor_fusion.fuses import (
52
52
  EulerV2BorrowFuse,
53
53
  EulerV2CollateralFuse,
@@ -72,14 +72,19 @@ from web3.types import BlockIdentifier, RPCEndpoint
72
72
 
73
73
  from ipor_fusion import (
74
74
  ERC20,
75
+ SPOT_DEX,
76
+ USDC_SYSTEM_ADDRESS,
77
+ USDC_TOKEN_INDEX,
75
78
  CcipChain,
76
79
  CcipCrosschainExecutor,
77
80
  CcipTransport,
78
81
  Command,
79
82
  CrosschainLane,
80
83
  CrosschainSimulator,
84
+ HyperCoreReader,
81
85
  PlasmaVault,
82
86
  SimulationResult,
87
+ TimeInForce,
83
88
  VaultSimulator,
84
89
  Web3Context,
85
90
  ccip_events,
@@ -92,6 +97,7 @@ from ipor_fusion import (
92
97
  quote_ccip_native_fee,
93
98
  read_hypercore_evm_exit_ceiling,
94
99
  read_hypercore_vault_state,
100
+ read_index_of,
95
101
  register_custom_errors,
96
102
  )
97
103
  from ipor_fusion.fuses import (
@@ -99,15 +105,7 @@ from ipor_fusion.fuses import (
99
105
  HyperCoreOrderFuse,
100
106
  HyperCoreSendFuse,
101
107
  )
102
- from ipor_fusion.fuses.hypercore import (
103
- SPOT_DEX,
104
- USDC_SYSTEM_ADDRESS,
105
- USDC_TOKEN_INDEX,
106
- TimeInForce,
107
- read_index_of,
108
- )
109
108
  from ipor_fusion.market_ids import IporFusionMarkets
110
- from ipor_fusion.readers.hypercore import HyperCoreReader
111
109
  from ipor_fusion.types import (
112
110
  Amount,
113
111
  ChainId,
@@ -82,6 +82,8 @@ from ipor_fusion import (
82
82
  ExternalStateExecutor,
83
83
  ExternalStateSubstrates,
84
84
  FuseAction,
85
+ FusionFactory,
86
+ FusionInstance,
85
87
  PlasmaVault,
86
88
  PriceOracleMiddlewareManager,
87
89
  Roles,
@@ -92,8 +94,6 @@ from ipor_fusion import (
92
94
  is_simulate_v1_supported,
93
95
  parse_fuse_address,
94
96
  )
95
- from ipor_fusion.core import FusionFactory
96
- from ipor_fusion.core.fusion_factory import FusionInstance
97
97
  from ipor_fusion.fuses import ExternalStateOperationFuse
98
98
  from ipor_fusion.market_ids import IporFusionMarkets
99
99
  from ipor_fusion.types import Amount, ChainId, MarketId, Period, ProposalHash, Shares
@@ -41,6 +41,7 @@ from ipor_fusion import (
41
41
  ERC20,
42
42
  AccessManager,
43
43
  FuseAction,
44
+ FusionFactory,
44
45
  PlasmaVault,
45
46
  PriceOracleMiddlewareManager,
46
47
  Roles,
@@ -50,7 +51,6 @@ from ipor_fusion import (
50
51
  is_simulate_v1_supported,
51
52
  parse_fuse_address,
52
53
  )
53
- from ipor_fusion.core import FusionFactory
54
54
  from ipor_fusion.fuses import AaveV3SupplyFuse
55
55
  from ipor_fusion.market_ids import IporFusionMarkets
56
56
  from ipor_fusion.types import Amount, ChainId, MarketId, Period
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "ipor-fusion"
3
- version = "4.0.0.dev71"
3
+ version = "4.0.0.dev78"
4
4
  description = "The IPOR Fusion SDK for Python"
5
5
  authors = [
6
6
  { name = "Adam Mydlarz", email = "amydlarz@gmail.com" },
@@ -31,10 +31,12 @@ classifiers = [
31
31
  "Natural Language :: English",
32
32
  ]
33
33
  dependencies = [
34
+ "eth-account>=0.13,<1",
34
35
  "eth-typing>=6.0.0,<7",
35
36
  "eth-abi>=5.1.0,<6",
36
37
  "eth-utils>=6.0.0,<7",
37
38
  "hexbytes>=1.2.0,<2",
39
+ "requests>=2.31.0,<3",
38
40
  "web3>=7.7.0,<8",
39
41
  ]
40
42
 
@@ -119,12 +119,12 @@ from web3 import Web3
119
119
  from ipor_fusion import (
120
120
  ERC20,
121
121
  AccessManager,
122
+ FusionFactory,
122
123
  IporFusionMarkets,
123
124
  PlasmaVault,
124
125
  Roles,
125
126
  Web3Context,
126
127
  )
127
- from ipor_fusion.core import FusionFactory
128
128
  from ipor_fusion.fuses import AaveV3SupplyFuse
129
129
 
130
130
  # A Base RPC, or an anvil fork of Base: anvil --fork-url <BASE_RPC_URL> --chain-id 8453
@@ -40,6 +40,7 @@ from ipor_fusion.core.fee_manager import (
40
40
  HighWaterMarkPerformanceFee,
41
41
  RecipientFee,
42
42
  )
43
+ from ipor_fusion.core.fusion_factory import CloneArgs, FusionFactory, FusionInstance
43
44
  from ipor_fusion.core.logs import LogSource, find_creation_block, get_logs_adaptive
44
45
  from ipor_fusion.core.multicall import MULTICALL3_ADDRESS, Multicall3
45
46
  from ipor_fusion.core.oracle import (
@@ -71,9 +72,16 @@ from ipor_fusion.core.withdraw_manager import (
71
72
  from ipor_fusion.crosschain import (
72
73
  CCIP_EVENT_TOPICS,
73
74
  CCIP_EVENTS,
75
+ CCIP_MESSAGE_SENT_TOPIC,
76
+ CCIP_VERSION,
77
+ CODEC_VERSION,
74
78
  CROSSCHAIN_ERROR_SIGNATURES,
79
+ EMPTY_COMMAND,
75
80
  INDEXER_URLS,
76
81
  INSUFFICIENT_NATIVE_FEE_SELECTOR,
82
+ PACKET_SENT_TOPIC,
83
+ ActiveCommand,
84
+ Any2EVMMessage,
77
85
  BalanceObservation,
78
86
  BusinessAction,
79
87
  CcipCommitteeVerifier,
@@ -82,31 +90,56 @@ from ipor_fusion.crosschain import (
82
90
  CcipCrosschainFactory,
83
91
  CcipEvent,
84
92
  CcipEventSpec,
93
+ CcipMessageSent,
94
+ CcipMsgType,
95
+ CcipObservation,
85
96
  CcipOffRamp,
97
+ CcipOnRamp,
86
98
  CcipRouteConfig,
99
+ CcipRouter,
100
+ CcipTokenAdminRegistry,
87
101
  CcipTokenLane,
102
+ CcipTokenPool,
88
103
  CcipVerifierResolver,
89
104
  CcvRequirements,
90
105
  Command,
106
+ CommandStatus,
107
+ CrosschainDispatcher,
91
108
  CrosschainExecutor,
109
+ CrosschainFactory,
92
110
  CrosschainTransportKind,
111
+ DeploymentStatus,
93
112
  EnforcedOptionParam,
113
+ EVMTokenAmount,
94
114
  ExecutorInitParams,
95
115
  MessageExecutionState,
116
+ MessageV1,
117
+ MsgType,
118
+ Observation,
96
119
  OptionsBuilder,
120
+ Packet,
97
121
  SafetyConfig,
98
122
  StargateCrosschainDispatcher,
99
123
  StargateCrosschainExecutor,
100
124
  StargateCrosschainFactory,
101
125
  StargateTokenMessaging,
126
+ TaxiMessage,
127
+ TokenTransferV1,
102
128
  VerifierResult,
103
129
  VerifierResultUnavailable,
104
130
  ccip_events,
131
+ ccip_receive_calldata,
105
132
  ccip_token_lane,
133
+ decode_ccip_envelope,
106
134
  decode_ccip_event,
135
+ decode_command,
136
+ decode_envelope,
107
137
  encode_enforced_options,
138
+ encode_oft_compose_msg,
108
139
  fetch_verifier_result,
109
140
  find_ccip_events,
141
+ lz_compose_calldata,
142
+ lz_receive_calldata,
110
143
  manual_execution,
111
144
  quote_ccip_native_fee,
112
145
  )
@@ -132,6 +165,12 @@ from ipor_fusion.crosschain.transport import (
132
165
  DeliveryCall,
133
166
  OutboundMessage,
134
167
  )
168
+ from ipor_fusion.dependency_graph import (
169
+ compute_update_groups,
170
+ compute_update_reach,
171
+ find_markets_missing_erc20_dependency,
172
+ find_orphan_fuse_markets,
173
+ )
135
174
  from ipor_fusion.errors import (
136
175
  CUSTOM_ERRORS,
137
176
  ContractNotFoundError,
@@ -146,12 +185,17 @@ from ipor_fusion.errors import (
146
185
  UnsupportedChainError,
147
186
  UnsupportedVaultVersionError,
148
187
  decode_custom_error,
188
+ get_revert_reason,
149
189
  register_custom_errors,
150
190
  )
191
+ from ipor_fusion.explorer import get_contract_name, get_deployment_tx
151
192
  from ipor_fusion.field_docs import DOCS
152
193
  from ipor_fusion.fuses import (
153
194
  HYPERCORE_EVENT_SPECS,
154
195
  HYPERCORE_EVENTS,
196
+ SPOT_DEX,
197
+ USDC_SYSTEM_ADDRESS,
198
+ USDC_TOKEN_INDEX,
155
199
  AaveV3BorrowFuse,
156
200
  AaveV3SupplyFuse,
157
201
  AsyncActionFuse,
@@ -233,8 +277,13 @@ from ipor_fusion.fuses import (
233
277
  decode_hypercore_event,
234
278
  euler_substrate,
235
279
  find_hypercore_events,
280
+ hip3_action_asset,
236
281
  hypercore_event_name,
237
282
  hypercore_events,
283
+ is_hip3_asset,
284
+ is_native_perp_asset,
285
+ perp_dex_of,
286
+ read_index_of,
238
287
  system_address,
239
288
  )
240
289
  from ipor_fusion.fuses.external_state_events import (
@@ -249,6 +298,24 @@ from ipor_fusion.fuses.external_state_events import (
249
298
  external_state_events,
250
299
  )
251
300
  from ipor_fusion.market_ids import IporFusionMarkets
301
+ from ipor_fusion.market_info import (
302
+ build_meta_morpho_json,
303
+ build_morpho_blue_market_json,
304
+ )
305
+ from ipor_fusion.morpho_api import (
306
+ PUBLIC_ALLOCATOR_ADDRESSES,
307
+ MorphoApiError,
308
+ MorphoApiMarket,
309
+ VaultAllocation,
310
+ VaultFlowCap,
311
+ VaultV1Info,
312
+ VaultV1MarketAllocation,
313
+ VaultV2Adapter,
314
+ VaultV2Cap,
315
+ VaultV2Info,
316
+ fetch_market,
317
+ fetch_vault,
318
+ )
252
319
  from ipor_fusion.readers import (
253
320
  AaveV3FuseReader,
254
321
  AaveV3PoolAddressesProvider,
@@ -278,15 +345,19 @@ from ipor_fusion.readers import (
278
345
  HyperCoreTransferStatus,
279
346
  HyperCoreVaultState,
280
347
  LendingMarketHealth,
348
+ MiddlewarePricedToken,
281
349
  MorphoMarket,
282
350
  MorphoMarketParams,
283
351
  MorphoMarketRates,
284
352
  MorphoPosition,
353
+ MorphoPositionBreakdown,
285
354
  MorphoReader,
286
355
  OracleAsset,
287
356
  OracleMapping,
357
+ OracleMappingReader,
288
358
  OracleNode,
289
359
  OraclePrice,
360
+ PositionData,
290
361
  RamsesV2Position,
291
362
  RamsesV2Reader,
292
363
  UniswapV3Position,
@@ -295,7 +366,9 @@ from ipor_fusion.readers import (
295
366
  build_oracle_mapping,
296
367
  compare_hypercore_transfer,
297
368
  convert_to_wad_int,
369
+ fetch_unpriceable_priced_tokens,
298
370
  fetch_vault_lending_health,
371
+ morpho_blue_address,
299
372
  read_hypercore_evm_exit_ceiling,
300
373
  read_hypercore_nav,
301
374
  read_hypercore_transfer_outcome,
@@ -310,6 +383,7 @@ from ipor_fusion.substrates import (
310
383
  )
311
384
  from ipor_fusion.types import (
312
385
  MAX_UINT256,
386
+ ZERO_ADDRESS,
313
387
  AccessManagerAddress,
314
388
  Amount,
315
389
  AssetId,
@@ -361,8 +435,10 @@ from ipor_fusion.validation import (
361
435
  Erc20Holdings,
362
436
  Finding,
363
437
  Reconciliation,
438
+ UnpriceableToken,
364
439
  VaultState,
365
440
  VaultValidation,
441
+ WithdrawQueue,
366
442
  read_erc20_holdings,
367
443
  validate_vault,
368
444
  validate_vault_state,
@@ -373,6 +449,8 @@ from ipor_fusion.vault_data import (
373
449
  WithdrawManagerData,
374
450
  fetch_deployment_info,
375
451
  fetch_vault_data,
452
+ resolve_token_decimals,
453
+ resolve_token_symbol,
376
454
  )
377
455
  from ipor_fusion.vault_info import build_vault_info_json
378
456
 
@@ -439,6 +517,9 @@ __all__ = [
439
517
  "PriceOracleMiddlewareManager",
440
518
  "price_oracle_middleware",
441
519
  "AssetPriceSource",
520
+ "FusionFactory",
521
+ "FusionInstance",
522
+ "CloneArgs",
442
523
  "ExternalStateExecutor",
443
524
  "BalanceFuseSnapshot",
444
525
  "ExternalStateVaultState",
@@ -503,6 +584,38 @@ __all__ = [
503
584
  "CcipTokenLane",
504
585
  "ccip_token_lane",
505
586
  "StargateTokenMessaging",
587
+ "CrosschainDispatcher",
588
+ "CrosschainFactory",
589
+ "ActiveCommand",
590
+ "Observation",
591
+ "CcipObservation",
592
+ "CommandStatus",
593
+ "DeploymentStatus",
594
+ "MsgType",
595
+ "CcipMsgType",
596
+ "CODEC_VERSION",
597
+ "CCIP_VERSION",
598
+ "EMPTY_COMMAND",
599
+ "decode_command",
600
+ "decode_envelope",
601
+ "decode_ccip_envelope",
602
+ "CcipOnRamp",
603
+ "CcipRouter",
604
+ "CcipTokenAdminRegistry",
605
+ "CcipTokenPool",
606
+ "CCIP_MESSAGE_SENT_TOPIC",
607
+ "CcipMessageSent",
608
+ "Any2EVMMessage",
609
+ "EVMTokenAmount",
610
+ "MessageV1",
611
+ "TokenTransferV1",
612
+ "ccip_receive_calldata",
613
+ "PACKET_SENT_TOPIC",
614
+ "Packet",
615
+ "TaxiMessage",
616
+ "encode_oft_compose_msg",
617
+ "lz_compose_calldata",
618
+ "lz_receive_calldata",
506
619
  "SYNTHETIC_TOKEN_SOURCE",
507
620
  "erc20_balance_slot",
508
621
  "DeliveryCall",
@@ -569,6 +682,14 @@ __all__ = [
569
682
  "SettlementMode",
570
683
  "TimeInForce",
571
684
  "system_address",
685
+ "SPOT_DEX",
686
+ "USDC_SYSTEM_ADDRESS",
687
+ "USDC_TOKEN_INDEX",
688
+ "hip3_action_asset",
689
+ "is_hip3_asset",
690
+ "is_native_perp_asset",
691
+ "perp_dex_of",
692
+ "read_index_of",
572
693
  "UniversalTokenSwapperAbi",
573
694
  "UniversalTokenSwapperFuse",
574
695
  "UniversalTokenSwapperSubstrates",
@@ -607,7 +728,10 @@ __all__ = [
607
728
  "UnsupportedVaultVersionError",
608
729
  "CUSTOM_ERRORS",
609
730
  "decode_custom_error",
731
+ "get_revert_reason",
610
732
  "register_custom_errors",
733
+ "get_contract_name",
734
+ "get_deployment_tx",
611
735
  "CHAIN_NAMES",
612
736
  "CHAIN_NAME_TO_ID",
613
737
  "SUPPORTED_CHAIN_IDS",
@@ -656,6 +780,7 @@ __all__ = [
656
780
  "Price",
657
781
  "Period",
658
782
  "MAX_UINT256",
783
+ "ZERO_ADDRESS",
659
784
  "NodeStatus",
660
785
  "MappingStatus",
661
786
  "AssetSource",
@@ -664,6 +789,8 @@ __all__ = [
664
789
  "MorphoMarketRates",
665
790
  "MorphoPosition",
666
791
  "MorphoMarketParams",
792
+ "MorphoPositionBreakdown",
793
+ "morpho_blue_address",
667
794
  "AaveV3FuseReader",
668
795
  "AaveV3PoolAddressesProvider",
669
796
  "AaveV3Reader",
@@ -706,6 +833,10 @@ __all__ = [
706
833
  "OracleNode",
707
834
  "OraclePrice",
708
835
  "build_oracle_mapping",
836
+ "OracleMappingReader",
837
+ "MiddlewarePricedToken",
838
+ "fetch_unpriceable_priced_tokens",
839
+ "PositionData",
709
840
  "UniswapV3Reader",
710
841
  "UniswapV3Position",
711
842
  "RamsesV2Reader",
@@ -714,15 +845,37 @@ __all__ = [
714
845
  "Erc20Holdings",
715
846
  "Finding",
716
847
  "Reconciliation",
848
+ "UnpriceableToken",
717
849
  "VaultState",
718
850
  "VaultValidation",
851
+ "WithdrawQueue",
719
852
  "read_erc20_holdings",
720
853
  "validate_vault",
721
854
  "validate_vault_state",
855
+ "compute_update_groups",
856
+ "compute_update_reach",
857
+ "find_markets_missing_erc20_dependency",
858
+ "find_orphan_fuse_markets",
722
859
  "FeeData",
723
860
  "VaultData",
724
861
  "WithdrawManagerData",
725
862
  "fetch_deployment_info",
726
863
  "fetch_vault_data",
864
+ "resolve_token_decimals",
865
+ "resolve_token_symbol",
727
866
  "build_vault_info_json",
867
+ "MorphoApiError",
868
+ "MorphoApiMarket",
869
+ "PUBLIC_ALLOCATOR_ADDRESSES",
870
+ "VaultAllocation",
871
+ "VaultFlowCap",
872
+ "VaultV1Info",
873
+ "VaultV1MarketAllocation",
874
+ "VaultV2Adapter",
875
+ "VaultV2Cap",
876
+ "VaultV2Info",
877
+ "fetch_market",
878
+ "fetch_vault",
879
+ "build_meta_morpho_json",
880
+ "build_morpho_blue_market_json",
728
881
  ]