Перевод документации
June 6, 2023

Dymension

Dymension - это сеть легко развертываемых модульных блокчейнов под названием RollApps. Эта документация служит источником информации обо всем, что касается Dymension.


Documentation portal

Что такое Dymension

Dymension - это сеть легко развертываемых модульных блокчейнов под названием RollApps. В центре сети Dymension находится Dymension Hub, который обеспечивает консенсус, безопасность и ликвидность для RollApps.

RollApps - это собственные блокчейны, созданные с помощью RollApp Development Kit (RDK) от Dymension, основанного на популярном Cosmos SDK. Разработчики RollApp могут выбрать свой сетевой токен, полностью настраиваемую бизнес-логику и среду приложения (например, модули RDK Go, EVM, CosmWasm и многое другое).

Почему именно Dymension?

Простота развертывания

С Dymension создание блокчейна не связано с накладными расходами на загрузку набора валидаторов. Разработчики могут легко развернуть блокчейн, как будто они запускают свой собственный изолированный экземпляр EC2, оставаясь при этом верными децентрализованной, не требующей разрешений и минимизации доверия природе блокчейна.

Автономность

RollApps - это автономные миры. RollApps устанавливают свою собственную логику, децентрализацию и параметры управления. Они схожи с суверенными мирами (т.е. цепочками приложений), но делегируют консенсус хабу Dymension для эффективного бутстрапинга.

Наращивание стоимости

В отличие от dApps на блокчейнах общего назначения, таких как Ethereum, которые требуют от пользователей оплаты за газ в токенах сети (т.е. ETH), конечные пользователи RollApp оплачивают транзакции собственным токеном приложения или любым другим токеном, выбранным RollApp (например, stablecoins, другими токенами с поддержкой IBC или совершенно новой логикой для сбора платежей).

Производительность

Поскольку RollApps передают консенсус хабу Dymension, они способны обеспечить значительную пропускную способность и меньшую задержку, чем блокчейн с ограниченным консенсусом.

В следующих разделах мы более подробно рассмотрим принцип работы Dymension. Мы рекомендуем ознакомиться с этим, однако это не является обязательным условием для создания RollApp, поэтому для тех, кто не может ждать - пропустите и приступайте к созданию!


Learn


Модульная архитектура

Для того чтобы понять, как работает протокол Dymension, сначала важно разделить общие функции, которые предоставляет блокчейн:

Исполнение - обработка транзакций и вычисление состояния.

Расчет и консенсус - обеспечение того, что порядок, правила и состояние блокчейна согласованы большинством участников.

Доступность данных - обеспечение публикации и публичного доступа ко всем данным.

Dymension следует "модульной" парадигме блокчейна. Вместо одного монолитного блокчейна, выполняющего все вышеперечисленные функции, обязанности разделены на несколько уровней. Каждый слой создается с нуля для обслуживания своей конкретной роли в стеке.

Стек Dymension:

Исполнение - RollApps

Урегулирование и консенсус - Dymension Hub

Доступность данных - DA провайдеры

RollApps могут быть развернуты любым разработчиком, используя возможности подключения, безопасности и ликвидности Dymension. Разработчики RollApp могут выбирать DA-провайдеров, которые поддерживаются протоколом Dymension, в соответствии со своими предпочтениями по стоимости и безопасности. Помимо того, что Dymension является DA agnostic, он также является VM agnostic, что означает, что разработчики могут использовать тот инструментарий, который им наиболее удобен (например, CosmWasm, EVM и другие).

Технические аспекты инфраструктуры Dymension абстрагированы от разработчиков RollApp. Dymension предназначена для легкой загрузки и развертывания RollApp. Разработчики в основном отвечают за прикладную логику своего RollApp.

Центр Dymension

Dymension Hub является децентрализованным источником истины, безопасности и ликвидности для сети RollApps. Dymension Hub - это блокчейн Cosmos SDK на консенсусе Proof-of-Stake, использующий модель репликации состояний Tendermint Core для создания сети и консенсуса. Использование всего стека Cosmos SDK позволяет RollApps и Dymension Hub передавать сообщения в экосистеме с поддержкой IBC.

Dymension Hub встраивает логику обслуживания RollApps в протокол. Это означает, что Dymension Hub ведет реестр развернутых RollApps и соответствующую жизненно важную информацию, такую как состояние, список секвенсоров, текущий активный секвенсор и многое другое. Dymension Hub специально создан для обеспечения безопасности, совместимости и ликвидности RollApps.

  • Безопасность - наследуется от концентратора Dymension и уровня доступности данных. Безопасность пользователей RollApp обеспечивается валидаторами Dymension Hub и защищенной от мошенничества конструкцией протокола. Полагаясь на честное большинство валидаторов Dymension Hub, RollApps могут работать с честным меньшинством (т.е. предположение о доверии 1/N) и имеют значительно меньшие накладные расходы на загрузку.
  • Интероперабельность - RollApps взаимодействуют и совершают транзакции друг с другом через специальные модули, которые существуют как на RollApp, так и на Dymension Hub. Межблокчейн-коммуникация (IBC) использует общую базу всех RollApp - концентратор Dymension. Dymension Hub облегчает минимизацию доверия для пользователей RollApp в экосистеме. Кроме того, RollApps могут общаться с другими блокчейнами, поддерживающими IBC, через Dymension Hub.
  • Ликвидность - Единственная прикладная логика в Dymension Hub, не ограниченная строго для работы с RollApps, - это встроенный автоматический маркет-мейкер (AMM). AMM предназначен для эффективной маршрутизации активов RollApps, обнаружения цен и, самое главное, для совместного использования ликвидности для всей экосистемы.

RollApps

Что такое RollApps

RollApps - это модульные блокчейны, которые обрабатывают транзакции для своего конкретного приложения. Как следует из названия, RollApps - это блокчейн для конкретных приложений, который представляет собой масштабируемое решение, созданное для увеличения пропускной способности транзакций, снижения задержки и вычислительных затрат блокчейна. В отличие от dApps, построенных на универсальных роллапах, приложения, построенные как RollApps, являются собственным блокчейном, специфичным для конкретного приложения, за вычетом узлов консенсуса и валидатора.

RollApps сохраняют свою собственную автономию. Автономность - это контроль, который вы получаете от владения собственным слоем исполнения блокчейна, за исключением необходимости придерживаться правил протокола базового слоя, которые в основном направлены на предотвращение недействительных переходов состояния секвенсором RollApp. Некоторые из преимуществ собственной автономии заключаются в выборе собственного токена оплаты сети и полном контроле над прикладной логикой блокчейна.

RollApps похожи на Cosmos App-Chains, но перекладывают накладные расходы по достижению консенсуса на Dymension Hub. Dymension Hub оптимистично принимает обновления состояния от секвенсера RollApp и может отменить любой переход состояния, если доказана его недействительность с помощью доказательств мошенничества.

Секвенсор - это операционная машина RollApp, которая проверяет, заказывает и выполняет транзакции. Затем секвенсоры объединяют блоки в более крупный блок RollApp и публикуют данные транзакции на выбранном уровне DA и обновленный корень состояния RollApp вместе со ссылкой на DA (где данные доступны) в Dymension Hub.

Публикация данных и корня состояния гарантирует, что любой участник сети, будь то по причине недоверия или экономических стимулов, может независимо проверить, что секвенсор RollApp выполнил подлинные вычисления и честные переходы состояния.

Архитектура RollApp

RollApps состоит из двух основных сервисов, клиента и сервера. Сервер - это сторона приложения, предназначенная для развертывателя RollApp для реализации пользовательской бизнес-логики наряду с предварительно упакованными модулями, которые составляют RollApp Development Kit (RDK). Клиентский компонент, называемый dymint, созданный на основе rollmint от Celestia, является заменой Tendermint и отвечает за производство блоков, распространение пиринговых сообщений и межслойное взаимодействие.

Dymint обеспечивает многоуровневое сетевое взаимодействие, ответственное за использование Dymension Hub в качестве источника истины для RollApps. Поскольку Dymension Hub является автономным блокчейном PoS, Dymint настроен так, чтобы указывать на Dymension Hub для обновления состояния и любых необходимых откатов. Поскольку в самом RollApp нет задач консенсуса, dymint может обеспечить низкую задержку, необходимую для современных приложений.

Жизненный цикл транзакций RollApp начинается с отправки запроса секвенсору RollApp, который обрабатывает транзакцию. Транзакция, если она действительна, включается в блок после обработки соответствующим модулем RDK. После определенного количества блоков секвенсор создает пакет. На этом этапе секвенсор публикует пакет и метаданные пакета (например, корни состояний) на уровне DA и в Dymension Hub соответственно.

Совместимость в Cosmos

RDK от Dymension основывается на Cosmos-SDK, добавляя новые и изменяя существующие модули для обеспечения совместимости RollApp с экосистемой Cosmos. Новые модули разработаны специально для обработки логики приложений RollApp без валидатора. RollApps способны взаимодействовать с любой IBC-цепочкой, использующей концентратор Dymension, и как таковые будут частью растущей экосистемы Cosmos.

Dymension как протокол разработан для содействия росту Cosmos и межцепочечной экосистемы. Будучи изначально IBC-совместимым, Dymension Hub облегчает передачу сообщений между RollApps, зонами Cosmos и другими экосистемами, поддерживающими IBC.

В отличие от традиционных цепочек приложений, RollApps делегируют консенсус Dymension Hub. Таким образом, Dymension Hub выступает в качестве децентрализованного источника истины и решает, когда RollApp находится в хорошем состоянии. Как таковой, Dymension Hub является посредником при передаче данных в RollApps и из RollApps. Используя существующий стек IBC, RollApps могут быть подключены к экосистеме с поддержкой IBC даже без консенсуса.


Develop


Давайте начнем

Давайте создадим RollApp!

В следующих уроках мы рассмотрим создание различных вариантов RollApps с помощью RollApp Development Kit (RDK) и Dymint, замены Tendermint от Dymension.

RDK от Dymension, подобно Cosmos SDK, не зависит от виртуальных машин, построенных на его основе. Разработчики могут строить с помощью модулей RDK Go, CosmWasm, Ethermint или любой другой поддерживаемой платформы смарт-контрактов в экосистеме Cosmos.

ПРИМЕЧАНИЕ:

В разделе "Начало работы" будет показано, как настроить узел Dymension Hub и легкий клиент Celestia для RollApp для публикации обновлений состояния и данных транзакций соответственно. Если вы хотите строить локально, используя только полный узел RollApp, перейдите к соответствующей среде приложения RollApp:

Установка соответствующих пакетов позволит разработчикам эффективно выполнять сборку. Убедитесь, что на вашем компьютере установлены следующие пакеты.

Go требуется для разработки с помощью RollApp Development Kit (RDK) компании Dymension. Ниже мы приводим полезные команды для загрузки соответствующей версии Go. Разработчики также могут перейти к загрузке Go и установить Go версии 1.18.

Для Ubuntu (AMD)

ver="1.18.2"
cd $HOME
wget "https://golang.org/dl/go$ver.linux-amd64.tar.gz"
sudo rm -rf /usr/local/go
sudo tar -C /usr/local -xzf "go$ver.linux-amd64.tar.gz"
rm "go$ver.linux-amd64.tar.gz"

Теперь нам нужно добавить каталог /usr/local/go/bin в $PATH:

Для bash

echo "export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin" >> $HOME/.bash_profile
source $HOME/.bash_profile

Чтобы проверить правильность установки Go, выполните команду:

go version

На выходе должна получиться установленная версия:

Для Ubuntu (AMD)

go version go1.18.2 linux/amd64

Запуск базовых слоев

Следующие шаги помогут вам настроить и запустить докер Mocha testnet Celestia для публикации данных и локальный полный узел Dymension Hub для отправки обновлений состояния. Эта комбинация позволяет RollApps действовать как собственный блокчейн и унаследовать совместимость экосистемы IBC.

ПРИМЕЧАНИЕ
В следующем руководстве используется Docker для быстрой загрузки легкого клиента Celestia. Разработчики могут перейти к руководству по легким клиентам Celestia для получения пошаговых инструкций без использования Docker.

Шаг 1: Запустите клиент Celestia light:
Обратите внимание, что адрес Celestia должен быть профинансирован TIA для публикации данных в Mocha testnet. Пожалуйста, возьмите созданный адрес, который вы получите при первом выполнении следующей команды, и запросите токены на канале Celestia discord Mocha faucet.

docker run -e NODE_TYPE=light -e P2P_NETWORK=mocha ghcr.io/celestiaorg/celestia-node:sha-747c9e5 celestia light start --core.ip https://rpc-mocha.pops.one --gateway --gateway.addr 127.0.0.1 --gateway.port 26659 --p2p.network mocha

Шаг 2: Установите Dymension Hub:
В новом окне терминала мы загрузим последнюю версию Dymension Hub. Мы запустим этот двоичный файл на нашей локальной машине.

git clone https://github.com/dymensionxyz/dymension.git --branch v0.2.0-beta
cd dymension

Шаг 3: Установите соответствующие переменные окружения:

export CHAIN_ID="local-testnet"
export KEY_NAME="local-user"
export MONIKER_NAME="local"
export SETTLEMENT_RPC="0.0.0.0:36657"
export GRPC_ADDRESS="0.0.0.0:8090"
export GRPC_WEB_ADDRESS="0.0.0.0:8091"
export P2P_ADDRESS="0.0.0.0:36656"

Шаг 4: Настройте узел Dymension Hub:
Убедитесь, что вы находитесь в dymension dir и выполните следующие действия для сборки и инициализации цепочки:

sh scripts/setup_local.sh

Проверьте, что двоичные файлы dymd были успешно установлены:

dymd version

Если команда dymd не найдена, будет выдано сообщение об ошибке. Убедитесь, что ваш GOPATH правильно настроен, выполнив следующую команду:

export PATH=$PATH:$(go env GOPATH)/bin

ПРИМЕЧАНИЕ
Если команда dymd все еще не найдена, убедитесь, что вы также обновили GOPATH в вашем ~/.bashrc

Шаг 5: Запустите узел Dymension Hub:
Находясь в каталоге dymension, запустите цепочку:

sh scripts/run_local.sh

Теперь, когда у вас есть запущенный клиент Celestia light и узел Dymension Hub, давайте зарегистрируем наш RollApp...

Регистрация RollApp

Создание RollApp

Чтобы создать RollApp, мы должны сначала зарегистрировать его в Dymension Hub. Откройте новое окно терминала и установите соответствующие переменные окружения для первого создания RollApp:

ROLLAPP_ID="local-rollapp"

Отправьте транзакцию в Dymension Hub для создания пространства имен для RollApp:

dymd tx rollapp create-rollapp "$ROLLAPP_ID" stamp1 "genesis-path/1" 3 100 '{"Addresses":[]}' \
 --from "$KEY_NAME" \
 --chain-id "$CHAIN_ID" \
 --keyring-backend test

Следующие флаги необходимы как часть транзакции:

ROLLAPP_ID - уникальный идентификатор RollApp

codeStamp - описание местоположения файла genesis на слое данных

genesisPath - описание расположения файла genesis на слое данных

maxWithholdingBlocks - максимальное количество блоков для активного секвенсора для отправки обновления состояния

maxSequencers - максимальное количество секвенсоров

permissionedAddresses - список адресов секвенсоров, которым разрешено обслуживать данный ROLLAPP_ID, в кодировке bech32.

--from , имя учетной записи, которая инициализирует RollApp (в данном примере это "user1")

--chain-id - имя цепочки (в данном примере это "localnet").

Давайте убедимся, что инициализация работает:

dymd query rollapp list-rollapp

Предыдущий запрос должен дать результат:

rollapp:
 codeStamp: stamp1
 creator: <creator-address>
 genesisPath: genesis-path/1
 maxSequencers: "100"
 maxWithholdingBlocks: "3"
 permissionedAddresses:
 addresses: []
 rollappId: <RollApp ID>
 version: "0"

В отличие от блокчейнов смарт-контрактов общего назначения, запрос состояния блокчейна Dymension Hub позволяет пользователям и приложениям понять, какие RollApps существуют в экосистеме. Именно это часто рассматривается как встроенная логика RollApps в Dymension Hub.

Давайте добавим секвенсор в наш RollApp...

Как и валидатор, секвенсоры RollApp обрабатывают транзакции, производят блоки RollApp и отправляют пакетный набор блоков на проверку.

Создайте учетную запись секвенсора

export DESCRIPTION="{\"Moniker\":\"$MONIKER_NAME\",\"Identity\":\"\",\"Website\":\"\",\"SecurityContact\":\"\",\"Details\":\"\"}";
export CREATOR_ADDRESS="$(dymd keys show "$KEY_NAME" -a --keyring-backend test)"
export CREATOR_PUB_KEY="$(dymd keys show "$KEY_NAME" -p --keyring-backend test)"

dymd tx sequencer create-sequencer "$CREATOR_PUB_KEY" "$ROLLAPP_ID" "$DESCRIPTION" \
  --from "$KEY_NAME" \
  --chain-id "$CHAIN_ID" \
  --keyring-backend test

Эта сущность будет автоматически публиковать обновления состояния в Dymension Hub. Мы ввели следующие флаги в транзакцию, чтобы прикрепить секвенсор к RollApp:

  • creatorAddress - адрес учетной записи создателя в кодировке bech32
  • creator-pub-key - открытый ключ создателя
  • rollappId определяет rollapp, к которому принадлежит секвенсор
  • description определяет описательные термины для секвенсора

Давайте убедимся, что добавление секвенсора в RollApp сработало:

dymd query sequencer list-sequencer

Должно получиться (обратите внимание, что существует версия для отслеживания обновлений RollApp)

pagination:
 next_key: null
 total: "0"
sequencer:
 creator: <creator-address>
 description:
 details: ""
 identity: ""
 moniker: local
 securityContact: ""
 website: ""
 pubkey:
 '@type': /cosmos.crypto.secp256k1.PubKey
 key: <sequencer-pub-key>
 rollappId: <rollapp-id>
 sequencerAddress: <sequencer-address>

Теперь, когда у нас есть работающий полный узел Dymension Hub, клиент Celestia light и зарегистрированный RollApp, мы можем построить и запустить RollApp.

Далее мы создадим RDK RollApp с помощью Ignite...

RDK RollApp

Настройка RDK RollApp

В этом руководстве мы покажем, как создать пример Hello World RollApp. Учебник по RDK RollApp заимствован из учебника Ignite. Более подробный учебник по созданию модулей Cosmos SDK и Dymension RDK можно найти в Cosmos Academy's tutorial.

Необходимые установки

Go (1.18) Для разработки с помощью RDK Dymension требуется соответствующая версия Go. Если Go не установлен в вашей системе, перейдите на страницу Setup и установите Go.

Ignite (v0.23.0)
Ignite CLI - это простой в использовании инструмент CLI для создания и обслуживания блокчейнов, специфичных для суверенных приложений. Блокчейны, созданные с помощью Ignite CLI, по умолчанию используют Cosmos SDK и Tendermint. Мы будем использовать RDK и Dymint от Dymension в качестве замены Cosmos SDK и Tendermint, соответственно.

Мы будем использовать Ignite v0.23.0:

rm $(which ignite)
git clone https://github.com/ignite/cli.git
cd cli
git checkout v0.23.0
make install

Scaffold RDK RollApp

С помощью цепочки hello мы получаем необходимые файлы для создания нашего простого демонстрационного приложения.

ignite scaffold chain hello
cd hello

Далее мы заменим существующий Cosmos SDK на Dymension's RDK, который включает в себя Dymint, на котором будет работать наш клиент исполнения.

go mod edit -replace github.com/cosmos/cosmos-sdk=github.com/dymensionxyz/[email protected]
go mod tidy
go mod download

После загрузки RDK мы "обслужим" цепочку, выполнив следующую команду.

ignite chain serve

Команда serve загружает зависимости, компилирует исходный код и запускает локальную тестовую сеть с работающим узлом.

После запуска сервера вы увидите открытые порты на вашей локальной машине. Выполните ctrl + c, чтобы остановить сервер. Вы должны получить уведомление с указанием местоположения экспортированного файла genesis:

Genesis state saved in ~/.ignite/local-chains/hello/exported_genesis.json

Сохранив файл Genesis, давайте перейдем к созданию модуля Go с Ignite для нашего RollApp...

Build RDK module

Давайте добавим запрос к блокчейну, который мы только что создали. В Cosmos SDK запрос - это запрос информации из блокчейна. Запросы используются для получения данных из блокчейна, таких как текущее состояние бухгалтерской книги или детали конкретной транзакции.

ignite scaffold query say-hello name --response name

Команда запроса ignite scaffold - это инструмент, используемый для быстрого создания новых запросов. Эта команда принимает имя запроса ("say-hello") и список полей запроса (в нашем случае только name). Необязательный флаг --reponse определяет возвращаемые значения запроса.

Эта команда внесла следующие изменения в исходный код:

proto/hello/hello/query.proto: Изменен для определения запроса и ответа для запроса, а также для добавления запроса SayHello в службу Query.

x/hello/client/cli/query_say_hello.go : Создан и добавлен в проект. Этот файл содержит команду CLI CmdSayHello, которая позволяет пользователям отправлять запрос "say hello" в блокчейн.

x/hello/client/cli/query.go: Модифицирован для добавления команды CmdSayHello в CLI блокчейна.

x/hello/keeper/query_say_hello.go: Создан метод кипера под названием SayHello. Когда выполняется запрос "say hello", вызывается метод SayHello для выполнения необходимых действий и возврата ответа клиенту.

Чтобы изменить исходный код так, чтобы запрос возвращал строку "Hello, %s!", измените оператор return в query_say_hello.go на return fmt.Sprintf("hello %s", req.Name).

func (k Keeper) SayHello(goCtx context.Context, req *types.QuerySayHelloRequest) (*types.QuerySayHelloResponse, error) {
    if req == nil {
        return nil, status.Error(codes.InvalidArgument, "invalid request")
    }
    ctx := sdk.UnwrapSDKContext(goCtx)
    // TODO: Process the query
    _ = ctx
    return &types.QuerySayHelloResponse{Name: fmt.Sprintf("Hello, %s!", req.Name)}, nil
}

Теперь функция возвращает структуру QuerySayHelloResponse с полем Name, установленным в строку "Hello, %s!" с req.Name в качестве значения для %s. Он также возвращает ошибку nil, чтобы указать на успех.

Теперь, когда вы добавили запрос в RollApp и изменили его так, чтобы он возвращал нужное вам значение, вы можете запустить RollApp.

Следующая команда сборки компилирует исходный код проекта в двоичный файл и устанавливает его в каталог $(go env GOPATH)/bin:

ignite chain build

Запустите приложение RDK RollApp

Сейчас мы запустим RollApp с агрегатором Dymint. Давайте немного углубимся в некоторые аргументы, с которыми мы можем поиграть.

dymint.da_layer слой DA для нашего RollApp. В настоящее время у разработчиков есть выбор: запустить макет DA слоя для быстрой локальной разработки или публичную тестовую сеть, предоставляемую Celestia.
dymint.block_batch_size размер пакета, который будет записан в базовые слои (т.е. DA и Dymension Hub).
dymint.block_time интервал создания блока. Оптимальное значение для установки этого аргумента будет обсуждаться в будущем. Пока мы установим его равным 0,2 с.

hellod start --dymint.aggregator true \
 --dymint.da_layer mock \
 --dymint.settlement_config "{\"root_dir\": \"$HOME/.wasmd\", \"db_path\": \"data\"}" \
 --dymint.settlement_layer mock \
 --dymint.block_batch_size 1000 \
 --dymint.namespace_id "$NAMESPACE_ID" \
 --dymint.block_time 0.2s

Как только вы будете готовы, переходите к взаимодействию с запущенным RDK RollApp!

Взаимодействие с RDK RollApp

После запуска блокчейна вы можете использовать его интерфейс командной строки (CLI) для взаимодействия с ним и выполнения различных действий, таких как запрос состояния блокчейна, отправка транзакций и многое другое.

Для выполнения запроса say-hello можно использовать двоичный файл hellod:

hellod q hello say-hello bob

После выполнения этой команды двоичный файл hellod отправит запрос say-hello на ваш блокчейн с аргументом bob. Блокчейн обработает запрос и вернет результат, который будет распечатан бинарным файлом hellod. В данном случае ожидаемым результатом будет строка, содержащая сообщение Hello, bob!

name: Hello, bob!

Поздравляем! 🎉 Вы успешно создали новый модуль Cosmos SDK под названием hello с функцией пользовательского запроса. Это позволяет пользователям запрашивать блокчейн и получать ответ с персонализированным приветствием. В этом руководстве показано, как использовать Ignite CLI для создания пользовательского запроса в блокчейне.

С помощью Ignite разработчики могут быстро и легко создать базовую структуру своего проекта, что позволяет им сосредоточиться на более сложных и уникальных аспектах своей работы. Чтобы узнать больше о создании модулей RollApp, посетите документацию Ignite, документацию Cosmos SDK и не стесняйтесь обращаться к команде Dymension в Discord.

CosmWasm

В этом руководстве мы продемонстрируем, как создать RollApp, поддерживающий виртуальную машину CosmWasm, и развернуть на ней смарт-контракт. Книга CosmWasm - это более глубокий источник информации по работе с CosmWasm.

Шаг 1: Необходимые установки

Go (1.18) Для разработки с помощью RDK Dymension требуется соответствующая версия Go. Если Go не установлен в вашей системе, перейдите на страницу Setup и установите Go.

Docker
Чтобы иметь возможность загружать Rust Wasm Contracts в блокчейн, вам потребуется установить Docker. Для минимизации размера контракта вам потребуется запустить CosmWasm Rust Optimizer. Без оптимизатора смарт-контрактов сложные контракты могут превысить ограничение по размеру.

Rust
Чтобы работать с Rust, вам необходимо сначала установить его. Вы можете найти хорошо документированный пошаговый процесс установки на странице Install из Rust.

Rustup
Для пользователей Mac/Linux:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source "$HOME/.cargo/env"
rustup default stable && rustup target list --installed && rustup target add wasm32-unknown-unknown

Установите виртуальную машину CosmWasm

Сначала мы установим ветвь Wasm, которая включает в себя Dymension, заменяющий Tendermint, Dymint. В текущей версии используется имитация доступности данных и конфигурации расчетного слоя.

Это руководство CosmWasm RollApp полезно для создания RollApps на локальной машине, чтобы получить представление о разработке с Wasm в Dymension. Для начала нам нужно загрузить форк Wasm от Dymension:

git clone https://github.com/dymensionxyz/wasm.git --branch v0.1.3-alpha
cd wasm

Далее мы загрузим все модули в графе зависимостей, убедимся, что все импорты удовлетворены, и перенесем двоичные файлы в соответствующий GOPATH. Для настройки GOPATH посетите раздел "Начало работы" и официальное руководство по установке Go.

go mod tidy
go mod download
make install

Теперь, когда вы установили двоичные файлы Ethermint и переместили их в соответствующий путь, вы можете выполнить следующую команду, чтобы увидеть полезную информацию CLI:

wasmd --help

Далее мы можем перейти к созданию и запуску нашего приложения CosmWasm RollApp...

Запустите CosmWasm RollApp

Чтобы установить соответствующую рабочую среду, введите следующие переменные env:

KEY_NAME="mykey"
CHAIN_ID="wasm-rollapp"
MONIKER="localtestnet"
KEYRING="test"

Далее мы настроим наш клиент на сохранение chain-id и типа keyring-backend:

wasmd config keyring-backend $KEYRING
wasmd config chain-id $CHAIN_ID

Давайте инициализируем наш файл Genesis:

wasmd init $MONIKER --chain-id $CHAIN_ID

Теперь, когда мы инициализировали файл Genesis, пожалуйста, замените все экземпляры денома кола на uwasm, выполнив следующие команды. Это будет название валюты, которую мы используем в нашем CosmWasm RollApp:

sed -i'' -e 's/bond_denom": ".*"/bond_denom": "uwasm"/' "$HOME"/.wasmd/config/genesis.json
sed -i'' -e 's/mint_denom": ".*"/mint_denom": "uwasm"/' "$HOME"/.wasmd/config/genesis.json
sed -i'' -e 's/denom": ".*"/denom": "uwasm"/' "$HOME"/.wasmd/config/genesis.json

Теперь мы создадим локальную пару ключей для нашего CosmWasm RollApp. Ключ используется для идентификации и выполнения операций, таких как подписание транзакций, доступ к средствам или предоставление разрешений, от имени связанной учетной записи или адреса.

wasmd keys add $KEY_NAME --keyring-backend $KEYRING

Далее мы добавим созданную нами учетную запись в сгенерированный файл Genesis и добавим токены для genesis. Замените <Адрес> сгенерированным адресом из созданной пары ключей.

wasmd add-genesis-account <Address> 100000000000000000000000000uwasm --keyring-backend $KEYRING

Далее мы передадим большинство этих токенов вашему узлу валидатора и подготовим следующий узел к запуску.

wasmd gentx $KEY_NAME 1000000000000000000000uwasm --keyring-backend $KEYRING --chain-id $CHAIN_ID

Теперь, когда мы создали валидатор и самоделегированные токены, мы можем сохранить их в файл genesis.

wasmd collect-gentxs

Далее мы убедимся, что файл genesis настроен правильно:

wasmd validate-genesis

И последнее, но не менее важное: мы запустим CosmWasm RollApp с Dymint в качестве замены Tendermint. Обратите внимание, в этом руководстве мы используем макет уровня доступности данных и расчетного уровня для быстрого тестирования. Для получения учебника с более широким охватом посетите раздел "Начало работы" и запустите RDK RollApp.

wasmd start --dymint.aggregator true \
 --dymint.da_layer mock \
 --dymint.settlement_config "{\"root_dir\": \"$HOME/.wasmd\", \"db_path\": \"data\"}" \
 --dymint.settlement_layer mock \
 --dymint.block_batch_size 1000 \
 --dymint.namespace_id 000000000000FFFF \
 --dymint.block_time 0.2s

Развернуть контракт CosmWasm

Следующие инструкции взяты из раздела "Развертывание смарт-контракта" книги CosmWasm. Для получения дополнительной информации о создании и развертывании смарт-контрактов CosmWasm, пожалуйста, посетите книгу CosmWasm.

Составление договоров

Откройте новое окно терминала. Загрузите следующие смарт-контракты:

git clone [email protected]:CosmWasm/cw-plus.git
cd cw-plus

Перейдите в корень проекта и выполните следующую команду, используя Docker для оптимизации размера файла для развертывания:

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.11

Через пару минут в вашем репозитории должен появиться каталог артефактов, а в нем - файл cw4-group.wasm, содержащий контракт, который мы хотим загрузить.

Развертывание контракта

Давайте сохраним общие переменные транзакции, чтобы не занимать место:

KEY_NAME="mykey"
CHAIN_ID="wasm-rollapp"
MONIKER="localtestnet"
KEYRING="test"

TX_FLAGS="--chain-id $CHAIN_ID --gas-prices 0uwasm --gas auto --gas-adjustment=1.1"

Загрузите смарт-контракт:

wasmd tx wasm store ./artifacts/cw4_group.wasm --from $KEY_NAME $(echo $TX_FLAGS) -y -b block

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

Кроме того, должно появиться событие store_code с единственным атрибутом code_id - его полем значения является code id нашего загруженного контракта. Мы можем сохранить code_id с помощью следующей команды. Пожалуйста, замените "TX_HASH_HERE" на ранее возвращенный tx-хэш.

CODE_ID=$(wasmd query tx --type=hash "TX_HASH_HERE" --chain-id "$CHAIN_ID" --output json | jq -r '.logs[0].events[-1].attributes[0].value')
echo $CODE_ID

Заключение договора

Теперь, когда мы загрузили смарт-контракт, мы можем приступить к его инстанцированию, отправив транзакцию instantiate.

Пожалуйста, замените ADDRESS_HERE (сохраняя формат строки) на адрес администратора контракта. admin - это адрес, который будет иметь право исполнять сообщения по этому контракту. Очень важно установить его на ваш адрес, так как мы захотим узнать, как исполнять контракты.

wasmd tx wasm instantiate $CODE_ID \
 '{ "admin": "ADDRESS_HERE", "members": [] }' \
 --from $KEY_NAME --label "Group" --no-admin $(echo $TX_FLAGS) -y

Теперь мы можем получить адрес контракта, запросив ранее полученный tx-хэш. Пожалуйста, замените "TX_HASH_HERE" на ранее полученный tx-хэш.

CONTRACT_ADDRESS=$(wasmd query tx --type=hash "TX_HASH_HERE" --chain-id "$CHAIN_ID" --output json | jq -r '.logs[0].events[0].attributes[-2].value')
echo $CONTRACT_ADDRESS

Взаимодействие по контракту

Давайте сначала запросим контракт, который мы развернули. Следующая команда запрашивает список членов нашего контракта:

wasmd query wasm contract-state smart \
 $CONTRACT_ADDRESS \
 '{ "list_members": {} }'

Далее мы добавим член в состояние контракта. Мы добавим адрес нашего развертывателя, заменив ADDRESS_HERE. Мы добавим этот член, выполнив адрес контракта с предоставленными аргументами.

wasmd tx wasm execute \
 $CONTRACT_ADDRESS \
 '{ "update_members": { "add": [{ "addr": "ADDRESS_HERE", "weight": 1 }], "remove": [] } }' \
 --from $KEY_NAME $(echo $TX_FLAGS)

Наконец, мы запросим тот же контракт, чтобы увидеть обновленный список членов.

wasmd query wasm contract-state smart \
 $CONTRACT_ADDRESS \
 '{ "list_members": {} }'

Контракт должен вернуть список участников, включая введенный нами адрес:

data:
 members:
 - addr: "ADDRESS"
 weight: 1

Это все для нашего руководства по развертыванию CosmWasm RollApp и смарт-контракта в RollApp.

EVW RollApp

EVM

В следующем руководстве мы продемонстрируем, как развернуть смарт-контракт Solidity с помощью Remix IDE на EVM RollApp. EVM RollApp использует Ethermint, созданный командой Evmos, который имитирует виртуальную машину Ethereum в стеке Cosmos. Dymint заменяет механизм консенсуса Tendermint, позволяя создавать низколатентные цепочки приложений.

Учебник содержит ссылки на Remix IDE - веб-приложение для быстрого тестирования и развертывания преимущественно EVM-совместимых смарт-контрактов. Для производственного развертывания рекомендуется использовать набор средств разработки для тестирования, такой как Foundry, Hardhat или другие, рекомендованные сообществом разработчиков.

Необходимые установки


Go (1.18)
Для разработки с помощью RDK Dymension требуется соответствующая версия Go. Если Go не установлен в вашей системе, перейдите на страницу Setup и установите Go.

Установите EVM

Сначала мы установим ветвь Ethermint, которая включает в себя замену Tendermint от Dymension, Dymint. В текущей версии используется макет конфигурации доступности данных и расчетного слоя.

Если вы хотите использовать работающие базовые слои из раздела "Начало работы", пожалуйста, запустите RDK RollApp. Обновления документации в ближайшем будущем предоставят инструкции по публикации данных в живые тестовые среды из EVM RollApp.

Это руководство по EVM RollApp полезно для создания RollApps на локальной машине, чтобы получить представление о разработке с EVM в Dymension. Для начала нам нужно загрузить форк Ethermint от Dymension:

git clone https://github.com/dymensionxyz/ethermint.git --branch v0.1.2-alpha-ethermint-v0.18.0
cd ethermint

Далее мы загрузим все модули в графе зависимостей, убедимся, что все импорты удовлетворены, и перенесем двоичные файлы в соответствующий GOPATH. Для настройки GOPATH посетите раздел "Начало работы" и официальное руководство по установке Go.

go mod tidy
go mod download
установить

Теперь, когда вы установили двоичные файлы Ethermint и переместили их в соответствующий путь, вы можете выполнить следующую команду, чтобы увидеть полезную информацию CLI:

ethermintd --help

Далее мы можем перейти к построению нашего EVM RollApp...

Запустить EVM RollApp

Чтобы установить соответствующую рабочую среду, введите следующие переменные env:

KEY="mykey"
CHAINID="ethermint_9000-1"
MONIKER="localtestnet"
KEYRING="test"
KEYALGO="eth_secp256k1"

Далее мы настроим клиента на сохранение chain-id и типа keyring-backend:

ethermintd config keyring-backend $KEYRING
ethermintd config chain-id $CHAINID

Давайте инициализируем наш файл Genesis:

ethermintd init $MONIKER --chain-id $CHAINID

Теперь, когда мы инициализировали файл Genesis, пожалуйста, замените все экземпляры stake denom на aphoton, выполнив следующие команды. Это будет название валюты, которую мы используем в нашем EVM RollApp:

sed -i'' -e 's/bond_denom": ".*"/bond_denom": "aphoton"/' "$HOME"/.ethermintd/config/genesis.json
sed -i'' -e 's/mint_denom": ".*"/mint_denom": "aphoton"/' "$HOME"/.ethermintd/config/genesis.json
sed -i'' -e 's/denom": ".*"/denom": "aphoton"/' "$HOME"/.ethermintd/config/genesis.json

Теперь мы создадим локальную пару ключей для нашего EVM RollApp. Ключ используется для идентификации и выполнения операций, таких как подписание транзакций, доступ к средствам или предоставление разрешений, от имени связанной учетной записи или адреса.

ethermintd keys add $KEY --keyring-backend $KEYRING

Далее мы добавим созданную нами учетную запись в сгенерированный файл Genesis и добавим токены для genesis. Замените <Адрес> сгенерированным адресом из созданной пары ключей.

ethermintd add-genesis-account <Address> 100000000000000000000000000aphoton --keyring-backend $KEYRING

Далее мы передадим большинство этих токенов вашему узлу валидатора и подготовим следующий узел к запуску.

ethermintd gentx $KEY 1000000000000000000000aphoton --keyring-backend $KEYRING --chain-id $CHAINID

Теперь, когда мы создали валидатор и самоделегированные токены, мы можем сохранить их в файл genesis.

ethermintd collect-gentxs

Далее мы убедимся, что файл genesis настроен правильно:

ethermintd validate-genesis

И последнее, но не менее важное: мы запустим EVM RollApp с Dymint в качестве замены Tendermint. Обратите внимание, в этом руководстве мы используем макет уровня доступности данных и расчетного уровня для быстрого тестирования. Для получения учебника с более широким охватом посетите раздел "Начало работы" и запустите RDK RollApp.

ethermintd start --dymint.aggregator true \
 --dymint.da_layer mock \
 --dymint.settlement_config "{\"root_dir\": \"$HOME/.ethermintd\", \"db_path\": \"data\"}" \
 --dymint.settlement_layer mock \
 --pruning=nothing \
 --minimum-gas-prices=0.0001aphoton\
 --dymint.block_batch_size 1000 \
 --dymint.namespace_id 000000000000FFFF \
 --dymint.block_time 0.5s \
 --json-rpc.api eth,txpool,personal,net,debug,web3,miner \
 --api.enable

Integrate Metamask

Далее мы подключим кошелек Metamask к нашему EVM RollApp, чтобы мы могли использовать его в Remix IDE для развертывания смарт-контракта.

Добавление нашего EVM RollApp в Metamask

  1. Установите расширение Metamask в свой браузер.
  2. В пользовательском интерфейсе расширения нажмите на правый верхний аватар, а затем Настройки > Сети > Добавить сеть.
  3. Заполните форму новой сети следующими данными:
Network Name: EVM RollApp Local
New RPC URL: http://localhost:8545/
Chain ID: 9000
Currency Symbol (optional): tEVMOS

Импорт учетной записи RollApp в MetaMask

Снова нажмите на правый верхний аватар и выберите Импорт учетной записи (убедитесь, что выбрана опция Закрытый ключ).

Экспортируйте свой закрытый ключ, выполнив следующую команду:

ethermintd keys unsafe-export-eth-key $KEY --keyring-backend test

Вставьте экспортированный закрытый ключ в поле ввода формы и нажмите Импорт. Баланс вашего счета в Metamask должен быть TEVMOS.

Добавить кошелек Metamask в Remix IDE

В Remix IDE перейдите к пункту DEPLOY & RUN TRANSACTIONS в нижней части боковой панели. Там вы сможете изменить сеть с виртуальной машины Remix и подключиться к узлу EVM RollApp, работающему в настоящее время через кошелек Metamask.

Выберите Injected Provider - Metamask и выберите адрес из импортированных приватных ключей. Теперь, когда мы настроили кошелек и соединение, давайте продолжим создание и развертывание нашего смарт-контракта.

Развертывание смарт-контракта

Теперь, когда мы подключили наш работающий узел EVM RollApp к Metamask, давайте создадим и развернем смарт-контракт на блокчейне. В этом разделе мы рассмотрим, как создать контракт NFT на EVM RollApp. Заимствовано из руководства Foundry по созданию NFT.

Создание solidity контракта

Создайте contract/NFT.sol, содержащий следующий контракт:

// SPDX-License-Identifier: UNLICENSED
pragma solidity 0.8.10;
import "https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC721.sol";
import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Strings.sol";
contract NFT is ERC721 {
 uint256 public currentTokenId;
 constructor(
 string memory _name,
 string memory _symbol
 ) ERC721(_name, _symbol) {}
 function mintTo(address recipient) public payable returns (uint256) {
 uint256 newItemId = ++currentTokenId;
 _safeMint(recipient, newItemId);
 return newItemId;
 }
 function tokenURI(uint256 id) public view virtual override returns (string memory) {
 return Strings.toString(id);
 }
}

Перейдите на страницу Solidity Compiler и установите версию компилятора, соответствующую указанной в верхней части смарт-контракта (т.е. 0.8.10). Затем скомпилируйте NFT.sol. Теперь вы сможете развернуть смарт-контракт на EVM RollApp.

Перейдите к пункту Deploy & Run Transactions на боковой панели. Убедитесь, что параметр Injected Provider - MetaMask установлен на адрес кошелька с вашими токенами.

Ваш смарт-контракт имеет два параметра в конструкторе:

string memory _name
string memory _symbol

Введите аргументы рядом с кнопкой Deploy. Когда вы выберете Deploy, появится всплывающее окно MetaMask, которое попросит вас подписать транзакцию для развертывания контракта на вашем EVM RollApp.

Как только вы подпишете транзакцию, смарт-контракт будет запущен на вашем EVM RollApp.

Валидация

Вопросы и ответы по узлам

Dymension Hub использует Tendermint Core, который опирается на набор валидаторов, отвечающих за фиксацию и подписание новых блоков в блокчейне. Эти валидаторы работают как полноценные узлы и участвуют в протоколе консенсуса, передавая голоса, которые содержат подписи, подписанные закрытым ключом каждого валидатора.

Валидаторы связывают DYM (собственный токен Dymension) и имеют токены, "делегированные" им держателями токенов. Валидаторы и их делегаты зарабатывают DYM за участие и обеспечение безопасности хаба Dymension. Как и в других цепочках Cosmos SDK, валидаторы устанавливают комиссию на вознаграждения, которые получают их делегаты.

Помимо валидатора, управляющего полным узлом, любой может запустить полный узел концентратора Dymension для трансляции транзакций и прямого подключения к сети. В следующем руководстве мы продемонстрируем, как запустить полный узел концентратора Dymension. По мере развития протокола Dymension разработчики ядра вместе с сообществом будут постоянно переоценивать требования к аппаратному обеспечению для работы и синхронизации с концентратором Dymension.

Поддерживаемые ОС

Мы официально поддерживаем следующие архитектуры:

  • darwin/arm64
  • darwin/x86_64
  • linux/arm64
  • linux/x86_64


Другие архитектуры могут поддерживаться, но не были официально протестированы.

Аппаратные требования

Для подготовки к предстоящему тестированию и обновлению сети валидаторы и полные узлы Dymension Hub должны иметь следующие минимальные рекомендуемые требования к аппаратному обеспечению:

двухъядерный процессор Не менее 500 ГБ дискового хранилища SSD Не менее 16 ГБ оперативной памяти (RAM) Пропускная способность сети не менее 100 Мбит/с
Эти требования будут постоянно пересматриваться и тестироваться основной командой и сообществом.

Необходимые условия для работы программного обеспечения

Установка Go является предварительным условием для запуска полного узла Dymension Hub. Если вам все еще нужно установить Go на свою систему, перейдите на страницу загрузки и установки Go.

Построить Dymension Hub

В следующем разделе объясняется, как собрать полный узел Dymension Hub:


Используйте git для получения Dymension Hub:

git clone https://github.com/dymensionxyz/dymension.git --branch v0.2.0-beta
cd dymension

Соберите Dymension Hub. Это установит исполняемый файл dymd в вашу переменную окружения GOPATH.

make install

Убедитесь, что полный узел Dymension Hub установлен правильно.

dymd version --long

Пример:

name: dymension
server_name: dymd
version: v0.2.0-beta
commit: 987e33407911c0578251f3ace95d2382be7e661d

Если команда dymd не найдена, возвращается сообщение об ошибке, убедитесь, что ваш GOPATH правильно настроен, выполнив следующую команду:

export PATH=$PATH:$(go env GOPATH)/bin

Конфигурация узла

Следующая информация описывает важные параметры конфигурации узла в каталоге ~/.dymension/config/. Рекомендуется обновить эти параметры с учетом собственной информации.

~/.dymension/config
│— addrbook.json                       # Registry of peers to connect to
│— app.toml                            # dymd configuration file
│— client.toml                         # Configurations for the cli wallet
│— config.toml                         # Tendermint configuration file
│— genesis.json                        # Gensesis transactions
│— node_key.json                       # Private key used for node authentication in the p2p protocol
└— priv_validator_key.json             # Key used by the validator to sign blocks

Инициализация и настройка moniker

Мы рекомендуем сохранить testnet chain-id в файле Dymension client.toml. Это позволит вам не передавать вручную флаг chain-id для каждой команды CLI.

Инициализируйте узел с человекочитаемым именем:

dymd init <MONIKER> --chain-id 35-C

Моникеры могут содержать только символы ASCII. Использование символов Unicode сделает ваш узел недоступным для других узлов сети.

Вы можете обновить моникер вашего узла, отредактировав поле moniker в ~/.dymension/config/config.toml.

Обновление bond denom:

  1. Откройте ~/.dymension/config/genesis.json
  2. Найдите и замените все экземпляры stake на udym
  3. Сохраните и закройте Genesis.json

Обновление минимальных цен на газ:

  1. Откройте ~/.dymension/config/app.toml
  2. Измените minimum-gas-prices и установите минимальную цену на газ, которую будет принимать валидатор для подтверждения транзакции и предотвращения спама.

Рекомендуемая настройка: minimum-gas-prices = "0.15udym".

Пример:

# The minimum gas prices a validator is willing to accept for processing a
# transaction. A transaction's fees must meet the minimum of any denomination
# specified in this config (e.g. 0.25token1;0.0001token2).

minimum-gas-prices = "0.15udym"

Установите external_address

Для того чтобы быть добавленным в адресную книгу на посевных узлах, необходимо настроить external_address в config.toml. Это добавление предотвратит постоянные переподключения. По умолчанию P2P_PORT равен 26656.

sed -i -e 's/external_address = \"\"/external_address = \"'$(curl httpbin.org/ip | jq -r .origin)':26656\"/g' ~/.dymension/config/config.toml

Установите режим seed_mode

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

seed_mode = true

Добавьте seeds

Чтобы вручную определить начальные узлы, отредактируйте следующий параметр в config.toml. Ниже приведен посевной узел Dymension Core Team для тестовой сети Dymension 35-C. Для получения посевных узлов, предоставленных сообществом, посетите репозиторий GitHub тестовой сети.

# Comma separated list of seed nodes to connect to
seeds = "[email protected]:26656"

Добавьте persistent_peers

Указанные вами узлы - это доверенные постоянные сверстники, которые помогут закрепить ваш узел в сети p2p. Если соединение не удается, они дозваниваются и автоматически дозваниваются повторно в течение 24 часов. Функция автоматического повторного набора использует экспоненциальный бэк-офф и прекращается через 24 часа после попытки соединения.

Если значение persistent_peers_max_dial_period больше нуля, пауза между каждым вызовом каждого постоянного аналога не превысит persistent_peers_max_dial_period во время экспоненциального отката, и процесс автоматического повторного набора продолжится. Ниже приведен пример, соответствующие пиры см. в репозитории testnet GitHub.

# Comma separated list of nodes to keep persistent connections to.
persistent_peers = "[email protected]:26656,[email protected]:26656"

Присоединиться к сети

Настоятельно рекомендуется настроить частную локальную сеть перед подключением к публичной сети. Это поможет вам ознакомиться с процессом настройки и обеспечит среду для тестирования. В следующих разделах описывается этот процесс.

Настройка локального узла

Валидаторы могут создать частную сеть Dymension Hub, чтобы ознакомиться с работой полноценного узла Dymension Hub, прежде чем присоединиться к публичной сети.

Самая простая сеть Dymension Hub, которую вы можете создать, - это локальная тестовая сеть с одним узлом. В среде с одним узлом вы имеете одну учетную запись и являетесь единственным валидатором, подписывающим блоки для вашей частной сети.

Инициализируйте файл genesis:

dymd init <Moniker> --chain-id=35-C

Создайте учетную запись Dymension. Замените переменную на имя вашей учетной записи:

dymd keys add <KEY_NAME_HERE>

Выполните следующие команды, чтобы добавить свой счет и установить начальный баланс:

dymd add-genesis-account <ADDRESS_HERE> 600000000000udym

Объявите свой валидатор и самоделегирование с помощью специальной транзакции, включенной в файл genesis, которая называется gentx:

dymd gentx <KEY_NAME> 500000000000udym --chain-id 35-C

Добавьте gentx в файл genesis:

dymd collect-gentxs

Выполните следующую команду для запуска частной сети:

dymd start

Если частная сеть Dymension Hub настроена правильно, ваш узел Dymd будет работать на tcp://localhost:26656, прослушивать входящие транзакции и подписывать блоки.

Join a public network

Скачать файл генезиса
Файл Genesis определяет остатки на счетах и параметры на начало работы сети для использования при воспроизведении транзакций и синхронизации.

Для конфигураций dymd по умолчанию genesis должен быть размещен в каталоге ~/.dymension/config/genesis.json.

Перейдите на страницу Sync, чтобы узнать больше о синхронизации вашего узла.

Узел синхронизации

Fast-sync for testing

Иногда вы можете захотеть синхронизироваться быстрее, отказавшись от проверок. Это можно сделать, добавив следующий флаг в команду dymd start.

Следующая команда должна использоваться только опытными пользователями в непроизводственной среде:

dymd start --x-crisis-skip-assert-invariants

Синхронизация с снапшота

Вы можете значительно ускорить процесс синхронизации, предоставив dymd свежий снимок состояния сети. Снимки делаются в открытом доступе членами сообщества Dymension.

Перед использованием моментальных снимков
Перед загрузкой моментального снимка некоторые файлы должны отсутствовать или быть удалены. quicksync заменяет данные блокчейна пользовательским снапшотом. Для большинства случаев использования достаточно "обрезанной" версии. В обрезанных версиях определенные транзакции удаляются из архива для повышения производительности узла. Если вы используете узел в архивных целях, вам нужна архивная или стандартная загрузка.

После выбора подходящего типа загрузки проверьте узел и убедитесь, что .dymension/data пуст.

Пример:

12:31PM INF Removed all blockchain history dir=/home/ubuntu/.dymension/data

Если вы являетесь валидатором, убедитесь, что вы не удалили свой закрытый ключ.

Пример удаленного закрытого ключа:

6:22PM INF Reset private validator file to genesis state keyFile=/home/ubuntu/.dymension/config/priv_validator_key.json stateFile=/home/ubuntu/.dymension/data/priv_validator_state.json

Если у вас загружена адресная книга, вы можете сохранить ее. В противном случае необходимо загрузить соответствующую адресную книгу.

Загрузив адресную книгу, выполните следующие действия:

dymd start
dymd status
# It will take a few seconds for dymd to start.

Мониторинг синхронизации

Ваш узел догоняет сеть, воспроизводя все транзакции из genesis и воссоздавая состояние блокчейна локально. Вы можете проверить этот процесс, проверив значение latest_block_height в SyncInfo ответа статуса dymd:

  {
    "SyncInfo": {
        "latest_block_height": "42", <---—         "catching_up"        : true
    },
  ...
  }

Синхронизация завершена
Вы можете определить, что ваш узел синхронизирован с сетью, когда SyncInfo.catching_up в ответе статуса dymd возвращает false, а значение latest_block_height соответствует высоте блока публичной сети.

dymd status

Пример:

{
 "SyncInfo": {
 "latest_block_height": "7356350",
 "catching_up" : false
 },
 ...
 }

Поздравляю!

Вы успешно присоединились к сети в качестве оператора полного узла.

Валидатор

Это пошаговое руководство по настройке валидатора Dymension Hub. Мы рекомендуем использовать производственную архитектуру, включающую узлы sentry, описанные здесь, и службу управления ключами Tendermint, описанную здесь.

Чтобы следовать этому руководству, у вас должен быть полный узел, синхронизированный с текущей сетью. Для создания полного узла Dymension Hub следуйте предыдущим инструкциям. Для тестовых сетей отбирается ограниченное количество валидаторов. Если вы попали в число отобранных валидаторов, пожалуйста, свяжитесь с командой в Discord для запроса самораспределяющихся токенов.

1. Получите свой PubKey

Для создания нового валидатора требуется консенсусный PubKey вашего узла. Выполнить:

--pubkey=$(dymd tendermint show-validator)

2. Создайте новый валидатор

Для того чтобы dymd распознал адрес кошелька, он должен содержать токены. Если вы были выбраны в качестве части

Чтобы создать валидатор и инициализировать его самоделегированием, выполните следующую команду. key-name - это имя ключа оператора приложения, который используется для подписи транзакций.

dymd tx staking create-validator \
 --amount=500000000000udym \
 --pubkey=$(dymd tendermint show-validator) \
 --moniker="<your-moniker>" \
 --chain-id=35-C \
 --from=<key-name> \
 --commission-rate="0.10" \
 --commission-max-rate="0.20" \
 --commission-max-change-rate="0.01" \
 --min-self-delegation="1"

Когда вы указываете параметры комиссии, то commission-max-change-rate измеряется как процентное изменение commission-rate. Например, изменение с 1% до 2% - это увеличение ставки на 100%, но комиссионный максимум изменения измеряется как 1%.

3. Подтвердите, что ваш валидатор активен

Если выполнение следующей команды дает результат, значит, ваш валидатор активен:

dymd query tendermint-validator-set | grep "$(dymd tendermint show-address)"

Вы ищете адрес в кодировке bech32 в файле ~/.dymension/config/priv_validator.json.

Обновления

Сети периодически обновляются. Эти инструкции являются руководством для полных узлов, которые хотят обновить до последней версии тестовой сети.

1. Создайте резервные копии

Перед обновлением узла до последней версии сначала необходимо сбросить данные. Однако сброс данных повлияет на исходные файлы priv_validator.json и cargo.toml.

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

2. Сброс данных

Удалите устаревшие файлы и сбросьте данные:

rm ~/.dymension/config/genesis.json
rm ~/.dymension/config/addrbook.json
dymd unsafe-reset-all

Теперь ваш узел находится в чистом состоянии. Имейте в виду, что эта команда повлияет на исходные файлы priv_validator.json и config.toml. Если у вас ранее были установлены часовые узлы или полные узлы, ваш узел все еще будет пытаться подключиться к ним, но может потерпеть неудачу, если они также не были обновлены.

Убедитесь, что каждый узел имеет уникальный priv_validator.json. Не копируйте priv_validator.json со старого узла на несколько новых узлов. Запуск двух узлов с одним и тем же priv_validator.json приведет к двойной подписи.

3. Обновление программного обеспечения

Теперь пришло время обновить программное обеспечение. Перейдите в каталог проекта и извлеките нужную версию. Если у вас возникли проблемы на этом шаге, проверьте, что у вас установлена совместимая версия Go (v1.18+).

Сброс настроек и устранение неисправностей

Иногда вам может понадобиться выполнить комлпектный сброс узла из-за повреждения данных или неправильной конфигурации. Сброс удалит все данные в ~/.dymension/data и адресную книгу в ~/.dymension/config/addrbook.json и вернет узел в состояние genesis.

Выполните полный сброс вашего dymd:

dymd tendermint unsafe-reset-all

При успешном выполнении этой команды будет получен следующий журнал:

[ INF ] Removed existing address book file=/home/user/.dymension/config/addrbook.json
[ INF ] Removed all blockchain history dir=/home/user/.dymension/data
[ INF ] Reset private validator file to genesis state keyFile=/home/user/.dymension/config/priv_validator_key.json stateFile=/home/user/.dymension/data/priv_validator_state.json

Изменить Genesis

Чтобы изменить версию genesis, удалите ~/.dymension/config/genesis.json. Файлы Genesis предоставляются в GitHub для соответствующих сетей.

Сброс личных данных

После изменения личных данных вы можете оказаться не в состоянии использовать свой узел и связанные с ним учетные записи. Не выполняйте это действие, если ваш узел не является одноразовым.

Чтобы изменить личные данные на нетронутые, удалите оба файла ~/.dymension/config/priv_validator_state.json и ~/.dymension/config/node_key.json.

Здоровье узла

На здоровом узле будут присутствовать и заполнены следующие файлы:

Адресная книга ~/.dymension/config/addrbook.json
Файл Genesis ~/.dymension/config/genesis.json
Состояние валидатора ~/.dymension/config/priv_validator_state.json
Ключ узла ~/.dymension/config/node_key.json

Litepaper

Дом RollApps

Современные блокчейны работают как системы с общей пропускной способностью, что препятствует росту децентрализованных приложений. Dymension дезагрегирует потребление ресурсов, внедряя многоуровневый протокол блокчейна с надежным инструментарием для создания и развертывания ролл-апов для конкретных приложений без разрешений. Dymension - это своего рода хаб и фабрика для таких приложений, которые называются RollApps. В этом документе мы рассматриваем технологические, экономические и социальные аспекты протокола Dymension. Кроме того, мы представляем грандиозное видение dymension, модульную архитектуру его дизайна и высокоуровневый обзор основных концепций Dymension.

RollApp Development Kit (RDK)

Экземпляр RollApp в Dymension - это специфичный для приложения роллап, созданный с помощью комплекта разработки Dymension RollApp Development Kit, называемого RDK. Комплект разработки представляет собой предварительно упакованный набор общих модулей для таких общих функций, как создание учетных записей и управление токенами. RDK упрощает процесс развертывания RollApp поверх Dymension Hub.

Dymension Hub

Цепочка Cosmos SDK Proof-of-Stake, использующая модель репликации состояния Tendermint Core для организации сети и консенсуса. В отличие от монолитного блокчейна, расчетный уровень Dymension, также называемый Dymension Hub, специально разработан для предоставления оптимизированного сервиса для роллапов. Таким образом, логика обслуживания роллапов закреплена в расчетном слое, что приводит к созданию хаба для взаимодействия между RollApps.

Межблокчейн-коммуникация (IBC)

RollApps нативно взаимодействуют с протоколом Inter-Blockchain Communication (IBC), который обеспечивает безопасную передачу сообщений между Dymension RollApps. RollApps используют общую коммуникационную площадку всех Dymension RollApps - Dymension Hub.

Виртуальная машина RollApp (RVM)

Dymension представляет новый механизм разрешения споров, который моделирует среду выполнения RollApp в Dymension Hub. Концентратор Dymension запускает экземпляр RVM, которому передается точный контекст данной транзакции, что приводит к детерминированному результату. Таким образом, Dymension может поддерживать различные среды выполнения.

Встроенный Hub AMM

Dymension встраивает собственного автоматического маркет-мейкера (AMM) в концентратор Dymension для достижения общей ликвидности поверх общей безопасности. AMM предназначен для содействия RollApp и считается необходимой инфраструктурой для RollApps. Встроенный AMM является единственной прикладной логикой на концентраторе Dymension, которая не ограничена только для использования RollApp.

Полный PDF-файл
Нажмите здесь, чтобы получить полный PDF-файл документа Dymension(here).