Skip to main content

StakedTLOS (sTLOS) integration

A look at our StakedTLOS and TelosEscrow contracts on Telos EVM

RUNDOWN

The Telos EVM staking functionality revolves around 2 EVM smart contracts: the StakedTLOS contract, an ERC20 token implementing ERC4626 that represents shares of deposited TLOS, and the TelosEscrow contract, which locks up any TLOS deposited for a configurable amount of time.

When funds are withdrawn from the sTLOS contract, they are automatically sent over to the TelosEscrow contract and will only be withdrawable from there after a defined amount of time has passed.

CONTRACTS

StakedTLOS Contract

The StakedTLOS contract is based on the ERC4626 tokenized vault standard which itself implements ERC20.

  • Users deposit their TLOS and get equivalent sTLOS tokens in return that represent their share of the total TLOS staked on the contract.
  • Rewards are sent to the contract every 30 minutes by the Telos Zero exrsrv.tf contract which increases the TLOS price of sTLOS over time.
  • Users can use their sTLOS tokens like any other ERC20 token.
  • On withdrawal from the contract, sTLOS shares are converted back to TLOS which is then deposited, under the user address, directly to the TelosEscrow contract (see below).

Main functions

depositTLOS(): uint256

Deposits TLOS and gives the user back sTLOS

withdraw(uint256 assets, address receiver, address owner): uint256

Converts shares to TLOS and sends it to TelosEscrow contract

maxWithdraw(address owner): uint256

Returns the maximum TLOS withdraw amount given the address sTLOS balance

Preview methods are available to help with frontend integrations, such as:

previewDeposit(uint256 assets): uint256

previewWithdraw(uint256 assets): uint256

previewMint(uint256 shares): uint256

previewRedeem(uint256 shares): uint256

Testnet address: 0xa9991E4daA44922D00a78B6D986cDf628d46C4DD

Mainnet address: 0xB4B01216a5Bc8F1C8A33CD990A1239030E60C905

TelosEscrow Contract

The TelosEscrow contract receives TLOS and locks them for a configurable amount of time lockDuration. Deposits are limited to maxDeposits per address in order to keep gas fees in check.

Main functions

deposit(address depositor)

Deposit and lock TLOS tokens

withdraw()

Withdraw all unlocked deposits

balanceOf(address depositor): uint256

Get total TLOS in Escrow for an address (locked & unlocked)

maxWithdraw(address depositor): uint256

Get total unlocked TLOS in Escrow for an address

depositsOf(address depositor): array

Returns the array of deposits of an address

Events

Withdraw(address _from, address _to, uint _amount)

Emitted on a successful call to withdraw()

Deposit(address _from, address _depositor, uint _amount)

Emitted on a successful call to deposit(address depositor)

Testnet address: 0x7E9cF9fBc881652B05BB8F26298fFAB538163b6f

Mainnet address: 0x95F5713A1422Aa3FBD3DCB8D553945C128ee3855