Новости Golos•Core. Testnet: Экспериментальная версия
Знакомство с тестнетом
Команда GolosCore информирует пользователей о создании экспериментальной версии тестнета для платформы Cyberway и смарт-контрактов прототипа приложения Голос. Запуск тестнета является первым, но важным шагом на пути к созданию рабочей версии платформы Cyberway.
Для знакомства с тестнетом пользователям открыты доступы к блокчейну Cyberway с возможностью отправлять свои транзакции и к базе данных (на чтение), которая хранит состояние блокчейна.
Отправка транзакции в блокчейн
Для удобства отправки транзакций в блокчейн можно воспользоваться скриптом, написанным на языке Python, который выполняет типовые действия блокчейна и смарт-контрактов Голоса. Для работы с данным скриптом требуется установленный интерпретатор языка Python и утилиты cleos
и keosd
. Адрес утилиты cleos задается в переменной cleos_path
, пароль для хранилища личных ключей задается в переменной wallet_password
.
Скрипт доступен по адресу: https://github.com/GolosChain/golos-smart/blob/master/scripts/testnet.py
.
Блокчейн доступен по адресу: http://cyberway-mongodb.golos.io:8888
.
Утилиты cleos
и keosd
, собраны из репозитория https://github.com/GolosChain/cyberway.git
. Вызов данных утилит аналогичен их вызову в EOS.
База данных состояния блокчейна
Состояние блокчейна сохраняется в базе данных MongoDB. Пользователь может подключиться к базе данных по адресу mongodb://readuser@cyberway-mongodb.golos.io:27017/admin
. Пароль для пользователя c именем readuser
: «12345».
Для работы блокчейн создает одну системную базу данных с именем _CYBERWAY_
, а также отдельную базу данных для каждого смарт-контракта. Имена баз данных для смарт-контрактов формируются добавлением префикса _CYBERWAY_
к его имени слева и заменой символа «.» на «-». Например, для смарт-контракта gls.publish
база данных будет называться _CYBERWAY_gls-publish
. Получить список баз данных, доступных пользователю с именем readuser
, можно с помощью команды db.getUser(“readuser”)
для базы данных admin
, выполненной в клиенте mongo
.
Наполнение таблиц
При запуске тестнета было выполнено первичное наполнение данными из блокчейна Голос, в том числе были перенесены следующие данные:
- Аккаунты пользователей. Были перенесены те аккаунты, имена которых соответствуют правилам формирования имени в EOS (не более 13 символов, допустимые символы «.1-5a-z», для 13 символа допустимо использование только «.1-5a-j»). На текущий момент команда GolosCore решает задачу переноса всех аккаунтов из блокчейна Голос на новую платформу. Данная информация хранится в системной базе данных
_CYBERWAY_
. - Ключи пользователей. Для каждого пользователя были перенесены его публичные ключи
owner
,active
иposting
из блокчейна Голос. Формат ключей новой платформы соответствует ключам платформы Голос. Пользователи могут использовать свои личные ключи для выполнения действий в тестнете от своего имени. Данная информация хранится в системной базе данных CYBERWAY. - Балансы пользователей. Для каждого пользователя была перенесена информация о находящихся на его балансах голосах (GOLOS) и вестингах (GESTS). При этом баланс в голосах был перенесен в токен GLS системного контракта
eosio.token
, а вестинг — в вестинг GLS контрактаgls.vesting
. - Делегаты и голоса за них. Была перенесена информация о том, какие пользователи являются делегатами сообщества, а также данные голосования за них. На основе этой информацией был сформирован набор делегатов, подпись которых требуется для выполнения действий по управлению сообществом.
- Посты, комментарии и голоса за них. Были перенесены все посты и комментарии вместе с их голосами тех пользователей, аккаунты которых были также перенесены. Если комментарий относился к посту или комментарию, который не был перенесен, то он был преобразован в пост.
Смарт-контракты
При запуске тестнета были загружены следующие смарт-контракты:
Системные смарт-контракты:
eosio
. Была загружена базовая версия системного контракта (eosio.bios
); В перспективе она будет заменена на расширенную версию (eosio.system
);.eosio.token
. Соответствует контракту платформы EOS;eosio.msig
. Соответствует контракту платформы EOS.
Golos:
gls.ctrl
(golos.ctrl
). Смарт-контракт, предоставляющий функционал по выбору делегатов сообщества и реализующий процедуру предоставления группе делегатов полномочий по управлению сообществом. Для использования полномочий требуется подпись от определенного количества делегатов, имеющих большинство голосов. В тестнете такими полномочиями наделяется группа из пяти делегатов;gls.emit
(golos.emit
). Смарт-контракт, периодически генерирующий токены сообщества и распределяющий их в пулы для вознаграждения;gls.vesting
(golos.vesting
). Смарт-контракт вестинга сообщества;gls.publish
(golos.publication
). Смарт-контракт публикаций. Отвечает за размещение постов и комментариев, а также за голосование пользователей за них.
Доступные операции:
Приведенные ниже операции выполняются вызовом команд в интерактивном режиме интерпретатора Python. При этом предполагается, что перед выполнением описанных ниже операций скрипт testnet.py
должен быть подключен командой from testnet import *
. Для отдельных операций необходима подпись от системного аккаунта eosio
, а также импортирование личных ключей. Это обеспечивается вызовом функции importRootKeys()
. Удалять ключи из хранилища можно вызовом функции removeRootKeys()
. Это временное решение и реализовано исключительно для демонстрации работы тестнета. При запуске майннета пользователям какие-либо другие личные ключи, за исключением сгенерированных ими, не потребуются.
В перечень доступных операций входят следующие:
Создать пользователя. Выполняется функцией createAccount(“eosio”, <account>, <public_key>)
. Создается системный аккаунт на платформе Cyberway;
Вступить в сообщество Golos. Для этого необходимо открыть баланс вестинга, принадлежащего сообществу: openVestingBalance(<account>)
;
Работа с токеном/вестингом, в том числе:
- Получить токены:
issueToken(<account>, <amount>)
. При этом держателем токена выпускаются новые токены и перечисляются на счет пользователя. Количество токенов (параметр < amount>) указывается в формате «1.000 GLS»; - Купить вестинг:
buyVesting(<account>, < amount>)
. При этом выполняется операция выпуска новых токенов и покупка на указанную сумму вестинга. Количество токенов (параметр < amount>) задается в формате «1.000 GLS»; - Зарегистрировать делегата:
registerWitness(<witness>, <public_key>, <url>)
. Зарегистрировать пользователя как делегата; - Проголосовать за делегата:
voteWitness(<voter>, <witness>, < weight>)
. Вес голоса (параметр < weight>) указывается в процентах, умноженных на 100 (значение от 1 до 10000), в данный момент этот параметр не используется.
Работа с постами, в том числе:
- разместить пост:
createPost(<author>, <permlink>, <category>, <header>, <body>)
; - разместить комментарий:
createComment(<author>, <permlink>, <parent_author>, <parent_permlink>, <header>, <body>)
; - проголосовать за пост/комментарий:
upvotePost(<voter>, <author>, <permlink>, <weight>)
илиdownvotePost(<voter>, <author>, <permlink>, <weight>)
. Вес голоса (параметр < weight>) задается в процентах, умноженных на 100 (принимает значение от 1 до 10000); - отменить голос за пост/комментарий:
unvotePost(<voter>, <author>, <permlink>)
; - закрытие поста происходит автоматически по истечении 15 минут. Голосование с положительным весом запрещено за 1 минуту до закрытия поста.
Примечание:
По мере добавления функциональных возможностей в экспериментальную версию тестнета его начальное наполнение данными будет обновляться. При этом возможно удаление данных, сохраненных пользователями, а также возвращение содержимого БД к исходному состоянию.
Команда Голос Коре заранее приносит извинение пользователям за возможные неудобства и надеется на взаимопонимание.
Также команда Голос Коре надеется также получить отзывы от пользователей на функционирование экспериментальной версии тестнета.