Interactuando con InitiaDEX

Descripción general

InitiaDEX es un componente fundamental de la cadena de bloques Initia y funciona como un intercambio descentralizado nativo (DEX) construido en la Capa 1 utilizando el lenguaje de programación Move. Como parte esencial del ecosistema Omnitia, InitiaDEX no solo facilita el comercio sino que también mejora significativamente la liquidez y la interoperabilidad entre la Capa 1 y varias redes de Capa 2. Para obtener más información sobre InitiaDEX, consulte esta sección .

Interactuando con InitiaDEX

Crear un par comercial

InitiaDEX permite a cualquiera crear un par comercial personalizado. La interfaz de la función Move es la siguiente:

public entry fun create_pair_script(
    creator: &signer,
    name: String,
    symbol: String,
    swap_fee_rate: Decimal128,
    coin_a_weight: Decimal128,
    coin_b_weight: Decimal128,
    coin_a_metadata: Object<Metadata>,
    coin_b_metadata: Object<Metadata>,
    coin_a_amount: u64,
    coin_b_amount: u64,
)
  • name: Nombre del par comercial y el LP Token correspondiente.

  • symbol: Símbolo del token LP.

  • swap_fee_rate: Tasa de comisión aplicada a los swaps.

  • coin_a_weighty coin_b_weight: Pesos equilibradores para las respectivas monedas.

  • coin_a_metadatay coin_b_metadata: Metadatos para cada moneda del par.

  • coin_a_amounty coin_b_amount: Montos iniciales para cada moneda.

Para obtener más información sobre metadatos, consulte obtención de metadatos .

Uso de ejemplo:

CLIinicia.js

initiad tx move execute 0x1 dex create_pair_script \
  --args "string:name string:symbol decimal128:0.001 decimal128:0.8 decimal128:0.2 object:0x... object:0x... u64:100 u64:100" \
  --from [key-name] \
  --gas auto --gas-adjustment 1.5 --gas-prices 0.15uinit \
  --node [rpc-url]:[rpc-port] --chain-id [chain-id]

Proporcionar liquidez

provide_liquiditypermite a los usuarios proporcionar liquidez de ambos coin_ay coin_ben dicho par. Para maximizar la liquidez, el usuario debe proporcionar en armonía con el índice actual. La interfaz del módulo Move es la siguiente:

public entry fun provide_liquidity_script(
    account: &signer,
    pair: Object<Config>,
    coin_a_amount_in: u64,
    coin_b_amount_in: u64,
    min_liquidity: Option<u64>
)
  • pair: Los metadatos o la dirección del objeto del par.

  • coin_a_amount_iny coin_b_amount_in: Cantidad de token proporcionada coin_aycoin_b

  • min_liquidity: Cantidad mínima de token de liquidez a recibir. En caso de que el valor real sea menor que min_liquidity, la transacción fallará.

Uso de ejemplo:

CLIinicia.js

initiad tx move execute 0x1 dex provide_liquidity_script \
  --args "object:0x... u64:100 u64:100 option<u64>:100" \
  --from [key-name] \
  --gas auto --gas-adjustment 1.5 --gas-prices 0.15uinit \
  --node [rpc-url]:[rpc-port] --chain-id [chain-id]

Un solo activo proporciona liquidez

En lugar de crear un par, el usuario puede proporcionar un grupo de un solo token. Internamente, el token se intercambiará por otro token y proporcionará liquidez, por lo que puede haber tarifas y deslizamientos. La interfaz de la función Mover es la siguiente:

public entry fun single_asset_provide_liquidity_script(
    account: &signer,
    pair: Object<Config>,
    provide_coin: Object<Metadata>,
    amount_in: u64,
    min_liquidity: Option<u64>
)
  • pair: Los metadatos o la dirección del objeto del par.

  • provide_coin: Los metadatos de la moneda proporcionada.

  • amount_in: La cantidad de moneda proporcionada.

  • min_liquidity: Cantidad mínima de token de liquidez a recibir. En caso de que el valor real sea menor que min_liquidity, la transacción fallará.

CLIinicia.js

initiad tx move execute 0x1 dex single_asset_provide_liquidity_script \
  --args "object:0x... object:0x.. u64:100 option<u64>:100" \
  --from [key-name] \
  --gas auto --gas-adjustment 1.5 --gas-prices 0.15uinit \
  --node [rpc-url]:[rpc-port] --chain-id [chain-id]

Retirar Liquidez

withdraw_liquiditypermite a los usuarios proporcionar tokens de liquidez y recibir coin_ay coin_b. La interfaz del módulo Move es la siguiente:

public entry fun withdraw_liquidity_script(
    account: &signer,
    pair: Object<Config>,
    liquidity: u64,
    min_coin_a_amount: Option<u64>,
    min_coin_b_amount: Option<u64>,
)
  • pair: Los metadatos o la dirección del objeto del par.

  • liquidity: Cantidad de token de liquidez.

  • min_coin_a_amounty min_coin_b_amount: Cantidad mínima de coin_ao coin_ba recibir. En caso de que el valor real sea menor que min_coin_a_amounto min_coin_b_amount, la transacción fallará.

cliinicia.js

initiad tx move execute 0x1 dex withdraw_liquidity_script \
  --args "object:0x... u64:100 option<u64>:100 option<u64>:100" \
  --from [key-name] \
  --gas auto --gas-adjustment 1.5 --gas-prices 0.15uinit \
  --node [rpc-url]:[rpc-port] --chain-id [chain-id]

Intercambio

La interfaz del módulo Move para swapsu función es la siguiente:

public entry fun swap_script(
    account: &signer,
    pair: Object<Config>,
    offer_coin: Object<Metadata>,
    offer_coin_amount: u64,
    min_return: Option<u64>,
)
  • pair: Los metadatos o la dirección del objeto del par.

  • offer_coin: Metadatos de la moneda ofrecida.

  • offer_coin_amount: Cantidad de moneda ofrecida.

  • min_return: Cantidad mínima de devolución de moneda. En caso de que el valor real sea menor que min_return, la transacción fallará.

cliinicia.js

initiad tx move execute 0x1 dex swap_script \
  --args "object:0x... object:0x... u64:100 option<u64>:100" \
  --from [key-name] \
  --gas auto --gas-adjustment 1.5 --gas-prices 0.15uinit \
  --node [rpc-url]:[rpc-port] --chain-id [chain-id]

Simulación de intercambio

swap_simulationes una función de visualización para estimar el valor de retorno de dicho swap.

#[view]
/// Return swap simulation result
public fun get_swap_simulation(
    pair: Object<Config>,
    offer_metadata: Object<Metadata>,
    offer_amount: u64,
): u64 // return amount
  • pair: Los metadatos o la dirección del objeto del par.

  • offer_metadata: Metadatos de la moneda ofrecida.

  • offer_amount: Cantidad de moneda ofrecida.

rizoCLIinicia.js

curl -X POST "[LCD_URI]/initia/move/v1/accounts/0x1/modules/dex/view_functions/get_swap_simulation" \
  -H "accept: application/json" \
  -H "Content-Type: application/json" \
  -d "{ \"args\": [ \"[BCS_ENCODED_OBJECT, BCS_ENCODED_OBJECT, BCS_ENCODED_OFFER_AMOUNT]\" ]}"

  
#{
#  "data": "\"100\"",
#  "events": [],
#  "gas_used": "5699"
#}

Conclusión

Los ejemplos proporcionados ilustran los pasos prácticos necesarios para interactuar con InitiaDEX, demostrando su versatilidad y facilidad de uso dentro del ecosistema blockchain de Initia. Al detallar cómo crear pares comerciales, proporcionar liquidez y realizar transacciones como intercambios y retiros, los usuarios están equipados con las herramientas necesarias para interactuar de manera efectiva con el intercambio descentralizado. El uso del lenguaje de programación Move garantiza la ejecución segura y eficiente de estas operaciones, lo que refleja el compromiso de la plataforma de fomentar un entorno comercial confiable y escalable. Tanto para los desarrolladores como para los comerciantes, comprender y utilizar estos ejemplos puede mejorar significativamente su capacidad para personalizar y optimizar sus interacciones con InitiaDEX, aprovechando todo el potencial de las finanzas descentralizadas en esta plataforma innovadora.

Last updated