inicia.js

Descripción general

Initia.js es un SDK de JavaScript escrito en TypeScript diseñado para la cadena de bloques de Initia, que mejora la experiencia de desarrollo con definiciones de TypeScript fáciles de usar y la integración con las estructuras de datos centrales de Initia.

Principales características

  • Definiciones de TypeScript mejoradas: ofrece integración integral con las estructuras de datos centrales de Initia para una experiencia de desarrollador mejorada.

  • Capa central: incluye administración de claves, serialización BCS y soporte para initia.proto.

  • Capa de cliente: facilita la generación de solicitudes de API y la interacción con el proveedor de LCD.

Requisitos previos

Para utilizar Initia.js de forma eficaz, debe tener instalado lo siguiente:

  • Node.js versión 14 o superior

  • npm

Instalación

Para instalar Initia.js, ejecute el siguiente comando:

npm install @initia/initia.js

Ejemplos

Cliente LCD

La clase LCD (Light Client Daemon) permite una fácil interacción con la cadena de bloques Initia.

import { LCDClient } from '@initia/initia.js'

const lcd = new LCDClient('https://lcd.[chain-id].initia.xyz', {
    chainId: '[chain-id]',
    gasPrices: '0.15uinit', // default gas prices
    gasAdjustment: '2.0',   // default gas adjustment for fee estimation
})

Ajuste gasPricesy gasAdjustmentde acuerdo con las condiciones actuales de la red para un procesamiento óptimo de las transacciones.

Gestión de claves

El SDK proporciona una interfaz de clave abstracta para la firma de transacciones y la derivación de direcciones/claves públicas.

import { MnemonicKey } from '@initia/initia.js'

const key = new MnemonicKey({
    mnemonic: 'bird upset ... evil cigar', // (optional) if undefined, generate a new Mnemonic key
    account: 0,    // (optional) BIP44 account number. default = 0
    index: 0,      // (optional) BIP44 index number. defualt = 0
    coinType: 118, // (optional) BIP44 coinType. default = 118
})

Guarde de forma segura su mnemotécnico. Si no se proporciona, se generará un nuevo mnemónico, que deberá guardar en una ubicación segura.

BCS

BCS (serialización canónica binaria) es crucial para las interacciones del contrato Move. Asegúrese de que los tipos de datos coincidan con las expectativas del contrato.

import { bcs } from '@initia/initia.js'

// serialize value to BCS and encode it to base64
const serializedU64 = bcs
  .u64() // type
  .serialize(1234) // value 
  .toBase64()

// deserialize
const deserializedU64 = bcs
  .u64() // type
  .parse(
    Uint8Array.from(Buffer.from(serializedU64, 'base64'))
  )

// vector
const serializedVector = bcs
  .vector(bcs.u64())
  .serialize([123, 456, 789])
  .toBase64();

// option
const serializedSome = bcs.option(bcs.u64()).serialize(123);
const serializedNone = bcs.option(bcs.u64()).serialize(null);

Tipos admitidos para BCS

`u8`, `u16`, `u32`, `u64`, `u128`, `u256`, `bool`, `vector`, `dirección`, `cadena`, `opción`, 'punto_fijo32', 'punto_fijo64 ', 'decimal128', 'decimal256'

Objetos de mensaje

Los mensajes son objetos cuyo objetivo final es desencadenar transiciones de estado. Están envueltos en transacciones, que pueden contener uno o más de ellos.

  • MsgSend(): enviar monedas a otra dirección

import { MsgSend } from '@initia/initia.js'

const msg = new MsgSend(
    'init1kdwzpz3wzvpdj90gtga4fw5zm9tk4cyrgnjauu',   // sender address
    'init18sj3x80fdjc6gzfvwl7lf8sxcvuvqjpvcmp6np',   // recipient address
    '1000uinit'                                      // send amount
)
  • MsgDelegate(): delegar la moneda de gobernanza a los validadores (apostar)

import { MsgDelegate } from '@initia/initia.js'

const msg = new MsgDelegate(
    'init1kdwzpz3wzvpdj90gtga4fw5zm9tk4cyrgnjauu', // delegator address
    'init18sj3x80fdjc6gzfvwl7lf8sxcvuvqjpvcmp6np', // validator's operator addres
    '100000uinit',                                 // delegate amount
)
  • MsgExecute(): ejecutar funciones de entrada de contrato de movimiento

import { MsgExecute } from '@initia/initia.js'

const msg = new MsgExecute(
    'init1kdwzpz3wzvpdj90gtga4fw5zm9tk4cyrgnjauu', // sender address
    '0x1',                                         // module owner address
    'dex',                                         // module name
    'swap_script',                                 // function name
    [],                                            // type arguments
    [
        bcs.address().serialize('0x2').toBase64(), // arguments, BCS-encoded
        bcs.address().serialize('0x3').toBase64(), // arguments, BCS-encoded
        bcs.u64().serialize(10000).toBase64()      // arguments, BCS-encoded
    ], 
)

Transmisión de TX

  • createAndSignTx(): crear y firmar transacción

import { Wallet, LCDClient, MnemonicKey } from '@initia/initia.js'

const key = new MnemonicKey({ mnemonic: 'moral wise ... repair coyote' })
const lcd = new LCDClient('https://lcd.[chain-id].initia.xyz')
const wallet = new Wallet(lcd, key)

const sendMsg = new MsgSend(
    'init14l3c2vxrdvu6y0sqykppey930s4kufsvt97aeu',   // sender address
    'init18sj3x80fdjc6gzfvwl7lf8sxcvuvqjpvcmp6np',   // recipient address
    '1000uinit',                                     // send amount
)

const signedTx = await wallet.createAndSignTx({
    msgs: [sendMsg],
    memo: 'sample memo',
})
  • broadcast(): envía/transmite tu transacción a blockchain

const broadcastResult = await lcd.tx.broadcast(signedTx)

Consultas

  • balance(): consultar el saldo de una cuenta

const balances = await lcd.bank.balance('init14l3c2vxrdvu6y0sqykppey930s4kufsvt97aeu')
  • viewfunction(): consulta las funciones de vista de contrato de movimiento

const res = await lcd.move.viewFunction(
    '0x1',                                                  // owner of the module
    'dex',                                                  // name of the module
    'get_swap_simulation',                                  // function name
    ['0x1::native_uinit::Coin', '0x1::native_uusdc::Coin'], // type arguments
    [bcs.u64().serialize(10000).toBase64()]                 // arguments
)

Last updated