Joe Lend (Banker Joe)¶
Connector for Joe Lend (Banker Joe) lending protocol (Compound V2 fork on Avalanche).
almanak.framework.connectors.joelend
¶
Joe Lend (Banker Joe) Lending Connector (Compound V2 fork on Avalanche).
This module provides adapters and utilities for interacting with Joe Lend (Banker Joe), a lending/borrowing protocol on Avalanche using the jToken architecture.
Joe Lend Features: - Compound V2-style jToken model - Supply to earn yield (mint jTokens) - Borrow against collateral (enterMarkets + borrow) - Multiple asset markets: AVAX, USDC.e, USDT.e, WETH.e, WBTC.e, DAI.e
Supported Chains: - Avalanche
Example
from almanak.framework.connectors.joelend import ( JoeLendAdapter, JoeLendConfig, JoeLendReceiptParser, )
config = JoeLendConfig( chain="avalanche", wallet_address="0x...", ) adapter = JoeLendAdapter(config)
Supply USDC.e¶
result = adapter.supply(asset="USDC.e", amount=Decimal("1000"))
Parse receipts¶
parser = JoeLendReceiptParser(underlying_decimals=6) events = parser.parse_receipt(receipt)
JoeLendAdapter
¶
Adapter for Joe Lend (Banker Joe) lending protocol on Avalanche.
Provides methods to build transactions for supply, withdraw, borrow, and repay operations using the jToken (Compound V2) architecture.
get_market_info
¶
Get market info for an asset.
get_j_token_address
¶
Get the jToken address for an asset.
supply
¶
Build a supply (lend) transaction.
For ERC20 tokens: calls mint(uint256) on the jToken. For AVAX: calls mint() payable on jAVAX.
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
asset
|
str
|
Asset symbol (e.g., "USDC", "AVAX") |
必需 |
amount
|
Decimal
|
Amount in underlying token units (e.g., 1000 USDC) |
必需 |
返回:
| 类型 | 描述 |
|---|---|
TransactionResult
|
TransactionResult with TX data for execution |
withdraw
¶
withdraw(
asset: str,
amount: Decimal,
*,
withdraw_all: bool = False,
redeem_amount: int | None = None,
) -> TransactionResult
Build a withdraw transaction.
Calls redeemUnderlying(uint256) on the jToken to withdraw exact underlying amount. For withdraw_all with redeem_amount, uses redeem(uint256) with exact jToken count. For withdraw_all with amount > 0, uses redeemUnderlying(amount_wei) with the tracked amount.
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
asset
|
str
|
Asset symbol |
必需 |
amount
|
Decimal
|
Amount of underlying to withdraw |
必需 |
withdraw_all
|
bool
|
If True, withdraw entire balance |
False
|
redeem_amount
|
int | None
|
Exact jToken amount for redeem() when withdraw_all=True. Not yet wired from the compiler — reserved for future use when the compiler can query on-chain jToken balances. |
None
|
返回:
| 类型 | 描述 |
|---|---|
TransactionResult
|
TransactionResult with TX data |
borrow
¶
Build a borrow transaction.
Calls borrow(uint256) on the jToken. Requires collateral to be supplied and enterMarkets() called first.
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
asset
|
str
|
Asset symbol to borrow |
必需 |
amount
|
Decimal
|
Amount to borrow in underlying units |
必需 |
返回:
| 类型 | 描述 |
|---|---|
TransactionResult
|
TransactionResult with TX data |
repay
¶
Build a repay transaction.
For ERC20: calls repayBorrow(uint256) on the jToken. For AVAX: calls repayBorrow() payable on jAVAX. For repay_all on ERC20: uses MAX_UINT256 to repay full debt. For repay_all on native AVAX: caller must pass exact debt as amount (MAX_UINT256 trick doesn't apply to msg.value).
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
asset
|
str
|
Asset symbol |
必需 |
amount
|
Decimal
|
Amount to repay |
必需 |
repay_all
|
bool
|
If True, repay entire outstanding debt |
False
|
返回:
| 类型 | 描述 |
|---|---|
TransactionResult
|
TransactionResult with TX data |
enter_markets
¶
Build an enterMarkets transaction to enable assets as collateral.
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
assets
|
list[str]
|
List of asset symbols to enable as collateral |
必需 |
返回:
| 类型 | 描述 |
|---|---|
TransactionResult
|
TransactionResult with TX data |
exit_market
¶
Build an exitMarket transaction to remove an asset from collateral.
Note: exitMarket is per-asset (not array), unlike enterMarkets. Will revert if the user has outstanding borrows against this collateral.
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
asset
|
str
|
Asset symbol to remove from collateral |
必需 |
返回:
| 类型 | 描述 |
|---|---|
TransactionResult
|
TransactionResult with TX data |
JoeLendConfig
dataclass
¶
JoeLendConfig(
chain: str = "avalanche",
wallet_address: str = "",
default_slippage_bps: int = 50,
)
Configuration for Joe Lend adapter.
JoeLendMarketInfo
dataclass
¶
JoeLendMarketInfo(
asset: str,
j_token_address: str,
underlying_address: str | None,
decimals: int,
is_native: bool,
)
Information about a Joe Lend market (jToken).
JoeLendPosition
dataclass
¶
User position in Joe Lend.
TransactionResult
dataclass
¶
TransactionResult(
success: bool,
tx_data: dict[str, Any] | None = None,
gas_estimate: int = 0,
description: str = "",
error: str | None = None,
)
Result of building a transaction.
JoeLendEvent
dataclass
¶
JoeLendEventType
¶
Bases: Enum
Joe Lend event types.
JoeLendReceiptParser
¶
Parse Joe Lend transaction receipts.
Extracts supply, withdraw, borrow, and repay amounts from Compound V2-style events (Mint, Redeem, Borrow, RepayBorrow).
parse_receipt
¶
Parse a transaction receipt for Joe Lend events.
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
receipt
|
dict[str, Any]
|
Transaction receipt dict with 'logs' field |
必需 |
j_token_address
|
str | None
|
Optional filter for specific jToken |
None
|
返回:
| 类型 | 描述 |
|---|---|
ParseResult
|
ParseResult with extracted events and amounts |
parse_logs
¶
parse_logs(
logs: list[dict[str, Any]],
tx_hash: str = "",
block_number: int = 0,
) -> list[JoeLendEvent]
Parse a list of log entries into Joe Lend events.
extract_supply_amount
¶
Extract supply amount from receipt for ResultEnricher.
Called by ResultEnricher for SUPPLY intents (field: supply_amount).
extract_borrow_amount
¶
Extract borrow amount from receipt for ResultEnricher.
Called by ResultEnricher for BORROW intents (field: borrow_amount).
extract_withdraw_amount
¶
Extract withdraw amount from receipt for ResultEnricher.
Called by ResultEnricher for WITHDRAW intents (field: withdraw_amount).
extract_repay_amount
¶
Extract repay amount from receipt for ResultEnricher.
Called by ResultEnricher for REPAY intents (field: repay_amount).
extract_supply_data
¶
Extract supply data from receipt (legacy API).
extract_borrow_data
¶
Extract borrow data from receipt (legacy API).
extract_withdraw_data
¶
Extract withdraw data from receipt (legacy API).
extract_repay_data
¶
Extract repay data from receipt (legacy API).
ParseResult
dataclass
¶
ParseResult(
success: bool,
events: list[JoeLendEvent] = list(),
supply_amount: Decimal = Decimal("0"),
withdraw_amount: Decimal = Decimal("0"),
borrow_amount: Decimal = Decimal("0"),
repay_amount: Decimal = Decimal("0"),
j_tokens_minted: Decimal = Decimal("0"),
j_tokens_redeemed: Decimal = Decimal("0"),
error: str | None = None,
)
Result of parsing a transaction receipt.