jToken 集成

jToken介绍

jToken 是指 JustLend DAO 中存入底层资产所得到的“存款凭证”。也就是您在存款后所得到的 jTRX、jUSDT、jSUN、jBTC等代币,它是存在于您钱包中的一种 TRC20 代币。

去中心化金融(DeFi)协议 JustLend DAO 支持的所有资产,都是通过 jToken 智能合约来封装集成的,用户通过铸造代币(jToken)向协议提供资产,然后您只要持有 jToken,就可以赚取到利息,而当您选择赎回后,每个 jToken 都可兑换成相应的基础资产。

因为 jToken 是一种 TRC20 的代币,所以它和其他代币拥有同样的特性。例如:转账给其他人,存入某个智能合约中等等。如果您将 jToken 转账给其他人或机构,则代表您放弃了对您存入 JustLend DAO 的资产的拥有权。

使用场景

A 在 JustLend DAO 中存入了 100 TRX,得到了 10000 jTRX 的存款凭证(jToken),之后 A将 6000 jTRX 转账给了 B。此时,A剩余的存款凭证变为 4000 jTRX(等值 40 TRX 的 JustLend DAO 存款),而 B 会凭空得到 6000 jTRX 的存款凭证(自A转账所得,等值 60 TRX 的JustLend DAO 存款)。如果 B 不主动将 jToken 转回给 A,则代表 A 永远失去了对此 6000 jTRX(60 TRX)的存款拥有权。(此例子中 jTRX的兑换比例按 1 TRX = 100 jTRX 计算)。

可以说,jToken 是与JustLend DAO 协议交互的主要方式。每个 jToken 合约都创造了自己的货币市场,而用户铸币、赎回、借款、偿还借款、清算借款或转让 jToken 时,他们将使用到 jToken 合约。

如何用jTokens赚取利息

每个市场都有自己的供应利率(APR)。 利息无需分发,您只需持有 jTokens,就可以获得利息。

jTokens 通过其汇率积累利息——随着时间的推移,即便你钱包中 jTokens 的数量保持不变,每个 jToken 都可以转换为越来越多的基础资产。

jToken 智能合约

合约地址

合约名称合约地址

Unitroller

TGjYzgCyPobsNS9n6WcbdLVR9dH7mWqFx7

jTRX

TE2RzoSV3wFK99w6J9UnnZ4vLfXYoxvRwP

jUSDD

TX7kybeP6UwTBRHLNPYmswFESHfyjm9bAS

jUSDT

TXJgMdjVX5dKiQaUi9QobwNxtSQaFqccvd

jUSDJ

TL5x9MtSnDy537FXKx53yAaHRRNdg9TkkA

jSUNOLD

TGBr8uh9jBVHJhhkwSJvQN2ZAKzVkxDmno

jSUN

TPXDpkg9e3eZzxqxAUyke9S4z4pGJBJw9e

jWIN

TRg6MnpsFXc82ymUPgf5qbj59ibxiEDWvv

jBTC

TLeEu311Cbw63BcmMHDgDLu7fnk9fqGcqT

jETH

TR7BUFRQeq1w5jAZf1FKx85SHuX6PfMqsV

jJST

TWQhCXaWz4eHK4Kd1ErSDHjMFPoPc9czts

jWBTT

TUY54PVeH6WCcYCd6ZXXoBDsHytN9V5PXt

jTUSD

TSXv71Fy5XdL3Rh2QfBoUu3NAaM4sMif8R

jUSDC

TNSBA6KvSvMoTqQcEgpVK7VhHT3z7wifxy

jNFT

TFpPyDCKvNFgos3g3WVsAqMrdqhB81JXHE

jBTT

TUaUHU9Dy8x5yNi1pKnFYqHWojot61Jfto

jBUSD

TLHASseQymmpGQdfAyNjkMXFTJh8nzR2x2

查询接口

清算激励

function liquidationIncentiveMantissa() view returns (uint)

功能描述:通过调用Unitroller合约的liquidationIncentiveMantissa函数,可以查询到清算激励。 清算人将获得借款人抵押品的一部分作为激励,这被定义为清算激励。 这是为了鼓励清算人对水下账户进行清算。

参数: N/A

返回:

getAccountLiquidity 方法

getAccountLiquidity(address account) view returns (uint, uint, uint)

功能描述: 通过调用 Unitroller 合约的 getAccountLiquidity 函数,可以通过账户地址获取账户信息,判断该账户是否应该被清算。

参数:

参数类型描述

account

address

用户地址

返回值

uint256

error(错误码。0代表成功)

uint256

liquidity

uint256

shortfall(当值大于0时,当前账户不符合市场质押要求,需要清算。)

注意:liquidity 和 shortfall 之间最多应该有一个非零值。

ExchangeRate

function exchangeRateCurrent() public nonReentrant returns (uint)

功能说明:调用该方法返回最新汇率

参数: N/A

返回值:

按 1e18 比例计算的汇率

Get Cash

function getCash() public view returns (uint)

功能描述:调用该方法获取当前市场可用的底层代币余额总量。

参数: N/A

返回值:

本合约拥有的底层资产数量

Total Borrows

function totalBorrowsCurrent() external nonReentrant returns (uint)

功能描述:调用该方法获取当前借出和应计利息的总和。

参数: N/A

返回值:

当前借出和应计利息的总和

Borrow Balance

function borrowBalanceCurrent(address account) external nonReentrant returns (uint)

功能描述:调用该方法对更新的 borrowIndex 产生利息,然后使用更新的 borrowIndex 计算账户的借入余额

参数:

参数类型描述

account

address

更新 borrowIndex 后应计算余额的地址

返回值:

计算后的余额

Borrow Rate

function borrowRatePerBlock() external view returns (uint)

功能描述:调用此方法获取此 jToken 当前的借入利率/区块

参数: N/A

返回值:

借款利率,按 1e18 缩放

Total Supply

function totalSupply() external view returns (uint256)

功能描述:调用该方法获取流通中的 token 总数

参数: N/A

返回值:

token 的总量

Underlying Balance

function balanceOfUnderlying(address owner) external returns (uint)

功能描述:调用该方法获取所有者的底层代币余额

参数:

参数类型描述

owner

address

账户地址

返回值:

指定账户的余额

Supply Rate

function supplyRatePerBlock() external view returns (uint)

功能描述:调用此方法获取此 jToken 当前的抵押利率/每块

参数:N/A

返回值:

当前的抵押利率/每块,按 1e18 缩放

Total Reserves

function totalReserves() returns (uint)

功能描述:调用此方法获取储备金。 储备金代表作为 cash 留出的一部分历史利息,可以通过协议的治理提取或转移。

参数: N/A

返回值:

储备金总量

Reserve Factor

function reserveFactorMantissa() returns (uint)

功能描述:调用该方法获取当前的储备因子。

参数: N/A

返回值:

当前的储备因子

非查询接口

Borrow

function borrow(uint borrowAmount) external returns (uint)

功能描述:调用该方法从 JustLend DAO 协议中借用资产到交易发送者的地址

参数:

参数类型描述

borrowAmount

uint

借入资产的金额

返回值:

无,发生错误时回退

repayBorrow

function repayBorrow(uint amount) external payable

功能描述:调用该方法偿还自己的借款

参数:

参数类型描述

amount

uint

偿还金额

返回值:

无,发生错误时回退

repayBorrowBehalf

function repayBorrowBehalf(address borrower) external payable

功能描述:调用此方法以代替借款人还款

参数:

参数类型描述

borrower

address

借款人

msg.value

还款金额

返回值:

无,发生错误时回退

Mint

function mint() external payable

功能描述:调用此方法向市场提供资产并接收 jToken 作为交换

参数:

参数类型描述

msg.value

抵押的 TRX 数目

返回值:

无,发生错误时回退

Redeem

function redeem(uint redeemTokens) external returns (uint)

功能描述:调用该方法以赎回 jTokens 换取原资产,无论操作成功与否,都可以获得抵押期间产生的利息。

参数:

参数类型描述

redeemTokens

uint

赎回的 jToken 数目

返回值:

成功时返回0,否则将回退

RedeemUnderlying

function redeemUnderlying(uint redeemAmount) external returns (uint)

功能描述:调用该方法可赎回 jTokens 以换取指定数量的原始资产。

参数:

参数类型描述

redeemAmount

uint

赎回数量

返回值:

成功时返回 0,否则将回退

Transfer

function transfer(address dst, uint256 amount) external nonReentrant returns (bool)

Feature description: Calling this method transfers a specified amount of jtokens to the destination. This action will fail if the account's liquidity become negative due to the transfer.

Parameter description:

ParameterTypeDescription

dst

dst

The receiver's address

amount

uint256

Amount of token to be transferred

Returns:

A boolean value indicating whether or not the transfer succeeded.

Liquidate Borrow(jTrc20)

function liquidateBorrow(address borrower, uint repayAmount, address jTokenCollateral) returns (uint)

功能描述:通过调用对应 jTrc20 合约(如jUSDT)的 liquidateBorrow 函数,流动性不符合市场抵押要求的账户将被其他用户强平,使账户流动性恢复到正常水平(即高于市场要求)用于抵押。在清算的情况下,清算人可以为借款人偿还部分或 50% 的贷款。清算人将获得一定比例的借款人抵押品作为奖励。

参数:

参数类型描述

borrower

address

清算账户地址

repayAmount

uint256

清算时需要偿还的代币数量(以借入资产计量)

jTokenCollateral

address

jToken 合约的地址,用于留出借款人的抵押资产

返回值:

Liquidate Borrow(jTRX)

function liquidateBorrow(address borrower, address jTokenCollateral) payables

功能描述:通过调用 jTRX 合约的 liquidateBorrow 函数,流动性不满足市场质押要求的账户将被其他用户强平,使账户流动性恢复到正常水平(即高于市场质押要求)。在清算的情况下,清算人可以为借款人偿还部分或 50% 的贷款。清算人将获得一定比例的借款人抵押品作为奖励。

参数:

参数类型描述

borrower

address

清算账户地址

msg.value

uint256

清算时需要偿还的TRX数量(以SUN为单位)

jTokenCollateral

address

jTRX 合约的地址,用于留出借款人的抵押资产

返回值:

没有返回值。如果发生任何错误,交易将被回退。

合约事件

事件描述

Mint(address minter, uint mintAmount, uint mintTokens)

抵押成功

Redeem(address redeemer, uint redeemAmount, uint redeemTokens)

赎回成功

Borrow(address borrower, uint borrowAmount, uint accountBorrows, uint totalBorrows, uint borrowIndex)

借款成功

RepayBorrow(address payer, address borrower, uint repayAmount, uint accountBorrows, uint totalBorrows, uint borrowIndex)

还款成功

LiquidateBorrow(address liquidator, address borrower, uint repayAmount, address cTokenCollateral, uint seizeTokens)

清算借款成功

附录

jToken Decimals

JustLend DAO 上的所有 jToken 都有 8 位精度。

jToken Balance Query

建议您使用 TronWeb 查询 jToken 余额。 例如,您可以按照以下步骤查询 jUSDT 余额:

//Example 1
async function triggercontract(){
  let instance =
awaittronWeb.contract().at('TXJgMdjVX5dKiQaUi9QobwNxtSQaFqccvd');
  let res = await instance.balanceOf().call();
  console.log(res);
}

triggercontract();

//Example 2
async function triggercontract(){
  let instance =
awaittronWeb.contract().at('TXJgMdjVX5dKiQaUi9QobwNxtSQaFqccvd');
  let res = await instance["balanceOf"]().call();
  console.log(res);
}

triggercontract();

Last updated