July 30, 2023

Injective Typescript application concepts.

В этом разделе мы расскажем о некоторых понятиях, специфичных для конкретного приложения (Injective).
Фабрика токенов
Модуль Token Factory в Injective позволяет пользователям и контрактам создавать новые нативные токены и обменивать нативные токены на токены CW20 по модели Mint + Burn. Это очень важная функция, так как представление активов из различных источников в деноме нативного банка имеет решающее значение для доступа пользователей к остальным модулям на цепочке, таким как биржа, аукцион, страховые фонды и т.д. Деномы фабрики токенов имеют следующий формат factory/{адрес создателя}/{субденом}.
В сочетании с контрактом CW20AdapterContract, который выступает в роли создателя, мы позволяем представлять активы CW20 на Injective в виде деномов фабрик токенов. Это работает следующим образом: активы CW20 хранятся в CW20AdapterContract и чеканятся как фабричные деномы для адреса injective, а когда мы хотим обменять их обратно на CW20, они сжигаются из банковского модуля и разблокируются из CW20AdapterContract обратно на адрес владельца.
Пример погашения заводского денома на CW20:

import { MsgExecuteContractCompat, ExecArgCW20AdapterRedeemAndTransfer } from '@injectivelabs/sdk-ts'

const CW20_ADAPTER_CONTRACT = 'inj...' const contractCw20Address = 'inj...' const injectiveAddress = 'inj...'

const message = MsgExecuteContractCompat.fromJSON({ sender: injectiveAddress, contractAddress: CW20_ADAPTER_CONTRACT, funds: { denom: `factory/${CW20_ADAPTER_CONTRACT}/${contractCw20Address}`, amount: actualAmount.toFixed() }, execArgs: ExecArgCW20AdapterRedeemAndTransfer.fromJSON({ recipient: injectiveAddress }) })

// Then pack the message in a transaction, sign it and broadcast to the chain

Пример перевода CW20 в заводской номинал:

import { MsgExecuteContractCompat, ExecArgCW20Send } from '@injectivelabs/sdk-ts'

const CW20_ADAPTER_CONTRACT = 'inj...' const contractCw20Address = 'inj...' const injectiveAddress = 'inj...' const amount = '1000000' // 1 USDT represented as on the chain as it has 6 decimals

const message = MsgExecuteContractCompat.fromJSON({ contractAddress: contractCw20Address, sender: injectiveAddress, execArgs: ExecArgCW20Send.fromJSON({ amount, contractAddress: CW20_ADAPTER_CONTRACT }) })

// Then pack the message in a transaction, sign it and broadcast to the chain