Interactuando con Minitswap

Interactuando con Minitswap

Proporcionar

providees una función que permite a los usuarios suministrar tokens INIT a Initia L1. Los proveedores ganan comisiones de swap por las transacciones procesadas a través de Minitswap.

Interfaz de función de movimiento:

public entry fun provide(
  account: &signer,
  amount: u64,
  min_return_amount: Option<u64>,
)
  • amount: La cantidad de L1 INIT que se proporcionará.

  • min_return_amount: Garantiza que la transacción falle si el monto de la devolución es menor que el especificado.

Uso de ejemplo:

CLIinicia.js

initiad tx move execute 0x1 minitswap provide \ 
  --args "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

withdrawpermite a los usuarios reclamar tokens INIT depositados previamente.

Interfaz de función de movimiento:

public entry fun withdraw(
  account: &signer,
  amount: u64,
  min_return_amount: Option<u64>,
)
  • amount: Especifica el monto de la acción a retirar.

  • min_return_amount: La transacción falla si la devolución es menor que la especificada.

Uso de ejemplo:

CLIinicia.js

initiad tx move execute 0x1 minitswap withdraw \ 
  --args "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

swappermite el intercambio de L1 INIT por L2 INIT transferido a través de IBC.

Interfaz de función de movimiento:

public entry fun swap(
    account: &signer,
    offer_asset_metadata: Object<Metadata>,
    return_asset_metadata: Object<Metadata>,
    amount: u64,
    min_return_amount: Option<u64>
)
  • offer_asset_metadata: Metadatos de la moneda proporcionada.

  • return_asset_metadata: Metadatos de la moneda que se devolverá.

  • amount: Cantidad de monedas proporcionada.

  • min_return_amount: Garantiza que el intercambio falle si el rendimiento es inferior al especificado.

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

Uso de ejemplo:

CLIinicia.js

initiad tx move execute 0x1 minitswap swap \ 
  --args "object:0x12.. object: 0x12.. 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]

Reequilibrar

El reequilibrio permite a Pegkeeper comprar el INIT L2 al precio promedio que ha comprado Pegkeeper.

Interfaz de función de movimiento:

public entry fun rebalance(
    account: &signer,
    l2_asset_metadata: Object<Metadata>,
    amount: u64,
    min_return_amount: Option<u64>
)
  • l2_asset_metadata: Metadatos del INIT L2 a adquirir.

  • amount: Cantidad de L1 INIT que se proporcionará.

  • min_return_amount: Cantidad mínima de L2 INIT a devolver. Si el monto real devuelto es menor que min_return_amount, el tx fallará.

Uso de ejemplo:

CLIinicia.js

initiad tx move execute 0x1 minitswap rebalance \ 
  --args "object:0x12.. 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]

Intercambiar simular

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

#[view]
public fun swap_simulation(
    offer_metadata: Object<Metadata>,
    return_metadata: Object<Metadata>,
    offer_amount: u64,
): (u64, u64) // (return amount, fee amount)
  • offer_asset_metadata: Metadatos de la moneda proporcionada.

  • return_asset_metadata: Metadatos de la moneda que será devuelta.

  • amount: Cantidad de moneda proporcionada.

Uso de ejemplo:

rizoCLIinicia.js

curl -X POST "[LCD_URI]/initia/move/v1/accounts/0x1/modules/minitswap/view_functions/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\",\"100\"]",
#  "events": [],
#  "gas_used": "5699"
#}
  

Intercambio mediante gancho IBC

Generalmente, los usuarios utilizarán minitswap para intercambiar L2 INIT por L1 INIT. Sin embargo, usar minitswap requiere dos pasos: 1. L2 INIT debe enviarse a L1 a través de IBC y 2. intercambiar el L2 INIT transferido a L1 INIT. En este caso, los usuarios tienen la carga de tener que enviar dos transacciones tanto desde L2 como desde L1. Para resolver dicha carga, se puede utilizar el swap_transfermódulo y el enlace IBC para que los pasos anteriores se puedan realizar en una sola transacción.

transferencia de intercambio

La transferencia de intercambio es un módulo creado para el intercambio y la transferencia entre cadenas sin problemas. La dirección publicada es la siguiente:

  • mahalo-2:0x42cd8467b1c86e59bf319e5664a09b6b5840bb3fac64f5ce690b5041c530565a

intercambio de moneda a

minit_swap_toes una función para usar minitswap a través del gancho IBC. La interfaz de la función Mover es la siguiente

public entry fun minit_swap_to(
    account: &signer,
    offer_asset_metadata: Object<Metadata>,
    return_asset_metadata: Object<Metadata>,
    amount: u64,
    min_return_amount: Option<u64>,
    to: address,
)
  • offer_asset_metadata: Metadatos que la moneda debe proporcionar.

  • return_asset_metadata: Metadatos de la moneda que se devolverá.

  • amount: Cantidad de moneda a proporcionar.

  • min_return_amount: Valor mínimo para el swap. Si el monto devuelto es menor que min_return_amount, el tx fallará.

  • to: Dirección para recibir la moneda devuelta.

Uso de ejemplo:

import {
  bcs,
  Coin,
  Height,
  LCDClient,
  MnemonicKey,
  MsgExecute,
  MsgTransfer,
  Wallet,
} from '@initia/initia.js';

async function main() {
  const lcd = new LCDClient('[rest-url]', {
    gasPrices: '0.15uinit',
    gasAdjustment: '1.5',
  });

  const key = new MnemonicKey({
    mnemonic: 'beauty sniff protect ...',
  });
  const wallet = new Wallet(lcd, key);

  const moduleAddresss = '0x...';
  const offerAmount = 1000;
  const hookMsg = {
    move: {
      message: {
        module_address: moduleAddresss,
        module_name: 'swap_trasnfer',
        function_name: 'minit_swap_to',
        type_args: [],
        args: [
          bcs.object().serialize('0x...').toBase64(), // metadata to offer
          bcs.object().serialize('0x...').toBase64(), // metadata to return
          bcs.u64().serialize(100).toBase64(), // offer amount
          bcs.option(bcs.u64()).serialize(offerAmount).toBase64(), // min return amount
          bcs.address().serialize('init1...').toBase64(), // to
        ],
      },
    },
  };

  const msgs = [
    new MsgTransfer(
      'transfer',
      'channel-..',
      new Coin('l2/...', offerAmount),
      key.accAddress,
      `${moduleAddresss}::${hookMsg.move.message.module_name}::${hookMsg.move.message.function_name}`,
      new Height(0, 0),
      ((new Date().valueOf() + 1000 * 60) * 1000000).toString(), // timeout
      JSON.stringify(hookMsg)
    ),
  ];

  // sign tx
  const signedTx = await wallet.createAndSignTx({ msgs });
  // send(broadcast) tx
  lcd.tx.broadcastSync(signedTx).then(res => console.log(res));
  // {
  //   height: 0,
  //   txhash: '0F2B255EE75FBA407267BB57A6FF3E3349522DA6DBB31C0356DB588CC3933F37',
  //   raw_log: '[]'
  // }
}

main();

Conclusión

Minitswap en Initia L1 proporciona un mecanismo sólido para la provisión, retiro e intercambio de tokens de liquidez, lo que permite a los usuarios participar activamente en el ecosistema financiero descentralizado mientras ganan tarifas de transacción. Siguiendo los ejemplos detallados y las interfaces de funciones proporcionadas, los usuarios pueden interactuar de manera efectiva con Minitswap para una gestión óptima de activos y estrategias comerciales.

Last updated