| Crates.io | morpho-rs-contracts |
| lib.rs | morpho-rs-contracts |
| version | 0.6.0 |
| created_at | 2026-01-23 18:39:57.397628+00 |
| updated_at | 2026-01-25 17:44:00.097603+00 |
| description | Contract bindings and transaction clients for Morpho vaults |
| homepage | |
| repository | https://github.com/tynes/morpho-rs |
| max_upload_size | |
| id | 2065244 |
| size | 127,258 |
Contract bindings and transaction clients for Morpho V1 (MetaMorpho) and V2 vaults.
cargo add morpho-rs-contracts
alloy::sol!use morpho_rs_contracts::{VaultV1TransactionClient, VaultV2TransactionClient};
// V1 (MetaMorpho) vaults
let v1_client = VaultV1TransactionClient::new(
"https://eth.llamarpc.com",
"0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80"
)?;
// V2 vaults
let v2_client = VaultV2TransactionClient::new(
"https://eth.llamarpc.com",
"0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80"
)?;
use alloy_primitives::{Address, U256};
let vault: Address = "0x...".parse()?;
let token: Address = "0x...".parse()?;
let owner = client.signer_address();
// Get underlying asset address
let asset = client.get_asset(vault).await?;
// Get token balance
let balance = client.get_balance(token, owner).await?;
// Get approval allowance
let allowance = client.get_allowance(token, owner, vault).await?;
// Get token decimals
let decimals = client.get_decimals(token).await?;
use alloy_primitives::{Address, U256};
let vault: Address = "0x...".parse()?;
let amount = U256::from(1000000); // Amount in smallest units
let receiver = client.signer_address();
// Approve the vault to spend tokens (if needed)
let approval_receipt = client.approve_if_needed(asset, vault, amount).await?;
// Deposit assets into the vault
let deposit_receipt = client.deposit(vault, amount, receiver).await?;
println!("Deposit tx: {:?}", deposit_receipt.transaction_hash);
// Withdraw assets from the vault
let withdraw_receipt = client.withdraw(vault, amount, receiver, receiver).await?;
println!("Withdraw tx: {:?}", withdraw_receipt.transaction_hash);
VaultV1TransactionClient - Transaction client for V1 vaultsVaultV2TransactionClient - Transaction client for V2 vaultsHttpProvider - HTTP provider type aliasContractError - Error type for contract operationsResult<T> - Result type alias| Method | Description |
|---|---|
new(rpc_url, private_key) |
Create a new transaction client |
signer_address() |
Get the signer's address |
get_asset(vault) |
Get the underlying asset address |
get_decimals(token) |
Get token decimals |
get_balance(token, owner) |
Get token balance |
get_allowance(token, owner, spender) |
Get approval allowance |
approve_if_needed(token, spender, amount) |
Approve if current allowance insufficient |
deposit(vault, amount, receiver) |
Deposit assets into vault |
withdraw(vault, amount, receiver, owner) |
Withdraw assets from vault |
pub enum ContractError {
RpcConnection(String),
TransactionFailed(String),
InsufficientBalance { have: U256, need: U256 },
InvalidPrivateKey,
}
MIT