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. Сборка контракта Cosmwasm
  • 2. Предложение сообществу на загрузку контракта
  • 3. Голосование за предложенный контракт
  • 4. Создание контракта
  • 5. Выполнение контракта
  • 6. Запрос контракта
  1. Смарт контракты и разработка

Развертывание универсального контракта

Универсальный контракт относится к контактам CosmWasm и не содержит функциональных особенностей dex модуля Sei.

PreviousТестирование контрактов CosmWasmNextРазвертывание обменного контракта

Last updated 2 years ago

Если вы уже запустили локальную версию блокчейна (), следующие шаги помогут вам загрузить ваш контракт в блокчейн.

1. Сборка контракта Cosmwasm

Соберите образ контракта. Обратите внимание, что следующие команды запускаются в директории контракта, поэтому необходимо убедиться, что seid есть в переменной $PATH:

cargo build
docker run --rm -v "$(pwd)":/code --mount type=volume,source="$(basename "$(pwd)")_cache",target=/code/target --mount type=volume,source=registry_cache,target=/usr/local/cargo/registry cosmwasm/rust-optimizer:0.12.5

2. Предложение сообществу на загрузку контракта

Обратите внимание, что на локальной машине и в блокчейне sei-devnet-1 вы можете пропустить шаг 2 и шаг 3, а сохранить wasm контракт напрямую в блокчейн:

seid tx wasm store $CONTRACT_WASM_BINARY -y --from=$ACCOUNT_NAME --chain-id=$CHAIN_ID --gas=10000000 --fees=10000000usei --broadcast-mode=block

Вернитесь в репозитарий sei-chain и подайте заявку в гаверненс блокчейна для загрузки wasm контракта.

seid tx gov submit-proposal wasm-store artifacts/$CONTRACTNAME.wasm \
 --from $(seid keys show -a $ACCOUNT_NAME) \
 --run-as $(seid keys show -a $ACCOUNT_NAME) \
 --title "<Enter title proposal title for uploading of wasm contract>" \
 --description "<Enter description of proposal and contract>" \
 --chain-id sei-chain \
 --instantiate-everybody "false" \
 --instantiate-only-address $(seid keys show -a $ACCOUNT_NAME) \
 --broadcast-mode=block \
 --gas=500000 \
 --fees=10000000usei

3. Голосование за предложенный контракт

После вынесения предложения на голосование, оно должно быть одобрено гаверненсом. Найдите id предложения и проголосуйте за него.

seid tx gov vote [proposal-id] yes --from $ACCOUNT_NAME

4. Создание контракта

После того, как ваше предложение будет одобрено, вы можете создавать контракт в блокчейне. Обратите внимание, что в пример ниже $CONTRACT_ID равно 1, а $LABEL может быть любым именем контракта:

seid tx wasm instantiate $CONTRACT_ID '{}' --chain-id sei-chain --from $ACCOUNT_NAME --gas=4000000 --fees=1000000usei --broadcast-mode=block --label $LABEL --no-admin

В фигурных скобках '{}' указываются параметры, которые вы передаете для создания контракта. В нашем примере контракт не получает никаких параметров, поэтому фигурные скобки пустые. Для любого другого настоящего контракта скорей всего понадобятся некоторые параметры. Например, чтобы создать контракт на Vortex, необходимы следующие параметры в скобках (реальные значения могут отличаться от представленных ниже):

{"whitelist": ["sei1h9yjz89tl0dl6zu65dpxcqnxfhq60wxx8s5kag"],"use_whitelist":false,"admin":"sei1h9yjz89tl0dl6zu65dpxcqnxfhq60wxx8s5kag","limit_order_fee":{"decimal":"0.0001","negative":false},"market_order_fee":{"decimal":"0.0001","negative":false},"liquidation_order_fee":{"decimal":"0.0001","negative":false}}

После этого вы должны получить примерно такой ответ:

height: "2051"
info: ""
logs:
- events:
  - attributes:
    - key: _contract_address
      value: sei1wug8sewp6cedgkmrmvhl3lf3tulagm9hnvy8p0rppz9yjw0g4wtqdxfzff
    - key: code_id
      value: "1"
    type: instantiate
  - attributes:
    - key: action
      value: /cosmwasm.wasm.v1.MsgInstantiateContract
    - key: module
      value: wasm
    - key: sender
      value: cosmos1ep9jyk9kydjz0fhadm7rzy6pc9ga7tdt4d26xn
    type: message
  log: ""
  msg_index: 0
raw_log: '[{"events":[{"type":"instantiate","attributes":[{"key":"_contract_address","value":"cosmos1wug8sewp6cedgkmrmvhl3lf3tulagm9hnvy8p0rppz9yjw0g4wtqdxfzff"},{"key":"code_id","value":"2"}]},{"type":"message","attributes":[{"key":"action","value":"/cosmwasm.wasm.v1.MsgInstantiateContract"},{"key":"module","value":"wasm"},{"key":"sender","value":"cosmos1ep9jyk9kydjz0fhadm7rzy6pc9ga7tdt4d26xn"}]}]}]'
timestamp: ""
tx: null
txhash: 3033A3673367169693157DF4D22D973A012C03A4FBE452E994E4DE87C8628D23

Из ответа вы можете увидеть, что ваш контракт был создан по адресу: sei1wug8sewp6cedgkmrmvhl3lf3tulagm9hnvy8p0rppz9yjw0g4wtqdxfzff. Вам понадобится этот адрес для любого дальнейшего взаимодействия с контрактом.

5. Выполнение контракта

В этом примере мы посылаем оракулу команду UpdatePrice для обновления цены токена:

{
    "update_price": {
        "price": "22", 
        "token_addr": "cosmos16fz9ma2thw3vycca0v9qkezgecusgzza8027z4"
    }
}

6. Запрос контракта

В этом примере мы посылаем сообщение ораклу GetPrice для получения цены токена:

{
    "get_price15": {
        "token_addr": "cosmos16fz9ma2thw3vycca0v9qkezgecusgzza8027z4"
    }
}

seid query wasm contract-state smart $CONTRACT_ADDR '{"get_price15": {"token_addr": "#TOKEN_ADDR"}}'

Ссылка на руководство для более детального изучения процесса установки и исполнения контракта.

см. инструкцию по запуску
https://docs.cosmwasm.com/tutorials/governance/#submit-proposal