ipor-fusion 4.0.0.dev52__tar.gz → 4.0.0.dev54__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.dev52 → ipor_fusion-4.0.0.dev54}/MIGRATION_4.md +2 -1
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/PKG-INFO +1 -1
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/pyproject.toml +1 -1
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/core/context.py +4 -4
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/errors.py +2 -2
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_revert_decoding.py +11 -8
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_web3_context.py +1 -1
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/.claude-plugin/marketplace.json +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/.claude-plugin/plugin.json +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/.env.example +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/.gemini/settings.json +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/.git-blame-ignore-revs +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/.github/workflows/cd.yml +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/.github/workflows/ci.yml +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/.github/workflows/commit-lint.yml +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/.github/workflows/notify-slack.yml +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/.github/workflows/python-build.yml +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/.github/workflows/python-publish.yml +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/.github/workflows/release.yml +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/.github/workflows/report-slack.yml +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/.gitignore +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/.mcp.json +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/.pre-commit-config.yaml +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/.python-version +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/AGENTS.md +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/CHANGELOG.md +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/CLAUDE.md +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/CODEOWNERS +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/LICENSE +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/README.md +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/build.sh +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/examples/CONTRIBUTING.md +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/examples/README.md +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/examples/advanced_euler_v2_credit_market_base.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/examples/advanced_euler_v2_looping_arbitrum.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/examples/composed_hypercore_flow_arbitrum_hyperevm.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/examples/crosschain_ccip_usdc_arbitrum_hyperevm.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/examples/external_state_margin_leg_base.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/examples/simple_aave_v3_supply_base.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/pytest.ini +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/scripts/commit-check.sh +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/scripts/crosschain_readiness.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/skills/ipor-deploy-vault/SKILL.md +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/__init__.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/about.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/cache.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/chains.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/cli/__init__.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/cli/changelog_cmd.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/cli/config_cmd.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/cli/config_store.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/cli/main.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/cli/market_cmd.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/cli/options.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/cli/oracle_mapping_view.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/cli/vault_cmd.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/cli/vault_health.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/cli/vault_info_view.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/cli/vault_markets_view.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/cli/vault_rendering.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/config/__init__.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/config/roles.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/core/__init__.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/core/access.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/core/address.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/core/contract.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/core/erc20.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/core/external_state_executor.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/core/fee_manager.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/core/fuse_action.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/core/fusion_factory.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/core/logs.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/core/multicall.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/core/oracle.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/core/plasma_vault.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/core/rewards_manager.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/core/simulation.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/core/withdraw_manager.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/crosschain/__init__.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/crosschain/ccip/__init__.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/crosschain/ccip/chainlink.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/crosschain/ccip/codec.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/crosschain/ccip/contracts.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/crosschain/ccip/events.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/crosschain/ccip/indexer.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/crosschain/ccip/lane.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/crosschain/ccip/quote.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/crosschain/ccip/transport.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/crosschain/contracts.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/crosschain/discovery.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/crosschain/errors.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/crosschain/lane.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/crosschain/logs.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/crosschain/messages.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/crosschain/simulation.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/crosschain/stargate/__init__.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/crosschain/stargate/contracts.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/crosschain/stargate/lane.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/crosschain/stargate/layerzero.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/crosschain/stargate/transport.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/crosschain/transport.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/dependency_graph.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/entry_cli.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/entry_mcp.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/explorer.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/field_docs.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/fuses/__init__.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/fuses/aave_v3.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/fuses/async_action.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/fuses/base.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/fuses/compound_v3.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/fuses/crosschain/__init__.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/fuses/crosschain/base.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/fuses/crosschain/ccip.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/fuses/crosschain/stargate.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/fuses/erc4626.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/fuses/euler_v2.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/fuses/events.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/fuses/external_state.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/fuses/external_state_events.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/fuses/fluid_instadapp.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/fuses/gearbox_v3.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/fuses/hypercore.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/fuses/hypercore_events.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/fuses/merkl.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/fuses/morpho.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/fuses/ramses_v2.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/fuses/uniswap_v3.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/fuses/universal.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/guide/__init__.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/guide/architecture.md +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/guide/glossary.md +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/guide/invariants.md +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/guide/quickstart.md +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/market_ids.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/market_info.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/mcp/__init__.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/mcp/guide.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/mcp/models.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/mcp/server.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/morpho_api.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/py.typed +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/readers/__init__.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/readers/aave_v3.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/readers/aave_v4.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/readers/compound_v3.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/readers/hypercore.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/readers/hypercore_outcome.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/readers/lending_health.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/readers/morpho.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/readers/oracle_mapping.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/readers/position_manager.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/readers/ramses_v2.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/readers/uniswap_v3.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/readers/unpriceable.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/substrates.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/types.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/validation.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/vault_data.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/vault_info.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/UniswapV3UniversalRouter.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/_crosschain.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/_crosschain_lifecycle.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/_crosschain_recovery.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/_euler_v2.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/_foundry.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/_guide.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/_hypercore_model.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/_hypercore_shadow.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/_multicall.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/_simulate.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/_validation.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/addresses.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/conftest.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/constants.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/fixtures/hypercore_hip3_flow.json +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/fixtures/hypercore_market55.json +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/fixtures/vault_info_golden/clean.json +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/fixtures/vault_info_golden/clean.txt +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/fixtures/vault_info_golden/rich.json +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/fixtures/vault_info_golden/rich.txt +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_about.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_access_manager.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_cache.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_chains.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_cli_changelog.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_cli_commands.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_cli_config_store.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_cli_helpers.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_cli_hypercore.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_cli_lending_health.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_cli_market_morpho_blue.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_cli_oracle_mapping.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_cli_pending_requests_scan.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_cli_role_accounts.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_cli_vault_info_golden.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_cli_vault_predates_getters.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_cli_vault_validate.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_contract_call.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_contract_encoder.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_crosschain_ccip_events.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_crosschain_ccip_indexer.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_crosschain_ccip_quote.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_crosschain_chainlink.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_crosschain_contracts.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_crosschain_encoding.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_crosschain_errors.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_crosschain_lane.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_crosschain_layering.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_crosschain_readiness.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_crosschain_readiness_report.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_crosschain_transport.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_erc20.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_examples_composed_hypercore.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_examples_crosschain.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_examples_euler_looping_arbitrum.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_examples_vaults.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_explorer.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_external_state_events.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_external_state_executor.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_fee_manager.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_fuse_encoding.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_guide.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_hypercore_deployment.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_hypercore_events.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_hypercore_flow.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_hypercore_live.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_hypercore_outcome.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_hypercore_readers.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_hypercore_simulation.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_logs.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_mcp_hypercore.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_mcp_models.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_mcp_server.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_mcp_vault_validate.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_multicall.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_oracle.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_oracle_mapping.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_plasma_vault.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_reader_encoding.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_readiness_selection.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_rewards_manager.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_roles.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_sdk_layering.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_simulate_borrow_aave_v3_mainnet.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_simulate_claim_merkl_wrapper_base.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_simulate_claim_morpho_rewards.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_simulate_crosschain_canary.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_simulate_crosschain_hypercore.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_simulate_crosschain_hyperevm.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_simulate_crosschain_lifecycle.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_simulate_euler_v2_batch_base.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_simulate_euler_v2_credit_market_base.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_simulate_euler_v2_swap_deploy_base.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_simulate_euler_v2_swap_reconfigure_base.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_simulate_euler_v2_swap_registry_base.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_simulate_examples_arbitrum.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_simulate_examples_base.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_simulate_examples_crosschain.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_simulate_external_state_executor_base.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_simulate_fusion_factory_clone_base.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_simulate_looping_aave_v3_base.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_simulate_looping_morpho_blue_base.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_simulate_morpho_blue.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_simulate_pilot_v3.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_simulate_pilot_v4_uniswap.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_simulate_pilot_v5_ramses.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_simulate_pilot_v5_scheduled.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_simulate_plasma_vault_setters_base.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_simulate_readers_integration.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_simulate_release_funds.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_simulate_swap_on_base.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_simulate_vault_from_scratch_base.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_solidity_compiler.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_solidity_mirrors.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_substrates.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_types_and_events.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_unpriceable_tokens.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_validation.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_vault_dep_graph.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_vault_info_onchain_base.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_vault_info_onchain_base_no_withdraw_manager.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_vault_simulator_blocks.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/test_withdraw_manager.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/tests/typed_client/consumer.py +0 -0
- {ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/uv.lock +0 -0
|
@@ -119,7 +119,8 @@ takes a `ProposalHash`; `BalanceProposal.proposal_hash` and `NavMark.proposal_ha
|
|
|
119
119
|
are `ProposalHash`; `ExternalStateEvent.transaction_hash` is a `TxHash`.
|
|
120
120
|
|
|
121
121
|
**Errors and explorer.** `TransactionError(tx_hash=)` takes a `TxHash`,
|
|
122
|
-
`LogScanError(address=)` a `ChecksumAddress`; `
|
|
122
|
+
`LogScanError(address=)` a `ChecksumAddress`; `get_revert_reason` takes a `TxHash`;
|
|
123
|
+
`get_deployment_tx` returns a `TxHash`
|
|
123
124
|
(a malformed hash from Etherscan is reported as the error `malformed-tx-hash`).
|
|
124
125
|
|
|
125
126
|
**MCP response models** (Python constructors only; the JSON schemas are unchanged
|
|
@@ -224,13 +224,13 @@ class Web3Context:
|
|
|
224
224
|
"data": data_hex,
|
|
225
225
|
}
|
|
226
226
|
|
|
227
|
-
def _handle_receipt(self, tx_hash, receipt) -> TxReceipt:
|
|
227
|
+
def _handle_receipt(self, tx_hash: bytes, receipt: TxReceipt) -> TxReceipt:
|
|
228
228
|
if receipt["status"] != 1:
|
|
229
|
-
|
|
229
|
+
parsed = parse_tx_hash(tx_hash)
|
|
230
230
|
raise TransactionError(
|
|
231
231
|
"Transaction failed",
|
|
232
|
-
tx_hash=
|
|
233
|
-
revert_reason=
|
|
232
|
+
tx_hash=parsed,
|
|
233
|
+
revert_reason=get_revert_reason(self.web3, parsed, receipt),
|
|
234
234
|
)
|
|
235
235
|
return receipt
|
|
236
236
|
|
|
@@ -115,10 +115,10 @@ def _decode_revert_reason(data: bytes) -> str:
|
|
|
115
115
|
return hex_str
|
|
116
116
|
|
|
117
117
|
|
|
118
|
-
def get_revert_reason(web3: Web3, tx_hash:
|
|
118
|
+
def get_revert_reason(web3: Web3, tx_hash: TxHash, receipt: TxReceipt) -> str | None:
|
|
119
119
|
"""Replay a failed tx as eth_call to capture revert data."""
|
|
120
120
|
try:
|
|
121
|
-
tx = web3.eth.get_transaction(tx_hash)
|
|
121
|
+
tx = web3.eth.get_transaction(tx_hash)
|
|
122
122
|
call_params = {
|
|
123
123
|
"from": tx["from"],
|
|
124
124
|
"to": tx["to"],
|
|
@@ -12,6 +12,9 @@ from ipor_fusion.errors import (
|
|
|
12
12
|
_decode_revert_reason,
|
|
13
13
|
get_revert_reason,
|
|
14
14
|
)
|
|
15
|
+
from ipor_fusion.types import parse_tx_hash
|
|
16
|
+
|
|
17
|
+
_TX_HASH = parse_tx_hash(bytes(32))
|
|
15
18
|
|
|
16
19
|
ERROR_SELECTOR = bytes.fromhex("08c379a0")
|
|
17
20
|
PANIC_SELECTOR = bytes.fromhex("4e487b71")
|
|
@@ -160,7 +163,7 @@ def test_get_revert_reason_replay_succeeds():
|
|
|
160
163
|
"""When eth_call replays without error, return None."""
|
|
161
164
|
web3 = _make_web3()
|
|
162
165
|
web3.eth.call.return_value = b""
|
|
163
|
-
assert get_revert_reason(web3,
|
|
166
|
+
assert get_revert_reason(web3, _TX_HASH, _receipt()) is None
|
|
164
167
|
|
|
165
168
|
|
|
166
169
|
def test_get_revert_reason_exception_with_hex_data():
|
|
@@ -171,7 +174,7 @@ def test_get_revert_reason_exception_with_hex_data():
|
|
|
171
174
|
exc.data = hex_data # type: ignore[attr-defined]
|
|
172
175
|
|
|
173
176
|
web3 = _make_web3(call_side_effect=exc)
|
|
174
|
-
result = get_revert_reason(web3,
|
|
177
|
+
result = get_revert_reason(web3, _TX_HASH, _receipt())
|
|
175
178
|
assert result == 'Error("not enough")'
|
|
176
179
|
|
|
177
180
|
|
|
@@ -179,7 +182,7 @@ def test_get_revert_reason_message_contains_revert():
|
|
|
179
182
|
"""Exception message containing 'revert' is returned as-is."""
|
|
180
183
|
exc = Exception("execution reverted: some reason")
|
|
181
184
|
web3 = _make_web3(call_side_effect=exc)
|
|
182
|
-
result = get_revert_reason(web3,
|
|
185
|
+
result = get_revert_reason(web3, _TX_HASH, _receipt())
|
|
183
186
|
assert "execution reverted" in result
|
|
184
187
|
|
|
185
188
|
|
|
@@ -187,7 +190,7 @@ def test_get_revert_reason_message_contains_revert_case_insensitive():
|
|
|
187
190
|
"""Case-insensitive match on 'Revert'."""
|
|
188
191
|
exc = Exception("Revert happened")
|
|
189
192
|
web3 = _make_web3(call_side_effect=exc)
|
|
190
|
-
result = get_revert_reason(web3,
|
|
193
|
+
result = get_revert_reason(web3, _TX_HASH, _receipt())
|
|
191
194
|
assert "Revert" in result
|
|
192
195
|
|
|
193
196
|
|
|
@@ -195,14 +198,14 @@ def test_get_revert_reason_unrecognised_exception():
|
|
|
195
198
|
"""Unrelated exception returns None."""
|
|
196
199
|
exc = Exception("network timeout")
|
|
197
200
|
web3 = _make_web3(call_side_effect=exc)
|
|
198
|
-
assert get_revert_reason(web3,
|
|
201
|
+
assert get_revert_reason(web3, _TX_HASH, _receipt()) is None
|
|
199
202
|
|
|
200
203
|
|
|
201
204
|
def test_get_revert_reason_tx_without_gas():
|
|
202
205
|
"""Transaction without 'gas' field still works."""
|
|
203
206
|
web3 = _make_web3(tx_has_gas=False)
|
|
204
207
|
web3.eth.call.return_value = b""
|
|
205
|
-
assert get_revert_reason(web3,
|
|
208
|
+
assert get_revert_reason(web3, _TX_HASH, _receipt()) is None
|
|
206
209
|
|
|
207
210
|
|
|
208
211
|
def test_get_revert_reason_data_not_hex_prefix():
|
|
@@ -211,7 +214,7 @@ def test_get_revert_reason_data_not_hex_prefix():
|
|
|
211
214
|
exc.data = "not-hex" # type: ignore[attr-defined]
|
|
212
215
|
web3 = _make_web3(call_side_effect=exc)
|
|
213
216
|
# Message doesn't contain "revert", data doesn't start with "0x"
|
|
214
|
-
assert get_revert_reason(web3,
|
|
217
|
+
assert get_revert_reason(web3, _TX_HASH, _receipt()) is None
|
|
215
218
|
|
|
216
219
|
|
|
217
220
|
# ---------------------------------------------------------------------------
|
|
@@ -325,6 +328,6 @@ def test_get_revert_reason_uses_the_registry():
|
|
|
325
328
|
exc = Exception("execution reverted")
|
|
326
329
|
exc.data = "0x" + _custom("SdkTestGated(uint256)", 7).hex() # type: ignore[attr-defined]
|
|
327
330
|
web3.eth.call.side_effect = exc
|
|
328
|
-
assert get_revert_reason(web3,
|
|
331
|
+
assert get_revert_reason(web3, _TX_HASH, {"blockNumber": 1}) == ( # type: ignore[arg-type]
|
|
329
332
|
"SdkTestGated(7)"
|
|
330
333
|
)
|
|
@@ -338,7 +338,7 @@ class TestHandleReceipt:
|
|
|
338
338
|
|
|
339
339
|
assert exc_info.value.tx_hash == tx_hash.to_0x_hex()
|
|
340
340
|
assert exc_info.value.revert_reason == 'Error("Insufficient balance")'
|
|
341
|
-
mock_get_reason.assert_called_once_with(ctx.web3, tx_hash, receipt)
|
|
341
|
+
mock_get_reason.assert_called_once_with(ctx.web3, tx_hash.to_0x_hex(), receipt)
|
|
342
342
|
|
|
343
343
|
@patch("ipor_fusion.core.context.get_revert_reason")
|
|
344
344
|
def test_failed_receipt_with_no_revert_reason(self, mock_get_reason):
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/examples/advanced_euler_v2_credit_market_base.py
RENAMED
|
File without changes
|
{ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/examples/advanced_euler_v2_looping_arbitrum.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/examples/external_state_margin_leg_base.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/cli/oracle_mapping_view.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/cli/vault_markets_view.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/core/external_state_executor.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/core/withdraw_manager.py
RENAMED
|
File without changes
|
|
File without changes
|
{ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/crosschain/ccip/__init__.py
RENAMED
|
File without changes
|
{ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/crosschain/ccip/chainlink.py
RENAMED
|
File without changes
|
{ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/crosschain/ccip/codec.py
RENAMED
|
File without changes
|
{ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/crosschain/ccip/contracts.py
RENAMED
|
File without changes
|
{ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/crosschain/ccip/events.py
RENAMED
|
File without changes
|
{ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/crosschain/ccip/indexer.py
RENAMED
|
File without changes
|
|
File without changes
|
{ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/crosschain/ccip/quote.py
RENAMED
|
File without changes
|
{ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/crosschain/ccip/transport.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/crosschain/simulation.py
RENAMED
|
File without changes
|
{ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/crosschain/stargate/__init__.py
RENAMED
|
File without changes
|
{ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/crosschain/stargate/contracts.py
RENAMED
|
File without changes
|
{ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/crosschain/stargate/lane.py
RENAMED
|
File without changes
|
{ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/crosschain/stargate/layerzero.py
RENAMED
|
File without changes
|
{ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/crosschain/stargate/transport.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/fuses/crosschain/__init__.py
RENAMED
|
File without changes
|
{ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/fuses/crosschain/base.py
RENAMED
|
File without changes
|
{ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/fuses/crosschain/ccip.py
RENAMED
|
File without changes
|
{ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/fuses/crosschain/stargate.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/fuses/external_state_events.py
RENAMED
|
File without changes
|
{ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/fuses/fluid_instadapp.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/fuses/hypercore_events.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/readers/hypercore_outcome.py
RENAMED
|
File without changes
|
{ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/readers/lending_health.py
RENAMED
|
File without changes
|
|
File without changes
|
{ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/readers/oracle_mapping.py
RENAMED
|
File without changes
|
{ipor_fusion-4.0.0.dev52 → ipor_fusion-4.0.0.dev54}/src/ipor_fusion/readers/position_manager.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|