Onchain.Aave.DebtToken (onchain_aave v0.2.0)

Copy Markdown View Source

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:

SourceError 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

FunctionPurpose
debt_token_address/3Resolve variable/stable debt token address for an asset
approve_delegation/4Grant or revoke delegated borrow allowance (returns tx hash)
borrow_allowance/3Read delegated borrow allowance between two addresses

API Functions

FunctionArityDescriptionParam Kinds
borrow_allowance4Read the delegated borrow allowance between two addresses.debt_token: value, from_user: value, to_user: value, opts: value
approve_delegation4Approve or revoke credit delegation on a debt token.debt_token: value, delegatee: value, amount: value, opts: value
debt_token_address3Resolve 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

approve_delegation(debt_token, delegatee, amount, opts)

@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"
  }
}

borrow_allowance(debt_token, from_user, to_user, opts \\ [])

@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"
  }
}

debt_token_address(asset, rate_mode, opts \\ [])

@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"
  }
}