ipor-fusion 4.0.0.dev187__tar.gz → 4.0.0.dev191__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.dev187 → ipor_fusion-4.0.0.dev191}/PKG-INFO +1 -1
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/pyproject.toml +1 -1
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/core/fuse.py +25 -2
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_fuse_encoding.py +64 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/.claude-plugin/marketplace.json +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/.claude-plugin/plugin.json +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/.env.example +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/.gemini/settings.json +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/.git-blame-ignore-revs +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/.github/workflows/cd.yml +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/.github/workflows/ci.yml +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/.github/workflows/commit-lint.yml +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/.github/workflows/notify-slack.yml +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/.github/workflows/python-build.yml +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/.github/workflows/python-publish.yml +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/.github/workflows/release.yml +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/.github/workflows/report-slack.yml +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/.gitignore +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/.mcp.json +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/.pre-commit-config.yaml +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/.python-version +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/AGENTS.md +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/CHANGELOG.md +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/CLAUDE.md +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/CODEOWNERS +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/LICENSE +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/MIGRATION_4.md +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/README.md +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/build.sh +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/examples/CONTRIBUTING.md +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/examples/README.md +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/examples/advanced_euler_v2_credit_market_base.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/examples/advanced_euler_v2_looping_arbitrum.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/examples/composed_hypercore_flow_arbitrum_hyperevm.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/examples/crosschain_ccip_usdc_arbitrum_hyperevm.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/examples/external_state_margin_leg_base.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/examples/simple_aave_v3_supply_base.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/pytest.ini +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/scripts/commit-check.sh +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/scripts/crosschain_readiness.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/skills/ipor-deploy-vault/SKILL.md +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/__init__.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/about.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/cache.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/chains.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/cli/__init__.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/cli/changelog_cmd.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/cli/config_cmd.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/cli/config_store.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/cli/main.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/cli/market_cmd.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/cli/options.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/cli/oracle_mapping_view.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/cli/vault_cmd.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/cli/vault_health.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/cli/vault_info_view.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/cli/vault_markets_view.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/cli/vault_rendering.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/config/__init__.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/config/roles.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/core/__init__.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/core/access.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/core/address.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/core/context.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/core/contract.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/core/erc20.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/core/external_state_executor.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/core/fee_manager.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/core/fuse_action.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/core/fusion_factory.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/core/logs.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/core/multicall.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/core/oracle.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/core/plasma_vault.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/core/rewards_manager.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/core/simulation.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/core/simulation_result.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/core/withdraw_manager.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/crosschain/__init__.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/crosschain/ccip/__init__.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/crosschain/ccip/chainlink.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/crosschain/ccip/codec.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/crosschain/ccip/contracts.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/crosschain/ccip/events.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/crosschain/ccip/indexer.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/crosschain/ccip/lane.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/crosschain/ccip/quote.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/crosschain/ccip/transport.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/crosschain/contracts.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/crosschain/discovery.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/crosschain/errors.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/crosschain/fuses/__init__.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/crosschain/fuses/base.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/crosschain/fuses/ccip.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/crosschain/fuses/stargate.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/crosschain/lane.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/crosschain/logs.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/crosschain/messages.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/crosschain/simulation.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/crosschain/stargate/__init__.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/crosschain/stargate/contracts.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/crosschain/stargate/lane.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/crosschain/stargate/layerzero.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/crosschain/stargate/transport.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/crosschain/transport.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/dependency_graph.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/entry_cli.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/entry_mcp.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/errors.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/explorer.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/field_docs.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/fuses/__init__.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/fuses/aave_v3.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/fuses/async_action.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/fuses/base.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/fuses/compound_v3.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/fuses/erc4626.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/fuses/euler_v2.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/fuses/events.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/fuses/external_state.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/fuses/external_state_event_decoding.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/fuses/fluid_instadapp.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/fuses/gearbox_v3.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/fuses/hypercore.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/fuses/hypercore_event_decoding.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/fuses/merkl.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/fuses/morpho.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/fuses/ramses_v2.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/fuses/uniswap_v3.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/fuses/universal.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/guide/__init__.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/guide/architecture.md +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/guide/glossary.md +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/guide/invariants.md +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/guide/quickstart.md +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/market_ids.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/market_info.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/mcp/__init__.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/mcp/guide.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/mcp/models.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/mcp/server.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/morpho_api.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/py.typed +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/readers/__init__.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/readers/aave_v3.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/readers/aave_v4.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/readers/compound_v3.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/readers/hypercore.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/readers/hypercore_outcome.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/readers/lending_health.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/readers/morpho.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/readers/oracle_mapping.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/readers/oracle_mapping_nodes.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/readers/oracle_mapping_reader.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/readers/position_manager.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/readers/ramses_v2.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/readers/uniswap_v3.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/readers/unpriceable.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/substrates.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/types.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/validation.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/vault_data.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/vault_erc20.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/vault_info.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/vault_managers.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/vault_positions.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/vault_reads.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/UniswapV3UniversalRouter.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/_crosschain.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/_crosschain_lifecycle.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/_crosschain_recovery.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/_euler_v2.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/_event_args.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/_fake_rpc.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/_foundry.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/_golden.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/_guide.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/_hypercore_model.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/_hypercore_shadow.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/_multicall.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/_oracle_mapping_fake.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/_simulate.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/_validation.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/addresses.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/conftest.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/constants.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/fixtures/hypercore_hip3_flow.json +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/fixtures/hypercore_market55.json +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/fixtures/market_golden/meta_morpho_v1.json +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/fixtures/market_golden/meta_morpho_v1.mcp.json +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/fixtures/market_golden/meta_morpho_v2.json +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/fixtures/market_golden/meta_morpho_v2.mcp.json +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/fixtures/market_golden/morpho_api/market.json +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/fixtures/market_golden/morpho_api/vault_v1.json +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/fixtures/market_golden/morpho_api/vault_v2.json +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/fixtures/market_golden/morpho_api/vault_v2_not_found.json +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/fixtures/market_golden/morpho_blue.json +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/fixtures/market_golden/morpho_blue.mcp.json +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/fixtures/market_golden/morpho_blue_api_error.json +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/fixtures/market_golden/morpho_blue_api_error.mcp.json +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/fixtures/market_golden/morpho_blue_no_api.json +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/fixtures/market_golden/morpho_blue_no_api.mcp.json +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/fixtures/oracle_mapping_golden/mapping.json +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/fixtures/oracle_mapping_golden/mapping.mcp.json +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/fixtures/simulate_v1_request.json +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/fixtures/vault_info_golden/clean.json +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/fixtures/vault_info_golden/clean.mcp.json +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/fixtures/vault_info_golden/clean.txt +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/fixtures/vault_info_golden/deployment_error.json +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/fixtures/vault_info_golden/deployment_error.mcp.json +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/fixtures/vault_info_golden/deployment_error.txt +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/fixtures/vault_info_golden/fetched.cli.json +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/fixtures/vault_info_golden/fetched.json +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/fixtures/vault_info_golden/fetched.mcp.json +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/fixtures/vault_info_golden/full.json +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/fixtures/vault_info_golden/full.mcp.json +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/fixtures/vault_info_golden/full.txt +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/fixtures/vault_info_golden/rich.json +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/fixtures/vault_info_golden/rich.mcp.json +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/fixtures/vault_info_golden/rich.txt +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_about.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_access_manager.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_cache.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_chains.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_cli_changelog.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_cli_commands.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_cli_config_store.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_cli_helpers.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_cli_hypercore.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_cli_lending_health.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_cli_market_golden.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_cli_market_morpho_blue.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_cli_oracle_mapping.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_cli_oracle_mapping_golden.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_cli_pending_requests_scan.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_cli_role_accounts.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_cli_vault_info_golden.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_cli_vault_predates_getters.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_cli_vault_validate.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_contract_call.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_contract_encoder.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_crosschain_ccip_events.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_crosschain_ccip_indexer.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_crosschain_ccip_quote.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_crosschain_chainlink.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_crosschain_contracts.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_crosschain_encoding.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_crosschain_errors.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_crosschain_lane.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_crosschain_layering.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_crosschain_readiness.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_crosschain_readiness_report.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_crosschain_transport.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_docs_typing.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_erc20.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_error_hierarchy.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_examples_composed_hypercore.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_examples_crosschain.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_examples_euler_looping_arbitrum.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_examples_vaults.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_explorer.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_external_state_events.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_external_state_executor.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_fee_manager.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_fusion_instance.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_guide.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_hypercore_deployment.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_hypercore_events.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_hypercore_flow.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_hypercore_live.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_hypercore_outcome.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_hypercore_readers.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_hypercore_simulation.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_logs.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_mcp_hypercore.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_mcp_models.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_mcp_server.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_mcp_vault_validate.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_multicall.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_oracle.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_oracle_mapping.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_plasma_vault.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_public_api.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_public_type_reachability.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_reader_encoding.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_readiness_selection.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_revert_decoding.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_rewards_manager.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_roles.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_sdk_layering.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_simulate_borrow_aave_v3_mainnet.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_simulate_claim_merkl_wrapper_base.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_simulate_claim_morpho_rewards.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_simulate_crosschain_canary.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_simulate_crosschain_hypercore.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_simulate_crosschain_hyperevm.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_simulate_crosschain_lifecycle.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_simulate_euler_v2_batch_base.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_simulate_euler_v2_credit_market_base.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_simulate_euler_v2_swap_deploy_base.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_simulate_euler_v2_swap_reconfigure_base.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_simulate_euler_v2_swap_registry_base.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_simulate_examples_arbitrum.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_simulate_examples_base.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_simulate_examples_crosschain.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_simulate_external_state_executor_base.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_simulate_fusion_factory_clone_base.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_simulate_looping_aave_v3_base.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_simulate_looping_morpho_blue_base.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_simulate_morpho_blue.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_simulate_pilot_v3.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_simulate_pilot_v4_uniswap.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_simulate_pilot_v5_ramses.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_simulate_pilot_v5_scheduled.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_simulate_plasma_vault_setters_base.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_simulate_readers_integration.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_simulate_release_funds.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_simulate_swap_on_base.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_simulate_vault_from_scratch_base.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_simulation_errors.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_simulation_observation.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_solidity_compiler.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_solidity_mirrors.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_substrates.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_types_and_events.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_unpriceable_tokens.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_validation.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_vault_data_block.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_vault_dep_graph.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_vault_info_fetched_golden.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_vault_info_onchain_base.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_vault_info_onchain_base_no_withdraw_manager.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_vault_simulator_blocks.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_web3_context.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/test_withdraw_manager.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/typed_client/consumer.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/tests/typed_client/rejected.py +0 -0
- {ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/uv.lock +0 -0
|
@@ -8,6 +8,7 @@ without importing that package, whose ``__init__`` loads every encoder.
|
|
|
8
8
|
|
|
9
9
|
from abc import ABC
|
|
10
10
|
from collections.abc import Sequence
|
|
11
|
+
from types import MemberDescriptorType
|
|
11
12
|
|
|
12
13
|
from eth_abi import encode
|
|
13
14
|
from eth_typing import ChecksumAddress
|
|
@@ -55,11 +56,33 @@ class Fuse(ABC): # noqa: B024 # ABC marks intent; no shared abstract method
|
|
|
55
56
|
if value < 0:
|
|
56
57
|
raise ValueError(f"{name} must not be negative, got {value}")
|
|
57
58
|
|
|
59
|
+
def _value_state(self) -> tuple[tuple[str, object], ...]:
|
|
60
|
+
"""Every attribute the instance stores, in its ``__dict__`` or in a
|
|
61
|
+
subclass's ``__slots__``, sorted by name."""
|
|
62
|
+
state = dict(vars(self))
|
|
63
|
+
# Slot storage is a member descriptor in the declaring class's own
|
|
64
|
+
# namespace (already name-mangled). Reading each one directly, keyed by
|
|
65
|
+
# its class, keeps a base slot shadowed by a subclass attribute apart.
|
|
66
|
+
for klass in type(self).__mro__:
|
|
67
|
+
for name, member in vars(klass).items():
|
|
68
|
+
if not isinstance(member, MemberDescriptorType):
|
|
69
|
+
continue
|
|
70
|
+
try:
|
|
71
|
+
value = member.__get__(self, klass)
|
|
72
|
+
except AttributeError:
|
|
73
|
+
continue
|
|
74
|
+
state[f"{klass.__module__}.{klass.__qualname__}.{name}"] = value
|
|
75
|
+
return tuple(sorted(state.items()))
|
|
76
|
+
|
|
58
77
|
def __eq__(self, other: object) -> bool:
|
|
59
|
-
return
|
|
78
|
+
return (
|
|
79
|
+
isinstance(other, Fuse)
|
|
80
|
+
and type(self) is type(other)
|
|
81
|
+
and self._value_state() == other._value_state()
|
|
82
|
+
)
|
|
60
83
|
|
|
61
84
|
def __hash__(self) -> int:
|
|
62
|
-
return hash((type(self), *
|
|
85
|
+
return hash((type(self), *self._value_state()))
|
|
63
86
|
|
|
64
87
|
def _action_raw(self, signature: str, values: Sequence[object]) -> FuseAction:
|
|
65
88
|
selector = function_signature_to_4byte_selector(signature)
|
|
@@ -10,6 +10,7 @@ from ipor_fusion.core.contract import _parse_param_types
|
|
|
10
10
|
from ipor_fusion.core.fuse_action import FuseAction
|
|
11
11
|
from ipor_fusion.fuses.aave_v3 import AaveV3BorrowFuse, AaveV3SupplyFuse
|
|
12
12
|
from ipor_fusion.fuses.async_action import AsyncActionFuse, AsyncActionSubstrates
|
|
13
|
+
from ipor_fusion.fuses.base import Fuse
|
|
13
14
|
from ipor_fusion.fuses.compound_v3 import CompoundV3SupplyFuse
|
|
14
15
|
from ipor_fusion.fuses.erc4626 import ERC4626SupplyFuse
|
|
15
16
|
from ipor_fusion.fuses.euler_v2 import (
|
|
@@ -893,6 +894,69 @@ class TestFuseEquality:
|
|
|
893
894
|
assert AaveV3SupplyFuse(FUSE_ADDR) != AaveV3BorrowFuse(FUSE_ADDR)
|
|
894
895
|
assert AaveV3SupplyFuse(FUSE_ADDR) != FUSE_ADDR
|
|
895
896
|
|
|
897
|
+
def test_state_kept_in_slots_counts(self):
|
|
898
|
+
class SlottedFuse(Fuse):
|
|
899
|
+
__slots__ = ("target", "__secret")
|
|
900
|
+
|
|
901
|
+
def __init__(self, address, target, secret):
|
|
902
|
+
super().__init__(address)
|
|
903
|
+
self.target = target
|
|
904
|
+
self.__secret = secret
|
|
905
|
+
|
|
906
|
+
one = SlottedFuse(FUSE_ADDR, TOKEN_A, 1)
|
|
907
|
+
assert one == SlottedFuse(FUSE_ADDR, TOKEN_A, 1)
|
|
908
|
+
assert hash(one) == hash(SlottedFuse(FUSE_ADDR, TOKEN_A, 1))
|
|
909
|
+
assert one != SlottedFuse(FUSE_ADDR, TOKEN_B, 1)
|
|
910
|
+
assert one != SlottedFuse(FUSE_ADDR, TOKEN_A, 2)
|
|
911
|
+
assert len({one, SlottedFuse(FUSE_ADDR, TOKEN_B, 1)}) == 2
|
|
912
|
+
|
|
913
|
+
def test_a_shadowed_base_slot_still_counts(self):
|
|
914
|
+
class Parent(Fuse):
|
|
915
|
+
__slots__ = ("target",)
|
|
916
|
+
|
|
917
|
+
class Child(Parent):
|
|
918
|
+
__slots__ = ("target",)
|
|
919
|
+
|
|
920
|
+
def child(base_target):
|
|
921
|
+
fuse = Child(FUSE_ADDR)
|
|
922
|
+
Parent.__dict__["target"].__set__(fuse, base_target)
|
|
923
|
+
fuse.target = 3
|
|
924
|
+
return fuse
|
|
925
|
+
|
|
926
|
+
assert child(1) != child(2)
|
|
927
|
+
assert len({child(1), child(2)}) == 2
|
|
928
|
+
assert child(1) == child(1)
|
|
929
|
+
|
|
930
|
+
def test_a_private_slot_of_an_all_underscore_class_counts(self):
|
|
931
|
+
class ___(Fuse): # noqa: N801
|
|
932
|
+
__slots__ = ("__secret",)
|
|
933
|
+
|
|
934
|
+
def __init__(self, address, secret):
|
|
935
|
+
super().__init__(address)
|
|
936
|
+
self.__secret = secret
|
|
937
|
+
|
|
938
|
+
assert ___(FUSE_ADDR, 1) != ___(FUSE_ADDR, 2)
|
|
939
|
+
assert ___(FUSE_ADDR, 1) == ___(FUSE_ADDR, 1)
|
|
940
|
+
|
|
941
|
+
def test_slots_declared_by_an_iterator_count(self):
|
|
942
|
+
class IteratorFuse(Fuse):
|
|
943
|
+
__slots__ = iter(("target",))
|
|
944
|
+
|
|
945
|
+
def fuse(target):
|
|
946
|
+
instance = IteratorFuse(FUSE_ADDR)
|
|
947
|
+
instance.target = target # pyright: ignore[reportAttributeAccessIssue]
|
|
948
|
+
return instance
|
|
949
|
+
|
|
950
|
+
assert fuse(1) != fuse(2)
|
|
951
|
+
assert len({fuse(1), fuse(2)}) == 2
|
|
952
|
+
|
|
953
|
+
def test_an_unset_slot_is_left_out(self):
|
|
954
|
+
class LazyFuse(Fuse):
|
|
955
|
+
__slots__ = "cached"
|
|
956
|
+
|
|
957
|
+
assert LazyFuse(FUSE_ADDR) == LazyFuse(FUSE_ADDR)
|
|
958
|
+
assert hash(LazyFuse(FUSE_ADDR)) == hash(LazyFuse(FUSE_ADDR))
|
|
959
|
+
|
|
896
960
|
|
|
897
961
|
# ── Input Validation ──────────────────────────────────────────────────
|
|
898
962
|
|
|
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.0.0.dev187 → ipor_fusion-4.0.0.dev191}/examples/advanced_euler_v2_looping_arbitrum.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/examples/external_state_margin_leg_base.py
RENAMED
|
File without changes
|
{ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/examples/simple_aave_v3_supply_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
|
{ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/cli/oracle_mapping_view.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/cli/vault_info_view.py
RENAMED
|
File without changes
|
{ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/cli/vault_markets_view.py
RENAMED
|
File without changes
|
{ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/cli/vault_rendering.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.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/core/fusion_factory.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/core/rewards_manager.py
RENAMED
|
File without changes
|
|
File without changes
|
{ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/core/simulation_result.py
RENAMED
|
File without changes
|
{ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/core/withdraw_manager.py
RENAMED
|
File without changes
|
{ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/crosschain/__init__.py
RENAMED
|
File without changes
|
{ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/crosschain/ccip/__init__.py
RENAMED
|
File without changes
|
{ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/crosschain/ccip/chainlink.py
RENAMED
|
File without changes
|
{ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/crosschain/ccip/codec.py
RENAMED
|
File without changes
|
{ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/crosschain/ccip/contracts.py
RENAMED
|
File without changes
|
{ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/crosschain/ccip/events.py
RENAMED
|
File without changes
|
{ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/crosschain/ccip/indexer.py
RENAMED
|
File without changes
|
{ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/crosschain/ccip/lane.py
RENAMED
|
File without changes
|
{ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/crosschain/ccip/quote.py
RENAMED
|
File without changes
|
{ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/crosschain/ccip/transport.py
RENAMED
|
File without changes
|
{ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/crosschain/contracts.py
RENAMED
|
File without changes
|
{ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/crosschain/discovery.py
RENAMED
|
File without changes
|
|
File without changes
|
{ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/crosschain/fuses/__init__.py
RENAMED
|
File without changes
|
{ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/crosschain/fuses/base.py
RENAMED
|
File without changes
|
{ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/crosschain/fuses/ccip.py
RENAMED
|
File without changes
|
{ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/crosschain/fuses/stargate.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/crosschain/messages.py
RENAMED
|
File without changes
|
{ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/crosschain/simulation.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/crosschain/stargate/lane.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/crosschain/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
|
{ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/fuses/external_state.py
RENAMED
|
File without changes
|
|
File without changes
|
{ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/fuses/fluid_instadapp.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
|
{ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/readers/compound_v3.py
RENAMED
|
File without changes
|
|
File without changes
|
{ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/readers/hypercore_outcome.py
RENAMED
|
File without changes
|
{ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/readers/lending_health.py
RENAMED
|
File without changes
|
|
File without changes
|
{ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/readers/oracle_mapping.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/readers/position_manager.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ipor_fusion-4.0.0.dev187 → ipor_fusion-4.0.0.dev191}/src/ipor_fusion/readers/unpriceable.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
|