ipor-fusion 4.0.0.dev68__tar.gz → 4.0.0.dev74__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.dev68 → ipor_fusion-4.0.0.dev74}/AGENTS.md +17 -5
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/MIGRATION_4.md +19 -5
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/PKG-INFO +27 -1
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/README.md +24 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/examples/advanced_euler_v2_credit_market_base.py +2 -2
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/examples/advanced_euler_v2_looping_arbitrum.py +2 -2
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/examples/composed_hypercore_flow_arbitrum_hyperevm.py +6 -8
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/examples/external_state_margin_leg_base.py +2 -2
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/examples/simple_aave_v3_supply_base.py +1 -1
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/pyproject.toml +3 -1
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/skills/ipor-deploy-vault/SKILL.md +1 -1
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/__init__.py +155 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/cli/market_cmd.py +1 -1
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/cli/options.py +2 -2
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/cli/vault_info_view.py +4 -4
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/core/context.py +16 -17
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/core/contract.py +3 -3
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/core/logs.py +13 -3
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/crosschain/stargate/contracts.py +16 -9
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/crosschain/stargate/layerzero.py +10 -10
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/crosschain/stargate/transport.py +7 -4
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/errors.py +3 -3
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/explorer.py +1 -1
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/fuses/__init__.py +16 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/fuses/base.py +5 -1
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/fuses/crosschain/ccip.py +4 -4
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/fuses/crosschain/stargate.py +4 -3
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/fuses/universal.py +5 -1
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/guide/quickstart.md +1 -1
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/readers/__init__.py +12 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/readers/aave_v3.py +2 -4
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/readers/morpho.py +9 -3
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/readers/oracle_mapping_nodes.py +1 -3
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/readers/oracle_mapping_reader.py +2 -2
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/types.py +3 -1
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/vault_info.py +1 -1
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_crosschain_encoding.py +3 -1
- ipor_fusion-4.0.0.dev74/tests/test_public_api.py +876 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_web3_context.py +1 -1
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/typed_client/consumer.py +41 -39
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/uv.lock +4 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/.claude-plugin/marketplace.json +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/.claude-plugin/plugin.json +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/.env.example +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/.gemini/settings.json +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/.git-blame-ignore-revs +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/.github/workflows/cd.yml +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/.github/workflows/ci.yml +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/.github/workflows/commit-lint.yml +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/.github/workflows/notify-slack.yml +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/.github/workflows/python-build.yml +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/.github/workflows/python-publish.yml +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/.github/workflows/release.yml +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/.github/workflows/report-slack.yml +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/.gitignore +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/.mcp.json +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/.pre-commit-config.yaml +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/.python-version +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/CHANGELOG.md +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/CLAUDE.md +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/CODEOWNERS +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/LICENSE +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/build.sh +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/examples/CONTRIBUTING.md +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/examples/README.md +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/examples/crosschain_ccip_usdc_arbitrum_hyperevm.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/pytest.ini +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/scripts/commit-check.sh +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/scripts/crosschain_readiness.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/about.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/cache.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/chains.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/cli/__init__.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/cli/changelog_cmd.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/cli/config_cmd.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/cli/config_store.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/cli/main.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/cli/oracle_mapping_view.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/cli/vault_cmd.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/cli/vault_health.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/cli/vault_markets_view.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/cli/vault_rendering.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/config/__init__.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/config/roles.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/core/__init__.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/core/access.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/core/address.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/core/erc20.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/core/external_state_executor.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/core/fee_manager.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/core/fuse_action.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/core/fusion_factory.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/core/multicall.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/core/oracle.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/core/plasma_vault.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/core/rewards_manager.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/core/simulation.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/core/withdraw_manager.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/crosschain/__init__.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/crosschain/ccip/__init__.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/crosschain/ccip/chainlink.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/crosschain/ccip/codec.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/crosschain/ccip/contracts.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/crosschain/ccip/events.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/crosschain/ccip/indexer.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/crosschain/ccip/lane.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/crosschain/ccip/quote.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/crosschain/ccip/transport.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/crosschain/contracts.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/crosschain/discovery.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/crosschain/errors.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/crosschain/lane.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/crosschain/logs.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/crosschain/messages.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/crosschain/simulation.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/crosschain/stargate/__init__.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/crosschain/stargate/lane.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/crosschain/transport.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/dependency_graph.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/entry_cli.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/entry_mcp.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/field_docs.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/fuses/aave_v3.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/fuses/async_action.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/fuses/compound_v3.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/fuses/crosschain/__init__.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/fuses/crosschain/base.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/fuses/erc4626.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/fuses/euler_v2.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/fuses/events.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/fuses/external_state.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/fuses/external_state_events.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/fuses/fluid_instadapp.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/fuses/gearbox_v3.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/fuses/hypercore.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/fuses/hypercore_events.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/fuses/merkl.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/fuses/morpho.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/fuses/ramses_v2.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/fuses/uniswap_v3.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/guide/__init__.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/guide/architecture.md +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/guide/glossary.md +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/guide/invariants.md +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/market_ids.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/market_info.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/mcp/__init__.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/mcp/guide.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/mcp/models.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/mcp/server.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/morpho_api.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/py.typed +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/readers/aave_v4.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/readers/compound_v3.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/readers/hypercore.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/readers/hypercore_outcome.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/readers/lending_health.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/readers/oracle_mapping.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/readers/position_manager.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/readers/ramses_v2.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/readers/uniswap_v3.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/readers/unpriceable.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/substrates.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/validation.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/vault_data.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/vault_managers.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/vault_positions.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/src/ipor_fusion/vault_reads.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/UniswapV3UniversalRouter.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/_crosschain.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/_crosschain_lifecycle.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/_crosschain_recovery.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/_euler_v2.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/_foundry.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/_guide.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/_hypercore_model.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/_hypercore_shadow.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/_multicall.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/_simulate.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/_validation.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/addresses.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/conftest.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/constants.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/fixtures/hypercore_hip3_flow.json +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/fixtures/hypercore_market55.json +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/fixtures/vault_info_golden/clean.json +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/fixtures/vault_info_golden/clean.txt +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/fixtures/vault_info_golden/rich.json +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/fixtures/vault_info_golden/rich.txt +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_about.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_access_manager.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_cache.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_chains.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_cli_changelog.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_cli_commands.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_cli_config_store.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_cli_helpers.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_cli_hypercore.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_cli_lending_health.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_cli_market_morpho_blue.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_cli_oracle_mapping.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_cli_pending_requests_scan.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_cli_role_accounts.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_cli_vault_info_golden.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_cli_vault_predates_getters.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_cli_vault_validate.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_contract_call.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_contract_encoder.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_crosschain_ccip_events.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_crosschain_ccip_indexer.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_crosschain_ccip_quote.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_crosschain_chainlink.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_crosschain_contracts.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_crosschain_errors.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_crosschain_lane.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_crosschain_layering.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_crosschain_readiness.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_crosschain_readiness_report.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_crosschain_transport.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_erc20.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_examples_composed_hypercore.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_examples_crosschain.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_examples_euler_looping_arbitrum.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_examples_vaults.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_explorer.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_external_state_events.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_external_state_executor.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_fee_manager.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_fuse_encoding.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_fusion_instance.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_guide.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_hypercore_deployment.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_hypercore_events.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_hypercore_flow.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_hypercore_live.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_hypercore_outcome.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_hypercore_readers.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_hypercore_simulation.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_logs.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_mcp_hypercore.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_mcp_models.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_mcp_server.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_mcp_vault_validate.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_multicall.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_oracle.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_oracle_mapping.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_plasma_vault.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_reader_encoding.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_readiness_selection.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_revert_decoding.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_rewards_manager.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_roles.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_sdk_layering.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_simulate_borrow_aave_v3_mainnet.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_simulate_claim_merkl_wrapper_base.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_simulate_claim_morpho_rewards.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_simulate_crosschain_canary.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_simulate_crosschain_hypercore.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_simulate_crosschain_hyperevm.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_simulate_crosschain_lifecycle.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_simulate_euler_v2_batch_base.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_simulate_euler_v2_credit_market_base.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_simulate_euler_v2_swap_deploy_base.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_simulate_euler_v2_swap_reconfigure_base.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_simulate_euler_v2_swap_registry_base.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_simulate_examples_arbitrum.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_simulate_examples_base.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_simulate_examples_crosschain.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_simulate_external_state_executor_base.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_simulate_fusion_factory_clone_base.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_simulate_looping_aave_v3_base.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_simulate_looping_morpho_blue_base.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_simulate_morpho_blue.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_simulate_pilot_v3.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_simulate_pilot_v4_uniswap.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_simulate_pilot_v5_ramses.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_simulate_pilot_v5_scheduled.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_simulate_plasma_vault_setters_base.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_simulate_readers_integration.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_simulate_release_funds.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_simulate_swap_on_base.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_simulate_vault_from_scratch_base.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_solidity_compiler.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_solidity_mirrors.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_substrates.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_types_and_events.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_unpriceable_tokens.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_validation.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_vault_dep_graph.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_vault_info_onchain_base.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_vault_info_onchain_base_no_withdraw_manager.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/tests/test_vault_simulator_blocks.py +0 -0
- {ipor_fusion-4.0.0.dev68 → ipor_fusion-4.0.0.dev74}/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
|
|
@@ -119,6 +124,15 @@ from_=...)` needs neither, so drop a zero-address placeholder. `execute()` witho
|
|
|
119
124
|
`dataclasses.asdict` form) with every field parsed; use it instead of
|
|
120
125
|
`FusionInstance(**data)`, which passes raw strings into the role-typed fields.
|
|
121
126
|
|
|
127
|
+
**Transactions, LayerZero and constants.** `Web3Context.build_transaction` and
|
|
128
|
+
`Call.build_transaction` return web3's `TxParams` (the same keys; `data` is `0x` hex,
|
|
129
|
+
the fee fields are `Wei`). LayerZero endpoint ids are `LayerZeroEid`:
|
|
130
|
+
`StargateChain.eid`, `Packet.src_eid` / `dst_eid`, `EnforcedOptionParam.eid`,
|
|
131
|
+
`executor_eid()` and `eid_of()` return it and `chain_id_of`, `peers`, `lz_receive_calldata(src_eid=)`
|
|
132
|
+
and the Stargate fuse's `eid=` take it (`LayerZeroEid(30101)`).
|
|
133
|
+
`encode_oft_compose_msg(*, nonce=, src_eid=, amount_ld=, compose_msg=)` takes
|
|
134
|
+
keyword arguments only. `ZERO_ADDRESS` is a `ChecksumAddress` (same value).
|
|
135
|
+
|
|
122
136
|
**Markets and substrates.** Every `IporFusionMarkets` member is a `MarketId`.
|
|
123
137
|
`decode_substrate`, `market_name`, `format_market_label` take `MarketId`.
|
|
124
138
|
|
|
@@ -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.dev74
|
|
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.dev68 → ipor_fusion-4.0.0.dev74}/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.dev68 → ipor_fusion-4.0.0.dev74}/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.dev68 → ipor_fusion-4.0.0.dev74}/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.dev74"
|
|
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,
|
|
@@ -325,6 +399,7 @@ from ipor_fusion.types import (
|
|
|
325
399
|
HyperCoreClientOrderId,
|
|
326
400
|
HyperCoreOrderId,
|
|
327
401
|
HyperCoreTokenIndex,
|
|
402
|
+
LayerZeroEid,
|
|
328
403
|
Liquidity,
|
|
329
404
|
MappingStatus,
|
|
330
405
|
MarginTableId,
|
|
@@ -360,8 +435,10 @@ from ipor_fusion.validation import (
|
|
|
360
435
|
Erc20Holdings,
|
|
361
436
|
Finding,
|
|
362
437
|
Reconciliation,
|
|
438
|
+
UnpriceableToken,
|
|
363
439
|
VaultState,
|
|
364
440
|
VaultValidation,
|
|
441
|
+
WithdrawQueue,
|
|
365
442
|
read_erc20_holdings,
|
|
366
443
|
validate_vault,
|
|
367
444
|
validate_vault_state,
|
|
@@ -372,6 +449,8 @@ from ipor_fusion.vault_data import (
|
|
|
372
449
|
WithdrawManagerData,
|
|
373
450
|
fetch_deployment_info,
|
|
374
451
|
fetch_vault_data,
|
|
452
|
+
resolve_token_decimals,
|
|
453
|
+
resolve_token_symbol,
|
|
375
454
|
)
|
|
376
455
|
from ipor_fusion.vault_info import build_vault_info_json
|
|
377
456
|
|
|
@@ -438,6 +517,9 @@ __all__ = [
|
|
|
438
517
|
"PriceOracleMiddlewareManager",
|
|
439
518
|
"price_oracle_middleware",
|
|
440
519
|
"AssetPriceSource",
|
|
520
|
+
"FusionFactory",
|
|
521
|
+
"FusionInstance",
|
|
522
|
+
"CloneArgs",
|
|
441
523
|
"ExternalStateExecutor",
|
|
442
524
|
"BalanceFuseSnapshot",
|
|
443
525
|
"ExternalStateVaultState",
|
|
@@ -502,6 +584,38 @@ __all__ = [
|
|
|
502
584
|
"CcipTokenLane",
|
|
503
585
|
"ccip_token_lane",
|
|
504
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",
|
|
505
619
|
"SYNTHETIC_TOKEN_SOURCE",
|
|
506
620
|
"erc20_balance_slot",
|
|
507
621
|
"DeliveryCall",
|
|
@@ -568,6 +682,14 @@ __all__ = [
|
|
|
568
682
|
"SettlementMode",
|
|
569
683
|
"TimeInForce",
|
|
570
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",
|
|
571
693
|
"UniversalTokenSwapperAbi",
|
|
572
694
|
"UniversalTokenSwapperFuse",
|
|
573
695
|
"UniversalTokenSwapperSubstrates",
|
|
@@ -606,7 +728,10 @@ __all__ = [
|
|
|
606
728
|
"UnsupportedVaultVersionError",
|
|
607
729
|
"CUSTOM_ERRORS",
|
|
608
730
|
"decode_custom_error",
|
|
731
|
+
"get_revert_reason",
|
|
609
732
|
"register_custom_errors",
|
|
733
|
+
"get_contract_name",
|
|
734
|
+
"get_deployment_tx",
|
|
610
735
|
"CHAIN_NAMES",
|
|
611
736
|
"CHAIN_NAME_TO_ID",
|
|
612
737
|
"SUPPORTED_CHAIN_IDS",
|
|
@@ -650,10 +775,12 @@ __all__ = [
|
|
|
650
775
|
"ProposalId",
|
|
651
776
|
"ReturnRequestId",
|
|
652
777
|
"StargateAssetId",
|
|
778
|
+
"LayerZeroEid",
|
|
653
779
|
"TransferId",
|
|
654
780
|
"Price",
|
|
655
781
|
"Period",
|
|
656
782
|
"MAX_UINT256",
|
|
783
|
+
"ZERO_ADDRESS",
|
|
657
784
|
"NodeStatus",
|
|
658
785
|
"MappingStatus",
|
|
659
786
|
"AssetSource",
|
|
@@ -662,6 +789,8 @@ __all__ = [
|
|
|
662
789
|
"MorphoMarketRates",
|
|
663
790
|
"MorphoPosition",
|
|
664
791
|
"MorphoMarketParams",
|
|
792
|
+
"MorphoPositionBreakdown",
|
|
793
|
+
"morpho_blue_address",
|
|
665
794
|
"AaveV3FuseReader",
|
|
666
795
|
"AaveV3PoolAddressesProvider",
|
|
667
796
|
"AaveV3Reader",
|
|
@@ -704,6 +833,10 @@ __all__ = [
|
|
|
704
833
|
"OracleNode",
|
|
705
834
|
"OraclePrice",
|
|
706
835
|
"build_oracle_mapping",
|
|
836
|
+
"OracleMappingReader",
|
|
837
|
+
"MiddlewarePricedToken",
|
|
838
|
+
"fetch_unpriceable_priced_tokens",
|
|
839
|
+
"PositionData",
|
|
707
840
|
"UniswapV3Reader",
|
|
708
841
|
"UniswapV3Position",
|
|
709
842
|
"RamsesV2Reader",
|
|
@@ -712,15 +845,37 @@ __all__ = [
|
|
|
712
845
|
"Erc20Holdings",
|
|
713
846
|
"Finding",
|
|
714
847
|
"Reconciliation",
|
|
848
|
+
"UnpriceableToken",
|
|
715
849
|
"VaultState",
|
|
716
850
|
"VaultValidation",
|
|
851
|
+
"WithdrawQueue",
|
|
717
852
|
"read_erc20_holdings",
|
|
718
853
|
"validate_vault",
|
|
719
854
|
"validate_vault_state",
|
|
855
|
+
"compute_update_groups",
|
|
856
|
+
"compute_update_reach",
|
|
857
|
+
"find_markets_missing_erc20_dependency",
|
|
858
|
+
"find_orphan_fuse_markets",
|
|
720
859
|
"FeeData",
|
|
721
860
|
"VaultData",
|
|
722
861
|
"WithdrawManagerData",
|
|
723
862
|
"fetch_deployment_info",
|
|
724
863
|
"fetch_vault_data",
|
|
864
|
+
"resolve_token_decimals",
|
|
865
|
+
"resolve_token_symbol",
|
|
725
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",
|
|
726
881
|
]
|
|
@@ -51,7 +51,7 @@ class MarketIdType(click.ParamType):
|
|
|
51
51
|
|
|
52
52
|
name = "marketId"
|
|
53
53
|
|
|
54
|
-
def convert(self, value, param, ctx):
|
|
54
|
+
def convert(self, value, param, ctx):
|
|
55
55
|
if not isinstance(value, str):
|
|
56
56
|
self.fail(f"expected string, got {type(value).__name__}", param, ctx)
|
|
57
57
|
try:
|