Calls

addLiquidity

Add liquidity to Enabled trading pair, or add provision to Provisioning trading pair.
  • Add liquidity success will issue shares in current price which decided by the liquidity scale. Shares are temporarily not allowed to transfer and trade, it represents the proportion of assets in liquidity pool.
  • Add provision success will record the provision, issue shares to caller in the initial price when trading pair convert to Enabled.
  • Creates and enables TradingPair LP token if it does not exist for trading pair.
  • Fails to add liquidity for NotEnabled trading pair.
  • token_a: Asset id A.
  • token_b: Asset id B.
  • amount_a_desired: amount a desired to add.
  • amount_b_desired: amount b desired to add.
  • amount_a_min: amount a minimum willing to add.
  • amount_b_min: amount b minimum willing to add.
  • to: The recipient of the LP token. The caller is the default recipient if it is set to None.
  • deadline: The deadline of executing this extrinsic. The deadline won’t be checked if it is set to None
Namespace
api.tx.dex.addLiquidity
Type
function addLiquidity(
  token_a: u32,
  token_b: u32,
  amount_a_desired: Compact<u128>,
  amount_b_desired: Compact<u128>,
  amount_a_min: Compact<u128>,
  amount_b_min: Compact<u128>,
  to: Option<SeedPrimitivesSignatureAccountId20>,
  deadline: Option<u32>
)

disableTradingPair

Disable an Enabled trading pair.
  • Requires LP token to be created and in the Enabled status
  • Only root can disable trading pair
  • token_a: Asset id A.
  • token_b: Asset id B.
Namespace
api.tx.dex.disableTradingPair
Type
function disableTradingPair(
  token_a: u32,
  token_b: u32
)

reenableTradingPair

Re enable a NotEnabled trading pair.
  • Requires LP token to be created and in the NotEnabled status
  • Only root can enable a disabled trading pair
  • token_a: Asset id A.
  • token_b: Asset id B.
Namespace
api.tx.dex.reenableTradingPair
Type
function reenableTradingPair(
  token_a: u32,
  token_b: u32
)

removeLiquidity

Remove liquidity from specific liquidity pool in the form of burning shares, and withdrawing currencies in trading pairs from liquidity pool in proportion, and withdraw liquidity incentive interest.
  • note: liquidity can still be withdrawn for NotEnabled trading pairs.
  • token_a: Asset id A.
  • token_b: Asset id B.
  • liquidity: liquidity amount to remove.
  • amount_a_min: minimum amount of asset A to be withdrawn from LP token.
  • amount_b_min: minimum amount of asset B to be withdrawn from LP token.
  • to: The recipient of the withdrawn token assets. The caller is the default recipient if it is set to None.
  • deadline: The deadline of executing this extrinsic. The deadline won’t be checked if it is set to None
Namespace
api.tx.dex.removeLiquidity
Type
function removeLiquidity(
  token_a: u32,
  token_b: u32,
  liquidity: Compact<u128>,
  amount_a_min: Compact<u128>,
  amount_b_min: Compact<u128>,
  to: Option<SeedPrimitivesSignatureAccountId20>,
  deadline: Option<u32>
)

setFeeTo

Set the FeeTo account. This operation requires root access.
  • note: analogous to Uniswapv2 setFeeTo
  • fee_to: the new account or None assigned to FeeTo.
Namespace
api.tx.dex.setFeeTo
Type
function setFeeTo(
  fee_to: Option<SeedPrimitivesSignatureAccountId20>
)

swapWithExactSupply

Trading with DEX, swap with exact supply amount. Specify your input; retrieve variable output.
  • note: analogous to Uniswapv2 swapExactTokensForTokens
  • path: trading path.
  • amount_in: exact supply amount.
  • amount_out_min: acceptable minimum target amount.
  • to: The recipient of the swapped token asset. The caller is the default recipient if it is set to None.
  • deadline: The deadline of executing this extrinsic. The deadline won’t be checked if it is set to None
Namespace
api.tx.dex.swapWithExactSupply
Type
function swapWithExactSupply(
  amount_in: Compact<u128>,
  amount_out_min: Compact<u128>,
  path: Vec<u32>,
  to: Option<SeedPrimitivesSignatureAccountId20>,
  deadline: Option<u32>
)

swapWithExactTarget

Trading with DEX, swap with exact target amount. Specify your output; supply variable input.
  • note: analogous to Uniswapv2 swapTokensForExactTokens
  • amount_out: exact target amount.
  • amount_in_max: acceptable maximum supply amount.
  • path: trading path.
  • to: The recipient of the swapped token asset. The caller is the default recipient if it is set to None.
  • deadline: The deadline of executing this extrinsic. The deadline won’t be checked if it is set to None
Namespace
api.tx.dex.swapWithExactTarget
Type
function swapWithExactTarget(
  amount_out: Compact<u128>,
  amount_in_max: Compact<u128>,
  path: Vec<u32>,
  to: Option<SeedPrimitivesSignatureAccountId20>,
  deadline: Option<u32>
)

Storage

feeTo

FeeTo account where network fees are deposited Namespace
api.query.dex.feeTo
Type
function feeTo(

): Option<SeedPrimitivesSignatureAccountId20>

liquidityPool

Namespace
api.query.dex.liquidityPool
Type
function liquidityPool(
  PalletDexTradingPair
): (u128,u128)

liquidityPoolLastK

Namespace
api.query.dex.liquidityPoolLastK
Type
function liquidityPoolLastK(
  u32
): U256

tradingPairLPToken

Namespace
api.query.dex.tradingPairLPToken
Type
function tradingPairLPToken(
  PalletDexTradingPair
): Option<u32>

tradingPairStatuses

Namespace
api.query.dex.tradingPairStatuses
Type
function tradingPairStatuses(
  PalletDexTradingPair
): PalletDexTradingPairStatus

Events

AddLiquidity

Add liquidity success. [who, asset_id_0, reserve_0_increment, asset_id_1, reserve_1_increment, share_increment, to] Namespace
api.events.dex.AddLiquidity
Type
type AddLiquidity = {
  param0: SeedPrimitivesSignatureAccountId20,
  param1: u32,
  param2: u128,
  param3: u32,
  param4: u128,
  param5: u128,
  param6: SeedPrimitivesSignatureAccountId20
}

AddProvision

Add provision success. [who, asset_id_0, contribution_0, asset_id_1, contribution_1] Namespace
api.events.dex.AddProvision
Type
type AddProvision = {
  param0: SeedPrimitivesSignatureAccountId20,
  param1: u32,
  param2: u128,
  param3: u32,
  param4: u128
}

DisableTradingPair

Disable trading pair. [trading_pair] Namespace
api.events.dex.DisableTradingPair
Type
type DisableTradingPair = {
  param0: PalletDexTradingPair
}

EnableTradingPair

Enable trading pair. [trading_pair] Namespace
api.events.dex.EnableTradingPair
Type
type EnableTradingPair = {
  param0: PalletDexTradingPair
}

FeeToSet

Set FeeTo account success. [fee_to] Namespace
api.events.dex.FeeToSet
Type
type FeeToSet = {
  param0: Option<SeedPrimitivesSignatureAccountId20>
}

ProvisioningToEnabled

Provisioning trading pair convert to Enabled. [trading_pair, pool_0_amount, pool_1_amount, total_share_amount] Namespace
api.events.dex.ProvisioningToEnabled
Type
type ProvisioningToEnabled = {
  param0: PalletDexTradingPair,
  param1: u128,
  param2: u128,
  param3: u128
}

RemoveLiquidity

Remove liquidity from the trading pool success. [who, asset_id_0, reserve_0_decrement, asset_id_1, reserve_1_decrement, share_decrement, to] Namespace
api.events.dex.RemoveLiquidity
Type
type RemoveLiquidity = {
  param0: SeedPrimitivesSignatureAccountId20,
  param1: u32,
  param2: u128,
  param3: u32,
  param4: u128,
  param5: u128,
  param6: SeedPrimitivesSignatureAccountId20
}

Swap

Use supply Asset to swap target Asset. [trader, trading_path, supply_Asset_amount, target_Asset_amount, to] Namespace
api.events.dex.Swap
Type
type Swap = {
  param0: SeedPrimitivesSignatureAccountId20,
  param1: Vec<u32>,
  param2: u128,
  param3: u128,
  param4: SeedPrimitivesSignatureAccountId20
}

Errors

ExcessiveSupplyAmount

Supply amount is more than max_supply_amount Namespace
api.errors.dex.ExcessiveSupplyAmount

ExpiredDeadline

The deadline has been missed Namespace
api.errors.dex.ExpiredDeadline

IdenticalTokenAddress

Namespace
api.errors.dex.IdenticalTokenAddress

InsufficientAmount

Insufficent amount Namespace
api.errors.dex.InsufficientAmount

InsufficientAmountA

Insufficient asset_a liquidity amount Namespace
api.errors.dex.InsufficientAmountA

InsufficientAmountB

Insufficient asset_b liquidity amount Namespace
api.errors.dex.InsufficientAmountB

InsufficientInputAmount

Insufficient input amount Namespace
api.errors.dex.InsufficientInputAmount

InsufficientLiquidity

Liquidity is not enough Namespace
api.errors.dex.InsufficientLiquidity

InsufficientLiquidityBurnt

Insufficient liquidity burnt Namespace
api.errors.dex.InsufficientLiquidityBurnt

InsufficientOutputAmount

Insufficient output amount Namespace
api.errors.dex.InsufficientOutputAmount

InsufficientTargetAmount

Target amount is less to min_target_amount Namespace
api.errors.dex.InsufficientTargetAmount

InsufficientWithdrawnAmountA

Insufficient withdraw amount for token A Namespace
api.errors.dex.InsufficientWithdrawnAmountA

InsufficientWithdrawnAmountB

Insufficient withdraw amount for token B Namespace
api.errors.dex.InsufficientWithdrawnAmountB

InvalidAssetId

Invalid Asset id Namespace
api.errors.dex.InvalidAssetId

InvalidConstantProduct

Invalid constant product K Namespace
api.errors.dex.InvalidConstantProduct

InvalidInputAmounts

Must provide non-zero amount of liquidity Namespace
api.errors.dex.InvalidInputAmounts

InvalidLiquidityIncrement

The increment of liquidity is invalid Namespace
api.errors.dex.InvalidLiquidityIncrement

InvalidTradingPathLength

Invalid trading path length Namespace
api.errors.dex.InvalidTradingPathLength

LiquidityProviderTokenNotCreated

The Liquidity Provider token does not exist Namespace
api.errors.dex.LiquidityProviderTokenNotCreated

MustBeEnabled

Trading pair must be in Enabled status Namespace
api.errors.dex.MustBeEnabled

MustBeNotEnabled

Trading pair must be in NotEnabled status Namespace
api.errors.dex.MustBeNotEnabled

ZeroSupplyAmount

The supply amount is zero Namespace
api.errors.dex.ZeroSupplyAmount

ZeroTargetAmount

The target amount is zero Namespace
api.errors.dex.ZeroTargetAmount

Constants

defaultFeeTo

The default FeeTo account Namespace
api.consts.dex.defaultFeeTo
Type
type defaultFeeTo = Option<FrameSupportPalletId>

dexBurnPalletId

The DEX’s burn id, to provide for a redundant, unredeemable minter/burner address. Namespace
api.consts.dex.dexBurnPalletId
Type
type dexBurnPalletId = FrameSupportPalletId

getExchangeFee

Trading fee rate The first item of the tuple is the numerator of the fee rate, second item is the denominator, fee_rate = numerator / denominator, use (u32, u32) over Rate type to minimize internal division operation. Namespace
api.consts.dex.getExchangeFee
Type
type getExchangeFee = (u32,u32)

lpTokenDecimals

Liquidity pair default token decimals Namespace
api.consts.dex.lpTokenDecimals
Type
type lpTokenDecimals = u8

tradingPathLimit

The limit for length of trading path Namespace
api.consts.dex.tradingPathLimit
Type
type tradingPathLimit = u32

JSON-RPC Methods

getAmountsIn

Given an array of AssetIds, return amounts in for an amount out Interface
api.rpc.dex.getAmountsIn(amountOut: u128, path: Vec<AssetId>): Json
JSON
{ "id":1, "jsonrpc":"2.0", "method":"dex_getAmountsIn", "params":[amountOut: u128, path: Vec<AssetId>] }

getAmountsOut

Given an array of AssetIds, return amounts out for an amount in Interface
api.rpc.dex.getAmountsOut(amountIn: u128, path: Vec<AssetId>): Json
JSON
{ "id":1, "jsonrpc":"2.0", "method":"dex_getAmountsOut", "params":[amountIn: u128, path: Vec<AssetId>] }

getLPTokenID

Given two AssetIds, return liquidity token created for the pair Interface
api.rpc.dex.getLPTokenID(assetA: AssetId, assetB: AssetId): Json
JSON
{ "id":1, "jsonrpc":"2.0", "method":"dex_getLPTokenID", "params":[assetA: AssetId, assetB: AssetId] }

getLiquidity

Given two AssetIds, return liquidity Interface
api.rpc.dex.getLiquidity(assetA: AssetId, assetB: AssetId): Json
JSON
{ "id":1, "jsonrpc":"2.0", "method":"dex_getLiquidity", "params":[assetA: AssetId, assetB: AssetId] }

getTradingPairStatus

Given two AssetIds, return whether trading pair is enabled or disabled Interface
api.rpc.dex.getTradingPairStatus(assetA: AssetId, assetB: AssetId): Text
JSON
{ "id":1, "jsonrpc":"2.0", "method":"dex_getTradingPairStatus", "params":[assetA: AssetId, assetB: AssetId] }

quote

Given some amount of an asset and pair reserves, returns an equivalent amount of the other asset Interface
api.rpc.dex.quote(amountA: u128, reserveA: u128, reserveB: u128): Json
JSON
{ "id":1, "jsonrpc":"2.0", "method":"dex_quote", "params":[amountA: u128, reserveA: u128, reserveB: u128] }