The IPOR Fusion SDK for Python
Project description
IPOR Fusion Python SDK
ipor_fusion is the official Python SDK for IPOR Fusion Plasma Vaults — typed abstractions for DeFi protocol interactions on EVM chains through a fuse adapter pattern.
Maintained by IPOR Labs AG.
| Workflow |
|
| Social |
|
| Code |
|
Quickstart
Install
pip install ipor-fusion
Connect and execute
from ipor_fusion import Web3Context, PlasmaVault, AaveV3SupplyFuse
from web3 import Web3
# 1. Create a Web3 context with your provider and private key
ctx = Web3Context.from_url(
url="https://arb-mainnet.g.alchemy.com/v2/YOUR_KEY",
private_key="0x...",
)
# 2. Wrap the PlasmaVault contract
vault = PlasmaVault(ctx, Web3.to_checksum_address("0xVAULT_ADDRESS"))
# 3. Build a fuse action (e.g. supply USDC to Aave V3)
fuse = AaveV3SupplyFuse(Web3.to_checksum_address("0xFUSE_ADDRESS"))
action = fuse.supply(
asset=Web3.to_checksum_address("0xUSDC_ADDRESS"),
amount=1_000_000, # 1 USDC (6 decimals)
)
# 4. Execute on-chain
receipt = vault.execute([action])
CLI Quickstart
The SDK ships with a fusion CLI for inspecting and managing Plasma Vaults from the terminal.
You need an RPC provider URL — get a free key at Alchemy or Infura.
# Install with CLI extras
pip install 'ipor-fusion[cli]'
# Configure an RPC provider (auto-detects chain ID)
fusion config set-provider https://arb-mainnet.g.alchemy.com/v2/YOUR_KEY
# Inspect a vault (auto-saves to config on first use)
fusion vault info 0xB8a451107A9f87FDe481D4D686247D6e43Ed715e --chain-id ethereum
# List saved vaults
fusion vault list
MCP Server (Claude Code integration)
The SDK includes an MCP server that exposes CLI tools to AI assistants like Claude Code.
# Install with MCP extras
pip install 'ipor-fusion[mcp]'
Add to your .mcp.json (or Claude Code MCP settings):
{
"mcpServers": {
"ipor-fusion": {
"command": "fusion-mcp",
"type": "stdio"
}
}
}
Available tools:
| Tool | Description |
|---|---|
config_show |
Show current configuration (providers, vaults, API key status) |
config_set_provider |
Set RPC provider URL for a chain (auto-detects chain ID) |
config_set_etherscan_key |
Set Etherscan API key (enables contract name resolution) |
vault_info |
Full on-chain vault state — assets, fuses, balances, lending health, reconciliation |
vault_list |
List all saved vaults |
vault_add |
Save a vault to the local config (auto-fetches on-chain name) |
vault_remove |
Remove a vault from the local config |
Configure providers and vaults via fusion config or the MCP config tools first.
Architecture
The SDK uses a fuse adapter pattern:
- Fuses encode protocol-specific calls into
FuseActionobjects (pure calldata, no state) - PlasmaVault batches and executes
FuseActionsequences on-chain viaexecute() - Web3Context manages provider connections, signing, and transaction dispatch
Fuse.method() --> FuseAction --> PlasmaVault.execute([actions]) --> on-chain tx
Core modules (ipor_fusion.core)
| Module | Purpose |
|---|---|
Web3Context |
Provider connection, signing, tx dispatch |
PlasmaVault |
ERC-4626 vault — execute, deposit, withdraw |
AccessManager |
Role-based access control |
RewardsManager |
Claim and vest rewards |
WithdrawManager |
Time-windowed withdrawal requests |
PriceOracleMiddleware |
Asset price feeds |
Supported protocols (ipor_fusion.fuses)
| Protocol | Fuses |
|---|---|
| Aave V3 | AaveV3SupplyFuse, AaveV3BorrowFuse |
| Morpho | MorphoSupplyFuse, MorphoCollateralFuse, MorphoBorrowFuse, MorphoFlashLoanFuse, MorphoClaimFuse |
| Uniswap V3 | UniswapV3SwapFuse, UniswapV3NewPositionFuse, UniswapV3ModifyPositionFuse, UniswapV3CollectFuse |
| Ramses V2 | RamsesV2NewPositionFuse, RamsesV2ModifyPositionFuse, RamsesV2CollectFuse, RamsesClaimFuse |
| Compound V3 | CompoundV3SupplyFuse |
| Gearbox V3 | GearboxSupplyFuse, GearboxStakeFuse |
| ERC-4626 | ERC4626SupplyFuse |
| Fluid Instadapp | FluidInstadappSupplyFuse, FluidInstadappStakingFuse |
| Universal | UniversalTokenSwapperFuse |
Supported networks
- Ethereum mainnet
- Arbitrum One
- Base
Development
poetry install # Install dependencies
poetry run pytest tests/test_fuse_encoding.py -n auto -v # Unit tests (fast, no Docker)
poetry run pytest -v -s # All tests (needs Docker + .env)
poetry run black ./ # Format
poetry run pylint --rcfile=pylintrc.toml --verbose --recursive=y . # Lint
poetry run mypy . # Type check
Integration tests require Docker (Anvil) and provider URLs in .env:
cp .env.example .env
# Edit .env with ARBITRUM_PROVIDER_URL, ETHEREUM_PROVIDER_URL, BASE_PROVIDER_URL
Examples
For full usage patterns, see the example repository: ipor-fusion-alpha-example
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ipor_fusion-2.1.0.tar.gz.
File metadata
- Download URL: ipor_fusion-2.1.0.tar.gz
- Upload date:
- Size: 56.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cf749333416a7b0737dff968706dc4385207329f69763402d55ba99a8864d34d
|
|
| MD5 |
f9ea256090e48d2e7154f087e8cf5d27
|
|
| BLAKE2b-256 |
2298d24c3d07d5286cbfdab3b019c36b4481446902d70b57dbb1dd3e5a695728
|
File details
Details for the file ipor_fusion-2.1.0-py3-none-any.whl.
File metadata
- Download URL: ipor_fusion-2.1.0-py3-none-any.whl
- Upload date:
- Size: 71.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e500d4496ab2b35b2de57fda8891e854d456166b3819c3b7f4537437634fe3b9
|
|
| MD5 |
cdf384f06a6cf019943aa6d4c5c1fccc
|
|
| BLAKE2b-256 |
f488658371a6c7ba3e2ab297d952019bc67e0966e55dd5e99e02b731ff18b904
|