ipor-fusion 4.1.0.dev54__tar.gz → 4.1.0.dev56__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.1.0.dev54 → ipor_fusion-4.1.0.dev56}/PKG-INFO +1 -1
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/pyproject.toml +1 -1
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/core/context.py +4 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/errors.py +3 -1
- ipor_fusion-4.1.0.dev56/tests/test_ccip_read_disabled.py +96 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/.claude-plugin/marketplace.json +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/.claude-plugin/plugin.json +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/.env.example +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/.gemini/settings.json +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/.git-blame-ignore-revs +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/.github/workflows/cd.yml +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/.github/workflows/ci.yml +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/.github/workflows/commit-lint.yml +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/.github/workflows/notify-slack.yml +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/.github/workflows/python-build.yml +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/.github/workflows/python-publish.yml +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/.github/workflows/release.yml +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/.github/workflows/report-slack.yml +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/.gitignore +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/.mcp.json +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/.pre-commit-config.yaml +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/.python-version +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/AGENTS.md +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/CHANGELOG.md +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/CLAUDE.md +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/CODEOWNERS +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/LICENSE +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/MIGRATION_4.md +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/README.md +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/build.sh +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/examples/CONTRIBUTING.md +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/examples/README.md +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/examples/advanced_euler_v2_credit_market_base.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/examples/advanced_euler_v2_looping_arbitrum.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/examples/crosschain_ccip_usdc_arbitrum_hyperevm.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/examples/external_state_margin_leg_base.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/examples/hypercore_vault_official_deployment_hyperevm.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/examples/simple_aave_v3_supply_base.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/pytest.ini +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/scripts/commit-check.sh +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/scripts/fusion_error_signatures.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/skills/ipor-deploy-vault/SKILL.md +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/__init__.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/about.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/cache.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/chains.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/cli/__init__.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/cli/address_cmd.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/cli/changelog_cmd.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/cli/config_cmd.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/cli/config_store.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/cli/main.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/cli/market_cmd.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/cli/options.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/cli/oracle_mapping_view.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/cli/preflight_cmd.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/cli/vault_cmd.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/cli/vault_health.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/cli/vault_info_view.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/cli/vault_markets_view.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/cli/vault_rendering.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/config/__init__.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/config/roles.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/core/__init__.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/core/access.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/core/address.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/core/context_manager.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/core/contract.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/core/erc20.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/core/external_state_executor.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/core/fee_manager.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/core/fuse.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/core/fuse_action.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/core/fuse_decoding.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/core/fusion_factory.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/core/logs.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/core/multicall.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/core/oracle.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/core/plasma_vault.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/core/rewards_manager.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/core/simulation.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/core/simulation_result.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/core/withdraw_manager.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/crosschain/__init__.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/crosschain/ccip/__init__.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/crosschain/ccip/chainlink.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/crosschain/ccip/codec.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/crosschain/ccip/contracts.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/crosschain/ccip/events.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/crosschain/ccip/indexer.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/crosschain/ccip/lane.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/crosschain/ccip/quote.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/crosschain/ccip/transport.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/crosschain/contracts.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/crosschain/discovery.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/crosschain/errors.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/crosschain/fuses/__init__.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/crosschain/fuses/base.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/crosschain/fuses/ccip.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/crosschain/fuses/stargate.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/crosschain/lane.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/crosschain/logs.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/crosschain/messages.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/crosschain/simulation.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/crosschain/stargate/__init__.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/crosschain/stargate/contracts.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/crosschain/stargate/lane.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/crosschain/stargate/layerzero.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/crosschain/stargate/transport.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/crosschain/transport.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/dependency_graph.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/entry_cli.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/entry_mcp.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/explorer.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/field_docs.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/fuses/__init__.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/fuses/aave_v3.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/fuses/async_action.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/fuses/base.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/fuses/compound_v3.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/fuses/erc4626.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/fuses/euler_v2.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/fuses/events.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/fuses/external_state.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/fuses/external_state_event_decoding.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/fuses/fluid_instadapp.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/fuses/gearbox_v3.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/fuses/hypercore.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/fuses/hypercore_event_decoding.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/fuses/hypercore_pre_hooks.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/fuses/merkl.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/fuses/morpho.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/fuses/ramses_v2.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/fuses/uniswap_v3.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/fuses/universal.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/fusion_errors.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/guide/__init__.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/guide/architecture.md +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/guide/glossary.md +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/guide/invariants.md +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/guide/quickstart.md +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/hypercore/__init__.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/market_ids.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/market_info.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/mcp/__init__.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/mcp/guide.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/mcp/models.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/mcp/server.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/morpho_api.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/preflight.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/py.typed +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/readers/__init__.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/readers/aave_v3.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/readers/aave_v4.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/readers/compound_v3.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/readers/euler_v2.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/readers/hypercore.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/readers/hypercore_outcome.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/readers/lending_health.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/readers/morpho.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/readers/oracle_mapping.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/readers/oracle_mapping_nodes.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/readers/oracle_mapping_reader.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/readers/position_manager.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/readers/ramses_v2.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/readers/uniswap_v3.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/readers/unpriceable.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/registry.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/substrates.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/types.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/validation.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/vault_data.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/vault_erc20.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/vault_info.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/vault_managers.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/vault_positions.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/vault_reads.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/UniswapV3UniversalRouter.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/_addresses.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/_crosschain.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/_crosschain_lifecycle.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/_crosschain_recovery.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/_euler_v2.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/_event_args.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/_fake_rpc.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/_foundry.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/_golden.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/_guide.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/_hypercore_model.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/_hypercore_shadow.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/_live.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/_multicall.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/_oracle_mapping_fake.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/_simulate.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/_validation.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/addresses.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/conftest.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/constants.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/fixtures/hypercore_hip3_flow.json +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/fixtures/hypercore_market55.json +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/fixtures/hypercore_official.json +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/fixtures/market_golden/meta_morpho_v1.json +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/fixtures/market_golden/meta_morpho_v1.mcp.json +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/fixtures/market_golden/meta_morpho_v2.json +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/fixtures/market_golden/meta_morpho_v2.mcp.json +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/fixtures/market_golden/morpho_api/market.json +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/fixtures/market_golden/morpho_api/vault_v1.json +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/fixtures/market_golden/morpho_api/vault_v2.json +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/fixtures/market_golden/morpho_api/vault_v2_not_found.json +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/fixtures/market_golden/morpho_blue.json +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/fixtures/market_golden/morpho_blue.mcp.json +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/fixtures/market_golden/morpho_blue_api_error.json +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/fixtures/market_golden/morpho_blue_api_error.mcp.json +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/fixtures/market_golden/morpho_blue_no_api.json +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/fixtures/market_golden/morpho_blue_no_api.mcp.json +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/fixtures/oracle_mapping_golden/mapping.json +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/fixtures/oracle_mapping_golden/mapping.mcp.json +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/fixtures/simulate_v1_request.json +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/fixtures/vault_info_golden/clean.json +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/fixtures/vault_info_golden/clean.mcp.json +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/fixtures/vault_info_golden/clean.txt +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/fixtures/vault_info_golden/deployment_error.json +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/fixtures/vault_info_golden/deployment_error.mcp.json +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/fixtures/vault_info_golden/deployment_error.txt +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/fixtures/vault_info_golden/fetched.cli.json +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/fixtures/vault_info_golden/fetched.json +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/fixtures/vault_info_golden/fetched.mcp.json +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/fixtures/vault_info_golden/full.json +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/fixtures/vault_info_golden/full.mcp.json +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/fixtures/vault_info_golden/full.txt +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/fixtures/vault_info_golden/rich.json +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/fixtures/vault_info_golden/rich.mcp.json +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/fixtures/vault_info_golden/rich.txt +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_about.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_access_manager.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_addresses_helper.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_cache.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_chains.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_cli_address.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_cli_changelog.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_cli_commands.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_cli_config_store.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_cli_helpers.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_cli_hypercore.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_cli_lending_health.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_cli_market_golden.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_cli_market_morpho_blue.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_cli_mcp_parity.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_cli_oracle_mapping.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_cli_oracle_mapping_golden.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_cli_pending_requests_scan.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_cli_preflight.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_cli_role_accounts.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_cli_vault_info_golden.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_cli_vault_predates_getters.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_cli_vault_validate.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_contract_call.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_contract_encoder.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_crosschain_ccip_events.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_crosschain_ccip_indexer.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_crosschain_ccip_quote.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_crosschain_chainlink.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_crosschain_contracts.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_crosschain_encoding.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_crosschain_errors.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_crosschain_lane.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_crosschain_layering.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_crosschain_transport.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_docs_typing.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_erc20.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_error_hierarchy.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_examples_crosschain.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_examples_euler_looping_arbitrum.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_examples_hypercore_hyperevm.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_examples_vaults.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_explorer.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_external_state_events.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_external_state_executor.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_fee_manager.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_fuse_decoding.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_fuse_encoding.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_fusion_errors.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_fusion_instance.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_governance_wrappers.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_guide.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_hypercore_deployment.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_hypercore_events.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_hypercore_flow.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_hypercore_live.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_hypercore_outcome.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_hypercore_pre_hooks.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_hypercore_readers.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_hypercore_simulation.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_logs.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_mcp_address.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_mcp_hypercore.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_mcp_models.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_mcp_preflight.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_mcp_server.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_mcp_vault_validate.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_multicall.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_oracle.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_oracle_mapping.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_plasma_vault.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_preflight.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_public_api.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_public_type_reachability.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_reader_encoding.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_registry.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_revert_decoding.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_rewards_manager.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_roles.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_sdk_layering.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_simulate_borrow_aave_v3_mainnet.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_simulate_claim_merkl_wrapper_base.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_simulate_claim_morpho_rewards.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_simulate_crosschain_hyperevm.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_simulate_euler_v2_batch_base.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_simulate_euler_v2_credit_market_base.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_simulate_euler_v2_swap_deploy_base.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_simulate_euler_v2_swap_reconfigure_base.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_simulate_euler_v2_swap_registry_base.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_simulate_examples_arbitrum.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_simulate_examples_base.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_simulate_examples_crosschain.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_simulate_examples_hyperevm.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_simulate_external_state_executor_base.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_simulate_fusion_factory_clone_base.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_simulate_looping_aave_v3_base.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_simulate_looping_morpho_blue_base.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_simulate_morpho_blue.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_simulate_pilot_v3.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_simulate_pilot_v4_uniswap.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_simulate_pilot_v5_ramses.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_simulate_pilot_v5_scheduled.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_simulate_plasma_vault_setters_base.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_simulate_preflight_base.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_simulate_readers_integration.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_simulate_release_funds.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_simulate_swap_on_base.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_simulate_timelock_base.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_simulate_vault_from_scratch_base.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_simulation_errors.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_simulation_observation.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_solidity_compiler.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_solidity_mirrors.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_substrates.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_types_and_events.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_unpriceable_tokens.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_validation.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_vault_data_block.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_vault_dep_graph.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_vault_info_fetched_golden.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_vault_info_onchain_base.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_vault_info_onchain_base_no_withdraw_manager.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_vault_reconciliation_onchain_base.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_vault_simulator_blocks.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_web3_context.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/test_withdraw_manager.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/typed_client/consumer.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/tests/typed_client/rejected.py +0 -0
- {ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/uv.lock +0 -0
|
@@ -100,6 +100,10 @@ class Web3Context:
|
|
|
100
100
|
log_source: LogSource | None = None,
|
|
101
101
|
cache: ContractCache | None = None,
|
|
102
102
|
):
|
|
103
|
+
# EIP-3668: web3 would otherwise follow a contract's OffchainLookup
|
|
104
|
+
# revert from inside eth.call, sending an HTTP request to a URL chosen
|
|
105
|
+
# by whoever deployed the contract. Nothing in the SDK reads through it.
|
|
106
|
+
web3.provider.global_ccip_read_enabled = False
|
|
103
107
|
self._web3 = web3
|
|
104
108
|
self._chain_id = chain_id
|
|
105
109
|
# Bounds of every `get_logs` scan: wall clock, and eth_getLogs requests
|
|
@@ -132,7 +132,9 @@ def get_revert_reason(web3: Web3, tx_hash: TxHash, receipt: TxReceipt) -> str |
|
|
|
132
132
|
call_params["gas"] = tx["gas"]
|
|
133
133
|
|
|
134
134
|
block_number = receipt["blockNumber"]
|
|
135
|
-
web3.eth.call(
|
|
135
|
+
web3.eth.call(
|
|
136
|
+
call_params, block_identifier=block_number, ccip_read_enabled=False
|
|
137
|
+
)
|
|
136
138
|
return None # replay succeeded — can't determine reason
|
|
137
139
|
except Exception as exc:
|
|
138
140
|
exc_data = getattr(exc, "data", None)
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"""A contract must not be able to make the SDK send an HTTP request.
|
|
2
|
+
|
|
3
|
+
EIP-3668 lets a contract revert with `OffchainLookup(urls, ...)`, which web3
|
|
4
|
+
follows by default from inside `eth.call`. Any address a caller passes is
|
|
5
|
+
therefore a request to a URL chosen by whoever deployed the contract.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from typing import Any
|
|
9
|
+
from unittest.mock import patch
|
|
10
|
+
|
|
11
|
+
import pytest
|
|
12
|
+
from eth_abi import encode
|
|
13
|
+
from eth_typing import URI
|
|
14
|
+
from web3 import Web3
|
|
15
|
+
from web3.providers.base import BaseProvider
|
|
16
|
+
from web3.types import RPCEndpoint, RPCResponse
|
|
17
|
+
|
|
18
|
+
from ipor_fusion import NotPlasmaVaultError, Web3Context
|
|
19
|
+
from ipor_fusion.core.access import resolve_access_manager
|
|
20
|
+
from ipor_fusion.errors import get_revert_reason
|
|
21
|
+
|
|
22
|
+
ADDRESS = Web3.to_checksum_address("0x" + "11" * 20)
|
|
23
|
+
OFFCHAIN_LOOKUP_SELECTOR = bytes.fromhex("556f1830")
|
|
24
|
+
LOOKUP_URL = "https://192.0.2.1/lookup"
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def _offchain_lookup_revert() -> str:
|
|
28
|
+
args = encode(
|
|
29
|
+
["address", "string[]", "bytes", "bytes4", "bytes"],
|
|
30
|
+
[ADDRESS, [LOOKUP_URL], b"", b"\xd8\xd7\x86\x9d", b""],
|
|
31
|
+
)
|
|
32
|
+
return "0x" + (OFFCHAIN_LOOKUP_SELECTOR + args).hex()
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class _LookupProvider(BaseProvider):
|
|
36
|
+
"""A chain where `ADDRESS` has code and reverts every call with a lookup."""
|
|
37
|
+
|
|
38
|
+
def make_request(self, method: RPCEndpoint, params: Any) -> RPCResponse:
|
|
39
|
+
if method == "eth_call":
|
|
40
|
+
return {
|
|
41
|
+
"jsonrpc": "2.0",
|
|
42
|
+
"id": 1,
|
|
43
|
+
"error": {
|
|
44
|
+
"code": 3,
|
|
45
|
+
"message": "execution reverted",
|
|
46
|
+
"data": _offchain_lookup_revert(),
|
|
47
|
+
},
|
|
48
|
+
}
|
|
49
|
+
results: dict[str, Any] = {
|
|
50
|
+
"eth_chainId": "0x1",
|
|
51
|
+
"eth_getCode": "0x6000",
|
|
52
|
+
"eth_getTransactionByHash": {
|
|
53
|
+
"blockHash": "0x" + "22" * 32,
|
|
54
|
+
"blockNumber": "0x1",
|
|
55
|
+
"from": ADDRESS,
|
|
56
|
+
"gas": "0x5208",
|
|
57
|
+
"gasPrice": "0x1",
|
|
58
|
+
"hash": "0x" + "33" * 32,
|
|
59
|
+
"input": "0x",
|
|
60
|
+
"nonce": "0x0",
|
|
61
|
+
"to": ADDRESS,
|
|
62
|
+
"transactionIndex": "0x0",
|
|
63
|
+
"value": "0x0",
|
|
64
|
+
"type": "0x0",
|
|
65
|
+
"v": "0x1b",
|
|
66
|
+
"r": "0x1",
|
|
67
|
+
"s": "0x1",
|
|
68
|
+
},
|
|
69
|
+
}
|
|
70
|
+
return {"jsonrpc": "2.0", "id": 1, "result": results[method]}
|
|
71
|
+
|
|
72
|
+
def endpoint_uri(self) -> URI:
|
|
73
|
+
return URI("test://lookup")
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def _web3() -> Web3:
|
|
77
|
+
return Web3(_LookupProvider())
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
def test_context_built_on_any_web3_does_not_follow_a_lookup() -> None:
|
|
81
|
+
ctx = Web3Context(web3=_web3(), chain_id=1)
|
|
82
|
+
|
|
83
|
+
with patch("requests.Session.request") as request:
|
|
84
|
+
with pytest.raises(NotPlasmaVaultError):
|
|
85
|
+
resolve_access_manager(ctx, ADDRESS)
|
|
86
|
+
|
|
87
|
+
request.assert_not_called()
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
def test_revert_replay_does_not_follow_a_lookup() -> None:
|
|
91
|
+
receipt: Any = {"blockNumber": 1}
|
|
92
|
+
|
|
93
|
+
with patch("requests.Session.request") as request:
|
|
94
|
+
get_revert_reason(_web3(), bytes.fromhex("33" * 32), receipt)
|
|
95
|
+
|
|
96
|
+
request.assert_not_called()
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/examples/advanced_euler_v2_credit_market_base.py
RENAMED
|
File without changes
|
{ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/examples/advanced_euler_v2_looping_arbitrum.py
RENAMED
|
File without changes
|
|
File without changes
|
{ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/examples/external_state_margin_leg_base.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/cli/oracle_mapping_view.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/cli/vault_markets_view.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/core/external_state_executor.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/core/simulation_result.py
RENAMED
|
File without changes
|
{ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/core/withdraw_manager.py
RENAMED
|
File without changes
|
|
File without changes
|
{ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/crosschain/ccip/__init__.py
RENAMED
|
File without changes
|
{ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/crosschain/ccip/chainlink.py
RENAMED
|
File without changes
|
{ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/crosschain/ccip/codec.py
RENAMED
|
File without changes
|
{ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/crosschain/ccip/contracts.py
RENAMED
|
File without changes
|
{ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/crosschain/ccip/events.py
RENAMED
|
File without changes
|
{ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/crosschain/ccip/indexer.py
RENAMED
|
File without changes
|
|
File without changes
|
{ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/crosschain/ccip/quote.py
RENAMED
|
File without changes
|
{ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/crosschain/ccip/transport.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/crosschain/fuses/__init__.py
RENAMED
|
File without changes
|
{ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/crosschain/fuses/base.py
RENAMED
|
File without changes
|
{ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/crosschain/fuses/ccip.py
RENAMED
|
File without changes
|
{ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/crosschain/fuses/stargate.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/crosschain/simulation.py
RENAMED
|
File without changes
|
{ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/crosschain/stargate/__init__.py
RENAMED
|
File without changes
|
{ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/crosschain/stargate/contracts.py
RENAMED
|
File without changes
|
{ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/crosschain/stargate/lane.py
RENAMED
|
File without changes
|
{ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/crosschain/stargate/layerzero.py
RENAMED
|
File without changes
|
{ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/crosschain/stargate/transport.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/fuses/fluid_instadapp.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/fuses/hypercore_pre_hooks.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/readers/hypercore_outcome.py
RENAMED
|
File without changes
|
{ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/readers/lending_health.py
RENAMED
|
File without changes
|
|
File without changes
|
{ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/readers/oracle_mapping.py
RENAMED
|
File without changes
|
{ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/readers/oracle_mapping_nodes.py
RENAMED
|
File without changes
|
{ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/readers/oracle_mapping_reader.py
RENAMED
|
File without changes
|
{ipor_fusion-4.1.0.dev54 → ipor_fusion-4.1.0.dev56}/src/ipor_fusion/readers/position_manager.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|