ipor-fusion 4.0.0.dev315__tar.gz → 4.0.0.dev325__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.dev315 → ipor_fusion-4.0.0.dev325}/AGENTS.md +12 -4
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/PKG-INFO +28 -1
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/README.md +27 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/examples/README.md +41 -0
- ipor_fusion-4.0.0.dev325/examples/crosschain_ccip_usdc_arbitrum_hyperevm.py +1460 -0
- ipor_fusion-4.0.0.dev325/examples/hypercore_vault_official_deployment_hyperevm.py +908 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/pyproject.toml +1 -1
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/fuses/hypercore.py +0 -3
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/_foundry.py +15 -5
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/_hypercore_model.py +4 -5
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/_hypercore_shadow.py +42 -13
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/fixtures/hypercore_official.json +5 -0
- ipor_fusion-4.0.0.dev325/tests/test_examples_crosschain.py +312 -0
- ipor_fusion-4.0.0.dev325/tests/test_examples_hypercore_hyperevm.py +215 -0
- ipor_fusion-4.0.0.dev325/tests/test_hypercore_simulation.py +16 -0
- ipor_fusion-4.0.0.dev325/tests/test_simulate_examples_crosschain.py +164 -0
- ipor_fusion-4.0.0.dev325/tests/test_simulate_examples_hyperevm.py +128 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_solidity_compiler.py +3 -0
- ipor_fusion-4.0.0.dev315/tests/test_hypercore_simulation.py +0 -176
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/.claude-plugin/marketplace.json +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/.claude-plugin/plugin.json +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/.env.example +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/.gemini/settings.json +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/.git-blame-ignore-revs +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/.github/workflows/cd.yml +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/.github/workflows/ci.yml +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/.github/workflows/commit-lint.yml +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/.github/workflows/notify-slack.yml +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/.github/workflows/python-build.yml +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/.github/workflows/python-publish.yml +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/.github/workflows/release.yml +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/.github/workflows/report-slack.yml +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/.gitignore +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/.mcp.json +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/.pre-commit-config.yaml +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/.python-version +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/CHANGELOG.md +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/CLAUDE.md +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/CODEOWNERS +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/LICENSE +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/MIGRATION_4.md +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/build.sh +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/examples/CONTRIBUTING.md +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/examples/advanced_euler_v2_credit_market_base.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/examples/advanced_euler_v2_looping_arbitrum.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/examples/external_state_margin_leg_base.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/examples/simple_aave_v3_supply_base.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/pytest.ini +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/scripts/commit-check.sh +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/scripts/fusion_error_signatures.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/skills/ipor-deploy-vault/SKILL.md +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/__init__.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/about.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/cache.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/chains.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/cli/__init__.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/cli/address_cmd.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/cli/changelog_cmd.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/cli/config_cmd.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/cli/config_store.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/cli/main.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/cli/market_cmd.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/cli/options.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/cli/oracle_mapping_view.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/cli/preflight_cmd.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/cli/vault_cmd.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/cli/vault_health.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/cli/vault_info_view.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/cli/vault_markets_view.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/cli/vault_rendering.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/config/__init__.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/config/roles.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/core/__init__.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/core/access.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/core/address.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/core/context.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/core/context_manager.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/core/contract.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/core/erc20.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/core/external_state_executor.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/core/fee_manager.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/core/fuse.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/core/fuse_action.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/core/fuse_decoding.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/core/fusion_factory.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/core/logs.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/core/multicall.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/core/oracle.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/core/plasma_vault.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/core/rewards_manager.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/core/simulation.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/core/simulation_result.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/core/withdraw_manager.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/crosschain/__init__.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/crosschain/ccip/__init__.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/crosschain/ccip/chainlink.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/crosschain/ccip/codec.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/crosschain/ccip/contracts.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/crosschain/ccip/events.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/crosschain/ccip/indexer.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/crosschain/ccip/lane.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/crosschain/ccip/quote.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/crosschain/ccip/transport.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/crosschain/contracts.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/crosschain/discovery.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/crosschain/errors.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/crosschain/fuses/__init__.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/crosschain/fuses/base.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/crosschain/fuses/ccip.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/crosschain/fuses/stargate.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/crosschain/lane.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/crosschain/logs.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/crosschain/messages.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/crosschain/simulation.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/crosschain/stargate/__init__.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/crosschain/stargate/contracts.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/crosschain/stargate/lane.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/crosschain/stargate/layerzero.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/crosschain/stargate/transport.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/crosschain/transport.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/dependency_graph.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/entry_cli.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/entry_mcp.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/errors.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/explorer.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/field_docs.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/fuses/__init__.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/fuses/aave_v3.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/fuses/async_action.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/fuses/base.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/fuses/compound_v3.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/fuses/erc4626.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/fuses/euler_v2.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/fuses/events.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/fuses/external_state.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/fuses/external_state_event_decoding.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/fuses/fluid_instadapp.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/fuses/gearbox_v3.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/fuses/hypercore_event_decoding.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/fuses/merkl.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/fuses/morpho.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/fuses/ramses_v2.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/fuses/uniswap_v3.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/fuses/universal.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/fusion_errors.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/guide/__init__.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/guide/architecture.md +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/guide/glossary.md +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/guide/invariants.md +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/guide/quickstart.md +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/hypercore/__init__.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/market_ids.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/market_info.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/mcp/__init__.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/mcp/guide.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/mcp/models.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/mcp/server.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/morpho_api.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/preflight.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/py.typed +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/readers/__init__.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/readers/aave_v3.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/readers/aave_v4.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/readers/compound_v3.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/readers/hypercore.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/readers/hypercore_outcome.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/readers/lending_health.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/readers/morpho.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/readers/oracle_mapping.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/readers/oracle_mapping_nodes.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/readers/oracle_mapping_reader.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/readers/position_manager.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/readers/ramses_v2.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/readers/uniswap_v3.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/readers/unpriceable.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/registry.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/substrates.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/types.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/validation.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/vault_data.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/vault_erc20.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/vault_info.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/vault_managers.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/vault_positions.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/src/ipor_fusion/vault_reads.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/UniswapV3UniversalRouter.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/_crosschain.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/_crosschain_lifecycle.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/_crosschain_recovery.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/_euler_v2.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/_event_args.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/_fake_rpc.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/_golden.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/_guide.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/_live.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/_multicall.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/_oracle_mapping_fake.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/_simulate.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/_validation.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/addresses.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/conftest.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/constants.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/fixtures/hypercore_hip3_flow.json +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/fixtures/hypercore_market55.json +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/fixtures/market_golden/meta_morpho_v1.json +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/fixtures/market_golden/meta_morpho_v1.mcp.json +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/fixtures/market_golden/meta_morpho_v2.json +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/fixtures/market_golden/meta_morpho_v2.mcp.json +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/fixtures/market_golden/morpho_api/market.json +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/fixtures/market_golden/morpho_api/vault_v1.json +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/fixtures/market_golden/morpho_api/vault_v2.json +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/fixtures/market_golden/morpho_api/vault_v2_not_found.json +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/fixtures/market_golden/morpho_blue.json +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/fixtures/market_golden/morpho_blue.mcp.json +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/fixtures/market_golden/morpho_blue_api_error.json +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/fixtures/market_golden/morpho_blue_api_error.mcp.json +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/fixtures/market_golden/morpho_blue_no_api.json +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/fixtures/market_golden/morpho_blue_no_api.mcp.json +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/fixtures/oracle_mapping_golden/mapping.json +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/fixtures/oracle_mapping_golden/mapping.mcp.json +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/fixtures/simulate_v1_request.json +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/fixtures/vault_info_golden/clean.json +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/fixtures/vault_info_golden/clean.mcp.json +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/fixtures/vault_info_golden/clean.txt +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/fixtures/vault_info_golden/deployment_error.json +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/fixtures/vault_info_golden/deployment_error.mcp.json +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/fixtures/vault_info_golden/deployment_error.txt +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/fixtures/vault_info_golden/fetched.cli.json +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/fixtures/vault_info_golden/fetched.json +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/fixtures/vault_info_golden/fetched.mcp.json +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/fixtures/vault_info_golden/full.json +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/fixtures/vault_info_golden/full.mcp.json +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/fixtures/vault_info_golden/full.txt +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/fixtures/vault_info_golden/rich.json +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/fixtures/vault_info_golden/rich.mcp.json +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/fixtures/vault_info_golden/rich.txt +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_about.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_access_manager.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_cache.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_chains.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_cli_address.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_cli_changelog.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_cli_commands.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_cli_config_store.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_cli_helpers.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_cli_hypercore.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_cli_lending_health.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_cli_market_golden.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_cli_market_morpho_blue.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_cli_mcp_parity.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_cli_oracle_mapping.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_cli_oracle_mapping_golden.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_cli_pending_requests_scan.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_cli_preflight.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_cli_role_accounts.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_cli_vault_info_golden.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_cli_vault_predates_getters.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_cli_vault_validate.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_contract_call.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_contract_encoder.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_crosschain_ccip_events.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_crosschain_ccip_indexer.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_crosschain_ccip_quote.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_crosschain_chainlink.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_crosschain_contracts.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_crosschain_encoding.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_crosschain_errors.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_crosschain_lane.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_crosschain_layering.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_crosschain_transport.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_docs_typing.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_erc20.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_error_hierarchy.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_examples_euler_looping_arbitrum.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_examples_vaults.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_explorer.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_external_state_events.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_external_state_executor.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_fee_manager.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_fuse_decoding.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_fuse_encoding.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_fusion_errors.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_fusion_instance.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_governance_wrappers.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_guide.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_hypercore_deployment.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_hypercore_events.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_hypercore_flow.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_hypercore_live.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_hypercore_outcome.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_hypercore_readers.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_logs.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_mcp_address.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_mcp_hypercore.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_mcp_models.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_mcp_preflight.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_mcp_server.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_mcp_vault_validate.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_multicall.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_oracle.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_oracle_mapping.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_plasma_vault.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_preflight.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_public_api.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_public_type_reachability.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_reader_encoding.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_registry.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_revert_decoding.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_rewards_manager.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_roles.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_sdk_layering.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_simulate_borrow_aave_v3_mainnet.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_simulate_claim_merkl_wrapper_base.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_simulate_claim_morpho_rewards.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_simulate_crosschain_hyperevm.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_simulate_euler_v2_batch_base.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_simulate_euler_v2_credit_market_base.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_simulate_euler_v2_swap_deploy_base.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_simulate_euler_v2_swap_reconfigure_base.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_simulate_euler_v2_swap_registry_base.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_simulate_examples_arbitrum.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_simulate_examples_base.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_simulate_external_state_executor_base.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_simulate_fusion_factory_clone_base.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_simulate_looping_aave_v3_base.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_simulate_looping_morpho_blue_base.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_simulate_morpho_blue.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_simulate_pilot_v3.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_simulate_pilot_v4_uniswap.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_simulate_pilot_v5_ramses.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_simulate_pilot_v5_scheduled.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_simulate_plasma_vault_setters_base.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_simulate_preflight_base.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_simulate_readers_integration.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_simulate_release_funds.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_simulate_swap_on_base.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_simulate_timelock_base.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_simulate_vault_from_scratch_base.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_simulation_errors.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_simulation_observation.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_solidity_mirrors.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_substrates.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_types_and_events.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_unpriceable_tokens.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_validation.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_vault_data_block.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_vault_dep_graph.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_vault_info_fetched_golden.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_vault_info_onchain_base.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_vault_info_onchain_base_no_withdraw_manager.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_vault_reconciliation_onchain_base.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_vault_simulator_blocks.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_web3_context.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/test_withdraw_manager.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/typed_client/consumer.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/tests/typed_client/rejected.py +0 -0
- {ipor_fusion-4.0.0.dev315 → ipor_fusion-4.0.0.dev325}/uv.lock +0 -0
|
@@ -79,11 +79,15 @@ supports only that release, so there is no live-pair generation. It needs
|
|
|
79
79
|
`IPOR_FUSION_CONTRACTS_DIR` at that revision; a checkout without `node_modules` also
|
|
80
80
|
needs `IPOR_FUSION_FOUNDRY_REMAPPINGS` for OpenZeppelin. `test_crosschain_ccip_events.py`
|
|
81
81
|
mirrors the CCIP event registry from a checkout at its own `CONTRACTS_REVISION`.
|
|
82
|
+
`test_simulate_examples_crosschain.py` runs the crosschain example against the deployed
|
|
83
|
+
(unconfigured) release factory and fuses: it builds the executor and dispatcher creation
|
|
84
|
+
codes from the same checkout, linked against the example's `RELEASE_LIBRARIES`, proves the
|
|
85
|
+
deployed runtimes are that build, and needs `ARBITRUM_PROVIDER_URL`,
|
|
86
|
+
`HYPEREVM_PROVIDER_URL` and `IPOR_FUSION_CONTRACTS_DIR` (a missing one is an `_live` skip).
|
|
82
87
|
`test_solidity_compiler.py` unit-tests that compiler helper (`tests/_foundry.py`)
|
|
83
88
|
offline, with `forge` and `git` mocked. The checkout-based tests above skip when their
|
|
84
89
|
external prerequisites are unavailable. `test_hypercore_live.py`,
|
|
85
|
-
`test_hypercore_deployment.py`
|
|
86
|
-
`HYPEREVM_PROVIDER_URL` as well.
|
|
90
|
+
and `test_hypercore_deployment.py` need `HYPEREVM_PROVIDER_URL` as well.
|
|
87
91
|
HyperCore (market 55) cannot be simulated directly: the HyperEVM RPC ignores code
|
|
88
92
|
overrides at the precompile addresses `0x800`–`0x813`, and the public Hyperliquid RPC
|
|
89
93
|
has no `eth_simulateV1`. `tests/_hypercore_shadow.py` therefore compiles the HyperCore
|
|
@@ -93,8 +97,12 @@ CoreWriter constants redirected to ordinary addresses, proves the rest is identi
|
|
|
93
97
|
the deployed runtimes, and `tests/_hypercore_model.py` answers those addresses through
|
|
94
98
|
`VaultSimulator.with_state_override_provider`. Core never applies anything there: the
|
|
95
99
|
tests prove EVM validation under supplied Core state. `test_hypercore_simulation.py`
|
|
96
|
-
|
|
97
|
-
`
|
|
100
|
+
pins the shadow guard offline. `test_simulate_examples_hyperevm.py` runs the HyperCore
|
|
101
|
+
example on the official deployment (`fixtures/hypercore_official.json`) at its pinned
|
|
102
|
+
block: the wiring needs only `HYPEREVM_PROVIDER_URL`; the Core leg also needs the source
|
|
103
|
+
directory at the fixture's `build.source_revision` and compiles with its
|
|
104
|
+
`build.optimizer_runs` (the deployed set reproduces only with that setting, not the
|
|
105
|
+
checkout's default profile), the pending reader included.
|
|
98
106
|
|
|
99
107
|
## Conventions
|
|
100
108
|
|
|
@@ -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.dev325
|
|
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
|
|
@@ -392,6 +392,15 @@ ever signed or broadcast.
|
|
|
392
392
|
- [External-state margin leg](https://github.com/IPOR-Labs/ipor-fusion.py/blob/main/examples/external_state_margin_leg_base.py) — a vault whose capital
|
|
393
393
|
sits off-chain: typed market-50 substrates, a dual-custodian propose/confirm marking the NAV,
|
|
394
394
|
the scheduled-withdrawal prep an alpha performs, and a mismatched confirmation being rejected.
|
|
395
|
+
- [Crosschain CCIP vault, Arbitrum hub and HyperEVM spoke](https://github.com/IPOR-Labs/ipor-fusion.py/blob/main/examples/crosschain_ccip_usdc_arbitrum_hyperevm.py) —
|
|
396
|
+
the released crosschain contracts as deployed: configure the CCIP factory pair as its owner,
|
|
397
|
+
create both vaults and the executor, wire the crosschain market and NAV pre-hook, deploy the
|
|
398
|
+
dispatcher, then supply → attest → DEPOSIT → REDEEM → recall → claim USDC (preview feature).
|
|
399
|
+
- [HyperCore vault on the official deployment](https://github.com/IPOR-Labs/ipor-fusion.py/blob/main/examples/hypercore_vault_official_deployment_hyperevm.py) —
|
|
400
|
+
a HyperEVM vault that trades on Hyperliquid Core (market 55, preview): wiring the published
|
|
401
|
+
HyperCore fuses, pre-hooks and grants on a factory clone, and building the Core leg (bridge,
|
|
402
|
+
dex transfers, an order and its reduce-only close, Core → EVM) as unsigned `execute` calldata.
|
|
403
|
+
Core execution is never simulated; see the example for what is.
|
|
395
404
|
```bash
|
|
396
405
|
export BASE_PROVIDER_URL="https://base-mainnet.g.alchemy.com/v2/YOUR_KEY"
|
|
397
406
|
uv run python examples/simple_aave_v3_supply_base.py
|
|
@@ -399,10 +408,28 @@ uv run python examples/advanced_euler_v2_credit_market_base.py
|
|
|
399
408
|
uv run python examples/external_state_margin_leg_base.py
|
|
400
409
|
```
|
|
401
410
|
|
|
411
|
+
The crosschain example needs Arbitrum and HyperEVM archive RPCs and the executor and dispatcher
|
|
412
|
+
creation codes built with Foundry from the contracts release it pins; run without them, it prints
|
|
413
|
+
the `forge inspect` commands that build them:
|
|
414
|
+
|
|
415
|
+
```bash
|
|
416
|
+
export ARBITRUM_PROVIDER_URL="https://arb-mainnet.g.alchemy.com/v2/YOUR_KEY"
|
|
417
|
+
export HYPEREVM_PROVIDER_URL="https://YOUR_HYPEREVM_ARCHIVE_NODE"
|
|
418
|
+
export CCIP_EXECUTOR_CREATION_CODE_FILE=executor.hex CCIP_DISPATCHER_CREATION_CODE_FILE=dispatcher.hex
|
|
419
|
+
uv run python examples/crosschain_ccip_usdc_arbitrum_hyperevm.py
|
|
420
|
+
```
|
|
421
|
+
|
|
402
422
|
No RPC key? `BASE_PROVIDER_URL=https://mainnet.base.org` (Base's public RPC) runs the examples out of
|
|
403
423
|
the box — it supports `eth_simulateV1` and serves their pinned blocks. It is rate-limited, so use a
|
|
404
424
|
dedicated archive node for repeated or CI runs.
|
|
405
425
|
|
|
426
|
+
The HyperCore example runs on HyperEVM:
|
|
427
|
+
|
|
428
|
+
```bash
|
|
429
|
+
export HYPEREVM_PROVIDER_URL="https://YOUR_HYPEREVM_ARCHIVE_NODE"
|
|
430
|
+
uv run python examples/hypercore_vault_official_deployment_hyperevm.py
|
|
431
|
+
```
|
|
432
|
+
|
|
406
433
|
## Public API and stability
|
|
407
434
|
|
|
408
435
|
The supported API is `ipor_fusion.__all__`: import from `ipor_fusion`. Removing or
|
|
@@ -343,6 +343,15 @@ ever signed or broadcast.
|
|
|
343
343
|
- [External-state margin leg](https://github.com/IPOR-Labs/ipor-fusion.py/blob/main/examples/external_state_margin_leg_base.py) — a vault whose capital
|
|
344
344
|
sits off-chain: typed market-50 substrates, a dual-custodian propose/confirm marking the NAV,
|
|
345
345
|
the scheduled-withdrawal prep an alpha performs, and a mismatched confirmation being rejected.
|
|
346
|
+
- [Crosschain CCIP vault, Arbitrum hub and HyperEVM spoke](https://github.com/IPOR-Labs/ipor-fusion.py/blob/main/examples/crosschain_ccip_usdc_arbitrum_hyperevm.py) —
|
|
347
|
+
the released crosschain contracts as deployed: configure the CCIP factory pair as its owner,
|
|
348
|
+
create both vaults and the executor, wire the crosschain market and NAV pre-hook, deploy the
|
|
349
|
+
dispatcher, then supply → attest → DEPOSIT → REDEEM → recall → claim USDC (preview feature).
|
|
350
|
+
- [HyperCore vault on the official deployment](https://github.com/IPOR-Labs/ipor-fusion.py/blob/main/examples/hypercore_vault_official_deployment_hyperevm.py) —
|
|
351
|
+
a HyperEVM vault that trades on Hyperliquid Core (market 55, preview): wiring the published
|
|
352
|
+
HyperCore fuses, pre-hooks and grants on a factory clone, and building the Core leg (bridge,
|
|
353
|
+
dex transfers, an order and its reduce-only close, Core → EVM) as unsigned `execute` calldata.
|
|
354
|
+
Core execution is never simulated; see the example for what is.
|
|
346
355
|
```bash
|
|
347
356
|
export BASE_PROVIDER_URL="https://base-mainnet.g.alchemy.com/v2/YOUR_KEY"
|
|
348
357
|
uv run python examples/simple_aave_v3_supply_base.py
|
|
@@ -350,10 +359,28 @@ uv run python examples/advanced_euler_v2_credit_market_base.py
|
|
|
350
359
|
uv run python examples/external_state_margin_leg_base.py
|
|
351
360
|
```
|
|
352
361
|
|
|
362
|
+
The crosschain example needs Arbitrum and HyperEVM archive RPCs and the executor and dispatcher
|
|
363
|
+
creation codes built with Foundry from the contracts release it pins; run without them, it prints
|
|
364
|
+
the `forge inspect` commands that build them:
|
|
365
|
+
|
|
366
|
+
```bash
|
|
367
|
+
export ARBITRUM_PROVIDER_URL="https://arb-mainnet.g.alchemy.com/v2/YOUR_KEY"
|
|
368
|
+
export HYPEREVM_PROVIDER_URL="https://YOUR_HYPEREVM_ARCHIVE_NODE"
|
|
369
|
+
export CCIP_EXECUTOR_CREATION_CODE_FILE=executor.hex CCIP_DISPATCHER_CREATION_CODE_FILE=dispatcher.hex
|
|
370
|
+
uv run python examples/crosschain_ccip_usdc_arbitrum_hyperevm.py
|
|
371
|
+
```
|
|
372
|
+
|
|
353
373
|
No RPC key? `BASE_PROVIDER_URL=https://mainnet.base.org` (Base's public RPC) runs the examples out of
|
|
354
374
|
the box — it supports `eth_simulateV1` and serves their pinned blocks. It is rate-limited, so use a
|
|
355
375
|
dedicated archive node for repeated or CI runs.
|
|
356
376
|
|
|
377
|
+
The HyperCore example runs on HyperEVM:
|
|
378
|
+
|
|
379
|
+
```bash
|
|
380
|
+
export HYPEREVM_PROVIDER_URL="https://YOUR_HYPEREVM_ARCHIVE_NODE"
|
|
381
|
+
uv run python examples/hypercore_vault_official_deployment_hyperevm.py
|
|
382
|
+
```
|
|
383
|
+
|
|
357
384
|
## Public API and stability
|
|
358
385
|
|
|
359
386
|
The supported API is `ipor_fusion.__all__`: import from `ipor_fusion`. Removing or
|
|
@@ -38,6 +38,32 @@ transaction.
|
|
|
38
38
|
brings the margin home and releases it for a user's scheduled withdrawal, then
|
|
39
39
|
demonstrates the executor rejecting a confirmation that does not match its
|
|
40
40
|
proposal.
|
|
41
|
+
- [`crosschain_ccip_usdc_arbitrum_hyperevm.py`](crosschain_ccip_usdc_arbitrum_hyperevm.py) --
|
|
42
|
+
a crosschain vault on the released CCIP contracts as they are deployed: an
|
|
43
|
+
Arbitrum hub vault, a HyperEVM spoke vault and USDC over Chainlink CCIP. It
|
|
44
|
+
configures the deployed (unconfigured) factory pair as its owner would --
|
|
45
|
+
creation codes, asset, route, dispatcher deployment gas limit through the
|
|
46
|
+
factory's 24 h timelock, the creator allowlist -- creates both vaults and the
|
|
47
|
+
executor, wires the crosschain market (the four fuses, the executor and
|
|
48
|
+
spoke-vault substrates, the NAV pre-hook), deploys the dispatcher through the
|
|
49
|
+
factory's deployment ticket, then drives supply, two-key attestation, DEPOSIT,
|
|
50
|
+
REDEEM, recall and claim. The crosschain SDK is a preview feature. It has
|
|
51
|
+
extra prerequisites, listed below.
|
|
52
|
+
- [`hypercore_vault_official_deployment_hyperevm.py`](hypercore_vault_official_deployment_hyperevm.py) --
|
|
53
|
+
a vault that is itself a Hyperliquid Core account (HyperCore, market 55; a
|
|
54
|
+
preview feature). No live vault uses the official HyperCore contracts yet, so
|
|
55
|
+
it clones a USDC vault from the official HyperEVM factory, wires the published
|
|
56
|
+
HyperCore fuses, balance fuse and pre-hooks with narrow market-55 grants, reads
|
|
57
|
+
the post-deployment checklist back, checks its constants against live Core
|
|
58
|
+
metadata at head, and builds the Core leg (EVM -> Core bridge, spot -> xyz dex,
|
|
59
|
+
an IOC order and its reduce-only close, dex -> spot, Core -> EVM) as unsigned
|
|
60
|
+
`execute` calldata. Core execution is never simulated, and the HyperCore read
|
|
61
|
+
precompiles do not run in `eth_simulateV1`: the default run stops before the
|
|
62
|
+
Core leg. Its RPC-gated test runs the Core leg too, with the fuses recompiled
|
|
63
|
+
from source against stand-in precompile answers (EVM acceptance only); it needs
|
|
64
|
+
`HYPEREVM_PROVIDER_URL`, `IPOR_FUSION_HYPERCORE_SOURCE_DIR` (an ipor-fusion
|
|
65
|
+
checkout at the release the deployment was built from) and `forge`, and skips
|
|
66
|
+
without them, which is how pull-request CI runs it.
|
|
41
67
|
|
|
42
68
|
## Prerequisites
|
|
43
69
|
|
|
@@ -54,6 +80,21 @@ transaction.
|
|
|
54
80
|
your Arbitrum archive RPC endpoint. Never commit it or share it.
|
|
55
81
|
- `HYPEREVM_PROVIDER_URL` (required by the crosschain example) -- your HyperEVM
|
|
56
82
|
archive RPC endpoint. Never commit it or share it.
|
|
83
|
+
- `CCIP_EXECUTOR_CREATION_CODE_FILE` and `CCIP_DISPATCHER_CREATION_CODE_FILE`
|
|
84
|
+
(required by the crosschain example) -- files holding the hex creation code of
|
|
85
|
+
`CcipCrosschainExecutor` and `CcipCrosschainDispatcher`, built with Foundry
|
|
86
|
+
(`forge`) in a checkout of
|
|
87
|
+
[ipor-fusion](https://github.com/IPOR-Labs/ipor-fusion) at the release commit
|
|
88
|
+
the example pins (`RELEASE_COMMIT`), after `npm ci`. Run the example without
|
|
89
|
+
them and it prints the two `forge inspect` commands, which link the deployed
|
|
90
|
+
release libraries; it refuses codes whose hashes differ from the release's.
|
|
91
|
+
|
|
92
|
+
The crosschain example's own test (`tests/test_simulate_examples_crosschain.py`)
|
|
93
|
+
builds those codes itself, so it needs `ARBITRUM_PROVIDER_URL`,
|
|
94
|
+
`HYPEREVM_PROVIDER_URL`, `forge` and `IPOR_FUSION_CONTRACTS_DIR` -- that checkout
|
|
95
|
+
-- (plus `IPOR_FUSION_FOUNDRY_REMAPPINGS` when it has no `node_modules`). Pull
|
|
96
|
+
request CI supplies neither the HyperEVM RPC nor the checkout, so it skips there;
|
|
97
|
+
run it locally.
|
|
57
98
|
|
|
58
99
|
## Running
|
|
59
100
|
|