Aave V3 debt token credit delegation reads and writes.
Credit delegation lives on the variable/stable debt token contracts, not the Pool.
Use debt_token_address/3 to resolve the debt token for an asset and rate mode via
Pool.getReserveData/1, then approve_delegation/4 to grant or revoke (amount 0)
borrowing power and borrow_allowance/3 to read the current allowance.
Error Format
Errors pass through from underlying modules:
| Source | Error Shape |
|---|---|
Onchain.Address.validate/1 | {:error, {:invalid_address, input}} |
Onchain.Aave.Contracts.address/2 | {:error, {:unsupported_network, network}} |
Onchain.ABI.encode_call/2 | {:error, {:encode_error, reason}} |
Onchain.RPC.eth_call/3 | {:error, {:rpc_error, map}} |
Onchain.ABI.decode_response/2 | {:error, {:decode_error, reason}} |
Onchain.Signer.send_transaction/3 | {:error, {:missing_option, ...}}, {:error, {:sign_error, ...}}, etc. |
| Interest rate mode validation | {:error, {:invalid_interest_rate_mode, value}} |
Functions
| Function | Purpose |
|---|---|
debt_token_address/3 | Resolve variable/stable debt token address for an asset |
approve_delegation/4 | Grant or revoke delegated borrow allowance (returns tx hash) |
borrow_allowance/3 | Read delegated borrow allowance between two addresses |
API Functions
| Function | Arity | Description | Param Kinds |
|---|---|---|---|
borrow_allowance | 4 | Read the delegated borrow allowance between two addresses. | debt_token: value, from_user: value, to_user: value, opts: value |
approve_delegation | 4 | Approve or revoke credit delegation on a debt token. | debt_token: value, delegatee: value, amount: value, opts: value |
debt_token_address | 3 | Resolve the variable or stable debt token address for an asset. | asset: value, rate_mode: value, opts: value |
Summary
Functions
Approve or revoke credit delegation on a debt token.
Read the delegated borrow allowance between two addresses.
Resolve the variable or stable debt token address for an asset.
Functions
@spec approve_delegation( String.t() | binary(), String.t() | binary(), non_neg_integer(), keyword() ) :: {:ok, String.t()} | {:error, term()}
Approve or revoke credit delegation on a debt token.
Parameters
debt_token- Variable or stable debt token contract address (value)delegatee- Address receiving delegated borrowing power (value)amount- Delegated borrow amount (raw integer); use 0 to revoke (value)opts- Required: :private_key, :nonce, :chain_id, :rpc_url. Optional: :gas_limit (recommend ~120k) (value)
Returns
Transaction hash hex string ({:ok, String.t()} | {:error, term()})
# descripex:contract
%{
params: %{
opts: %{
description: "Required: :private_key, :nonce, :chain_id, :rpc_url. Optional: :gas_limit (recommend ~120k)",
kind: :value
},
amount: %{
description: "Delegated borrow amount (raw integer); use 0 to revoke",
kind: :value
},
debt_token: %{
description: "Variable or stable debt token contract address",
kind: :value
},
delegatee: %{
description: "Address receiving delegated borrowing power",
kind: :value
}
},
returns: %{
type: "{:ok, String.t()} | {:error, term()}",
description: "Transaction hash hex string"
}
}
@spec borrow_allowance( String.t() | binary(), String.t() | binary(), String.t() | binary(), keyword() ) :: {:ok, non_neg_integer()} | {:error, term()}
Read the delegated borrow allowance between two addresses.
Parameters
debt_token- Variable or stable debt token contract address (value)from_user- Delegator address (value)to_user- Delegatee address (value)opts- Options: :rpc_url, :timeout, :block (default:[], value)
Returns
Delegated borrow allowance in underlying asset units ({:ok, non_neg_integer()} | {:error, term()})
# descripex:contract
%{
params: %{
opts: %{
default: [],
description: "Options: :rpc_url, :timeout, :block",
kind: :value
},
debt_token: %{
description: "Variable or stable debt token contract address",
kind: :value
},
from_user: %{description: "Delegator address", kind: :value},
to_user: %{description: "Delegatee address", kind: :value}
},
returns: %{
type: "{:ok, non_neg_integer()} | {:error, term()}",
description: "Delegated borrow allowance in underlying asset units"
}
}
@spec debt_token_address(String.t() | binary(), :variable | :stable, keyword()) :: {:ok, String.t()} | {:error, term()}
Resolve the variable or stable debt token address for an asset.
Parameters
asset- Underlying reserve asset address (value)rate_mode- Interest rate mode: :variable or :stable (value)opts- Options: :network (default :ethereum), :rpc_url, :timeout, :block (default:[], value)
Returns
Checksummed debt token contract address ({:ok, String.t()} | {:error, term()})
# descripex:contract
%{
params: %{
opts: %{
default: [],
description: "Options: :network (default :ethereum), :rpc_url, :timeout, :block",
kind: :value
},
asset: %{description: "Underlying reserve asset address", kind: :value},
rate_mode: %{
description: "Interest rate mode: :variable or :stable",
kind: :value
}
},
returns: %{
type: "{:ok, String.t()} | {:error, term()}",
description: "Checksummed debt token contract address"
}
}