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_weight
ycoin_b_weight
: Pesos equilibradores para las respectivas monedas.coin_a_metadata
ycoin_b_metadata
: Metadatos para cada moneda del par.coin_a_amount
ycoin_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_liquidity
permite a los usuarios proporcionar liquidez de ambos coin_a
y coin_b
en 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_in
ycoin_b_amount_in
: Cantidad de token proporcionadacoin_a
ycoin_b
min_liquidity
: Cantidad mínima de token de liquidez a recibir. En caso de que el valor real sea menor quemin_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 quemin_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_liquidity
permite a los usuarios proporcionar tokens de liquidez y recibir coin_a
y 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_amount
ymin_coin_b_amount
: Cantidad mínima decoin_a
ocoin_b
a recibir. En caso de que el valor real sea menor quemin_coin_a_amount
omin_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 swap
su 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 quemin_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_simulation
es 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