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.
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/AGENTS.md +17 -5
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/MIGRATION_4.md +20 -5
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/PKG-INFO +27 -1
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/README.md +24 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/examples/advanced_euler_v2_credit_market_base.py +2 -2
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/examples/advanced_euler_v2_looping_arbitrum.py +2 -2
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/examples/composed_hypercore_flow_arbitrum_hyperevm.py +6 -8
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/examples/external_state_margin_leg_base.py +2 -2
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/examples/simple_aave_v3_supply_base.py +1 -1
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/pyproject.toml +3 -1
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/skills/ipor-deploy-vault/SKILL.md +1 -1
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/__init__.py +153 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/chains.py +28 -28
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/explorer.py +3 -1
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/fuses/__init__.py +16 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/guide/quickstart.md +1 -1
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/market_ids.py +0 -7
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/morpho_api.py +34 -12
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/readers/__init__.py +12 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/readers/hypercore.py +3 -2
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/readers/lending_health.py +5 -10
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/readers/morpho.py +10 -10
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/substrates.py +2 -3
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/vault_info.py +9 -9
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_cli_lending_health.py +3 -4
- ipor_fusion-4.0.0.dev78/tests/test_public_api.py +876 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_solidity_mirrors.py +0 -2
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_substrates.py +1 -4
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/typed_client/consumer.py +33 -39
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/uv.lock +4 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/.claude-plugin/marketplace.json +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/.claude-plugin/plugin.json +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/.env.example +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/.gemini/settings.json +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/.git-blame-ignore-revs +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/.github/workflows/cd.yml +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/.github/workflows/ci.yml +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/.github/workflows/commit-lint.yml +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/.github/workflows/notify-slack.yml +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/.github/workflows/python-build.yml +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/.github/workflows/python-publish.yml +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/.github/workflows/release.yml +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/.github/workflows/report-slack.yml +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/.gitignore +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/.mcp.json +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/.pre-commit-config.yaml +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/.python-version +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/CHANGELOG.md +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/CLAUDE.md +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/CODEOWNERS +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/LICENSE +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/build.sh +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/examples/CONTRIBUTING.md +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/examples/README.md +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/examples/crosschain_ccip_usdc_arbitrum_hyperevm.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/pytest.ini +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/scripts/commit-check.sh +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/scripts/crosschain_readiness.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/about.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/cache.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/cli/__init__.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/cli/changelog_cmd.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/cli/config_cmd.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/cli/config_store.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/cli/main.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/cli/market_cmd.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/cli/options.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/cli/oracle_mapping_view.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/cli/vault_cmd.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/cli/vault_health.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/cli/vault_info_view.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/cli/vault_markets_view.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/cli/vault_rendering.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/config/__init__.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/config/roles.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/core/__init__.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/core/access.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/core/address.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/core/context.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/core/contract.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/core/erc20.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/core/external_state_executor.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/core/fee_manager.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/core/fuse_action.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/core/fusion_factory.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/core/logs.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/core/multicall.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/core/oracle.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/core/plasma_vault.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/core/rewards_manager.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/core/simulation.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/core/withdraw_manager.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/crosschain/__init__.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/crosschain/ccip/__init__.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/crosschain/ccip/chainlink.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/crosschain/ccip/codec.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/crosschain/ccip/contracts.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/crosschain/ccip/events.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/crosschain/ccip/indexer.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/crosschain/ccip/lane.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/crosschain/ccip/quote.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/crosschain/ccip/transport.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/crosschain/contracts.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/crosschain/discovery.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/crosschain/errors.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/crosschain/lane.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/crosschain/logs.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/crosschain/messages.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/crosschain/simulation.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/crosschain/stargate/__init__.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/crosschain/stargate/contracts.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/crosschain/stargate/lane.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/crosschain/stargate/layerzero.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/crosschain/stargate/transport.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/crosschain/transport.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/dependency_graph.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/entry_cli.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/entry_mcp.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/errors.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/field_docs.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/fuses/aave_v3.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/fuses/async_action.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/fuses/base.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/fuses/compound_v3.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/fuses/crosschain/__init__.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/fuses/crosschain/base.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/fuses/crosschain/ccip.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/fuses/crosschain/stargate.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/fuses/erc4626.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/fuses/euler_v2.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/fuses/events.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/fuses/external_state.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/fuses/external_state_events.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/fuses/fluid_instadapp.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/fuses/gearbox_v3.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/fuses/hypercore.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/fuses/hypercore_events.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/fuses/merkl.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/fuses/morpho.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/fuses/ramses_v2.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/fuses/uniswap_v3.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/fuses/universal.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/guide/__init__.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/guide/architecture.md +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/guide/glossary.md +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/guide/invariants.md +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/market_info.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/mcp/__init__.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/mcp/guide.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/mcp/models.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/mcp/server.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/py.typed +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/readers/aave_v3.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/readers/aave_v4.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/readers/compound_v3.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/readers/hypercore_outcome.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/readers/oracle_mapping.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/readers/oracle_mapping_nodes.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/readers/oracle_mapping_reader.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/readers/position_manager.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/readers/ramses_v2.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/readers/uniswap_v3.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/readers/unpriceable.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/types.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/validation.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/vault_data.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/vault_managers.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/vault_positions.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/src/ipor_fusion/vault_reads.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/UniswapV3UniversalRouter.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/_crosschain.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/_crosschain_lifecycle.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/_crosschain_recovery.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/_euler_v2.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/_foundry.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/_guide.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/_hypercore_model.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/_hypercore_shadow.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/_multicall.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/_simulate.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/_validation.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/addresses.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/conftest.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/constants.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/fixtures/hypercore_hip3_flow.json +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/fixtures/hypercore_market55.json +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/fixtures/vault_info_golden/clean.json +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/fixtures/vault_info_golden/clean.txt +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/fixtures/vault_info_golden/rich.json +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/fixtures/vault_info_golden/rich.txt +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_about.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_access_manager.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_cache.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_chains.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_cli_changelog.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_cli_commands.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_cli_config_store.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_cli_helpers.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_cli_hypercore.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_cli_market_morpho_blue.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_cli_oracle_mapping.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_cli_pending_requests_scan.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_cli_role_accounts.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_cli_vault_info_golden.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_cli_vault_predates_getters.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_cli_vault_validate.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_contract_call.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_contract_encoder.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_crosschain_ccip_events.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_crosschain_ccip_indexer.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_crosschain_ccip_quote.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_crosschain_chainlink.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_crosschain_contracts.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_crosschain_encoding.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_crosschain_errors.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_crosschain_lane.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_crosschain_layering.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_crosschain_readiness.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_crosschain_readiness_report.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_crosschain_transport.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_erc20.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_examples_composed_hypercore.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_examples_crosschain.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_examples_euler_looping_arbitrum.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_examples_vaults.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_explorer.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_external_state_events.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_external_state_executor.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_fee_manager.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_fuse_encoding.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_fusion_instance.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_guide.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_hypercore_deployment.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_hypercore_events.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_hypercore_flow.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_hypercore_live.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_hypercore_outcome.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_hypercore_readers.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_hypercore_simulation.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_logs.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_mcp_hypercore.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_mcp_models.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_mcp_server.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_mcp_vault_validate.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_multicall.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_oracle.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_oracle_mapping.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_plasma_vault.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_reader_encoding.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_readiness_selection.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_revert_decoding.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_rewards_manager.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_roles.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_sdk_layering.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_simulate_borrow_aave_v3_mainnet.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_simulate_claim_merkl_wrapper_base.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_simulate_claim_morpho_rewards.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_simulate_crosschain_canary.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_simulate_crosschain_hypercore.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_simulate_crosschain_hyperevm.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_simulate_crosschain_lifecycle.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_simulate_euler_v2_batch_base.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_simulate_euler_v2_credit_market_base.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_simulate_euler_v2_swap_deploy_base.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_simulate_euler_v2_swap_reconfigure_base.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_simulate_euler_v2_swap_registry_base.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_simulate_examples_arbitrum.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_simulate_examples_base.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_simulate_examples_crosschain.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_simulate_external_state_executor_base.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_simulate_fusion_factory_clone_base.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_simulate_looping_aave_v3_base.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_simulate_looping_morpho_blue_base.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_simulate_morpho_blue.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_simulate_pilot_v3.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_simulate_pilot_v4_uniswap.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_simulate_pilot_v5_ramses.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_simulate_pilot_v5_scheduled.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_simulate_plasma_vault_setters_base.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_simulate_readers_integration.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_simulate_release_funds.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_simulate_swap_on_base.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_simulate_vault_from_scratch_base.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_solidity_compiler.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_types_and_events.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_unpriceable_tokens.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_validation.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_vault_dep_graph.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_vault_info_onchain_base.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_vault_info_onchain_base_no_withdraw_manager.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_vault_simulator_blocks.py +0 -0
- {ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/tests/test_web3_context.py +0 -0
- {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
|
-
-
|
|
157
|
-
|
|
158
|
-
`
|
|
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__
|
|
312
|
-
row in the README protocol
|
|
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
|
|
19
|
-
`BlockIdentifier` from `web3.types
|
|
20
|
-
|
|
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.
|
|
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**:
|
{ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/examples/advanced_euler_v2_credit_market_base.py
RENAMED
|
@@ -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,
|
{ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/examples/advanced_euler_v2_looping_arbitrum.py
RENAMED
|
@@ -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,
|
{ipor_fusion-4.0.0.dev71 → ipor_fusion-4.0.0.dev78}/examples/external_state_margin_leg_base.py
RENAMED
|
@@ -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.
|
|
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
|
]
|