# Собственный (сustom) блокчейн
В данной статье описан процесс установки собственного (custom) блокчейна Waves, который можно использовать для экспериментальной деятельности.
Для большинства задач, таких как знакомство с блокчейном, отправка транзакций, разработка смарт-контрактов, достаточно развернуть одну ноду с собственным блокчейном в Docker.
Для настройки собственной сети блокчейн с несколькими нодами выполните шаги, описанные в секции Установить Jar ноду с собственным блокчейном.
# Развернуть ноду с собственным блокчейном в Docker
Самый простой способ запустить собственную блокчейн сеть Waves с одной нодой — это установить Docker и развернуть Docker-контейнер ноды Waves с настройками для собственной сети.
# Установить Jar-ноду с собственным блокчейном
Вы можете запустить одну или несколько Jar-нод для создания собственного (частного) блокчейна. Для этого нужно создать блок генезиса и задать настройки блокчейна в файле конфигурации.
# Шаг 1
Установка ноды поддерживается в версиях OpenJDK 11 и 17.
Если OpenJDK не установлен, установите OpenJDK 11:
На Ubuntu:
sudo apt-get update sudo apt-get install openjdk-11-jre-headless
Ha macOS:
brew install openjdk@11
На Windows: как описано в документации.
# Шаг 2
Загрузите последнюю версию Jar-ноды (файл waves-all-{version}.jar
).
# Шаг 3
Создайте файл genesis.example.conf
с параметрами блока генезиса в каталоге с JAR-файлом.
Пример:
genesis-generator
{
network-type: "L" # байт сети (идентификатор) вашего блокчейна
initial-balance: 10000000000000000 # первоначальный баланс в wavelets
average-block-delay: 60s # среднее время выпуска блока
# timestamp: 1500635421931 # по умолчанию текущее время
# base-target: 999 # коэффициент, регулирующий среднее время выпуска блока; если не указан, вычисляется автоматически
# сумма долей должна быть = initial-balance
distributions =
[
{
seed-text: "foo0"
nonce: 0
amount: 10000000000000000
}
]
# pre-activated-features = [1,2,15] # по умолчанию все фичи будут активированы с высоты 0
}
# Шаг 4
Запустите команду генерации блока генезиса:
java -cp waves-all-{version}.jar com.wavesplatform.GenesisBlockGenerator genesis.example.conf
Результат будет записан в файл genesis.conf
(можно использовать произвольное имя файла) и будет выглядеть следующим образом:
Addresses:
Seed text: foo0
Seed: 3csAfH
Account seed: 58zgAnBg775J6NKd4qVtfeX3m5TBMeizHNY9STvm2N87
Private account key: FYLXp1ecxQ6WCPD4axTotHU9RVfPCBLfSeKx1XSCyvdT
Public account key: GbGEY3XVc2ohdv6hQBukVKSTQyqP8rjQ8Kigkj6bL57S
Account address: 3JfE6tjeT7PnpuDQKxiVNLn4TJUFhuMaaT5
===
Settings:
waves {
blockchain.custom {
address-scheme-character = L
functionality {
pre-activated-features = null # undefines all previously defined pre-activated features
pre-activated-features = {1 = 0, 2 = 0, 3 = 0, 4 = 0, 5 = 0, 6 = 0, 7 = 0, 8 = 0, 9 = 0, 10 = 0, 11 = 0, 12 = 0, 13 = 0, 14 = 0, 15 = 0}
}
genesis {
average-block-delay = 60s
base-target = 122
timestamp = 1612954141684 # 2021-02-10T10:49:01.684Z
block-timestamp = 1612954141684 # 2021-02-10T10:49:01.684Z
signature = "3k64TQfLUkLWjCWkajPHfLovWoKpYgH6sTJrymog5nA3PZfqo9Qa1dKtRsDmvavULgEkMGACsxH2eCsnrua4JX9F"
initial-balance = 10000000000000000
transactions = [
{recipient = "3JfE6tjeT7PnpuDQKxiVNLn4TJUFhuMaaT5", amount = 10000000000000000}
]
}
}
# wallet {
# seed = 3csAfH
# password =
# }
}
Секция Addresses
содержит список аккаунтов, на которые распределены средства в блоке генезиса, секция waves
понадобится далее в шаге 5.
# Шаг 5
В каталоге с JAR-файлом создайте файл *.conf
с произвольным именем (например, waves-custom-network.conf
) и откройте его текстовым редактором. Используйте пример файла конфигурации в качестве образца.
Больше информации про файл конфигурации см. в статье Конфигурация ноды.
Если основной каталог приложения (параметр directory
) не задана, то она будет создана по адресу:
*nix | macOS | Windows |
---|---|---|
$XDG_DATA_HOME/waves-custom-<character>* or $HOME/.local/share/waves-custom-<character>* | $HOME/Library/Application Support/waves-custom-<character>* | %LOCALAPPDATA%/waves-custom-<character>* |
Вставьте контент, сгенерированный в шаге 4, в файл конфигурации. Вместо этого можно написать include "genesis.conf"
, где genesis.conf
— это имя файла из шага 4.
Задайте параметры waves.wallet
. Используйте значение Seed
(Seed text
в base58), сгенерированный в шаге 4, в качестве значения параметра waves.wallet.seed
.
В секции waves.network
задайте значения параметров port
, known-peers
(список нод вашего блокчейна), node-name
и declared-address
.
Чтобы использовать REST API вашей ноды, задайте параметры enable
, port
и api-key-hash
(см. раздел API-ключ) в секции waves.rest-api
.
Секция waves.blockchain.custom.functionality
позволяет настроить функциональность блокчейна, в том числе:
- Включить/выключить фичи ноды с помощью параметра
pre-activated-features
. Поддерживаемые фичи описаны в статье Фичи. - Установить момент начала действия для функций (валидаций) блокчейна, активируемых не через механизм фич, а по временной метке или высоте.
- Указать адреса, на которые будет зачисляться доля вознаграждения за блок, в параметрах
dao-address
иxtn-buyback-address
(подробнее о распределении вознаграждения за блок — в разделе Монетарная политика, управляемая сообществом). Если адрес (или оба) не указан, соответствующую долю вознаграждения получает генератор блока.
# Шаг 6
Запустите вашу ноду на собственном блокчейне с помощью команды:
java -jar waves-all-{version}.jar waves-custom-network.conf
Примечание: Вы можете запустить существующую ноду (DEB или JAR) с измененным файлом конфигурации вручную.
# Добавление нод в свою сеть
Вы можете добавить несколько нод в свою сеть, используя параметр waves.network.known-peers
, указав адрес и порт существующей ноды с такими же параметрами сети, например: 127.0.0.1:6860
. Если у вас несколько локальных нод, то не забудьте изменить для новых нод сетевой порт waves.network.port
, порт API waves.rest-api.port
, основной каталог приложения waves.directory
и секретную фразу кошелька waves.wallet.seed
.
# Настройка дополнительных сервисов
Вы можете подключить к своему блокчейну дополнительные сервисы, такие как:
Cервис данных (Data Service), который позволит быстро и удобно получать данные из блокчейна через REST API, аналогично Mainnet и Testnet, как описано в статье Waves Data Service API. Подробнее по ссылке deploy examples.
dApps. Подробнее в статье How to Build, Deploy and Test a Waves RIDE dApp.
Waves Explorer, который позволит просматривать данные блокчейна в удобочитаемом формате.
Чтобы развернуть Waves Explorer в Docker-контейнере на localhost, используйте следующую команду:
docker run -d -e API_NODE_URL=http://localhost:6869 -e NODE_LIST=http://localhost:6869 -p 3000:8080 wavesplatform/explorer
Матчер, который исполняет ордера (биржевые заявки) на покупку и продажу активов.