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:
Урегулирование и консенсус - 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.
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:
echo "export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin" >> $HOME/.bash_profile source $HOME/.bash_profile
Чтобы проверить правильность установки Go, выполните команду:
go version
На выходе должна получиться установленная версия:
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/rdk@v0.1.2-alpha 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 git@github.com: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
- Установите расширение Metamask в свой браузер.
- В пользовательском интерфейсе расширения нажмите на правый верхний аватар, а затем Настройки > Сети > Добавить сеть.
- Заполните форму новой сети следующими данными:
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.
Поддерживаемые ОС
Мы официально поддерживаем следующие архитектуры:
Другие архитектуры могут поддерживаться, но не были официально протестированы.
Аппаратные требования
Для подготовки к предстоящему тестированию и обновлению сети валидаторы и полные узлы 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.
- Откройте ~/.dymension/config/genesis.json
- Найдите и замените все экземпляры stake на udym
- Сохраните и закройте Genesis.json
Обновление минимальных цен на газ:
- Откройте ~/.dymension/config/app.toml
- Измените 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 в 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 ваш узел постоянно обследует сеть и ищет сверстников. Если другой узел запрашивает адрес, он отвечает и отключается. Режим посева не будет работать, если реактор обмена с равными отключен. Если вы хотите запустить весь узел в режиме посева, измените следующую конфигурацию для вашего клиента.
seed_mode = true
Чтобы вручную определить начальные узлы, отредактируйте следующий параметр в config.toml. Ниже приведен посевной узел Dymension Core Team для тестовой сети Dymension 35-C. Для получения посевных узлов, предоставленных сообществом, посетите репозиторий GitHub тестовой сети.
# Comma separated list of seed nodes to connect to seeds = "c6cdcc7f8e1a33f864956a8201c304741411f219@3.214.163.125:26656"
Указанные вами узлы - это доверенные постоянные сверстники, которые помогут закрепить ваш узел в сети 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 = "id100000000000000000000000000000000@1.2.3.4:26656,id200000000000000000000000000000000@2.3.4.5:26656"
Присоединиться к сети
Настоятельно рекомендуется настроить частную локальную сеть перед подключением к публичной сети. Это поможет вам ознакомиться с процессом настройки и обеспечит среду для тестирования. В следующих разделах описывается этот процесс.
Настройка локального узла
Валидаторы могут создать частную сеть Dymension Hub, чтобы ознакомиться с работой полноценного узла Dymension Hub, прежде чем присоединиться к публичной сети.
Самая простая сеть Dymension Hub, которую вы можете создать, - это локальная тестовая сеть с одним узлом. В среде с одним узлом вы имеете одну учетную запись и являетесь единственным валидатором, подписывающим блоки для вашей частной сети.
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 определяет остатки на счетах и параметры на начало работы сети для использования при воспроизведении транзакций и синхронизации.
- Chain-id: 35-C
- Binaries: https://github.com/dymensionxyz/dymension.git
- Version: v0.2.0-beta
- Git commit: 987e33407911c0578251f3ace95d2382be7e661d
- Genesis: Link here
- Seed nodes: Link here
Для конфигураций 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).