📁
Teller
  • Teller Protocol
  • Legal
    • Terms of Use
    • Privacy Policy
    • Cookie & Data Policies
  • Contracts
    • Node Network
    • Price Oracles
    • Settings.sol
    • LoansBase.sol
    • Consensus.sol
    • Gas usage
  • ATM Contracts
    • ATM Deposits & Withdrawals
  • Testing Guide
    • Getting Testnet Tokens - Rinkeby
    • Getting Testnet Tokens - Ropsten
  • Privileged Roles & Ownership
    • Overview
    • TLR Token
    • Progressive Pauser Role Ownership
  • Node & Infrastructure
    • Overview
    • Local Development
  • Platform Settings
    • Overview
Powered by GitBook
On this page
  • deposit()
  • withdraw()

Was this helpful?

  1. ATM Contracts

ATM Deposits & Withdrawals

Integrate the Teller protocol liquidity pool into your application

PreviousGas usageNextGetting Testnet Tokens - Rinkeby

Last updated 4 years ago

Was this helpful?

As part of the Teller protocol, depositors provide liquidity to decentralized, non-custodial markets (aka ATM's) to earn passive income. Assets within the ATM can be borrowed fully unsecured (bank connection) or secured (greater than 20% collateral).

Developers may wish to build out applications that integrate with these liquidity pools. In order to allow users to deposit or withdraw their assets into the pool, the developer's application must call the functions located in the .

deposit()

function deposit( uint256 amount )

amount represents the amount of an asset that a user wished to deposit into the liquidity pool.

An important note, the contract call should be made from the depositors' wallet address, as the minted tokens will be transferred tomsg.sender

Parameter Name

Type

Description

amount

uint256

The amount to be deposited

Upon depositing assets to the protocol, tTokens -- representing proof of deposit -- are minted and given to the depositor in exchange.

/* Interfaces */
import "@teller-protocol-v1/contracts/interfaces/LendingPoolInterface.sol";
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";

/* Retrieve contract */
LendingPoolInterface public lendingPool; 
lendingPool = LendingPoolInterface(address("0x36633E18592e30eDfC7ffe1FD4B5EA7BA21ac20E")); // Ropsten address 

/* Approve LendingPool to move user's funds */
address usdc = address("0x20572e4c090f15667cf7378e16fad2ea0e2f3eff"); // Ropsten address
uint256 amount = 1000;
IERC20(usdc).approve(lendingPool.address, amount, { from: user });

/* Deposit user funds into lending pool */
lendingPool.deposit(amount, { from:user });
/* Import contract artifact */
import LendingPool from "./LendingPool.json";
import ZUSDC from "./ZUSDC.json";

/* Initialize contract instance */
const lendingPoolAddress = "0x36633E18592e30eDfC7ffe1FD4B5EA7BA21ac20E"; // Ropsten address
const lendingPoolInstance = new web3.eth.Contract(LendingPool.abi, lendingPoolAddress);

/* Approve ERC20 transfer from user */
const usdcAddress = "0x20572e4c090f15667cf7378e16fad2ea0e2f3eff";
const usdcInstance = new web3.eth.Contract(ZUSDC.abi, usdcAddress);
const depositAmount = 1000;
await usdcInstance.methods.approve(lendingPoolAddress, depositAmount).send( {from: user});

/* Deposit assets into LendingPool */
await lendingPoolInstance.methods.deposit(depositAmount, { from: user });

withdraw()

function withdraw( uint256 amount )

Contrary to the deposit() method and as the function's name suggests, amount here represents the amount of an asset that a user wished to withdraw from the liquidity pool.

Parameter Name

Type

Description

amount

uint256

The amount to be withdrawn

Similar to the deposit() method, the contract call needs to be made from the depositors' address as the assets will be sent tomsg.sender

When the user initiates the withdraws their assets, the tTokens which were given to the user previously as a proof of deposit are burned and their assets subsequently sent to their wallet address.

/* Interfaces */
import "@teller-protocol-v1/contracts/interfaces/LendingPoolInterface.sol";
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";

/* Retrieve contract */
LendingPoolInterface public lendingPool; 
lendingPool = LendingPoolInterface(address("0x36633E18592e30eDfC7ffe1FD4B5EA7BA21ac20E)); // Ropsten address 

/* Deposit user funds into lending pool */
lendingPool.withdraw(amount, { from:user });
/* Import contract artifact */
import LendingPool from "./LendingPool.json";

/* Initialize contract instance */
const lendingPoolAddress = "0x36633E18592e30eDfC7ffe1FD4B5EA7BA21ac20E"; // Ropsten address
const lendingPoolInstance = new web3.eth.Contract(LendingPool.abi, lendingPoolAddress);

/* Deposit assets into LendingPool */
const withdrawalAmount = 1000;
await lendingPoolInstance.methods.withdraw(withdrawalAmount, { from: user });
lending pool smart contract
Deposit process flow
Withdrawal process flow