ipor-fusion 4.0.0.dev282__tar.gz → 4.0.0.dev286__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.dev282 → ipor_fusion-4.0.0.dev286}/MIGRATION_4.md +37 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/PKG-INFO +1 -1
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/pyproject.toml +1 -1
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/fuses/hypercore.py +37 -14
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/fuses/hypercore_event_decoding.py +3 -133
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/hypercore/__init__.py +4 -28
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/mcp/models.py +16 -4
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/readers/hypercore.py +93 -92
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/substrates.py +93 -41
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/vault_info.py +12 -8
- ipor_fusion-4.0.0.dev286/tests/fixtures/hypercore_official.json +16 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/fixtures/vault_info_golden/full.json +6 -3
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/fixtures/vault_info_golden/full.mcp.json +7 -4
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_cli_vault_info_golden.py +7 -5
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_fuse_encoding.py +10 -2
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_hypercore_deployment.py +14 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_hypercore_events.py +15 -1
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_hypercore_flow.py +2 -5
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_hypercore_live.py +14 -18
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_hypercore_readers.py +107 -64
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_mcp_hypercore.py +8 -6
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_mcp_models.py +7 -3
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_public_api.py +2 -14
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_substrates.py +19 -3
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/typed_client/consumer.py +1 -1
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/.claude-plugin/marketplace.json +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/.claude-plugin/plugin.json +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/.env.example +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/.gemini/settings.json +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/.git-blame-ignore-revs +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/.github/workflows/cd.yml +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/.github/workflows/ci.yml +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/.github/workflows/commit-lint.yml +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/.github/workflows/notify-slack.yml +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/.github/workflows/python-build.yml +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/.github/workflows/python-publish.yml +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/.github/workflows/release.yml +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/.github/workflows/report-slack.yml +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/.gitignore +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/.mcp.json +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/.pre-commit-config.yaml +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/.python-version +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/AGENTS.md +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/CHANGELOG.md +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/CLAUDE.md +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/CODEOWNERS +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/LICENSE +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/README.md +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/build.sh +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/examples/CONTRIBUTING.md +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/examples/README.md +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/examples/advanced_euler_v2_credit_market_base.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/examples/advanced_euler_v2_looping_arbitrum.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/examples/composed_hypercore_flow_arbitrum_hyperevm.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/examples/crosschain_ccip_usdc_arbitrum_hyperevm.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/examples/external_state_margin_leg_base.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/examples/simple_aave_v3_supply_base.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/pytest.ini +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/scripts/commit-check.sh +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/scripts/crosschain_readiness.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/skills/ipor-deploy-vault/SKILL.md +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/__init__.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/about.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/cache.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/chains.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/cli/__init__.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/cli/address_cmd.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/cli/changelog_cmd.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/cli/config_cmd.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/cli/config_store.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/cli/main.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/cli/market_cmd.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/cli/options.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/cli/oracle_mapping_view.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/cli/vault_cmd.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/cli/vault_health.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/cli/vault_info_view.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/cli/vault_markets_view.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/cli/vault_rendering.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/config/__init__.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/config/roles.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/core/__init__.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/core/access.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/core/address.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/core/context.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/core/context_manager.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/core/contract.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/core/erc20.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/core/external_state_executor.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/core/fee_manager.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/core/fuse.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/core/fuse_action.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/core/fusion_factory.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/core/logs.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/core/multicall.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/core/oracle.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/core/plasma_vault.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/core/rewards_manager.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/core/simulation.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/core/simulation_result.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/core/withdraw_manager.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/crosschain/__init__.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/crosschain/ccip/__init__.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/crosschain/ccip/chainlink.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/crosschain/ccip/codec.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/crosschain/ccip/contracts.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/crosschain/ccip/events.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/crosschain/ccip/indexer.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/crosschain/ccip/lane.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/crosschain/ccip/quote.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/crosschain/ccip/transport.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/crosschain/contracts.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/crosschain/discovery.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/crosschain/errors.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/crosschain/fuses/__init__.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/crosschain/fuses/base.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/crosschain/fuses/ccip.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/crosschain/fuses/stargate.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/crosschain/lane.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/crosschain/logs.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/crosschain/messages.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/crosschain/simulation.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/crosschain/stargate/__init__.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/crosschain/stargate/contracts.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/crosschain/stargate/lane.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/crosschain/stargate/layerzero.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/crosschain/stargate/transport.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/crosschain/transport.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/dependency_graph.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/entry_cli.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/entry_mcp.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/errors.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/explorer.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/field_docs.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/fuses/__init__.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/fuses/aave_v3.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/fuses/async_action.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/fuses/base.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/fuses/compound_v3.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/fuses/erc4626.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/fuses/euler_v2.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/fuses/events.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/fuses/external_state.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/fuses/external_state_event_decoding.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/fuses/fluid_instadapp.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/fuses/gearbox_v3.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/fuses/merkl.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/fuses/morpho.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/fuses/ramses_v2.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/fuses/uniswap_v3.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/fuses/universal.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/guide/__init__.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/guide/architecture.md +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/guide/glossary.md +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/guide/invariants.md +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/guide/quickstart.md +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/market_ids.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/market_info.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/mcp/__init__.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/mcp/guide.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/mcp/server.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/morpho_api.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/py.typed +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/readers/__init__.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/readers/aave_v3.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/readers/aave_v4.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/readers/compound_v3.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/readers/hypercore_outcome.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/readers/lending_health.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/readers/morpho.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/readers/oracle_mapping.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/readers/oracle_mapping_nodes.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/readers/oracle_mapping_reader.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/readers/position_manager.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/readers/ramses_v2.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/readers/uniswap_v3.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/readers/unpriceable.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/registry.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/types.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/validation.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/vault_data.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/vault_erc20.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/vault_managers.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/vault_positions.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/src/ipor_fusion/vault_reads.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/UniswapV3UniversalRouter.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/_crosschain.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/_crosschain_lifecycle.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/_crosschain_recovery.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/_euler_v2.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/_event_args.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/_fake_rpc.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/_foundry.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/_golden.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/_guide.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/_hypercore_model.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/_hypercore_shadow.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/_live.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/_multicall.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/_oracle_mapping_fake.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/_simulate.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/_validation.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/addresses.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/conftest.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/constants.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/fixtures/hypercore_hip3_flow.json +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/fixtures/hypercore_market55.json +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/fixtures/market_golden/meta_morpho_v1.json +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/fixtures/market_golden/meta_morpho_v1.mcp.json +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/fixtures/market_golden/meta_morpho_v2.json +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/fixtures/market_golden/meta_morpho_v2.mcp.json +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/fixtures/market_golden/morpho_api/market.json +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/fixtures/market_golden/morpho_api/vault_v1.json +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/fixtures/market_golden/morpho_api/vault_v2.json +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/fixtures/market_golden/morpho_api/vault_v2_not_found.json +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/fixtures/market_golden/morpho_blue.json +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/fixtures/market_golden/morpho_blue.mcp.json +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/fixtures/market_golden/morpho_blue_api_error.json +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/fixtures/market_golden/morpho_blue_api_error.mcp.json +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/fixtures/market_golden/morpho_blue_no_api.json +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/fixtures/market_golden/morpho_blue_no_api.mcp.json +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/fixtures/oracle_mapping_golden/mapping.json +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/fixtures/oracle_mapping_golden/mapping.mcp.json +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/fixtures/simulate_v1_request.json +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/fixtures/vault_info_golden/clean.json +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/fixtures/vault_info_golden/clean.mcp.json +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/fixtures/vault_info_golden/clean.txt +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/fixtures/vault_info_golden/deployment_error.json +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/fixtures/vault_info_golden/deployment_error.mcp.json +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/fixtures/vault_info_golden/deployment_error.txt +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/fixtures/vault_info_golden/fetched.cli.json +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/fixtures/vault_info_golden/fetched.json +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/fixtures/vault_info_golden/fetched.mcp.json +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/fixtures/vault_info_golden/full.txt +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/fixtures/vault_info_golden/rich.json +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/fixtures/vault_info_golden/rich.mcp.json +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/fixtures/vault_info_golden/rich.txt +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_about.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_access_manager.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_cache.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_chains.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_cli_address.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_cli_changelog.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_cli_commands.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_cli_config_store.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_cli_helpers.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_cli_hypercore.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_cli_lending_health.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_cli_market_golden.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_cli_market_morpho_blue.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_cli_mcp_parity.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_cli_oracle_mapping.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_cli_oracle_mapping_golden.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_cli_pending_requests_scan.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_cli_role_accounts.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_cli_vault_predates_getters.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_cli_vault_validate.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_contract_call.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_contract_encoder.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_crosschain_ccip_events.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_crosschain_ccip_indexer.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_crosschain_ccip_quote.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_crosschain_chainlink.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_crosschain_contracts.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_crosschain_encoding.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_crosschain_errors.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_crosschain_lane.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_crosschain_layering.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_crosschain_readiness.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_crosschain_readiness_report.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_crosschain_transport.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_docs_typing.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_erc20.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_error_hierarchy.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_examples_composed_hypercore.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_examples_crosschain.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_examples_euler_looping_arbitrum.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_examples_vaults.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_explorer.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_external_state_events.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_external_state_executor.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_fee_manager.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_fusion_instance.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_governance_wrappers.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_guide.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_hypercore_outcome.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_hypercore_simulation.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_logs.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_mcp_address.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_mcp_server.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_mcp_vault_validate.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_multicall.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_oracle.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_oracle_mapping.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_plasma_vault.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_public_type_reachability.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_reader_encoding.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_readiness_selection.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_registry.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_revert_decoding.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_rewards_manager.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_roles.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_sdk_layering.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_simulate_borrow_aave_v3_mainnet.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_simulate_claim_merkl_wrapper_base.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_simulate_claim_morpho_rewards.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_simulate_crosschain_canary.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_simulate_crosschain_hypercore.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_simulate_crosschain_hyperevm.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_simulate_crosschain_lifecycle.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_simulate_euler_v2_batch_base.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_simulate_euler_v2_credit_market_base.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_simulate_euler_v2_swap_deploy_base.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_simulate_euler_v2_swap_reconfigure_base.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_simulate_euler_v2_swap_registry_base.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_simulate_examples_arbitrum.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_simulate_examples_base.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_simulate_examples_crosschain.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_simulate_external_state_executor_base.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_simulate_fusion_factory_clone_base.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_simulate_looping_aave_v3_base.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_simulate_looping_morpho_blue_base.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_simulate_morpho_blue.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_simulate_pilot_v3.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_simulate_pilot_v4_uniswap.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_simulate_pilot_v5_ramses.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_simulate_pilot_v5_scheduled.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_simulate_plasma_vault_setters_base.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_simulate_readers_integration.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_simulate_release_funds.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_simulate_swap_on_base.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_simulate_vault_from_scratch_base.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_simulation_errors.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_simulation_observation.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_solidity_compiler.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_solidity_mirrors.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_types_and_events.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_unpriceable_tokens.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_validation.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_vault_data_block.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_vault_dep_graph.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_vault_info_fetched_golden.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_vault_info_onchain_base.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_vault_info_onchain_base_no_withdraw_manager.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_vault_reconciliation_onchain_base.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_vault_simulator_blocks.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_web3_context.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/test_withdraw_manager.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/tests/typed_client/rejected.py +0 -0
- {ipor_fusion-4.0.0.dev282 → ipor_fusion-4.0.0.dev286}/uv.lock +0 -0
|
@@ -390,6 +390,43 @@ module was renamed to match. Import the decoders with `from ipor_fusion import
|
|
|
390
390
|
external_state_events` and `from ipor_fusion.hypercore import hypercore_events`;
|
|
391
391
|
the modules are internal.
|
|
392
392
|
|
|
393
|
+
#### HyperCore follows the released contracts
|
|
394
|
+
|
|
395
|
+
4.0 reads and encodes the HyperCore contracts `ipor-abi` publishes on HyperEVM
|
|
396
|
+
(contracts release 2026-10-21), not the earlier market-55 test deployment.
|
|
397
|
+
|
|
398
|
+
- **Pending reader.** `HYPERCORE_PENDING_READERS[999]` is
|
|
399
|
+
`0x1EFFb12434f5fb59a636C54D8CBaC93b13DF1A9E`. `HyperCorePendingReader.is_pending()`
|
|
400
|
+
is gone (the released reader has no `isPending()`): call `is_action_pending()`,
|
|
401
|
+
and `is_order_in_flight()` for the order rate limit. `pending_state()` decodes
|
|
402
|
+
the released 23-word tuple only; the earlier reader `0x83F54bc9…` returns 18
|
|
403
|
+
words and is no longer supported. A vault of the earlier build (its pre-hooks
|
|
404
|
+
predate the transfer effect) reads through the released reader only while
|
|
405
|
+
nothing is in flight: the struct only grew, so a settled state decodes the same,
|
|
406
|
+
but during an action the released reader derives `pending`/`settled` from effect
|
|
407
|
+
fields the earlier hooks never write, so it can disagree with what that vault
|
|
408
|
+
enforces.
|
|
409
|
+
- **`HyperCorePendingState`.** Removed: `settlement_mode`, `reported_result`,
|
|
410
|
+
`result_l1_block`, `refreshing` (the contracts no longer write them). Added:
|
|
411
|
+
`effect_kind` (`HyperCoreEffectKind`), `effect_token_index`, `effect_evm_asset`,
|
|
412
|
+
`expected_balance`, `timeout_at`, `last_order_l1_block`. A transfer with an effect
|
|
413
|
+
settles when the expected balance is observed or `timeout_at` passes.
|
|
414
|
+
- **`vault info` / `vault_info`.** `hypercore.pending` drops `refreshing`,
|
|
415
|
+
`settlement_mode`, `reported_result` and gains the six fields above.
|
|
416
|
+
- **Settlement mode removed.** `SettlementMode` and `HyperCoreReportedResult` are
|
|
417
|
+
gone, and so are the settlement fuse and reporter events
|
|
418
|
+
(`HyperCoreReportedActionSettled`, `ReportSubmitted`, `ObserverSetProposed`,
|
|
419
|
+
`ObserverSetChanged`, `RecoveryProposed`, `RecoveryExecuted` and their `*Args`
|
|
420
|
+
/ `*Event` classes): orders settle by time, transfers by time and effect.
|
|
421
|
+
`HyperCoreConfigKey.WINDOW_ORDER_SECONDS` and `SETTLEMENT_MODE` keep their
|
|
422
|
+
numbers but are reserved and ignored (`RESERVED_HYPERCORE_CONFIG_KEYS`); a
|
|
423
|
+
decoded substrate of either carries `extra["reserved"] == "true"`.
|
|
424
|
+
- **New substrates.** `HyperCoreSubstrates.perp_position_cap(asset,
|
|
425
|
+
max_position_notional_usd6)` (type 7) and `HyperCoreConfigKey`
|
|
426
|
+
`TRANSFER_TIMEOUT_SECONDS`, `ACTIVATION_FEE_ALLOWANCE_USDC_WEI`, `MAX_NAV_JUMP_BPS`,
|
|
427
|
+
`MAX_MARK_ORACLE_DEVIATION_BPS`, `NAV_JUMP_FLOOR_USD6` (7..11); `decode_substrate`
|
|
428
|
+
decodes them instead of flagging them as errors.
|
|
429
|
+
|
|
393
430
|
**Removed.**
|
|
394
431
|
|
|
395
432
|
- `IporFusionMarkets.RWA`: market 50 is `IporFusionMarkets.EXTERNAL_STATE`.
|
|
@@ -95,15 +95,12 @@ class TimeInForce(IntEnum):
|
|
|
95
95
|
IOC = 3
|
|
96
96
|
|
|
97
97
|
|
|
98
|
-
class SettlementMode(IntEnum):
|
|
99
|
-
"""``Config{SettlementMode}``: how a pending action is cleared."""
|
|
100
|
-
|
|
101
|
-
TIMING = 1
|
|
102
|
-
REPORTED = 2
|
|
103
|
-
|
|
104
|
-
|
|
105
98
|
class HyperCoreConfigKey(IntEnum):
|
|
106
|
-
"""``HyperCoreSubstrateLib.ConfigKey`` (the Undefined member is invalid).
|
|
99
|
+
"""``HyperCoreSubstrateLib.ConfigKey`` (the Undefined member is invalid).
|
|
100
|
+
|
|
101
|
+
The numbering is stable: ``WINDOW_ORDER_SECONDS`` (2) and
|
|
102
|
+
``SETTLEMENT_MODE`` (5) are reserved and ignored by the fuses; orders
|
|
103
|
+
settle by time and the observed effect only."""
|
|
107
104
|
|
|
108
105
|
WINDOW_TRANSFER_SECONDS = 1
|
|
109
106
|
WINDOW_ORDER_SECONDS = 2
|
|
@@ -111,6 +108,17 @@ class HyperCoreConfigKey(IntEnum):
|
|
|
111
108
|
PERP_DEX_IDS = 4
|
|
112
109
|
SETTLEMENT_MODE = 5
|
|
113
110
|
SPOT_SEND_BRIDGE_ENABLED = 6
|
|
111
|
+
TRANSFER_TIMEOUT_SECONDS = 7
|
|
112
|
+
ACTIVATION_FEE_ALLOWANCE_USDC_WEI = 8
|
|
113
|
+
MAX_NAV_JUMP_BPS = 9
|
|
114
|
+
MAX_MARK_ORACLE_DEVIATION_BPS = 10
|
|
115
|
+
NAV_JUMP_FLOOR_USD6 = 11
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
#: Config keys the fuses ignore (kept for their stable numbering).
|
|
119
|
+
RESERVED_HYPERCORE_CONFIG_KEYS = frozenset(
|
|
120
|
+
{HyperCoreConfigKey.WINDOW_ORDER_SECONDS, HyperCoreConfigKey.SETTLEMENT_MODE}
|
|
121
|
+
)
|
|
114
122
|
|
|
115
123
|
|
|
116
124
|
def hip3_action_asset(dex: int, index_in_dex: int) -> HyperCoreAsset:
|
|
@@ -347,11 +355,13 @@ class HyperCoreSubstrates:
|
|
|
347
355
|
(at most one when any of them is HIP-3), Destinations for ``sendAsset`` /
|
|
348
356
|
``spotSend`` (only the vault itself and, for the Core -> EVM route, the
|
|
349
357
|
token's :func:`system_address` are accepted by the fuses), a SendCap per
|
|
350
|
-
token (mandatory: a token without one cannot be sent), Builders,
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
``
|
|
358
|
+
token (mandatory: a token without one cannot be sent), Builders, a
|
|
359
|
+
PerpPositionCap per market whose open position is capped, and the Config
|
|
360
|
+
keys. ``MAX_USD_CLASS_TRANSFER_USD6`` is required before a margin transfer;
|
|
361
|
+
``WINDOW_TRANSFER_SECONDS`` defaults to 2 s, ``SPOT_SEND_BRIDGE_ENABLED`` to
|
|
362
|
+
disabled, ``TRANSFER_TIMEOUT_SECONDS`` to 600 s (at least 60),
|
|
363
|
+
``MAX_NAV_JUMP_BPS`` to 5000 and ``MAX_MARK_ORACLE_DEVIATION_BPS`` to 500;
|
|
364
|
+
the reserved keys are ignored. :func:`ipor_fusion.decode_substrate`
|
|
355
365
|
inverts these.
|
|
356
366
|
"""
|
|
357
367
|
|
|
@@ -394,7 +404,9 @@ class HyperCoreSubstrates:
|
|
|
394
404
|
@staticmethod
|
|
395
405
|
def config(key: HyperCoreConfigKey, value: int) -> bytes:
|
|
396
406
|
"""One Config key; ``PERP_DEX_IDS`` is a bitmap (bit i enables perp
|
|
397
|
-
dex i, bit 0 stays clear)
|
|
407
|
+
dex i, bit 0 stays clear). The reserved keys
|
|
408
|
+
(:data:`RESERVED_HYPERCORE_CONFIG_KEYS`) encode but the fuses ignore
|
|
409
|
+
them."""
|
|
398
410
|
key = HyperCoreConfigKey(key)
|
|
399
411
|
_validate_uint(value, 240, "value")
|
|
400
412
|
return _word(5, (int(key) << 240) | value)
|
|
@@ -405,3 +417,14 @@ class HyperCoreSubstrates:
|
|
|
405
417
|
_validate_uint(token_index, 64, "token_index")
|
|
406
418
|
_validate_uint(max_wei, 128, "max_wei")
|
|
407
419
|
return _word(6, (token_index << 128) | max_wei)
|
|
420
|
+
|
|
421
|
+
@staticmethod
|
|
422
|
+
def perp_position_cap(
|
|
423
|
+
asset: HyperCoreAsset, max_position_notional_usd6: int
|
|
424
|
+
) -> bytes:
|
|
425
|
+
"""Cap on the open position notional of action asset ``asset`` in USD
|
|
426
|
+
(6 decimals); the order fuse reverts
|
|
427
|
+
``HyperCoreOrderFusePositionCapExceeded`` above it."""
|
|
428
|
+
_validate_uint(asset, 32, "asset")
|
|
429
|
+
_validate_uint(max_position_notional_usd6, 88, "max_position_notional_usd6")
|
|
430
|
+
return _word(7, (asset << 216) | (max_position_notional_usd6 << 128))
|
|
@@ -1,13 +1,12 @@
|
|
|
1
|
-
"""HyperCore events by topic: the fuses'
|
|
2
|
-
settlement fuse's and the settlement reporter's.
|
|
1
|
+
"""HyperCore events by topic: the fuses' and the pending library's.
|
|
3
2
|
|
|
4
3
|
Mirrors the ``event`` declarations in ``contracts/fuses/hypercore``. Every
|
|
5
4
|
parameter is unindexed (the repository's event policy), so a log decodes from
|
|
6
5
|
its ``data`` alone; the first parameter of a fuse event, ``version``, is the
|
|
7
6
|
fuse's own address (``VERSION``). ``HyperCoreActionEnqueued`` is emitted by
|
|
8
7
|
the vault (the fuses run as delegatecalls) once per enqueued action and
|
|
9
|
-
``HyperCoreActionSettled``
|
|
10
|
-
|
|
8
|
+
``HyperCoreActionSettled`` by either HyperCore pre-hook when it clears a settled
|
|
9
|
+
action.
|
|
11
10
|
|
|
12
11
|
Status: preview, not production. The contracts behind it are under active development, the mainnet deployments are a proof of concept and IPOR Labs canaries, and interfaces may change between minor versions; see ``ipor_fusion.about.PREVIEW_FEATURES``.
|
|
13
12
|
"""
|
|
@@ -134,42 +133,6 @@ HYPERCORE_EVENT_SPECS: tuple[HyperCoreEventSpec, ...] = (
|
|
|
134
133
|
),
|
|
135
134
|
),
|
|
136
135
|
HyperCoreEventSpec("HyperCoreActionSettled", (("uint256", "nonce"),)),
|
|
137
|
-
# HyperCoreSettlementFuse
|
|
138
|
-
HyperCoreEventSpec(
|
|
139
|
-
"HyperCoreReportedActionSettled",
|
|
140
|
-
(
|
|
141
|
-
("uint256", "nonce"),
|
|
142
|
-
("uint24", "actionId"),
|
|
143
|
-
("bytes32", "payloadHash"),
|
|
144
|
-
("uint8", "outcome"),
|
|
145
|
-
("uint64", "resultL1Block"),
|
|
146
|
-
("bytes32", "evidenceHash"),
|
|
147
|
-
("bytes32", "reasonHash"),
|
|
148
|
-
),
|
|
149
|
-
),
|
|
150
|
-
# HyperCoreSettlementReporter
|
|
151
|
-
HyperCoreEventSpec(
|
|
152
|
-
"ReportSubmitted",
|
|
153
|
-
(("bytes32", "digest"), ("uint256", "nonce"), ("uint8", "outcome")),
|
|
154
|
-
),
|
|
155
|
-
HyperCoreEventSpec("ObserverSetProposed", (("uint64", "executeAfter"),)),
|
|
156
|
-
HyperCoreEventSpec(
|
|
157
|
-
"ObserverSetChanged",
|
|
158
|
-
(("address", "observer0"), ("address", "observer1"), ("address", "observer2")),
|
|
159
|
-
),
|
|
160
|
-
HyperCoreEventSpec(
|
|
161
|
-
"RecoveryProposed",
|
|
162
|
-
(
|
|
163
|
-
("bytes32", "digest"),
|
|
164
|
-
("bytes32", "evidenceHash"),
|
|
165
|
-
("bytes32", "reasonHash"),
|
|
166
|
-
("uint64", "executeAfter"),
|
|
167
|
-
),
|
|
168
|
-
),
|
|
169
|
-
HyperCoreEventSpec(
|
|
170
|
-
"RecoveryExecuted",
|
|
171
|
-
(("bytes32", "digest"), ("bytes32", "evidenceHash"), ("bytes32", "reasonHash")),
|
|
172
|
-
),
|
|
173
136
|
)
|
|
174
137
|
|
|
175
138
|
# Event parameters by their Solidity names; ``version`` is the emitting fuse.
|
|
@@ -250,45 +213,6 @@ class HyperCoreActionSettledArgs(TypedDict):
|
|
|
250
213
|
nonce: int
|
|
251
214
|
|
|
252
215
|
|
|
253
|
-
class HyperCoreReportedActionSettledArgs(TypedDict):
|
|
254
|
-
nonce: int
|
|
255
|
-
actionId: HyperCoreActionId
|
|
256
|
-
payloadHash: PayloadHash
|
|
257
|
-
outcome: int
|
|
258
|
-
resultL1Block: int
|
|
259
|
-
evidenceHash: bytes
|
|
260
|
-
reasonHash: bytes
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
class HyperCoreReportSubmittedArgs(TypedDict):
|
|
264
|
-
digest: bytes
|
|
265
|
-
nonce: int
|
|
266
|
-
outcome: int
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
class HyperCoreObserverSetProposedArgs(TypedDict):
|
|
270
|
-
executeAfter: Timestamp
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
class HyperCoreObserverSetChangedArgs(TypedDict):
|
|
274
|
-
observer0: ChecksumAddress
|
|
275
|
-
observer1: ChecksumAddress
|
|
276
|
-
observer2: ChecksumAddress
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
class HyperCoreRecoveryProposedArgs(TypedDict):
|
|
280
|
-
digest: bytes
|
|
281
|
-
evidenceHash: bytes
|
|
282
|
-
reasonHash: bytes
|
|
283
|
-
executeAfter: Timestamp
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
class HyperCoreRecoveryExecutedArgs(TypedDict):
|
|
287
|
-
digest: bytes
|
|
288
|
-
evidenceHash: bytes
|
|
289
|
-
reasonHash: bytes
|
|
290
|
-
|
|
291
|
-
|
|
292
216
|
#: The parameters of one HyperCore event.
|
|
293
217
|
HyperCoreEventArgs: TypeAlias = (
|
|
294
218
|
HyperCoreDepositFuseEnterArgs
|
|
@@ -301,12 +225,6 @@ HyperCoreEventArgs: TypeAlias = (
|
|
|
301
225
|
| HyperCoreBuilderFeeFuseEnterArgs
|
|
302
226
|
| HyperCoreActionEnqueuedArgs
|
|
303
227
|
| HyperCoreActionSettledArgs
|
|
304
|
-
| HyperCoreReportedActionSettledArgs
|
|
305
|
-
| HyperCoreReportSubmittedArgs
|
|
306
|
-
| HyperCoreObserverSetProposedArgs
|
|
307
|
-
| HyperCoreObserverSetChangedArgs
|
|
308
|
-
| HyperCoreRecoveryProposedArgs
|
|
309
|
-
| HyperCoreRecoveryExecutedArgs
|
|
310
228
|
)
|
|
311
229
|
|
|
312
230
|
#: topic0 -> spec, for every HyperCore event.
|
|
@@ -403,42 +321,6 @@ class HyperCoreActionSettledEvent(_HyperCoreEventBase):
|
|
|
403
321
|
args: HyperCoreActionSettledArgs
|
|
404
322
|
|
|
405
323
|
|
|
406
|
-
@dataclass(frozen=True, slots=True, kw_only=True)
|
|
407
|
-
class HyperCoreReportedActionSettledEvent(_HyperCoreEventBase):
|
|
408
|
-
name: Literal["HyperCoreReportedActionSettled"] = "HyperCoreReportedActionSettled"
|
|
409
|
-
args: HyperCoreReportedActionSettledArgs
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
@dataclass(frozen=True, slots=True, kw_only=True)
|
|
413
|
-
class HyperCoreReportSubmittedEvent(_HyperCoreEventBase):
|
|
414
|
-
name: Literal["ReportSubmitted"] = "ReportSubmitted"
|
|
415
|
-
args: HyperCoreReportSubmittedArgs
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
@dataclass(frozen=True, slots=True, kw_only=True)
|
|
419
|
-
class HyperCoreObserverSetProposedEvent(_HyperCoreEventBase):
|
|
420
|
-
name: Literal["ObserverSetProposed"] = "ObserverSetProposed"
|
|
421
|
-
args: HyperCoreObserverSetProposedArgs
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
@dataclass(frozen=True, slots=True, kw_only=True)
|
|
425
|
-
class HyperCoreObserverSetChangedEvent(_HyperCoreEventBase):
|
|
426
|
-
name: Literal["ObserverSetChanged"] = "ObserverSetChanged"
|
|
427
|
-
args: HyperCoreObserverSetChangedArgs
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
@dataclass(frozen=True, slots=True, kw_only=True)
|
|
431
|
-
class HyperCoreRecoveryProposedEvent(_HyperCoreEventBase):
|
|
432
|
-
name: Literal["RecoveryProposed"] = "RecoveryProposed"
|
|
433
|
-
args: HyperCoreRecoveryProposedArgs
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
@dataclass(frozen=True, slots=True, kw_only=True)
|
|
437
|
-
class HyperCoreRecoveryExecutedEvent(_HyperCoreEventBase):
|
|
438
|
-
name: Literal["RecoveryExecuted"] = "RecoveryExecuted"
|
|
439
|
-
args: HyperCoreRecoveryExecutedArgs
|
|
440
|
-
|
|
441
|
-
|
|
442
324
|
#: One decoded HyperCore event; ``event.name == "..."`` narrows it, and its
|
|
443
325
|
#: ``args``, to that event's class.
|
|
444
326
|
HyperCoreEvent: TypeAlias = (
|
|
@@ -452,12 +334,6 @@ HyperCoreEvent: TypeAlias = (
|
|
|
452
334
|
| HyperCoreBuilderFeeFuseEnterEvent
|
|
453
335
|
| HyperCoreActionEnqueuedEvent
|
|
454
336
|
| HyperCoreActionSettledEvent
|
|
455
|
-
| HyperCoreReportedActionSettledEvent
|
|
456
|
-
| HyperCoreReportSubmittedEvent
|
|
457
|
-
| HyperCoreObserverSetProposedEvent
|
|
458
|
-
| HyperCoreObserverSetChangedEvent
|
|
459
|
-
| HyperCoreRecoveryProposedEvent
|
|
460
|
-
| HyperCoreRecoveryExecutedEvent
|
|
461
337
|
)
|
|
462
338
|
|
|
463
339
|
#: Event name -> its event class (``args`` annotation: its TypedDict).
|
|
@@ -472,12 +348,6 @@ HYPERCORE_EVENT_CLASSES: dict[str, type[HyperCoreEvent]] = {
|
|
|
472
348
|
"HyperCoreBuilderFeeFuseEnter": HyperCoreBuilderFeeFuseEnterEvent,
|
|
473
349
|
"HyperCoreActionEnqueued": HyperCoreActionEnqueuedEvent,
|
|
474
350
|
"HyperCoreActionSettled": HyperCoreActionSettledEvent,
|
|
475
|
-
"HyperCoreReportedActionSettled": HyperCoreReportedActionSettledEvent,
|
|
476
|
-
"ReportSubmitted": HyperCoreReportSubmittedEvent,
|
|
477
|
-
"ObserverSetProposed": HyperCoreObserverSetProposedEvent,
|
|
478
|
-
"ObserverSetChanged": HyperCoreObserverSetChangedEvent,
|
|
479
|
-
"RecoveryProposed": HyperCoreRecoveryProposedEvent,
|
|
480
|
-
"RecoveryExecuted": HyperCoreRecoveryExecutedEvent,
|
|
481
351
|
}
|
|
482
352
|
|
|
483
353
|
|
|
@@ -6,6 +6,7 @@ minor release, which is why they live here rather than in `ipor_fusion`.
|
|
|
6
6
|
"""
|
|
7
7
|
|
|
8
8
|
from ipor_fusion.fuses.hypercore import (
|
|
9
|
+
RESERVED_HYPERCORE_CONFIG_KEYS,
|
|
9
10
|
SPOT_DEX,
|
|
10
11
|
USDC_SYSTEM_ADDRESS,
|
|
11
12
|
USDC_TOKEN_INDEX,
|
|
@@ -17,7 +18,6 @@ from ipor_fusion.fuses.hypercore import (
|
|
|
17
18
|
HyperCoreOrderFuse,
|
|
18
19
|
HyperCoreSendFuse,
|
|
19
20
|
HyperCoreSubstrates,
|
|
20
|
-
SettlementMode,
|
|
21
21
|
TimeInForce,
|
|
22
22
|
hip3_action_asset,
|
|
23
23
|
is_hip3_asset,
|
|
@@ -47,20 +47,8 @@ from ipor_fusion.fuses.hypercore_event_decoding import (
|
|
|
47
47
|
HyperCoreEventSpec,
|
|
48
48
|
HyperCoreMarginFuseEnterArgs,
|
|
49
49
|
HyperCoreMarginFuseEnterEvent,
|
|
50
|
-
HyperCoreObserverSetChangedArgs,
|
|
51
|
-
HyperCoreObserverSetChangedEvent,
|
|
52
|
-
HyperCoreObserverSetProposedArgs,
|
|
53
|
-
HyperCoreObserverSetProposedEvent,
|
|
54
50
|
HyperCoreOrderFuseEnterArgs,
|
|
55
51
|
HyperCoreOrderFuseEnterEvent,
|
|
56
|
-
HyperCoreRecoveryExecutedArgs,
|
|
57
|
-
HyperCoreRecoveryExecutedEvent,
|
|
58
|
-
HyperCoreRecoveryProposedArgs,
|
|
59
|
-
HyperCoreRecoveryProposedEvent,
|
|
60
|
-
HyperCoreReportedActionSettledArgs,
|
|
61
|
-
HyperCoreReportedActionSettledEvent,
|
|
62
|
-
HyperCoreReportSubmittedArgs,
|
|
63
|
-
HyperCoreReportSubmittedEvent,
|
|
64
52
|
HyperCoreSendFuseSendAssetArgs,
|
|
65
53
|
HyperCoreSendFuseSendAssetEvent,
|
|
66
54
|
HyperCoreSendFuseSpotSendArgs,
|
|
@@ -75,6 +63,7 @@ from ipor_fusion.readers.hypercore import (
|
|
|
75
63
|
HYPERCORE_PENDING_READERS,
|
|
76
64
|
HyperCoreAccountMarginSummary,
|
|
77
65
|
HyperCoreActionClass,
|
|
66
|
+
HyperCoreEffectKind,
|
|
78
67
|
HyperCoreNav,
|
|
79
68
|
HyperCorePendingReader,
|
|
80
69
|
HyperCorePendingState,
|
|
@@ -83,7 +72,6 @@ from ipor_fusion.readers.hypercore import (
|
|
|
83
72
|
HyperCorePerpMarket,
|
|
84
73
|
HyperCorePosition,
|
|
85
74
|
HyperCoreReader,
|
|
86
|
-
HyperCoreReportedResult,
|
|
87
75
|
HyperCoreSpotBalance,
|
|
88
76
|
HyperCoreSpotLeg,
|
|
89
77
|
HyperCoreTokenInfo,
|
|
@@ -154,10 +142,6 @@ __all__ = [
|
|
|
154
142
|
"HyperCoreMarginFuseEnterArgs",
|
|
155
143
|
"HyperCoreMarginFuseEnterEvent",
|
|
156
144
|
"HyperCoreNav",
|
|
157
|
-
"HyperCoreObserverSetChangedArgs",
|
|
158
|
-
"HyperCoreObserverSetChangedEvent",
|
|
159
|
-
"HyperCoreObserverSetProposedArgs",
|
|
160
|
-
"HyperCoreObserverSetProposedEvent",
|
|
161
145
|
"HyperCoreOrderFuse",
|
|
162
146
|
"HyperCoreOrderFuseEnterArgs",
|
|
163
147
|
"HyperCoreOrderFuseEnterEvent",
|
|
@@ -169,15 +153,7 @@ __all__ = [
|
|
|
169
153
|
"HyperCorePerpMarket",
|
|
170
154
|
"HyperCorePosition",
|
|
171
155
|
"HyperCoreReader",
|
|
172
|
-
"
|
|
173
|
-
"HyperCoreRecoveryExecutedEvent",
|
|
174
|
-
"HyperCoreRecoveryProposedArgs",
|
|
175
|
-
"HyperCoreRecoveryProposedEvent",
|
|
176
|
-
"HyperCoreReportSubmittedArgs",
|
|
177
|
-
"HyperCoreReportSubmittedEvent",
|
|
178
|
-
"HyperCoreReportedActionSettledArgs",
|
|
179
|
-
"HyperCoreReportedActionSettledEvent",
|
|
180
|
-
"HyperCoreReportedResult",
|
|
156
|
+
"HyperCoreEffectKind",
|
|
181
157
|
"HyperCoreSendFuse",
|
|
182
158
|
"HyperCoreSendFuseSendAssetArgs",
|
|
183
159
|
"HyperCoreSendFuseSendAssetEvent",
|
|
@@ -192,7 +168,7 @@ __all__ = [
|
|
|
192
168
|
"HyperCoreTransferSnapshot",
|
|
193
169
|
"HyperCoreTransferStatus",
|
|
194
170
|
"HyperCoreVaultState",
|
|
195
|
-
"
|
|
171
|
+
"RESERVED_HYPERCORE_CONFIG_KEYS",
|
|
196
172
|
"TimeInForce",
|
|
197
173
|
"compare_hypercore_transfer",
|
|
198
174
|
"convert_to_wad_int",
|
|
@@ -972,14 +972,12 @@ class HyperCorePerpMarketEntry(_Base):
|
|
|
972
972
|
|
|
973
973
|
class HyperCorePendingEntry(_Base):
|
|
974
974
|
"""HyperCorePendingReader.pendingState(): `pending` and `settled` are the
|
|
975
|
-
authoritative predicates; the raw fields stay after a
|
|
975
|
+
authoritative predicates; the raw fields stay after a settlement until the
|
|
976
|
+
next enqueue."""
|
|
976
977
|
|
|
977
978
|
pending: bool
|
|
978
979
|
settled: bool
|
|
979
|
-
refreshing: bool
|
|
980
980
|
action_class: Literal["NONE", "TRANSFER", "ORDER"]
|
|
981
|
-
settlement_mode: Literal["TIMING", "REPORTED"] | None
|
|
982
|
-
reported_result: Literal["NONE", "EXECUTED", "REJECTED"]
|
|
983
981
|
action_id: int
|
|
984
982
|
action_nonce: int
|
|
985
983
|
pending_until: int
|
|
@@ -992,6 +990,20 @@ class HyperCorePendingEntry(_Base):
|
|
|
992
990
|
)
|
|
993
991
|
current_timestamp: int
|
|
994
992
|
l1_block_available: bool
|
|
993
|
+
effect_kind: Literal["NONE", "CORE_SPOT", "EVM_BALANCE"] = Field(
|
|
994
|
+
description="The balance a transfer waits for before it settles."
|
|
995
|
+
)
|
|
996
|
+
effect_token_index: int = Field(description="Core token of a CORE_SPOT effect.")
|
|
997
|
+
effect_evm_asset: str = Field(description="ERC-20 of an EVM_BALANCE effect.")
|
|
998
|
+
expected_balance: int = Field(
|
|
999
|
+
description="Balance (Core wei or token units) that settles the transfer."
|
|
1000
|
+
)
|
|
1001
|
+
timeout_at: int = Field(
|
|
1002
|
+
description="Unix time after which the transfer settles without the effect."
|
|
1003
|
+
)
|
|
1004
|
+
last_order_l1_block: int = Field(
|
|
1005
|
+
description="Core L1 block of the last order; another waits for the next."
|
|
1006
|
+
)
|
|
995
1007
|
|
|
996
1008
|
|
|
997
1009
|
class HyperCoreSection(_Base):
|