ipor-fusion 4.2.0.dev9__tar.gz → 4.2.0.dev11__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.2.0.dev9 → ipor_fusion-4.2.0.dev11}/PKG-INFO +2 -2
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/README.md +1 -1
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/pyproject.toml +1 -1
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/__init__.py +4 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/fuses/__init__.py +7 -1
- ipor_fusion-4.2.0.dev11/src/ipor_fusion/fuses/compound_v3.py +62 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/market_ids.py +4 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/readers/compound_v3.py +11 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/readers/lending_health.py +1 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/substrates.py +1 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/constants.py +18 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_cli_lending_health.py +1 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_fuse_encoding.py +37 -1
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_public_api.py +4 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_reader_encoding.py +8 -0
- ipor_fusion-4.2.0.dev11/tests/test_simulate_compound_v3_institutional_usdc.py +453 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_solidity_mirrors.py +2 -3
- ipor_fusion-4.2.0.dev9/src/ipor_fusion/fuses/compound_v3.py +0 -23
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/.claude-plugin/marketplace.json +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/.claude-plugin/plugin.json +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/.env.example +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/.gemini/settings.json +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/.git-blame-ignore-revs +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/.github/workflows/cd.yml +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/.github/workflows/ci.yml +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/.github/workflows/commit-lint.yml +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/.github/workflows/notify-slack.yml +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/.github/workflows/python-build.yml +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/.github/workflows/python-publish.yml +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/.github/workflows/release.yml +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/.github/workflows/report-slack.yml +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/.gitignore +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/.mcp.json +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/.pre-commit-config.yaml +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/.python-version +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/AGENTS.md +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/CHANGELOG.md +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/CLAUDE.md +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/CODEOWNERS +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/LICENSE +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/MIGRATION_4.md +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/build.sh +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/examples/CONTRIBUTING.md +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/examples/README.md +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/examples/advanced_euler_v2_credit_market_base.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/examples/advanced_euler_v2_looping_arbitrum.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/examples/crosschain_ccip_usdc_arbitrum_hyperevm.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/examples/external_state_margin_leg_base.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/examples/hypercore_vault_official_deployment_hyperevm.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/examples/simple_aave_v3_supply_base.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/pytest.ini +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/scripts/commit-check.sh +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/scripts/fusion_error_signatures.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/skills/ipor-deploy-vault/SKILL.md +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/about.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/cache.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/chains.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/cli/__init__.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/cli/address_cmd.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/cli/changelog_cmd.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/cli/config_cmd.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/cli/config_store.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/cli/fuse_cmd.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/cli/main.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/cli/market_cmd.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/cli/options.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/cli/oracle_mapping_view.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/cli/preflight_cmd.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/cli/vault_cmd.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/cli/vault_health.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/cli/vault_info_view.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/cli/vault_markets_view.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/cli/vault_rendering.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/config/__init__.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/config/roles.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/core/__init__.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/core/access.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/core/address.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/core/context.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/core/context_manager.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/core/contract.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/core/erc20.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/core/external_state_executor.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/core/fee_manager.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/core/fuse.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/core/fuse_action.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/core/fuse_decoding.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/core/fusion_factory.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/core/logs.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/core/multicall.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/core/oracle.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/core/plasma_vault.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/core/rewards_manager.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/core/simulation.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/core/simulation_result.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/core/withdraw_manager.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/crosschain/__init__.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/crosschain/ccip/__init__.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/crosschain/ccip/chainlink.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/crosschain/ccip/codec.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/crosschain/ccip/contracts.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/crosschain/ccip/events.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/crosschain/ccip/indexer.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/crosschain/ccip/lane.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/crosschain/ccip/quote.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/crosschain/ccip/transport.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/crosschain/contracts.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/crosschain/discovery.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/crosschain/errors.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/crosschain/fuses/__init__.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/crosschain/fuses/base.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/crosschain/fuses/ccip.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/crosschain/fuses/stargate.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/crosschain/lane.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/crosschain/logs.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/crosschain/messages.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/crosschain/simulation.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/crosschain/stargate/__init__.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/crosschain/stargate/contracts.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/crosschain/stargate/lane.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/crosschain/stargate/layerzero.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/crosschain/stargate/transport.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/crosschain/transport.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/dependency_graph.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/entry_cli.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/entry_mcp.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/errors.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/explorer.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/field_docs.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/fuse_whitelist.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/fuses/aave_v3.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/fuses/async_action.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/fuses/base.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/fuses/erc4626.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/fuses/euler_v2.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/fuses/events.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/fuses/external_state.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/fuses/external_state_event_decoding.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/fuses/fluid_instadapp.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/fuses/gearbox_v3.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/fuses/hypercore.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/fuses/hypercore_event_decoding.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/fuses/hypercore_pre_hooks.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/fuses/merkl.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/fuses/morpho.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/fuses/ramses_v2.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/fuses/uniswap_v3.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/fuses/universal.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/fusion_errors.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/guide/__init__.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/guide/architecture.md +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/guide/glossary.md +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/guide/invariants.md +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/guide/quickstart.md +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/hypercore/__init__.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/market_info.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/mcp/__init__.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/mcp/guide.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/mcp/models.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/mcp/server.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/morpho_api.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/onchain_text.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/preflight.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/py.typed +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/readers/__init__.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/readers/aave_v3.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/readers/aave_v4.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/readers/euler_v2.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/readers/hypercore.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/readers/hypercore_outcome.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/readers/morpho.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/readers/oracle_mapping.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/readers/oracle_mapping_nodes.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/readers/oracle_mapping_reader.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/readers/position_manager.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/readers/ramses_v2.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/readers/uniswap_v3.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/readers/unpriceable.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/registry.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/types.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/validation.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/vault_data.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/vault_erc20.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/vault_info.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/vault_managers.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/vault_positions.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/vault_reads.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/UniswapV3UniversalRouter.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/_addresses.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/_crosschain.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/_crosschain_lifecycle.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/_crosschain_recovery.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/_euler_v2.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/_event_args.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/_fake_rpc.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/_foundry.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/_golden.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/_guide.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/_hypercore_model.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/_hypercore_shadow.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/_live.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/_multicall.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/_oracle_mapping_fake.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/_simulate.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/_validation.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/addresses.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/conftest.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/fixtures/hypercore_hip3_flow.json +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/fixtures/hypercore_market55.json +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/fixtures/hypercore_official.json +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/fixtures/market_golden/meta_morpho_v1.json +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/fixtures/market_golden/meta_morpho_v1.mcp.json +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/fixtures/market_golden/meta_morpho_v2.json +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/fixtures/market_golden/meta_morpho_v2.mcp.json +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/fixtures/market_golden/morpho_api/market.json +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/fixtures/market_golden/morpho_api/vault_v1.json +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/fixtures/market_golden/morpho_api/vault_v2.json +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/fixtures/market_golden/morpho_api/vault_v2_not_found.json +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/fixtures/market_golden/morpho_blue.json +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/fixtures/market_golden/morpho_blue.mcp.json +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/fixtures/market_golden/morpho_blue_api_error.json +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/fixtures/market_golden/morpho_blue_api_error.mcp.json +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/fixtures/market_golden/morpho_blue_no_api.json +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/fixtures/market_golden/morpho_blue_no_api.mcp.json +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/fixtures/oracle_mapping_golden/mapping.json +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/fixtures/oracle_mapping_golden/mapping.mcp.json +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/fixtures/simulate_v1_request.json +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/fixtures/vault_info_golden/clean.json +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/fixtures/vault_info_golden/clean.mcp.json +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/fixtures/vault_info_golden/clean.txt +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/fixtures/vault_info_golden/deployment_error.json +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/fixtures/vault_info_golden/deployment_error.mcp.json +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/fixtures/vault_info_golden/deployment_error.txt +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/fixtures/vault_info_golden/fetched.cli.json +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/fixtures/vault_info_golden/fetched.json +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/fixtures/vault_info_golden/fetched.mcp.json +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/fixtures/vault_info_golden/full.json +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/fixtures/vault_info_golden/full.mcp.json +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/fixtures/vault_info_golden/full.txt +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/fixtures/vault_info_golden/rich.json +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/fixtures/vault_info_golden/rich.mcp.json +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/fixtures/vault_info_golden/rich.txt +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_about.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_access_manager.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_addresses_helper.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_cache.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_ccip_read_disabled.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_chains.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_cli_address.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_cli_changelog.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_cli_commands.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_cli_config_store.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_cli_helpers.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_cli_hypercore.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_cli_market_golden.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_cli_market_morpho_blue.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_cli_mcp_fuse_whitelist.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_cli_mcp_parity.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_cli_oracle_mapping.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_cli_oracle_mapping_golden.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_cli_pending_requests_scan.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_cli_preflight.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_cli_role_accounts.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_cli_vault_info_golden.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_cli_vault_predates_getters.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_cli_vault_validate.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_contract_call.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_contract_encoder.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_crosschain_ccip_events.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_crosschain_ccip_indexer.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_crosschain_ccip_quote.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_crosschain_chainlink.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_crosschain_contracts.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_crosschain_encoding.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_crosschain_errors.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_crosschain_lane.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_crosschain_layering.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_crosschain_transport.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_docs_typing.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_erc20.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_error_hierarchy.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_examples_crosschain.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_examples_euler_looping_arbitrum.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_examples_hypercore_hyperevm.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_examples_vaults.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_explorer.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_external_state_events.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_external_state_executor.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_fee_manager.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_fuse_decoding.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_fuse_whitelist.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_fusion_errors.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_fusion_instance.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_governance_wrappers.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_guide.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_hypercore_deployment.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_hypercore_events.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_hypercore_flow.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_hypercore_live.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_hypercore_outcome.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_hypercore_pre_hooks.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_hypercore_readers.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_hypercore_simulation.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_logs.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_mcp_address.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_mcp_hypercore.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_mcp_models.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_mcp_preflight.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_mcp_server.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_mcp_vault_validate.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_multicall.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_onchain_text.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_oracle.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_oracle_mapping.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_plasma_vault.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_preflight.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_public_type_reachability.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_registry.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_revert_decoding.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_rewards_manager.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_roles.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_sdk_layering.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_simulate_borrow_aave_v3_mainnet.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_simulate_claim_merkl_wrapper_base.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_simulate_claim_morpho_rewards.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_simulate_crosschain_hyperevm.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_simulate_euler_v2_batch_base.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_simulate_euler_v2_credit_market_base.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_simulate_euler_v2_swap_deploy_base.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_simulate_euler_v2_swap_reconfigure_base.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_simulate_euler_v2_swap_registry_base.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_simulate_examples_arbitrum.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_simulate_examples_base.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_simulate_examples_crosschain.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_simulate_examples_hyperevm.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_simulate_external_state_executor_base.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_simulate_fusion_factory_clone_base.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_simulate_looping_aave_v3_base.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_simulate_looping_morpho_blue_base.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_simulate_morpho_blue.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_simulate_pilot_v3.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_simulate_pilot_v4_uniswap.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_simulate_pilot_v5_ramses.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_simulate_pilot_v5_scheduled.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_simulate_plasma_vault_setters_base.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_simulate_preflight_base.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_simulate_readers_integration.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_simulate_release_funds.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_simulate_swap_on_base.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_simulate_timelock_base.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_simulate_vault_from_scratch_base.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_simulation_errors.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_simulation_observation.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_solidity_compiler.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_substrates.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_types_and_events.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_unpriceable_tokens.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_validation.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_vault_data_block.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_vault_dep_graph.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_vault_info_fetched_golden.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_vault_info_onchain_base.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_vault_info_onchain_base_no_withdraw_manager.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_vault_reconciliation_onchain_base.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_vault_simulator_blocks.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_web3_context.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/test_withdraw_manager.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/typed_client/consumer.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/tests/typed_client/rejected.py +0 -0
- {ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/uv.lock +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: ipor-fusion
|
|
3
|
-
Version: 4.2.0.
|
|
3
|
+
Version: 4.2.0.dev11
|
|
4
4
|
Summary: The IPOR Fusion SDK for Python
|
|
5
5
|
Project-URL: homepage, https://ipor.io
|
|
6
6
|
Project-URL: repository, https://github.com/IPOR-Labs/ipor-fusion.py
|
|
@@ -520,7 +520,7 @@ Fuse.method() --> FuseAction --> PlasmaVault.execute([actions]) --> Call
|
|
|
520
520
|
| Euler V2 | `EulerV2SupplyFuse`, `EulerV2CollateralFuse`, `EulerV2ControllerFuse`, `EulerV2BorrowFuse`, `EulerV2BatchFuse`, `EulerV2SwapDeployFuse`, `EulerV2SwapReconfigureFuse`, `EulerV2SwapRegistryFuse` |
|
|
521
521
|
| Uniswap V3 | `UniswapV3SwapFuse`, `UniswapV3NewPositionFuse`, `UniswapV3ModifyPositionFuse`, `UniswapV3CollectFuse` |
|
|
522
522
|
| Ramses V2 | `RamsesV2NewPositionFuse`, `RamsesV2ModifyPositionFuse`, `RamsesV2CollectFuse`, `RamsesClaimFuse` |
|
|
523
|
-
| Compound V3 | `CompoundV3SupplyFuse` |
|
|
523
|
+
| Compound V3 | `CompoundV3SupplyFuse`, `CompoundV3BorrowFuse`, `CompoundV3ClaimFuse` |
|
|
524
524
|
| Gearbox V3 | `GearboxSupplyFuse`, `GearboxStakeFuse` |
|
|
525
525
|
| ERC-4626 | `ERC4626SupplyFuse` |
|
|
526
526
|
| Fluid Instadapp | `FluidInstadappSupplyFuse`, `FluidInstadappStakingFuse` |
|
|
@@ -471,7 +471,7 @@ Fuse.method() --> FuseAction --> PlasmaVault.execute([actions]) --> Call
|
|
|
471
471
|
| Euler V2 | `EulerV2SupplyFuse`, `EulerV2CollateralFuse`, `EulerV2ControllerFuse`, `EulerV2BorrowFuse`, `EulerV2BatchFuse`, `EulerV2SwapDeployFuse`, `EulerV2SwapReconfigureFuse`, `EulerV2SwapRegistryFuse` |
|
|
472
472
|
| Uniswap V3 | `UniswapV3SwapFuse`, `UniswapV3NewPositionFuse`, `UniswapV3ModifyPositionFuse`, `UniswapV3CollectFuse` |
|
|
473
473
|
| Ramses V2 | `RamsesV2NewPositionFuse`, `RamsesV2ModifyPositionFuse`, `RamsesV2CollectFuse`, `RamsesClaimFuse` |
|
|
474
|
-
| Compound V3 | `CompoundV3SupplyFuse` |
|
|
474
|
+
| Compound V3 | `CompoundV3SupplyFuse`, `CompoundV3BorrowFuse`, `CompoundV3ClaimFuse` |
|
|
475
475
|
| Gearbox V3 | `GearboxSupplyFuse`, `GearboxStakeFuse` |
|
|
476
476
|
| ERC-4626 | `ERC4626SupplyFuse` |
|
|
477
477
|
| Fluid Instadapp | `FluidInstadappSupplyFuse`, `FluidInstadappStakingFuse` |
|
|
@@ -171,6 +171,8 @@ from ipor_fusion.fuses import (
|
|
|
171
171
|
AaveV3SupplyFuse,
|
|
172
172
|
AsyncActionFuse,
|
|
173
173
|
AsyncActionSubstrates,
|
|
174
|
+
CompoundV3BorrowFuse,
|
|
175
|
+
CompoundV3ClaimFuse,
|
|
174
176
|
CompoundV3SupplyFuse,
|
|
175
177
|
ERC4626SupplyFuse,
|
|
176
178
|
EulerSwapDynamicParams,
|
|
@@ -656,6 +658,8 @@ __all__ = [
|
|
|
656
658
|
"UniswapV3NewPositionEvent",
|
|
657
659
|
"UniswapV3ClosePositionEvent",
|
|
658
660
|
"UniswapV3Events",
|
|
661
|
+
"CompoundV3BorrowFuse",
|
|
662
|
+
"CompoundV3ClaimFuse",
|
|
659
663
|
"CompoundV3SupplyFuse",
|
|
660
664
|
"RamsesV2NewPositionFuse",
|
|
661
665
|
"RamsesV2ModifyPositionFuse",
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
from ipor_fusion.fuses.aave_v3 import AaveV3BorrowFuse, AaveV3SupplyFuse
|
|
2
2
|
from ipor_fusion.fuses.async_action import AsyncActionFuse, AsyncActionSubstrates
|
|
3
3
|
from ipor_fusion.fuses.base import Fuse, FuseAction, StakeFuse
|
|
4
|
-
from ipor_fusion.fuses.compound_v3 import
|
|
4
|
+
from ipor_fusion.fuses.compound_v3 import (
|
|
5
|
+
CompoundV3BorrowFuse,
|
|
6
|
+
CompoundV3ClaimFuse,
|
|
7
|
+
CompoundV3SupplyFuse,
|
|
8
|
+
)
|
|
5
9
|
from ipor_fusion.fuses.erc4626 import ERC4626SupplyFuse
|
|
6
10
|
from ipor_fusion.fuses.euler_v2 import (
|
|
7
11
|
EulerSwapDynamicParams,
|
|
@@ -112,6 +116,8 @@ __all__ = [
|
|
|
112
116
|
"UniswapV3NewPositionEvent",
|
|
113
117
|
"UniswapV3ClosePositionEvent",
|
|
114
118
|
"UniswapV3Events",
|
|
119
|
+
"CompoundV3BorrowFuse",
|
|
120
|
+
"CompoundV3ClaimFuse",
|
|
115
121
|
"CompoundV3SupplyFuse",
|
|
116
122
|
"RamsesV2NewPositionFuse",
|
|
117
123
|
"RamsesV2ModifyPositionFuse",
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
from eth_typing import ChecksumAddress
|
|
2
|
+
|
|
3
|
+
from ipor_fusion.fuses.base import Fuse, FuseAction
|
|
4
|
+
from ipor_fusion.types import Amount
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class CompoundV3SupplyFuse(Fuse):
|
|
8
|
+
"""Fuse for supplying and withdrawing assets on Compound V3."""
|
|
9
|
+
|
|
10
|
+
SIGNATURES = (
|
|
11
|
+
"enter((address,uint256))",
|
|
12
|
+
"exit((address,uint256))",
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
def supply(self, *, asset: ChecksumAddress, amount: Amount) -> FuseAction:
|
|
16
|
+
self._validate_address(asset, "asset")
|
|
17
|
+
self._validate_amount(amount, "amount")
|
|
18
|
+
return self._action_raw("enter((address,uint256))", [[asset, amount]])
|
|
19
|
+
|
|
20
|
+
def withdraw(self, *, asset: ChecksumAddress, amount: Amount) -> FuseAction:
|
|
21
|
+
self._validate_address(asset, "asset")
|
|
22
|
+
self._validate_amount(amount, "amount")
|
|
23
|
+
return self._action_raw("exit((address,uint256))", [[asset, amount]])
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class CompoundV3BorrowFuse(Fuse):
|
|
27
|
+
"""Fuse for borrowing and repaying the base token of a Comet.
|
|
28
|
+
|
|
29
|
+
The fuse is bound to one Comet, whose base token is the only asset it can
|
|
30
|
+
borrow, so neither action names an asset; the base token must be granted as
|
|
31
|
+
a substrate of the fuse's market. A repay is capped at the debt, so
|
|
32
|
+
``MAX_UINT256`` repays in full.
|
|
33
|
+
"""
|
|
34
|
+
|
|
35
|
+
SIGNATURES = (
|
|
36
|
+
"enter((uint256))",
|
|
37
|
+
"exit((uint256))",
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
def borrow(self, *, amount: Amount) -> FuseAction:
|
|
41
|
+
self._validate_amount(amount, "amount")
|
|
42
|
+
return self._action_raw("enter((uint256))", [[amount]])
|
|
43
|
+
|
|
44
|
+
def repay(self, *, amount: Amount) -> FuseAction:
|
|
45
|
+
self._validate_amount(amount, "amount")
|
|
46
|
+
return self._action_raw("exit((uint256))", [[amount]])
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
class CompoundV3ClaimFuse(Fuse):
|
|
50
|
+
"""Fuse for claiming a Comet's rewards to the vault's rewards claim manager.
|
|
51
|
+
|
|
52
|
+
The fuse is bound to one ``CometRewards``. Route the action through
|
|
53
|
+
``RewardsManager.claim_rewards(...)``, not ``PlasmaVault.execute(...)``, and
|
|
54
|
+
register the fuse with ``RewardsManager.add_reward_fuses(...)`` first. A
|
|
55
|
+
Comet with no reward token configured reverts ``NotSupported(address)``.
|
|
56
|
+
"""
|
|
57
|
+
|
|
58
|
+
SIGNATURES = ("claim(address)",)
|
|
59
|
+
|
|
60
|
+
def claim(self, *, comet: ChecksumAddress) -> FuseAction:
|
|
61
|
+
self._validate_address(comet, "comet")
|
|
62
|
+
return self._action_raw("claim(address)", [comet])
|
|
@@ -106,6 +106,10 @@ class IporFusionMarkets:
|
|
|
106
106
|
# Substrate type: HyperCoreSubstrateLib (1 SpotToken, 2 PerpMarket,
|
|
107
107
|
# 3 Destination, 4 Builder, 5 Config, 6 SendCap, 7 PerpPositionCap).
|
|
108
108
|
HYPERCORE = MarketId(55)
|
|
109
|
+
# Compound V3 Institutional USDC (ciUSDCv3) on Ethereum: its own Comet, so
|
|
110
|
+
# the Compound V3 fuses are deployed again under this id; substrates: asset
|
|
111
|
+
# addresses, as for COMPOUND_V3_USDC
|
|
112
|
+
COMPOUND_V3_INSTITUTIONAL_USDC = MarketId(57)
|
|
109
113
|
# POL unstaking via sPOLController. The out-of-band id is baked into the
|
|
110
114
|
# deployed fuses as an immutable (424243 = 0x67933), so it must match the
|
|
111
115
|
# deployments. Substrates per IporFusionMarkets.sol: the sPOLController
|
|
@@ -19,3 +19,14 @@ class CompoundV3Reader(ContractWrapper):
|
|
|
19
19
|
output_types=["uint256"],
|
|
20
20
|
decoder=Amount,
|
|
21
21
|
)
|
|
22
|
+
|
|
23
|
+
def collateral_balance_of(
|
|
24
|
+
self, account: ChecksumAddress, asset: ChecksumAddress
|
|
25
|
+
) -> Call[Amount]:
|
|
26
|
+
return self._view(
|
|
27
|
+
"collateralBalanceOf(address,address)",
|
|
28
|
+
account,
|
|
29
|
+
asset,
|
|
30
|
+
output_types=["uint128"],
|
|
31
|
+
decoder=Amount,
|
|
32
|
+
)
|
{ipor_fusion-4.2.0.dev9 → ipor_fusion-4.2.0.dev11}/src/ipor_fusion/readers/lending_health.py
RENAMED
|
@@ -132,6 +132,7 @@ UNSUPPORTED_BORROW_MARKET_IDS = frozenset(
|
|
|
132
132
|
IporFusionMarkets.MOONWELL,
|
|
133
133
|
IporFusionMarkets.SILO_V2,
|
|
134
134
|
IporFusionMarkets.EBISU,
|
|
135
|
+
IporFusionMarkets.COMPOUND_V3_INSTITUTIONAL_USDC,
|
|
135
136
|
}
|
|
136
137
|
)
|
|
137
138
|
_UNSUPPORTED_REASON = "no lending health reader for this market"
|
|
@@ -527,6 +527,7 @@ _register_markets(
|
|
|
527
527
|
37,
|
|
528
528
|
44, # SPARK_LEND — reuses AaveV3SupplyFuse (isSubstrateAsAssetGranted)
|
|
529
529
|
46, # NAPIER — isSubstrateAsAssetGranted, plain asset addresses
|
|
530
|
+
57, # COMPOUND_V3_INSTITUTIONAL_USDC — same Compound V3 fuses as market 2
|
|
530
531
|
*range(100_001, 100_021), # ERC4626_0001 .. ERC4626_0020
|
|
531
532
|
],
|
|
532
533
|
_decode_plain_address,
|
|
@@ -164,3 +164,21 @@ ETHEREUM_MORPHO_FLASH_LOAN_FUSE = Web3.to_checksum_address(
|
|
|
164
164
|
ETHEREUM_MORPHO_CLAIM_FUSE = Web3.to_checksum_address(
|
|
165
165
|
"0x6820df665ba09fbbd3240aa303421928ef4c71a1"
|
|
166
166
|
)
|
|
167
|
+
|
|
168
|
+
# Compound V3 Institutional USDC (market 57), ipor-abi names
|
|
169
|
+
# SupplyFuseCompoundV3InstitutionalUsdc and so on
|
|
170
|
+
ETHEREUM_COMPOUND_V3_INSTITUTIONAL_USDC_SUPPLY_FUSE = Web3.to_checksum_address(
|
|
171
|
+
"0xe7CaDa548534973b9d6A4124bBC476b586d1b3e4"
|
|
172
|
+
)
|
|
173
|
+
ETHEREUM_COMPOUND_V3_INSTITUTIONAL_USDC_BORROW_FUSE = Web3.to_checksum_address(
|
|
174
|
+
"0xff1762A6579787c7eab2E4f55A502F7c36714eF6"
|
|
175
|
+
)
|
|
176
|
+
ETHEREUM_COMPOUND_V3_INSTITUTIONAL_USDC_BALANCE_FUSE = Web3.to_checksum_address(
|
|
177
|
+
"0x5dF0CB1cE5159De1efb8038B5185E4612fAd9168"
|
|
178
|
+
)
|
|
179
|
+
ETHEREUM_COMPOUND_V3_INSTITUTIONAL_USDC_CLAIM_FUSE = Web3.to_checksum_address(
|
|
180
|
+
"0x77271931d24fDEE453C9fb9394F475D3431D80e2"
|
|
181
|
+
)
|
|
182
|
+
ETHEREUM_ERC20_BALANCE_FUSE = Web3.to_checksum_address(
|
|
183
|
+
"0x6cEBf3e3392D0860Ed174402884b941DCBB30654"
|
|
184
|
+
)
|
|
@@ -1306,6 +1306,7 @@ class TestUnsupportedBorrowMarkets:
|
|
|
1306
1306
|
IporFusionMarkets.MOONWELL,
|
|
1307
1307
|
IporFusionMarkets.SILO_V2,
|
|
1308
1308
|
IporFusionMarkets.EBISU,
|
|
1309
|
+
IporFusionMarkets.COMPOUND_V3_INSTITUTIONAL_USDC,
|
|
1309
1310
|
],
|
|
1310
1311
|
)
|
|
1311
1312
|
def test_borrow_capable_market_is_unreadable_not_absent(self, market_id):
|
|
@@ -11,7 +11,11 @@ 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
13
|
from ipor_fusion.fuses.base import Fuse
|
|
14
|
-
from ipor_fusion.fuses.compound_v3 import
|
|
14
|
+
from ipor_fusion.fuses.compound_v3 import (
|
|
15
|
+
CompoundV3BorrowFuse,
|
|
16
|
+
CompoundV3ClaimFuse,
|
|
17
|
+
CompoundV3SupplyFuse,
|
|
18
|
+
)
|
|
15
19
|
from ipor_fusion.fuses.erc4626 import ERC4626SupplyFuse
|
|
16
20
|
from ipor_fusion.fuses.euler_v2 import (
|
|
17
21
|
EulerSwapDynamicParams,
|
|
@@ -406,6 +410,38 @@ class TestCompoundV3SupplyFuse:
|
|
|
406
410
|
assert action.data[:4] == _selector("exit((address,uint256))")
|
|
407
411
|
|
|
408
412
|
|
|
413
|
+
class TestCompoundV3BorrowFuse:
|
|
414
|
+
def test_borrow(self):
|
|
415
|
+
action = CompoundV3BorrowFuse(FUSE_ADDR).borrow(amount=4000)
|
|
416
|
+
assert action.data[:4] == _selector("enter((uint256))")
|
|
417
|
+
assert decode(["uint256"], action.data[4:]) == (4000,)
|
|
418
|
+
|
|
419
|
+
def test_repay(self):
|
|
420
|
+
action = CompoundV3BorrowFuse(FUSE_ADDR).repay(amount=MAX_UINT256)
|
|
421
|
+
assert action.data[:4] == _selector("exit((uint256))")
|
|
422
|
+
assert decode(["uint256"], action.data[4:]) == (MAX_UINT256,)
|
|
423
|
+
|
|
424
|
+
@pytest.mark.parametrize("bad_amount", [0, -1])
|
|
425
|
+
def test_rejects_bad_amount(self, bad_amount):
|
|
426
|
+
fuse = CompoundV3BorrowFuse(FUSE_ADDR)
|
|
427
|
+
with pytest.raises(ValueError, match="amount"):
|
|
428
|
+
fuse.borrow(amount=bad_amount)
|
|
429
|
+
with pytest.raises(ValueError, match="amount"):
|
|
430
|
+
fuse.repay(amount=bad_amount)
|
|
431
|
+
|
|
432
|
+
|
|
433
|
+
class TestCompoundV3ClaimFuse:
|
|
434
|
+
def test_claim(self):
|
|
435
|
+
action = CompoundV3ClaimFuse(FUSE_ADDR).claim(comet=TOKEN_A)
|
|
436
|
+
assert action.data[:4] == _selector("claim(address)")
|
|
437
|
+
(comet,) = decode(["address"], action.data[4:])
|
|
438
|
+
assert comet.lower() == TOKEN_A_LOW
|
|
439
|
+
|
|
440
|
+
def test_rejects_zero_comet(self):
|
|
441
|
+
with pytest.raises(ValueError, match="comet"):
|
|
442
|
+
CompoundV3ClaimFuse(FUSE_ADDR).claim(comet=ZERO_ADDR)
|
|
443
|
+
|
|
444
|
+
|
|
409
445
|
# ── ERC4626 ─────────────────────────────────────────────────────────────
|
|
410
446
|
|
|
411
447
|
|
|
@@ -90,6 +90,8 @@ _ALL_SNAPSHOT: dict[str, frozenset[str]] = {
|
|
|
90
90
|
"Check",
|
|
91
91
|
"CloneArgs",
|
|
92
92
|
"CompoundV3Reader",
|
|
93
|
+
"CompoundV3BorrowFuse",
|
|
94
|
+
"CompoundV3ClaimFuse",
|
|
93
95
|
"CompoundV3SupplyFuse",
|
|
94
96
|
"ContextManager",
|
|
95
97
|
"ContractCache",
|
|
@@ -859,6 +861,8 @@ _ALL_SNAPSHOT: dict[str, frozenset[str]] = {
|
|
|
859
861
|
"AaveV3SupplyFuse",
|
|
860
862
|
"AsyncActionFuse",
|
|
861
863
|
"AsyncActionSubstrates",
|
|
864
|
+
"CompoundV3BorrowFuse",
|
|
865
|
+
"CompoundV3ClaimFuse",
|
|
862
866
|
"CompoundV3SupplyFuse",
|
|
863
867
|
"ERC4626SupplyFuse",
|
|
864
868
|
"EXTERNAL_STATE_EVENTS",
|
|
@@ -624,6 +624,14 @@ class TestCompoundV3Reader:
|
|
|
624
624
|
|
|
625
625
|
assert result == Amount(7_500)
|
|
626
626
|
|
|
627
|
+
def test_collateral_balance_of(self):
|
|
628
|
+
reader, ctx = _make_reader(CompoundV3Reader)
|
|
629
|
+
ctx.call.return_value = encode(["uint128"], [9_000])
|
|
630
|
+
|
|
631
|
+
result = reader.collateral_balance_of(USER_ADDR, USER_ADDR).call(ctx)
|
|
632
|
+
|
|
633
|
+
assert result == Amount(9_000)
|
|
634
|
+
|
|
627
635
|
|
|
628
636
|
# ── Uniswap V3 ────────────────────────────────────────────────────────
|
|
629
637
|
|