Sei Network
  • Введение
    • Обзор
    • Разработка концепции Sei
    • Оптимизация DEX
    • Децентрализованный NASDAQ
    • Экосистема Sei
  • Смарт контракты и разработка
    • Обзор инструментов Sei
    • Установка локальной версии ноды
    • Скрипт локального развертывания Sei
    • Sei.go
    • Тестирование контрактов CosmWasm
    • Развертывание универсального контракта
    • Развертывание обменного контракта
    • Развертывание и разработка без использования полной ноды
    • Инструкция по модулю Dex
    • Руководство по модулю Tokenfactory
    • IBC трансферы
  • Сопоставление ордеров
    • Параллелизм
    • Параметры допуска контракта
    • Зависимости внутри контрактов
    • Хранилище с белым списком
  • Ноды и валидаторы
    • Присоединиться к тестнету
    • Обновления
    • Стимулирующий тестнет Seiнами
      • Присоединиться к стимулирующему тестнету
      • Все миссии тестнета
      • Код чести
      • Распределение наград
    • Основные эндпоинты API
    • Эндпоинты модулей
    • Синхронизация состояния
    • Операции восстановления
  • Управление
    • Создание предложений
    • Управление стейкингом
    • Голосование по предложению
  • Оракул
    • Участие в работе Оракула
  • Фронтенд разработка
    • Руководство по JavaScript
    • Пакеты NPM
  • Кошельки
    • Интеграция кошельков
    • Переводы
Powered by GitBook
On this page
  • Начало работы
  • Подключение кошелька
  • Клиент для запросов
  • Клиент для подписи
  1. Фронтенд разработка

Руководство по JavaScript

Это простое руководство того, как подключить кошелек Sei, сделать запрос по RPC, перевести токены, сделать перевод через IBC и исполнить контракт.

PreviousУчастие в работе ОракулаNextПакеты NPM

Last updated 2 years ago

Начало работы

Если вы начинаете с нуля, мы рекомендуем вам начать с использования пустого проекта Vite Typescript, выполнив следующие команды

yarn create vite YOUR-APP-NAME --template react-ts && yarn install

Установите зависимости проекта

yarn add @sei-js/react // or npm install @sei-js/react

Если вы не пользуетесь React для разработки кода, вам необходимо использовать основную библиотеку JS

Подключение кошелька

Для взаимодействия с блокчейном вам нужна автономная подписывающая сторона. Хук useWallet позволяет вам подключить предопределённых провайдеров кошельков, чтобы получить автономную подписывающую сторону, также он содержит другие полезные функции и константы.

Официально Sei поддерживает следующие кошельки, один из них будет необходим для разработки вашего интерфейса.

  • Leap for Cosmos

  • Keplr

  • Falcon

  • Coin98

import { useWallet } from '@sei-js/react';

const { connectedWallet, offlineSigner } = useWallet(window, { inputWallet: "leap", autoconnect: true, chainConfiguration: 'testnet' })

Результат использования хука useWallet может быть сохранен в инструменте recoil atom для использования с другими компонентами, но тогда будет необходим флаг dangerouslyAllowMutability.

export const seiWalletAtom = atom({
   key: 'seiWallet',
   default: {},
   dangerouslyAllowMutability: true
});

Подключение пользовательского узла

Если вам необходимо подключиться к локальной ноде или локальному RPC, вы можете использовать пользовательские данные restUrl, rpcUrl и chainId.

import { useWallet } from '@sei-js/react';

const { connectedWallet, offlineSigner } = useWallet(window, { inputWallet: "leap", autoconnect: true, chainConfiguration: { chainId: 'atlantic-1', restUrl: '', rpcUrl: ''})

Клиент для запросов

Чтобы запрашивать данные через RPC, вам нужен queryClient, подключенный к RPC.

import { useQueryClient } from '@sei-js/react';

const { restUrl } = useWallet(window, { inputWallet: "leap", autoconnect: true, chainConfiguration: 'testnet' })
const { queryClient, accounts } = useQueryClient(restUrl)

//Query balances
const { balances } = await queryClient.cosmos.bank.v1beta1.allBalances({ address: accounts[0].address })

Клиент для подписи

Для подписания транзакций или исполнения контрактов вам нужен клиент для подписи. Используя автономную подпись и rpcUrl из хука useWallet, вы можете легко получить клиент для подписи для вашего подключенного кошелька.

Перевод токенов

import { useWallet, useSigningClient } from '@sei-js/react';
import { calculateFee, GasPrice } from '@cosmjs/stargate';

const { rpcUrl, offlineSigner, accounts } = useWallet(window, { inputWallet: "leap", autoconnect: true, chainConfiguration: 'testnet' });
const { signingClient } = useSigningClient(rpcUrl, offlineSigner);

const fee = calculateFee(150000, GasPrice.fromString('3750usei'));
const transferAmount = { amount: SEND_AMOUNT, denom: TOKEN_DENOM };

const sendResponse = await signingClient.sendTokens(accounts[0], DESTINATION_ADDRESSS, [transferAmount], fee);

Перевод через IBC

Переводы через IBC требуют наличия мостов и наличия id канала назначения до начала операции перевода.

import { useWallet, useSigningClient } from '@sei-js/react';
import { calculateFee, GasPrice } from '@cosmjs/stargate';

const { rpcUrl, offlineSigner, accounts } = useWallet(window, { inputWallet: "leap", autoconnect: true, chainConfiguration: 'testnet' });
const { signingClient } = useSigningClient(rpcUrl, offlineSigner);

const fee = calculateFee(150000, GasPrice.fromString('3750usei'));
const transferAmount = { amount: SEND_AMOUNT, denom: TOKEN_DENOM };

const ibcResponse = await signingClient.sendIbcTokens(accounts[0].address, DESTINATION_ADDRESSS, transferAmount, 'transfer', CHANNEL_ID, undefined, undefined, fee)

Исполнение контракта (минт)

import { useWallet, useSigningClient } from '@sei-js/react';

const { rpcUrl, offlineSigner, accounts } = useWallet(window, { inputWallet: "leap", autoconnect: true, chainConfiguration: 'testnet' });
const { signingClient } = useSigningClient(rpcUrl, offlineSigner);

const account = accounts[0];
const mintMsg = { mint: {} };

const msg = {
            typeUrl: "/cosmwasm.wasm.v1.MsgExecuteContract",
            value: {
                sender: account.address,
                contract: CONTRACT_ADDR,
                msg: toUtf8(JSON.stringify(mintMsg)),
                funds: [],
            }
 }

const result = await signingClient.signAndBroadcast(account.address, [msg], fee);
NPM Packages
https://www.leapwallet.io/
https://www.keplr.app/download
https://www.falconwallet.app/
https://coin98.com/wallet