Skip to content

DebtToken

Debt tokens are interest-accruing tokens that are minted and burned on borrow and repay, representing the debt owed by the token holder. There are 2 types of debt tokens:

  • Stable Debt Tokens: represent a debt to the protocol with stable interest rate.
  • Variable Debt Tokens: represent a debt to the protocol with variable interest rate.

The s/vToken value is pegged 1:1 to the value of underlying borrowed asset and represents the current total amount owed to the protocol i.e. principal debt + interest accrued.

EIP20 Methods

Although debt tokens are modelled on the ERC20/EIP20 standard, they are non-transferrable. Therefore they do not implement any of the standard ERC20/EIP20 functions relating to transfer() and allowance().

Following are the standard EIP20 methods that are implemented for the debt tokens:

balanceOf

function balanceOf(address account)

Returns the most up to date accumulated debt (principal+interest) of the user.

totalSupply

function totalSupply()

Returns the most up to date total debt accrued by all protocol users for that specific type (stable or variable rate) of debt token.

decimals

function decimals()

Returns decimals of the token contract.

symbol

function symbol()

Returns the symbol of the token contract.

name

function name()

Returns the name of the token contract.

EIP712 Methods

DOMAIN_SEPARATOR

function DOMAIN_SEPARATOR()

Get the domain separator for the token at current chain.

nonces

function nonces(address owner)

Returns the nonce value for address specified as parameter. This is the nonce used when calling permit()

const token = new Contract(spTokenAddres, spToken.abi, provider);
await token.nonces(user);

SparkLend Specific Methods

Shared View Methods

Below are the view methods available for both type, stable and variable, of debt tokens.

POOL

function POOL()

Returns the address of the associated Pool for the debt token.

borrowAllowance

function borrowAllowance(address fromUser, address toUser)

UNDERLYING_ASSET_ADDRESS

function UNDERLYING_ASSET_ADDRESS()

Returns the underlying asset of the debt token.

getIncentivesController

function getIncentivesController()

Returns the address of the Incentives Controller contract

Shared Write Methods

Below are the write methods available for both type, stable and variable, of debt tokens.

approveDelegation

function approveDelegation(address delegatee, uint256 amount)

Sets the amount of allowance for delegatee to borrow of a particular debt token.

delegationWithSig

function delegationWithSig(address delegator, address delegatee, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s)

Sets the value of allowance for delegatee to borrow of a particular debt token via permit function.

setIncentivesController

function setIncentivesController(ISparkIncentivesController controller)

Sets a new Incentives Controller.

Stable Debt Token Methods

getAverageStableRate

function getAverageStableRate()

Returns the average stable rate across all the stable rate debt in the protocol as uint256.

getUserLastUpdated

function getUserLastUpdated(address user)

Returns the timestamp of the last action taken by user as uint40.

getUserStableRate

function getUserStableRate(address user)

Returns the stable rate of user as uint256.

getSupplyData

function getSupplyData()

Returns the principal, the total supply, the average stable rate and the timestamp for the last update.

Return Values

TypeDescription
uint256The principal stable debt issued
uint256The total stable debt for the reserve across all users. Based on avg stable rate.
uint256The average stable debt rate across all users.
uint40The timestamp of the last update on total supply of stable debt token.

getTotalSupplyAndAvgRate

function getTotalSupplyAndAvgRate()

Returns the total supply and average stable rate of the token.

Return Values

TypeDescription
uint256total debt token supply. (includes principal + cumulated interest)
uint256average stable rate

getTotalSupplyLastUpdated

function getTotalSupplyLastUpdated()

Returns the timestamp of the last update of the total supply in uint40.

principalBalanceOf

function principalBalanceOf(address user)

Returns the principal debt balance of the user since the last burn/mint action.

Variable Debt Token Methods

scaledBalanceOf

function scaledBalanceOf(address user)

Returns the scaled debt balance of user. The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index at the moment of the update.

getScaledUserBalanceAndSupply

function getScaledUserBalanceAndSupply(address user)

Returns the scaled balance of the user and the scaled total supply.

scaledTotalSupply

function scaledTotalSupply()

Returns the scaled total supply of the debt token. Represents sum(debt/index)

getPreviousIndex

function getPreviousIndex(address user)

Returns last index interest that was accrued to the user's balance (expressed in ray).