Liquidity Pool

Abstract Class
Inheritance: SmartContract, IOpdexLiquidityPool

An abstract smart contract class that is inherited by Standard Pool and Staking Pool. Provides a base class sharing similar properties and methods between the two different liquidity pool types.

Constructor

protected OpdexLiquidityPool(ISmartContractState state, 
                             Address token, 
                             uint transactionFee) : base(state)

Parameters

Type

Property

Description

ISmartContractState

state

Dependency injected smart contract state.
Omitted from parameters during deployment.

Address

token

The address of the SRC token in the pool.

uint

transactionFee

he market transaction fee, 0-10 equal to 0-1%.


Properties

Type

Property

Description

string

Name

The token's name.

string

Symbol

The token's ticker symbol.

byte

Decimals

The number of decimal places in the token.

UInt256

TotalSupply

The total supply of tokens.

Address

Token

The SRC token in the pool.

ulong

ReserveCrs

The amount of CRS tokens in reserves.

UInt256

ReserveSrc

The amount of SRC tokens in reserves.

UInt256

KLast

The product of the reserves after the previous Mint or Burn transactions.

bool

Locked

Contract reentrant lock.

UInt256[]

Reserves

List of reserve balances. [AmountCrs, AmountSrc]

ulong

Balance

Returns the CRS balance of the pool.

uint

TransactionFee

The pool's transaction fee.


Methods

Get Balance

Retrieves the provided addresses token balance.

UInt256 GetBalance(Address address);

Parameters

Type

Property

Description

Address

address

The address to check the balance for.

Returns

Type

Property

Description

UInt256

balance

The balance of the provided address.


Allowance

Retrieves the allowance of a spender approved by an owner.

UInt256 Allowance(Address owner, Address spender);

Parameters

Type

Property

Description

Address

owner

The address of the owner of the tokens.

Address

spender

The address of the spender of the tokens.

Returns

Type

Property

Description

UInt256

allowance

The spender's allowance of the owner's tokens.


Approve

Approves an allowance for a spender.

UInt256 Approve(Address spender, UInt256 currentAmount, UInt256 amount);

Parameters

Type

Property

Description

Address

spender

The address to be the spender of the tokens.

UInt256

currentAmount

The spender's current approved allowance.

UInt256

amount

The updated allowance of the spender.

Returns

Type

Property

Description

bool

success

Flag describing if the transaction was successful or not.


Transfer From

Allows the sender to transfer tokens using an approved allowance from another address.

bool TransferFrom(Address from, Address to, UInt256 amount);

Parameters

Ty[e

Property

Description

Address

from

The address to spend an approved allowance from.

Address

to

The address to transfer tokens to.

UInt256

amount

The amount of tokens to transfer.

Returns

Type

Property

Description

bool

success

Flag describing if the transaction was successful or not.


Mint

Mints new liquidity pool tokens based on the differences between the contract's actual token balances and reserves. Adding liquidity through a market contract optimistically transfers tokens to this contract before calling this method.

The transfer of CRS and SRC tokens to this contract and the call to this Mint method should be done in the same transaction, through a market contract or an integrated 3rd party contract to avoid front-running, arbitrage, and/or loss of funds.

🚧

Potentially Authorized Providers Only

In private standard markets with provider authorizations enabled, this method will validate the transaction sender is whitelisted for liquidity provisioning.

UInt256 Mint(Address to);

Parameters

Type

Property

Description

Address

to

The address to assign the minted LP tokens to.

Returns

Type

Property

Description

UInt256

mintedTokens

The number of minted liquidity pool tokens.


Burn

Burns liquidity pool tokens based on the amount sent optimistically to this contract through a market contract. The contract checks its balance of liquidity pool tokens, burns them and returns the share of reserves to the user.

The transfer of liquidity pool tokens to this contract and the call of this Burn method should be done in the same transaction, through a market contract or an integrated 3rd party contract to avoid front-running, arbitrage, and/or loss of funds.

🚧

Potentially Authorized Providers Only

In private standard markets with provider authorizations enabled, this method will validate the transaction sender is whitelisted for liquidity provisioning.

UInt256[] Burn(Address to);

Parameters

Type

Property

Description

Address

to

The address to return the reserves tokens to.

Returns

Type

Property

Description

UInt256[]

amountsReceived

Array of CRS and SRC amounts returned. [AmountCrs, AmountSrc]


Swap

Swaps tokens in a pool based on the desired amount to pull out of the pool. Through a market contract, the input token is transferred prior to calling this method.

The pool determines which and how many tokens were sent by checking the difference between the pool's token balances and the last recorded reserves. If the amount sent does not satisfy the amount expected to be received, the transaction fails and rolls back.

Each swap transaction incurs a transaction fee set by the market when the pool was created between 0% and 1%. Any amount withdrawn from the pool requires an equal input amount plus transaction fees.

The transfer of CRS or SRC tokens to this contract and the call of this Swap method should be done in the same transaction, through a market contract or an integrated 3rd party contract to avoid front-running, arbitrage, and/or loss of funds.

🚧

Potentially Authorized Traders Only

In private standard markets with trader authorizations enabled, this method will validate the transaction sender is whitelisted for trading.

void Swap(ulong amountCrsOut, UInt256 amountSrcOut, Address to, byte[] data);

Parameters

Type

Property

Description

ulong

amountCrsOut

The amount of CRS tokens to pull from the pool.

UInt256

amountSrcOut

The amount of SRC tokens to pull from the pool.

Address

to

The address to send the tokens to.

byte[]

data

Optional CallbackData object bytes for a callback after tokens are pulled from the pool but before validations enforcing the necessary input amount and fees.


Skim

Forces the balances to equal the current token reserves. In the event of a "donation" or event alike, withdraw the difference between CRS and SRC balance overages and their reserves.

🚧

Potentially Authorized Providers Only

In private standard markets with providers authorizations enabled, this method will validate the transaction sender is whitelisted for liquidity provisioning.

void Skim(Address to);

Parameters

Type

Property

Description

Address

to

The address to send any differences to.


Sync

Forces the reserves to equal the current token balances. In the event of a "donation" or event alike, update the reserves to reflect the change.

🚧

Potentially Authorized Providers Only

In private standard markets with providers authorizations enabled, this method will validate the transaction sender is whitelisted for liquidity provisioning.

void Sync();

Logs

Transfer Log

Emitted during an SRC20 token transfer transaction.

Index

Type

Property

Description

:ballot-box-with-check:

Address

From

The address that the tokens were transferred from.

:ballot-box-with-check:

Address

To

The address that the tokens were transferred to.

:black-square-button:

UInt256

Amount

The amount of tokens that were transferred.


Approval Log

Emitted during an SRC20 allowance approval transaction.

Index

Type

Property

Description

:ballot-box-with-check:

Address

Owner

The owner's address of the tokens that were approved for spending.

:ballot-box-with-check:

Address

Spender

The spender's address of the tokens that were approved by the owner.

:black-square-button:

UInt256

OldAmount

The previous allowance amount approved for the spender.

:black-square-button:

UInt256

Amount

The latest allowance amount approved for the spender.


Burn Log

Emitted when liquidity pool tokens are burned after removing liquidity from a pool.

Index

Type

Property

Description

:ballot-box-with-check:

Address

Sender

The sender of the contract call that burned tokens.

:ballot-box-with-check:

Address

To

The address that liquidated pool reserves were transferred to.

:black-square-button:

ulong

AmountCrs

The amount of CRS tokens that were pulled from the pool.

:black-square-button:

UInt256

AmountSrc

The amount of SRC20 tokens that were pulled from the pool.

:black-square-button:

UInt256

AmountLpt

The amount of liquidity pool tokens that were burned.


Mint Log

Emitted when liquidity pool tokens are minted after adding liquidity to a pool.

Index

Type

Property

Description

:ballot-box-with-check:

Address

Sender

The sender of the contract call that minted tokens.

:ballot-box-with-check:

Address

To

The address to assign the newly minted liquidity pool tokens to.

:black-square-button:

ulong

AmountCrs

The amount of CRS tokens that were deposited to the pool.

:black-square-button:

UInt256

AmountSrc

The amount of SRC20 tokens that were deposited to the pool.

:black-square-button:

UInt256

AmountLpt

The amount of liquidity pool tokens that were minted.


Reserves Log

Emitted when a pool's reserves are updated, after a swap, adding, or removing liquidity transaction.

Index

Type

Property

Description

:black-square-button:

ulong

ReserveCrs

The amount of CRS tokens in the pool's reserves.

:black-square-button:

UInt256

ReserveSrc

The amount of SRC20 tokens in the pool's reserves.


Swap Log

Emitted for each pool in the transaction where a token swap occurred.

Index

Type

Property

Description

:ballot-box-with-check:

Address

Sender

The sender of the contract call that swapped tokens.

:ballot-box-with-check:

Address

To

The address to send received tokens to.

:black-square-button:

ulong

AmountCrsIn

The amount of CRS tokens deposited to the pool for a swap.

:black-square-button:

UInt256

AmountSrcIn

The amount of SRC20 tokens deposited to the pool for a swap.

:black-square-button:

ulong

AmountCrsOut

The amount of CRS tokens withdrawn from the pool.

:black-square-button:

UInt256

AmountSrcOut

The amount of SRC20 tokens withdrawn from the pool.


References

OpdexLiquidityPool Smart Contract - Github

IOpdexLiquidityPool Interface - Github

Stratis SmartContract Documentation - Stratis Academy


Did this page help you?